Skip to content

Commit

Permalink
nested_policy deviations and script changes (#3014)
Browse files Browse the repository at this point in the history
* nested_policy deviation

* fix README.md

* fix nested_policies.go, deviations.go
  • Loading branch information
ram-mac authored May 24, 2024
1 parent 49a2979 commit 1390949
Show file tree
Hide file tree
Showing 6 changed files with 347 additions and 155 deletions.
13 changes: 8 additions & 5 deletions feature/bgp/policybase/otg_tests/nested_policies/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -291,11 +291,14 @@ For each section of configuration below, prepare a gnmi.SetBatch with all the c
* /network-instances/network-instance/protocols/protocol/bgp/rib/afi-safis/afi-safi/ipv4-unicast/loc-rib/routes/route/prefix
* /network-instances/network-instance/protocols/protocol/bgp/rib/attr-sets/attr-set/state/med

## Protocol/RPC Parameter Coverage

* gNMI
* Subscribe (ONCE)
* Set (REPLACE)
## OpenConfig Path and RPC Coverage

```yaml
rpcs:
gnmi:
gNMI.Get:
gNMI.Subscribe:
```
## Required DUT platform
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,13 @@ platform_exceptions: {
}
}

platform_exceptions: {
platform: {
vendor: CISCO
}
deviations: {
skip_setting_statement_for_policy: true
skip_checking_attribute_index: true
}
}

133 changes: 108 additions & 25 deletions feature/bgp/policybase/otg_tests/nested_policies/nested_policies_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,10 @@ type flowConfig struct {
func TestBGPNestedPolicies(t *testing.T) {
dut := ondatra.DUT(t, "dut")
configureDUT(t, dut)

ate := ondatra.ATE(t, "ate")
top := gosnappi.NewConfig()
devs := configureOTG(t, ate, top)

td := testData{
dut: dut,
ate: ate,
Expand Down Expand Up @@ -235,6 +235,7 @@ func TestBGPNestedPolicies(t *testing.T) {

// configureImportRoutingPolicy configures the dut for IPv4 BGP nested import policy test.
func configureImportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice) {
batch := &gnmi.SetBatch{}
root := &oc.Root{}
rp := root.GetOrCreateRoutingPolicy()

Expand All @@ -244,7 +245,10 @@ func configureImportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice) {
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v4LPStatement, err)
}
stmt1.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
if !deviations.SkipSettingStatementForPolicy(dut) {
t.Logf("Setting statement for policy")
stmt1.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
}
stmt1.GetOrCreateActions().GetOrCreateBgpActions().SetSetLocalPref(localPref)

// Configure a route-policy to match the prefix.
Expand All @@ -253,7 +257,10 @@ func configureImportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice) {
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v4PrefixStatement, err)
}
stmt2.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
if !deviations.SkipSettingStatementForPolicy(dut) {
stmt2.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
}

t.Logf("Configuring nested policy")
// Configure a prefix-set for route filtering/matching.
prefixSet := rp.GetOrCreateDefinedSets().GetOrCreatePrefixSet(v4PrefixSet)
Expand All @@ -264,7 +271,7 @@ func configureImportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice) {
stmt2.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetMatchSetOptions(oc.RoutingPolicy_MatchSetOptionsRestrictedType_ANY)
}
stmt2.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(v4PrefixSet)
gnmi.Replace(t, dut, gnmi.OC().RoutingPolicy().Config(), rp)
gnmi.BatchReplace(batch, gnmi.OC().RoutingPolicy().Config(), rp)

// Configure the nested policy.
dni := deviations.DefaultNetworkInstance(dut)
Expand All @@ -290,21 +297,36 @@ func validateImportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice, ate *onda
if prefixAddr[0] == advertisedIPv41.address {
found = true
t.Logf("Found Route(prefix %s, origin: %v, pathid: %d) => %s", k.Prefix, k.Origin, k.PathId, lr.GetPrefix())
attrSet := gnmi.Get[*oc.NetworkInstance_Protocol_Bgp_Rib_AttrSet](t, dut, bgpRIBPath.AttrSet(lr.GetAttrIndex()).State())
if attrSet == nil || attrSet.GetLocalPref() != localPref {
t.Errorf("No local pref found for prefix %s", advertisedIPv41.address)
if !deviations.SkipCheckingAttributeIndex(dut) {
attrSet := gnmi.Get[*oc.NetworkInstance_Protocol_Bgp_Rib_AttrSet](t, dut, bgpRIBPath.AttrSet(lr.GetAttrIndex()).State())
if attrSet == nil || attrSet.GetLocalPref() != localPref {
t.Errorf("No local pref found for prefix %s", advertisedIPv41.address)
}
break
} else {
attrSetList := gnmi.GetAll[*oc.NetworkInstance_Protocol_Bgp_Rib_AttrSet](t, dut, bgpRIBPath.AttrSetAny().State())
foundLP := false
for _, attrSet := range attrSetList {
if attrSet.GetLocalPref() == localPref {
foundLP = true
t.Logf("Found local pref %d for prefix %s", attrSet.GetLocalPref(), advertisedIPv41.address)
break
}
}
if !foundLP {
t.Errorf("No local pref found for prefix %s", advertisedIPv41.address)
}
}
break
}
}

if !found {
t.Errorf("No Route found for prefix %s", advertisedIPv41.address)
}
}

// configureExportRoutingPolicy configures the dut for IPv4 BGP nested export policy test.
func configureExportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice) {
batch := &gnmi.SetBatch{}
root := &oc.Root{}
rp := root.GetOrCreateRoutingPolicy()
t.Logf("Configuring export routing policy")
Expand All @@ -313,17 +335,22 @@ func configureExportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice) {
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v4ASPStatement, err)
}
stmt1.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
if !deviations.SkipSettingStatementForPolicy(dut) {
stmt1.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
}
stmt1.GetOrCreateActions().GetOrCreateBgpActions().GetOrCreateSetAsPathPrepend().SetAsn(dutAS)

pdef2 := rp.GetOrCreatePolicyDefinition(v4MedPolicy)
stmt2, err := pdef2.AppendNewStatement(v4MedStatement)
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v4MedStatement, err)
}
stmt2.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)

if !deviations.SkipSettingStatementForPolicy(dut) {
stmt2.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
}
stmt2.GetOrCreateActions().GetOrCreateBgpActions().SetSetMed(oc.UnionUint32(med))
gnmi.Replace(t, dut, gnmi.OC().RoutingPolicy().Config(), rp)
gnmi.BatchReplace(batch, gnmi.OC().RoutingPolicy().Config(), rp)

// Configure the nested policy.
dni := deviations.DefaultNetworkInstance(dut)
Expand All @@ -338,10 +365,12 @@ func configureExportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice) {
policy := root.GetOrCreateNetworkInstance(dni).GetOrCreateProtocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, bgpName).GetOrCreateBgp().GetOrCreateNeighbor(atePort1.IPv4).GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).GetOrCreateApplyPolicy()
policy.SetExportPolicy([]string{v4ASPPolicy})
gnmi.Update(t, dut, path.Config(), policy)
time.Sleep(time.Second * 60)
time.Sleep(time.Second * 120)
}

func validateExportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice, ate *ondatra.ATEDevice) {
t.Logf("Validating Export Routing Policy, waiting for 120 seconds")
time.Sleep(time.Second * 120)
bgpPrefixes := gnmi.GetAll[*otgtelemetry.BgpPeer_UnicastIpv4Prefix](t, ate.OTG(), gnmi.OTG().BgpPeer("atePort1.BGP4.peer").UnicastIpv4PrefixAny().State())
found := false
for _, bgpPrefix := range bgpPrefixes {
Expand Down Expand Up @@ -376,6 +405,7 @@ func validateExportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice, ate *onda

// configureImportRoutingPolicyV6 configures the dut for IPv6 BGP nested import policy test.
func configureImportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice) {
batch := &gnmi.SetBatch{}
root := &oc.Root{}
rp := root.GetOrCreateRoutingPolicy()
t.Logf("Configuring import routing policy")
Expand All @@ -384,15 +414,20 @@ func configureImportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice) {
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v6LPStatement, err)
}
stmt1.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
if !deviations.SkipSettingStatementForPolicy(dut) {
t.Logf("Setting statement for policy")
stmt1.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
}
stmt1.GetOrCreateActions().GetOrCreateBgpActions().SetSetLocalPref(localPref)

pdef2 := rp.GetOrCreatePolicyDefinition(v6PrefixPolicy)
stmt2, err := pdef2.AppendNewStatement(v6PrefixStatement)
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v6PrefixStatement, err)
}
stmt2.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
if !deviations.SkipSettingStatementForPolicy(dut) {
stmt2.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
}

prefixSet := rp.GetOrCreateDefinedSets().GetOrCreatePrefixSet(v6PrefixSet)
prefixSet.SetMode(oc.PrefixSet_Mode_IPV6)
Expand All @@ -402,7 +437,7 @@ func configureImportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice) {
stmt2.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetMatchSetOptions(oc.RoutingPolicy_MatchSetOptionsRestrictedType_ANY)
}
stmt2.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(v6PrefixSet)
gnmi.Replace(t, dut, gnmi.OC().RoutingPolicy().Config(), rp)
gnmi.BatchReplace(batch, gnmi.OC().RoutingPolicy().Config(), rp)

// Configure the nested policy.
dni := deviations.DefaultNetworkInstance(dut)
Expand All @@ -416,6 +451,7 @@ func configureImportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice) {
policy := root.GetOrCreateNetworkInstance(dni).GetOrCreateProtocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, bgpName).GetOrCreateBgp().GetOrCreateNeighbor(atePort1.IPv6).GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).GetOrCreateApplyPolicy()
policy.SetImportPolicy([]string{v6LPPolicy})
gnmi.Update(t, dut, path.Config(), policy)

}

func validateImportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice, ate *ondatra.ATEDevice) {
Expand All @@ -425,15 +461,29 @@ func validateImportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice, ate *on
found := false
for k, lr := range locRib.Route {
prefixAddr := strings.Split(lr.GetPrefix(), "/")
t.Logf("lr.GetPrefix() -> %s, prefixAddr[0] -> %s, advertisedIPv61.address = %s", lr.GetPrefix(), prefixAddr[0], advertisedIPv61.address)
if prefixAddr[0] == advertisedIPv61.address {
found = true
t.Logf("Found Route(prefix %s, origin: %v, pathid: %d) => %s", k.Prefix, k.Origin, k.PathId, lr.GetPrefix())
attrSet := gnmi.Get[*oc.NetworkInstance_Protocol_Bgp_Rib_AttrSet](t, dut, bgpRIBPath.AttrSet(lr.GetAttrIndex()).State())
if attrSet == nil || attrSet.GetLocalPref() != localPref {
t.Errorf("No local pref found for prefix %s", advertisedIPv61.address)
if !deviations.SkipCheckingAttributeIndex(dut) {
attrSet := gnmi.Get[*oc.NetworkInstance_Protocol_Bgp_Rib_AttrSet](t, dut, bgpRIBPath.AttrSet(lr.GetAttrIndex()).State())
if attrSet == nil || attrSet.GetLocalPref() != localPref {
t.Errorf("No local pref found for prefix %s", advertisedIPv61.address)
}
break
} else {
attrSetList := gnmi.GetAll[*oc.NetworkInstance_Protocol_Bgp_Rib_AttrSet](t, dut, bgpRIBPath.AttrSetAny().State())
foundLP := false
for _, attrSet := range attrSetList {
if attrSet.GetLocalPref() == localPref {
foundLP = true
t.Logf("Found local pref %d for prefix %s", attrSet.GetLocalPref(), advertisedIPv61.address)
break
}
}
if !foundLP {
t.Errorf("No local pref found for prefix %s", advertisedIPv41.address)
}
}
break
}
}
if !found {
Expand All @@ -443,6 +493,7 @@ func validateImportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice, ate *on

// configureExportRoutingPolicyV6 configures the dut for IPv6 BGP nested export policy test.
func configureExportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice) {
batch := &gnmi.SetBatch{}
root := &oc.Root{}
rp := root.GetOrCreateRoutingPolicy()
t.Logf("Configuring export routing policy")
Expand All @@ -451,17 +502,21 @@ func configureExportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice) {
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v6ASPStatement, err)
}
stmt1.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
if !deviations.SkipSettingStatementForPolicy(dut) {
stmt1.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
}
stmt1.GetOrCreateActions().GetOrCreateBgpActions().GetOrCreateSetAsPathPrepend().SetAsn(dutAS)

pdef2 := rp.GetOrCreatePolicyDefinition(v6MedPolicy)
stmt2, err := pdef2.AppendNewStatement(v6MedStatement)
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v6MedStatement, err)
}
stmt2.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
if !deviations.SkipSettingStatementForPolicy(dut) {
stmt2.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
}
stmt2.GetOrCreateActions().GetOrCreateBgpActions().SetSetMed(oc.UnionUint32(med))
gnmi.Replace(t, dut, gnmi.OC().RoutingPolicy().Config(), rp)
gnmi.BatchReplace(batch, gnmi.OC().RoutingPolicy().Config(), rp)

// Configure the nested policy.
dni := deviations.DefaultNetworkInstance(dut)
Expand Down Expand Up @@ -580,7 +635,6 @@ func checkTraffic(t *testing.T, td testData, flowName string) {

func (td *testData) advertiseRoutesWithEBGP(t *testing.T) {
t.Helper()

root := &oc.Root{}
ni := root.GetOrCreateNetworkInstance(deviations.DefaultNetworkInstance(td.dut))
bgpP := ni.GetOrCreateProtocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, bgpName)
Expand All @@ -593,6 +647,16 @@ func (td *testData) advertiseRoutesWithEBGP(t *testing.T) {
g.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true)
g.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true)

t.Logf("Configuring route-policy for BGP on DUT")
rp := root.GetOrCreateRoutingPolicy()
pdef := rp.GetOrCreatePolicyDefinition("PERMIT-ALL")
stmt, err := pdef.AppendNewStatement("20")
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", "20", err)
}
stmt.GetOrCreateActions().PolicyResult = oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE
gnmi.Update(t, td.dut, gnmi.OC().RoutingPolicy().Config(), rp)

pgv4 := bgp.GetOrCreatePeerGroup(peerGrpNamev4)
pgv4.PeerGroupName = ygot.String(peerGrpNamev4)
pgv6 := bgp.GetOrCreatePeerGroup(peerGrpNamev6)
Expand All @@ -601,19 +665,34 @@ func (td *testData) advertiseRoutesWithEBGP(t *testing.T) {
nV41.SetPeerAs(ateAS1)
nV41.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true)
nV41.PeerGroup = ygot.String(peerGrpNamev4)
afisafiv41 := nV41.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST)
afisafiv41.GetOrCreateApplyPolicy().SetImportPolicy([]string{"PERMIT-ALL"})
afisafiv41.GetOrCreateApplyPolicy().SetExportPolicy([]string{"PERMIT-ALL"})

nV42 := bgp.GetOrCreateNeighbor(atePort2.IPv4)
nV42.SetPeerAs(ateAS2)
nV42.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true)
nV42.PeerGroup = ygot.String(peerGrpNamev4)
afisafiv42 := nV42.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST)
afisafiv42.GetOrCreateApplyPolicy().SetImportPolicy([]string{"PERMIT-ALL"})
afisafiv42.GetOrCreateApplyPolicy().SetExportPolicy([]string{"PERMIT-ALL"})

nV61 := bgp.GetOrCreateNeighbor(atePort1.IPv6)
nV61.SetPeerAs(ateAS1)
nV61.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true)
nV61.PeerGroup = ygot.String(peerGrpNamev6)
afisafiv61 := nV61.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST)
afisafiv61.GetOrCreateApplyPolicy().SetImportPolicy([]string{"PERMIT-ALL"})
afisafiv61.GetOrCreateApplyPolicy().SetExportPolicy([]string{"PERMIT-ALL"})

nV62 := bgp.GetOrCreateNeighbor(atePort2.IPv6)
nV62.SetPeerAs(ateAS2)
nV62.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true)
nV62.PeerGroup = ygot.String(peerGrpNamev6)
afisafiv62 := nV62.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST)
afisafiv62.GetOrCreateApplyPolicy().SetImportPolicy([]string{"PERMIT-ALL"})
afisafiv62.GetOrCreateApplyPolicy().SetExportPolicy([]string{"PERMIT-ALL"})

gnmi.Update(t, td.dut, gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(td.dut)).Config(), ni)

// Configure eBGP on OTG port1.
Expand Down Expand Up @@ -693,6 +772,10 @@ func configureDUT(t *testing.T, dut *ondatra.DUTDevice) {
gnmi.BatchReplace(b, gnmi.OC().Interface(p1.Name()).Config(), dutPort1.NewOCInterface(p1.Name(), dut))
gnmi.BatchReplace(b, gnmi.OC().Interface(p2.Name()).Config(), dutPort2.NewOCInterface(p2.Name(), dut))
b.Set(t, dut)
// bs := cfgplugins.NewBGPSession(t, cfgplugins.PortCount2, nil)
// bs.WithEBGP(t, []oc.E_BgpTypes_AFI_SAFI_TYPE{oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST, oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST}, []string{"port1", "port2"}, true, true)
// t.Logf("Wait for 2minutes for the OTG config to be created, now check in the DUT")
// time.Sleep(2 * time.Minute)

if deviations.ExplicitPortSpeed(dut) {
fptest.SetPortSpeed(t, p1)
Expand Down
11 changes: 11 additions & 0 deletions internal/deviations/deviations.go
Original file line number Diff line number Diff line change
Expand Up @@ -989,6 +989,7 @@ func SkipAfiSafiPathForBgpMultipleAs(dut *ondatra.DUTDevice) bool {
return lookupDUTDeviations(dut).GetSkipAfiSafiPathForBgpMultipleAs()
}

// CommunityMemberRegexUnsupported return true if device do not support community member regex
func CommunityMemberRegexUnsupported(dut *ondatra.DUTDevice) bool {
return lookupDUTDeviations(dut).GetCommunityMemberRegexUnsupported()
}
Expand All @@ -997,3 +998,13 @@ func CommunityMemberRegexUnsupported(dut *ondatra.DUTDevice) bool {
func SamePolicyAttachedToAllAfis(dut *ondatra.DUTDevice) bool {
return lookupDUTDeviations(dut).GetSamePolicyAttachedToAllAfis()
}

// SkipSettingStatementForPolicy return true if device do not support afi/safi path to enable allow multiple-as for eBGP
func SkipSettingStatementForPolicy(dut *ondatra.DUTDevice) bool {
return lookupDUTDeviations(dut).GetSkipSettingStatementForPolicy()
}

// SkipCheckingAttributeIndex return true if device do not return bgp attribute for the bgp session specifying the index
func SkipCheckingAttributeIndex(dut *ondatra.DUTDevice) bool {
return lookupDUTDeviations(dut).GetSkipCheckingAttributeIndex()
}
Loading

0 comments on commit 1390949

Please sign in to comment.