Skip to content

Commit

Permalink
Merge branch 'main' into rszarecki-patch-1
Browse files Browse the repository at this point in the history
  • Loading branch information
Swetha-haridasula authored Mar 1, 2025
2 parents b780128 + e8efe0d commit acbf0a7
Show file tree
Hide file tree
Showing 98 changed files with 5,046 additions and 1,881 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,7 @@ func configureDUT(t *testing.T, dut *ondatra.DUTDevice) {
gnmi.Replace(t, dut, dc.Interface(i2.GetName()).Config(), i2)

t.Log("Configure/update Network Instance")
dutConfNIPath := dc.NetworkInstance(deviations.DefaultNetworkInstance(dut))
gnmi.Replace(t, dut, dutConfNIPath.Type().Config(), oc.NetworkInstanceTypes_NETWORK_INSTANCE_TYPE_DEFAULT_INSTANCE)
fptest.ConfigureDefaultNetworkInstance(t, dut)

if deviations.InterfaceConfigVRFBeforeAddress(dut) {
gnmi.Replace(t, dut, dc.Interface(i1.GetName()).Config(), i1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,7 @@ func TestBgpSession(t *testing.T) {
}

t.Log("Configure Network Instance")
dutConfNIPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut))
gnmi.Replace(t, dut, dutConfNIPath.Type().Config(), oc.NetworkInstanceTypes_NETWORK_INSTANCE_TYPE_DEFAULT_INSTANCE)

dutConfPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP")
statePath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp()
fptest.ConfigureDefaultNetworkInstance(t, dut)

cases := []struct {
name string
Expand Down Expand Up @@ -140,6 +136,9 @@ func TestBgpSession(t *testing.T) {
bgpClearConfig(t, dut)

t.Log("Configure BGP on DUT")
fptest.ConfigureDefaultNetworkInstance(t, dut)
dutConfPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP")
statePath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp()
gnmi.Replace(t, dut, dutConfPath.Config(), tc.dutConf)

fptest.LogQuery(t, "DUT BGP Config ", dutConfPath.Config(), gnmi.Get(t, dut, dutConfPath.Config()))
Expand Down Expand Up @@ -258,6 +257,7 @@ func createBgpNeighbor(nbr *bgpNbr, dut *ondatra.DUTDevice) *oc.NetworkInstance_
global.As = ygot.Uint32(nbr.globalAS)
global.RouterId = ygot.String(dutSrc.IPv4)
global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true)
global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true)

pg := bgp.GetOrCreatePeerGroup("ATE")
pg.PeerAs = ygot.Uint32(nbr.peerAS)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,52 +99,63 @@ func TestBgpSession(t *testing.T) {
dutConfPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP")
statePath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp()

defaultCount := uint32(0)

cases := []struct {
name string
nbr *bgpNbr
dutConf *oc.NetworkInstance_Protocol
ateConf gosnappi.Config
bgpType string
}{
{
name: "Establish eBGP connection between ATE (2-byte) - DUT (4-byte < 65535) for ipv4 peers",
nbr: &bgpNbr{localAS: 100, peerIP: ateSrc.IPv4, peerAS: 200, isV4: true},
dutConf: createBgpNeighbor(&bgpNbr{localAS: 100, peerIP: ateSrc.IPv4, peerAS: 200, isV4: true}, dut),
ateConf: configureATE(t, &bgpNbr{localAS: 200, peerIP: dutSrc.IPv4, peerAS: 100, isV4: true}, connExternal, 2),
bgpType: connExternal,
}, {
name: "Establish eBGP connection between ATE (2-byte) - DUT (4-byte < 65535) for ipv6 peers",
nbr: &bgpNbr{localAS: 100, peerIP: ateSrc.IPv6, peerAS: 200, isV4: false},
dutConf: createBgpNeighbor(&bgpNbr{localAS: 100, peerIP: ateSrc.IPv6, peerAS: 200, isV4: false}, dut),
ateConf: configureATE(t, &bgpNbr{localAS: 200, peerIP: dutSrc.IPv6, peerAS: 100, isV4: false}, connExternal, 2),
bgpType: connExternal,
}, {
name: "Establish eBGP connection between ATE (4-byte) - DUT (4-byte) for ipv4 peers",
nbr: &bgpNbr{localAS: 70000, peerIP: ateSrc.IPv4, peerAS: 80000, isV4: true},
dutConf: createBgpNeighbor(&bgpNbr{localAS: 70000, peerIP: ateSrc.IPv4, peerAS: 80000, isV4: true}, dut),
ateConf: configureATE(t, &bgpNbr{localAS: 80000, peerIP: dutSrc.IPv4, peerAS: 70000, isV4: true}, connExternal, 4),
bgpType: connExternal,
}, {
name: "Establish eBGP connection between ATE (4-byte) - DUT (4-byte) for ipv6 peers",
nbr: &bgpNbr{localAS: 70000, peerIP: ateSrc.IPv6, peerAS: 80000, isV4: false},
dutConf: createBgpNeighbor(&bgpNbr{localAS: 70000, peerIP: ateSrc.IPv6, peerAS: 80000, isV4: false}, dut),
ateConf: configureATE(t, &bgpNbr{localAS: 80000, peerIP: dutSrc.IPv6, peerAS: 70000, isV4: false}, connExternal, 4),
bgpType: connExternal,
}, {
name: "Establish iBGP connection between ATE (2-byte) - DUT (4-byte < 65535) for ipv4 peers",
nbr: &bgpNbr{localAS: 200, peerIP: ateSrc.IPv4, peerAS: 200, isV4: true},
dutConf: createBgpNeighbor(&bgpNbr{localAS: 200, peerIP: ateSrc.IPv4, peerAS: 200, isV4: true}, dut),
ateConf: configureATE(t, &bgpNbr{localAS: 200, peerIP: dutSrc.IPv4, peerAS: 200, isV4: true}, connInternal, 2),
bgpType: connInternal,
}, {
name: "Establish iBGP connection between ATE (4-byte) - DUT (4-byte < 65535) for ipv6 peers",
nbr: &bgpNbr{localAS: 200, peerIP: ateSrc.IPv6, peerAS: 200, isV4: false},
dutConf: createBgpNeighbor(&bgpNbr{localAS: 200, peerIP: ateSrc.IPv6, peerAS: 200, isV4: false}, dut),
ateConf: configureATE(t, &bgpNbr{localAS: 200, peerIP: dutSrc.IPv6, peerAS: 200, isV4: false}, connInternal, 4),
bgpType: connInternal,
}, {
name: "Establish iBGP connection between ATE (4-byte) - DUT (4-byte) for ipv4 peers",
nbr: &bgpNbr{localAS: 80000, peerIP: ateSrc.IPv4, peerAS: 80000, isV4: true},
dutConf: createBgpNeighbor(&bgpNbr{localAS: 80000, peerIP: ateSrc.IPv4, peerAS: 80000, isV4: true}, dut),
ateConf: configureATE(t, &bgpNbr{localAS: 80000, peerIP: dutSrc.IPv4, peerAS: 80000, isV4: true}, connInternal, 4),
bgpType: connInternal,
}, {
name: "Establish iBGP connection between ATE (4-byte) - DUT (4-byte) for ipv6 peers",
nbr: &bgpNbr{localAS: 80000, peerIP: ateSrc.IPv6, peerAS: 80000, isV4: false},
dutConf: createBgpNeighbor(&bgpNbr{localAS: 80000, peerIP: ateSrc.IPv6, peerAS: 80000, isV4: false}, dut),
ateConf: configureATE(t, &bgpNbr{localAS: 80000, peerIP: dutSrc.IPv6, peerAS: 80000, isV4: false}, connInternal, 4),
bgpType: connInternal,
},
}

Expand All @@ -154,6 +165,11 @@ func TestBgpSession(t *testing.T) {
t.Log("Clear BGP Configs on DUT")
bgpClearConfig(t, dut)

if tc.bgpType == connExternal {
defaultCount = uint32(0)
} else {
defaultCount = uint32(3)
}
configureRegexPolicy(t, dut)

d := &oc.Root{}
Expand All @@ -174,20 +190,21 @@ func TestBgpSession(t *testing.T) {

t.Log("Verify BGP AS numbers and prefix count")
verifyPeer(t, tc.nbr, dut)
verifyPrefixesTelemetry(t, dut, defaultCount, tc.nbr.isV4)

t.Log("Apply BGP policy for rejecting prefix")
pol := applyBgpPolicy(rejectPrefix, dut, tc.nbr.isV4)
gnmi.Update(t, dut, dutConfPath.Config(), pol)
verifyPrefixesTelemetry(t, dut, 2, tc.nbr.isV4)
deleteBgpPolicy(t, dut, tc.nbr.isV4)
verifyPrefixesTelemetry(t, dut, 3, tc.nbr.isV4)
verifyPrefixesTelemetry(t, dut, defaultCount, tc.nbr.isV4)

t.Log("Apply BGP policy for rejecting prefix with community filter")
pol = applyBgpPolicy(rejectCommunity, dut, tc.nbr.isV4)
gnmi.Update(t, dut, dutConfPath.Config(), pol)
verifyPrefixesTelemetry(t, dut, 2, tc.nbr.isV4)
deleteBgpPolicy(t, dut, tc.nbr.isV4)
verifyPrefixesTelemetry(t, dut, 3, tc.nbr.isV4)
verifyPrefixesTelemetry(t, dut, defaultCount, tc.nbr.isV4)

t.Log("Apply BGP policy for rejecting prefix with as-path regex filter")
pol = applyBgpPolicy(rejectAspath, dut, tc.nbr.isV4)
Expand Down Expand Up @@ -388,7 +405,6 @@ func verifyPeer(t *testing.T, nbr *bgpNbr, dut *ondatra.DUTDevice) {
t.Errorf("BGP globalAS: got %v, want %v", globalAS, nbr.localAS)
}

verifyPrefixesTelemetry(t, dut, 3, nbr.isV4)
}

func configureATE(t *testing.T, ateParams *bgpNbr, connectionType string, asWidth int) gosnappi.Config {
Expand Down
5 changes: 2 additions & 3 deletions feature/bgp/otg_tests/bgp_afi_safi_defaults/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ BGP AFI SAFI OC DEFAULTS TEST
"IPv6-unicast enabled" boolean is left to OC default for the IPv4 peer".
* Ensure that only IPv6-Unicast enabled boolean is made "true" for IPv6 neighbor.
"IPv4-unicast enabled" boolean is left to OC default for the IPv6 peer".
* Ensure that there are no AFI-SAFI configurations at the global and peer-group levels.
* Ensure that there are no AFI-SAFI configurations at peer-group levels.
* On the ATE side ensure that IPv4-unicast and IPv6-unicast AFI-SAFI are enabled==true for
IPv4 and IPv6 neighbors.
* Ensure that there is extended-next-hop encoding feature is configured via OC path and the
Expand All @@ -46,7 +46,7 @@ BGP AFI SAFI OC DEFAULTS TEST

* Configuration at the neighbor level is same as in [Test case-1] except for IPv4-unicast and
IPv6-unicast being enabled at the peer-group level
* No configuration should be made at the global AFI-SAFI level
* No configuration should be made at the neighbor AFI-SAFI level

* Verification:
* For IPv4 neighbor, ensure that the IPv4 neighborship is up and both IPv4-unicast and
Expand Down Expand Up @@ -78,7 +78,6 @@ BGP AFI SAFI OC DEFAULTS TEST
* For IPv6 neighbor ensure that the IPv6 neighborship is not ESTABLISHED and
IPv6-unicast capabilities are set to FALSE.


## OpenConfig Path and RPC Coverage

The below yaml defines the OC paths intended to be covered by this test. OC paths used for test setup are not listed here.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,10 @@ func bgpCreateNbr(t *testing.T, localAs, peerAs uint32, dut *ondatra.DUTDevice,
case globalLevel:
if nbr.isV4 == true {
global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true)
nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true)
} else {
global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true)
nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true)
}
if !isV4Only {
if !deviations.BGPGlobalExtendedNextHopEncodingUnsupported(dut) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ platform_exceptions: {
deviations: {
ipv4_missing_enabled: true
bgp_extended_next_hop_encoding_leaf_unsupported: true
bgp_global_extended_next_hop_encoding_unsupported: true
bgp_afi_safi_wildcard_not_supported: true
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,21 @@ func TestMain(m *testing.M) {
}

const (
advertisedRoutesv4CIDR = "203.0.113.1/32"
advertisedRoutesv4Net = "203.0.113.1"
advertisedRoutesv4Prefix = 32
peerGrpName1 = "BGP-PEER-GROUP1"
peerGrpName2 = "BGP-PEER-GROUP2"
dutGlobalAS = 64512
dutLocalAS1 = 65501
dutLocalAS2 = 64513
ateAS1 = 65502
ateAS2 = 65503
plenIPv4 = 30
plenIPv6 = 126
policyName = "ALLOW"
advertisedRoutesv4CIDR = "203.0.113.1/32"
advertisedRoutesv4Net = "203.0.113.1"
advertisedRoutesv4Prefix = 32
advertisedRoutesv4PrefixLen = "32..32"
peerGrpName1 = "BGP-PEER-GROUP1"
peerGrpName2 = "BGP-PEER-GROUP2"
dutGlobalAS = 64512
dutLocalAS1 = 65501
dutLocalAS2 = 64513
ateAS1 = 65502
ateAS2 = 65503
plenIPv4 = 30
plenIPv6 = 126
policyName = "ALLOW"
prefixSetName = "prefSet"
)

var (
Expand Down Expand Up @@ -234,14 +236,17 @@ func verifyPrefixesTelemetry(t *testing.T, dut *ondatra.DUTDevice, nbr string, w
func configureRoutePolicy(t *testing.T, dut *ondatra.DUTDevice, name string, pr oc.E_RoutingPolicy_PolicyResultType) {
d := &oc.Root{}
rp := d.GetOrCreateRoutingPolicy()

prefixSet := rp.GetOrCreateDefinedSets().GetOrCreatePrefixSet(prefixSetName)
prefixSet.GetOrCreatePrefix(advertisedRoutesv4CIDR, advertisedRoutesv4PrefixLen)
pdef := rp.GetOrCreatePolicyDefinition(name)
stmt, err := pdef.AppendNewStatement(name)
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", name, err)
}
stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(prefixSetName)
stmt.GetOrCreateActions().PolicyResult = pr
gnmi.Update(t, dut, gnmi.OC().RoutingPolicy().Config(), rp)

}

// verifyOTGPrefixTelemetry is to Validate prefix received on OTG por2.
Expand All @@ -260,7 +265,7 @@ func verifyOTGPrefixTelemetry(t *testing.T, otg *otg.OTG, wantPrefix bool) {
gotASPath := prefix.AsPath[len(prefix.AsPath)-1].GetAsNumbers()
t.Logf("Received prefix %v on otg as expected with AS-PATH %v", prefix.GetAddress(), gotASPath)
} else {
t.Errorf("Prefix %v is not received on otg", prefix.GetAddress())
t.Errorf("Prefix %v is received on otg when it is not expected", prefix.GetAddress())
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,15 +101,13 @@ var (
func configureRoutePolicy(t *testing.T, dut *ondatra.DUTDevice, name string, pr oc.E_RoutingPolicy_PolicyResultType) {
d := &oc.Root{}
rp := d.GetOrCreateRoutingPolicy()
pd := rp.GetOrCreatePolicyDefinition(name)
st, err := pd.AppendNewStatement("id-1")
pdef := rp.GetOrCreatePolicyDefinition(name)
stmt, err := pdef.AppendNewStatement(name)
if err != nil {
t.Fatal(err)
t.Fatalf("AppendNewStatement(%s) failed: %v", name, err)
}
stc := st.GetOrCreateConditions()
stc.InstallProtocolEq = oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP
st.GetOrCreateActions().PolicyResult = pr
gnmi.Replace(t, dut, gnmi.OC().RoutingPolicy().Config(), rp)
stmt.GetOrCreateActions().PolicyResult = pr
gnmi.Update(t, dut, gnmi.OC().RoutingPolicy().Config(), rp)
}

// configureDUT configures all the interfaces on the DUT.
Expand Down Expand Up @@ -381,8 +379,7 @@ func TestRemovePrivateAS(t *testing.T) {
})

t.Run("Configure DEFAULT network instance", func(t *testing.T) {
dutConfNIPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut))
gnmi.Replace(t, dut, dutConfNIPath.Type().Config(), oc.NetworkInstanceTypes_NETWORK_INSTANCE_TYPE_DEFAULT_INSTANCE)
fptest.ConfigureDefaultNetworkInstance(t, dut)
})

dutConfPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ func bgpCreateNbr(t *testing.T, dut *ondatra.DUTDevice, authPwd, routerID string
global := bgp.GetOrCreateGlobal()
global.RouterId = ygot.String(routerID)
global.As = ygot.Uint32(localAs)
global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true)
global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true)

pg1 := bgp.GetOrCreatePeerGroup(peerGrpName1)
pg1.PeerAs = ygot.Uint32(ateAS1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ platform_exceptions: {
interface_enabled: true
default_network_instance: "default"
missing_value_for_defaults: true
default_import_export_policy_unsupported: false
skip_setting_statement_for_policy: true
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ platform_exceptions: {
missing_isis_interface_afi_safi_enable: true
isis_interface_afi_unsupported: true
isis_instance_enabled_required: true
bgp_default_policy_unsupported: true
}
}
platform_exceptions: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ platform_exceptions: {
interface_enabled: true
default_network_instance: "default"
missing_value_for_defaults: true
skip_set_rp_match_set_options: true
}
}
platform_exceptions: {
Expand Down
Loading

0 comments on commit acbf0a7

Please sign in to comment.