Skip to content

Commit

Permalink
Merge branch 'main' into TUN13
Browse files Browse the repository at this point in the history
  • Loading branch information
lvaish05 authored Feb 18, 2025
2 parents 9b6f713 + b89e909 commit 9f29201
Show file tree
Hide file tree
Showing 55 changed files with 2,831 additions and 953 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
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 @@ -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 9f29201

Please sign in to comment.