Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -285,17 +285,29 @@ func configureBGPDefaultImportExportPolicy(t *testing.T, dut *ondatra.DUTDevice,
batchConfig.Set(t, dut)
}

func batchReplaceBGPImportExportPolicy(t *testing.T, dut *ondatra.DUTDevice, batchConfig *gnmi.SetBatch, policyPath *netinstbgp.NetworkInstance_Protocol_Bgp_Neighbor_AfiSafi_ApplyPolicyPath, importPolicy, exportPolicy []string) {
applyPolicy, present := gnmi.Lookup(t, dut, policyPath.Config()).Val()
if !present {
applyPolicy = &oc.NetworkInstance_Protocol_Bgp_Neighbor_AfiSafi_ApplyPolicy{}
}
applyPolicy.ImportPolicy = importPolicy
applyPolicy.ExportPolicy = exportPolicy
if len(importPolicy) == 0 && len(exportPolicy) == 0 && applyPolicy.DefaultImportPolicy == 0 && applyPolicy.DefaultExportPolicy == 0 {
gnmi.BatchDelete(batchConfig, policyPath.Config())
return
}
gnmi.BatchReplace(batchConfig, policyPath.Config(), applyPolicy)
}

// configureBGPImportExportPolicy configures import/export policies
func configureBGPImportExportPolicy(t *testing.T, dut *ondatra.DUTDevice, ipv4, ipv6, policyDef string) {
t.Helper()
bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp()
batchConfig := &gnmi.SetBatch{}
nbrPolPathv4 := bgpPath.Neighbor(ipv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy()
nbrPolPathv6 := bgpPath.Neighbor(ipv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy()
gnmi.BatchReplace(batchConfig, nbrPolPathv4.ImportPolicy().Config(), []string{policyDef})
gnmi.BatchReplace(batchConfig, nbrPolPathv4.ExportPolicy().Config(), []string{policyDef})
gnmi.BatchReplace(batchConfig, nbrPolPathv6.ImportPolicy().Config(), []string{policyDef})
gnmi.BatchReplace(batchConfig, nbrPolPathv6.ExportPolicy().Config(), []string{policyDef})
batchReplaceBGPImportExportPolicy(t, dut, batchConfig, nbrPolPathv4, []string{policyDef}, []string{policyDef})
batchReplaceBGPImportExportPolicy(t, dut, batchConfig, nbrPolPathv6, []string{policyDef}, []string{policyDef})
batchConfig.Set(t, dut)

// Sleep for 10 second to ensure that OTG has recived the update packet
Expand All @@ -311,15 +323,10 @@ func deleteBGPImportExportPolicy(t *testing.T, dut *ondatra.DUTDevice, ipv4, ipv
nbrPolPathv6 := bgpPath.Neighbor(ipv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy()
nbrPolPathv4_2 := bgpPath.Neighbor(ipv4_2).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy()
nbrPolPathv6_2 := bgpPath.Neighbor(ipv6_2).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy()
gnmi.BatchDelete(batchConfig, nbrPolPathv4_2.ImportPolicy().Config())
gnmi.BatchDelete(batchConfig, nbrPolPathv4_2.ExportPolicy().Config())
gnmi.BatchDelete(batchConfig, nbrPolPathv6_2.ImportPolicy().Config())
gnmi.BatchDelete(batchConfig, nbrPolPathv6_2.ExportPolicy().Config())

gnmi.BatchDelete(batchConfig, nbrPolPathv4.ImportPolicy().Config())
gnmi.BatchDelete(batchConfig, nbrPolPathv4.ExportPolicy().Config())
gnmi.BatchDelete(batchConfig, nbrPolPathv6.ImportPolicy().Config())
gnmi.BatchDelete(batchConfig, nbrPolPathv6.ExportPolicy().Config())
batchReplaceBGPImportExportPolicy(t, dut, batchConfig, nbrPolPathv4_2, nil, nil)
batchReplaceBGPImportExportPolicy(t, dut, batchConfig, nbrPolPathv6_2, nil, nil)
batchReplaceBGPImportExportPolicy(t, dut, batchConfig, nbrPolPathv4, nil, nil)
batchReplaceBGPImportExportPolicy(t, dut, batchConfig, nbrPolPathv6, nil, nil)
batchConfig.Set(t, dut)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ platform_exceptions: {
default_route_policy_unsupported: true
skip_checking_attribute_index: true
skip_setting_statement_for_policy: true
bgp_set_med_action_unsupported: true
}
}
platform_exceptions: {
Expand Down Expand Up @@ -46,4 +45,3 @@ platform_exceptions: {
default_network_instance: "default"
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,10 @@ func configureImportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice, operatio
stmt1.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetMatchSetOptions(oc.RoutingPolicy_MatchSetOptionsRestrictedType_ANY)
stmt1.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(v4PrefixSet)

pdef2 := rp.GetOrCreatePolicyDefinition(v4LPPolicy)
pdef2 := pdef1
if !deviations.FlattenPolicyWithMultipleStatements(dut) {
pdef2 = rp.GetOrCreatePolicyDefinition(v4LPPolicy)
}
stmt2, err := pdef2.AppendNewStatement(v4LPStatement)
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v4LPStatement, err)
Expand All @@ -281,17 +284,26 @@ func configureImportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice, operatio
if !deviations.DefaultImportExportPolicyUnsupported(dut) {
policy.SetDefaultImportPolicy(oc.RoutingPolicy_DefaultPolicyType_REJECT_ROUTE)
}
policy.SetImportPolicy([]string{v4PrefixPolicy, v4LPPolicy})
if deviations.SkipSettingStatementForPolicy(dut) {
gnmi.Update(t, dut, path.Config(), policy)
if deviations.FlattenPolicyWithMultipleStatements(dut) {
policy.SetImportPolicy([]string{v4PrefixPolicy})
} else {
if operation == "set" {
policy.SetImportPolicy([]string{v4PrefixPolicy, v4LPPolicy})
}
if operation == "set" {
if deviations.DefaultImportExportPolicyUnsupported(dut) {
policy.SetExportPolicy([]string{"PERMIT-ALL"})
}
gnmi.BatchReplace(batch, path.Config(), policy)
} else if operation == "delete" {
if deviations.DefaultImportExportPolicyUnsupported(dut) {
policy.SetImportPolicy([]string{"PERMIT-ALL"})
policy.SetExportPolicy([]string{"PERMIT-ALL"})
gnmi.BatchReplace(batch, path.Config(), policy)
} else if operation == "delete" {
} else {
gnmi.BatchDelete(batch, path.Config())
}
batch.Set(t, dut)
}
batch.Set(t, dut)
// Sleep for 5 second to ensure that OTG has received the update packet
time.Sleep(time.Second * 5)
}
Expand Down Expand Up @@ -411,18 +423,25 @@ func configureExportRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice, operatio
} else {
policy.SetExportPolicy([]string{v4ASPPolicy, v4MedPolicy})
}
if deviations.SkipSettingStatementForPolicy(dut) {
gnmi.Update(t, dut, path.Config(), policy)
} else {
if operation == "set" {
if operation == "set" {
if deviations.DefaultImportExportPolicyUnsupported(dut) {
policy.SetImportPolicy([]string{"PERMIT-ALL"})
gnmi.BatchReplace(batch, path.Config(), policy)
} else {
gnmi.BatchReplace(batch, path.Config(), policy)
gnmi.BatchReplace(batch, importPolPath.Config(), eBGPPeerPolicy)
} else if operation == "delete" {
}
} else if operation == "delete" {
if deviations.DefaultImportExportPolicyUnsupported(dut) {
policy.SetImportPolicy([]string{"PERMIT-ALL"})
policy.SetExportPolicy([]string{"PERMIT-ALL"})
gnmi.BatchReplace(batch, path.Config(), policy)
} else {
gnmi.BatchDelete(batch, path.Config())
gnmi.BatchDelete(batch, importPolPath.Config())
}
batch.Set(t, dut)
}
batch.Set(t, dut)
time.Sleep(time.Second * 60)
}

Expand Down Expand Up @@ -486,7 +505,10 @@ func configureImportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice, operat
stmt1.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetMatchSetOptions(oc.RoutingPolicy_MatchSetOptionsRestrictedType_ANY)
stmt1.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(v6PrefixSet)

pdef2 := rp.GetOrCreatePolicyDefinition(v6LPPolicy)
pdef2 := pdef1
if !deviations.FlattenPolicyWithMultipleStatements(dut) {
pdef2 = rp.GetOrCreatePolicyDefinition(v6LPPolicy)
}
stmt2, err := pdef2.AppendNewStatement(v6LPStatement)
if err != nil {
t.Fatalf("AppendNewStatement(%s) failed: %v", v6LPStatement, err)
Expand All @@ -510,17 +532,26 @@ func configureImportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice, operat
policy.SetDefaultImportPolicy(oc.RoutingPolicy_DefaultPolicyType_REJECT_ROUTE)
}

policy.SetImportPolicy([]string{v6PrefixPolicy, v6LPPolicy})
if deviations.SkipSettingStatementForPolicy(dut) {
gnmi.Update(t, dut, path.Config(), policy)
if deviations.FlattenPolicyWithMultipleStatements(dut) {
policy.SetImportPolicy([]string{v6PrefixPolicy})
} else {
if operation == "set" {
policy.SetImportPolicy([]string{v6PrefixPolicy, v6LPPolicy})
}
if operation == "set" {
if deviations.DefaultImportExportPolicyUnsupported(dut) {
policy.SetExportPolicy([]string{"PERMIT-ALL"})
}
gnmi.BatchReplace(batch, path.Config(), policy)
} else if operation == "delete" {
if deviations.DefaultImportExportPolicyUnsupported(dut) {
policy.SetImportPolicy([]string{"PERMIT-ALL"})
policy.SetExportPolicy([]string{"PERMIT-ALL"})
gnmi.BatchReplace(batch, path.Config(), policy)
} else if operation == "delete" {
} else {
gnmi.BatchDelete(batch, path.Config())
}
batch.Set(t, dut)
}
batch.Set(t, dut)
time.Sleep(time.Second * 60)
}

Expand Down Expand Up @@ -637,18 +668,25 @@ func configureExportRoutingPolicyV6(t *testing.T, dut *ondatra.DUTDevice, operat
} else {
policy.SetExportPolicy([]string{v6ASPPolicy, v6MedPolicy})
}
if deviations.SkipSettingStatementForPolicy(dut) {
gnmi.Update(t, dut, path.Config(), policy)
} else {
if operation == "set" {
if operation == "set" {
if deviations.DefaultImportExportPolicyUnsupported(dut) {
policy.SetImportPolicy([]string{"PERMIT-ALL"})
gnmi.BatchReplace(batch, path.Config(), policy)
} else {
gnmi.BatchReplace(batch, path.Config(), policy)
gnmi.BatchReplace(batch, importPolPath.Config(), eBGPPeerPolicy)
} else if operation == "delete" {
}
} else if operation == "delete" {
if deviations.DefaultImportExportPolicyUnsupported(dut) {
policy.SetImportPolicy([]string{"PERMIT-ALL"})
policy.SetExportPolicy([]string{"PERMIT-ALL"})
gnmi.BatchReplace(batch, path.Config(), policy)
} else {
gnmi.BatchDelete(batch, path.Config())
gnmi.BatchDelete(batch, importPolPath.Config())
}
batch.Set(t, dut)
}
batch.Set(t, dut)
time.Sleep(time.Second * 60)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ platform_exceptions: {
skip_setting_statement_for_policy: true
skip_checking_attribute_index: true
flatten_policy_with_multiple_statements: true
bgp_set_med_action_unsupported: true
}
}
platform_exceptions: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,13 +223,12 @@ func bgpCreateNbr(localAs, peerAs uint32, dut *ondatra.DUTDevice) *oc.NetworkIns

if deviations.SkipBgpSendCommunityType(dut) {
pg.SetSendCommunity(oc.E_Bgp_CommunityType(oc.Bgp_CommunityType_STANDARD))
} else if deviations.SkipBgpPeerGroupSendCommunityType(dut) {
as4.SetSendCommunityType([]oc.E_Bgp_CommunityType{oc.Bgp_CommunityType_STANDARD})
as6.SetSendCommunityType([]oc.E_Bgp_CommunityType{oc.Bgp_CommunityType_STANDARD})
} else {
if deviations.SkipBgpPeerGroupSendCommunityType(dut) {
as4.SetSendCommunityType([]oc.E_Bgp_CommunityType{oc.Bgp_CommunityType_STANDARD})
as6.SetSendCommunityType([]oc.E_Bgp_CommunityType{oc.Bgp_CommunityType_STANDARD})
} else {
pg.SetSendCommunityType([]oc.E_Bgp_CommunityType{oc.Bgp_CommunityType_STANDARD})
}
as4.SetSendCommunityType([]oc.E_Bgp_CommunityType{oc.Bgp_CommunityType_STANDARD})
as6.SetSendCommunityType([]oc.E_Bgp_CommunityType{oc.Bgp_CommunityType_STANDARD})
}

bgpNbr := bgp.GetOrCreateNeighbor(nbr.nbrAddr)
Expand Down Expand Up @@ -364,13 +363,19 @@ func configureRoutingPolicy(t *testing.T, dut *ondatra.DUTDevice, policyName str

bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp()
if nbr != nil {
gnmi.BatchReplace(batchConfig, bgpPath.Neighbor(nbr.nbrAddr).AfiSafi(nbr.afiSafi).ApplyPolicy().ImportPolicy().Config(), []string{policyName})
applyPolicy := &oc.NetworkInstance_Protocol_Bgp_Neighbor_AfiSafi_ApplyPolicy{}
applyPolicy.SetImportPolicy([]string{policyName})
gnmi.BatchReplace(batchConfig, bgpPath.Neighbor(nbr.nbrAddr).AfiSafi(nbr.afiSafi).ApplyPolicy().Config(), applyPolicy)
}
if pgName != "" {
gnmi.BatchReplace(batchConfig, bgpPath.PeerGroup(pgName).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ImportPolicy().Config(), []string{policyName})
gnmi.BatchReplace(batchConfig, bgpPath.PeerGroup(pgName).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ImportPolicy().Config(), []string{policyName})
gnmi.BatchDelete(batchConfig, bgpPath.Neighbor(ebgp1NbrV4.nbrAddr).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ImportPolicy().Config())
gnmi.BatchDelete(batchConfig, bgpPath.Neighbor(ebgp1NbrV6.nbrAddr).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ImportPolicy().Config())
applyPolicyV4 := &oc.NetworkInstance_Protocol_Bgp_PeerGroup_AfiSafi_ApplyPolicy{}
applyPolicyV4.SetImportPolicy([]string{policyName})
applyPolicyV6 := &oc.NetworkInstance_Protocol_Bgp_PeerGroup_AfiSafi_ApplyPolicy{}
applyPolicyV6.SetImportPolicy([]string{policyName})
gnmi.BatchReplace(batchConfig, bgpPath.PeerGroup(pgName).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().Config(), applyPolicyV4)
gnmi.BatchReplace(batchConfig, bgpPath.PeerGroup(pgName).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().Config(), applyPolicyV6)
gnmi.BatchDelete(batchConfig, bgpPath.Neighbor(ebgp1NbrV4.nbrAddr).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().Config())
gnmi.BatchDelete(batchConfig, bgpPath.Neighbor(ebgp1NbrV6.nbrAddr).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().Config())
}

batchConfig.Set(t, dut)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ platform_exceptions: {
deviations: {
bgp_community_set_refs_unsupported: true
bgp_conditions_match_community_set_unsupported: true
skip_bgp_send_community_type: true
skip_setting_statement_for_policy: true
}
}
Expand Down
Loading
Loading