Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RT-1.27 : static_route_bgp_redistribution_test.go #3395

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,15 @@ platform_exceptions: {
tc_subscription_unsupported: true
default_bgp_instance_name: "default"
}
}
platform_exceptions: {
platform: {
vendor: JUNIPER
}
deviations: {
skip_bgp_send_community_type: true
skip_setting_disable_metric_propagation: true
routing_policy_tag_set_embedded: true
bgp_community_set_refs_unsupported: true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,9 @@ func configureDUTStatic(t *testing.T, dut *ondatra.DUTDevice) {

ipv4StaticRouteNextHop := ipv4StaticRoute.GetOrCreateNextHop("0")
if deviations.SetMetricAsPreference(dut) {
ipv4StaticRouteNextHop.Metric = ygot.Uint32(104)
ipv4StaticRouteNextHop.Preference = ygot.Uint32(medIPv4)
} else {
ipv4StaticRouteNextHop.Preference = ygot.Uint32(104)
ipv4StaticRouteNextHop.Metric = ygot.Uint32(medIPv4)
}

ipv4StaticRouteNextHop.SetNextHop(oc.UnionString("192.168.1.6"))
Expand All @@ -210,9 +210,9 @@ func configureDUTStatic(t *testing.T, dut *ondatra.DUTDevice) {

ipv6StaticRouteNextHop := ipv6StaticRoute.GetOrCreateNextHop("0")
if deviations.SetMetricAsPreference(dut) {
ipv6StaticRouteNextHop.Metric = ygot.Uint32(106)
ipv6StaticRouteNextHop.Preference = ygot.Uint32(medIPv6)
} else {
ipv6StaticRouteNextHop.Preference = ygot.Uint32(106)
ipv6StaticRouteNextHop.Metric = ygot.Uint32(medIPv6)
}
ipv6StaticRouteNextHop.SetNextHop(oc.UnionString("2001:DB8::6"))

Expand Down Expand Up @@ -597,11 +597,17 @@ func validateRedistributeStatic(t *testing.T, dut *ondatra.DUTDevice, acceptRout

if !deviations.SkipSettingDisableMetricPropagation(dut) {
if !mPropagation {
if tcState.GetDisableMetricPropagation() {
// If mPropagation variable is not set means metric propagation is disabled, which
// means disable-metric-propagation is set to true. Hence fail condition should
// be not setting disable-metric-propagation.
if !tcState.GetDisableMetricPropagation() {
t.Fatal("Metric propagation disabled for table connection, expected enabled")
}
} else {
if !tcState.GetDisableMetricPropagation() {
// If mPropagation variable is set means metric propagation is enabled, which
// means disable-metric-propagation is set to false. Hence fail condition should
// be setting disable-metric-propagation.
if tcState.GetDisableMetricPropagation() {
t.Fatal("Metric propagation is enabled for table connection, expected disabled")
}
}
Expand Down Expand Up @@ -721,7 +727,11 @@ func redistributeIPv4Static(t *testing.T, dut *ondatra.DUTDevice) {
// 1.27.3 validation function
func validateRedistributeIPv4Static(t *testing.T, dut *ondatra.DUTDevice, ate *ondatra.ATEDevice) {
validateRedistributeStatic(t, dut, acceptRoute, isV4, !metricPropagate)
validateLearnedIPv4Prefix(t, ate, atePort1.Name+".BGP4.peer", "192.168.10.0", medZero, shouldBePresent)
if deviations.SkipSettingDisableMetricPropagation(dut) {
validateLearnedIPv4Prefix(t, ate, atePort1.Name+".BGP4.peer", "192.168.10.0", medIPv4, shouldBePresent)
} else {
validateLearnedIPv4Prefix(t, ate, atePort1.Name+".BGP4.peer", "192.168.10.0", medZero, shouldBePresent)
}
}

// 1.27.4 setup function
Expand Down Expand Up @@ -751,7 +761,11 @@ func redistributeIPv6Static(t *testing.T, dut *ondatra.DUTDevice) {
// 1.27.14 validation function
func validateRedistributeIPv6Static(t *testing.T, dut *ondatra.DUTDevice, ate *ondatra.ATEDevice) {
validateRedistributeStatic(t, dut, acceptRoute, !isV4, !metricPropagate)
validateLearnedIPv6Prefix(t, ate, atePort1.Name+".BGP6.peer", "2024:db8:128:128::", medZero, shouldBePresent)
if deviations.SkipSettingDisableMetricPropagation(dut) {
validateLearnedIPv6Prefix(t, ate, atePort1.Name+".BGP6.peer", "2024:db8:128:128::", medIPv6, shouldBePresent)
} else {
validateLearnedIPv6Prefix(t, ate, atePort1.Name+".BGP6.peer", "2024:db8:128:128::", medZero, shouldBePresent)
}
}

// 1.27.15 setup function
Expand Down Expand Up @@ -921,6 +935,7 @@ func redistributeStaticRoutePolicyWithASN(t *testing.T, dut *ondatra.DUTDevice,
} else {
configureTableConnection(t, dut, isV4, metricPropagate, redistributeStaticPolicyName, oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
}

}

// 1.27.6 and 1.27.17 setup function
Expand Down Expand Up @@ -1013,6 +1028,12 @@ func redistributeStaticRoutePolicyWithLocalPreference(t *testing.T, dut *ondatra
// 1.27.8 and 1.27.19 setup function
func redistributeStaticRoutePolicyWithCommunitySet(t *testing.T, dut *ondatra.DUTDevice, isV4 bool) {

// Remove import policy.
tableConnV4Path := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).TableConnection(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_STATIC, oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, oc.Types_ADDRESS_FAMILY_IPV4)
gnmi.Delete(t, dut, tableConnV4Path.ImportPolicy().Config())
tableConnV6Path := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).TableConnection(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_STATIC, oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, oc.Types_ADDRESS_FAMILY_IPV6)
gnmi.Delete(t, dut, tableConnV6Path.ImportPolicy().Config())

redistributeStaticPolicyName := redistributeStaticPolicyNameV4
policyStatementName := policyStatementNameV4
communitySetName := "community-set-v4"
Expand Down Expand Up @@ -1058,7 +1079,12 @@ func redistributeStaticRoutePolicyWithCommunitySet(t *testing.T, dut *ondatra.DU
switch dut.Vendor() {
case ondatra.CISCO:
cfgplugins.DeviationCiscoRoutingPolicyBGPActionSetCommunity(t, dut, redistributeStaticPolicyName, policyStatementName, communitySetName)
case ondatra.JUNIPER:
cfgplugins.DeviationJuniperRoutingPolicyBGPActionSetCommunity(t, dut, redistributeStaticPolicyName, policyStatementName, communitySetName)
default:
t.Fatalf("BgpCommunitySetRefsUnsupported deviation needs cli configuration for vendor %s which is not defined", dut.Vendor())
}

}

if deviations.TableConnectionsUnsupported(dut) {
Expand Down Expand Up @@ -1469,17 +1495,33 @@ func validateRedistributeRouteWithTagSet(t *testing.T, dut *ondatra.DUTDevice, a
}
if !deviations.UseVendorNativeTagSetConfig(dut) {
if foundPDef.GetStatement(policyStatementName).GetConditions().GetOrCreateMatchTagSet().GetTagSet() != tagSet {
t.Fatal("Expected tag-set is not configured")
if deviations.RoutingPolicyTagSetEmbedded(dut) {
t.Log("Tag-set are embeded in the policy statement.")
} else {
t.Fatal("Expected tag-set is not configured")
}
}
if foundPDef.GetStatement(policyStatementName).GetConditions().GetOrCreateMatchTagSet().GetMatchSetOptions() != oc.RoutingPolicy_MatchSetOptionsRestrictedType_ANY {
t.Fatal("Expected match-set-option for tag-set is not configured")
if deviations.RoutingPolicyTagSetEmbedded(dut) {
t.Log("Tag-set are embeded in the policy statement.")
} else {
t.Fatal("Expected match-set-option for tag-set is not configured")
}
}
}

if isV4 {
validateLearnedIPv4Prefix(t, ate, atePort1.Name+".BGP4.peer", "192.168.10.0", medZero, shouldBePresent)
if deviations.SkipSettingDisableMetricPropagation(dut) {
validateLearnedIPv4Prefix(t, ate, atePort1.Name+".BGP4.peer", "192.168.10.0", medIPv4, shouldBePresent)
} else {
validateLearnedIPv4Prefix(t, ate, atePort1.Name+".BGP4.peer", "192.168.10.0", medZero, shouldBePresent)
}
} else {
validateLearnedIPv6Prefix(t, ate, atePort1.Name+".BGP6.peer", "2024:db8:128:128::", medZero, shouldBePresent)
if deviations.SkipSettingDisableMetricPropagation(dut) {
validateLearnedIPv6Prefix(t, ate, atePort1.Name+".BGP6.peer", "2024:db8:128:128::", medIPv6, shouldBePresent)
} else {
validateLearnedIPv6Prefix(t, ate, atePort1.Name+".BGP6.peer", "2024:db8:128:128::", medZero, shouldBePresent)
}
}
}

Expand Down Expand Up @@ -1656,7 +1698,7 @@ func TestBGPStaticRouteRedistribution(t *testing.T) {
name: "1.27.5 redistribute-ipv4-route-policy-as-prepend",
setup: func() { redistributeStaticRoutePolicyWithASN(t, dut, isV4) },
validate: func() {
validatePrefixASN(t, ate, isV4, atePort1.Name+".BGP4.peer", "192.168.10.0", []uint32{64512, 65499, 65499, 65499})
validatePrefixASN(t, ate, isV4, atePort1.Name+".BGP4.peer", "192.168.10.0", []uint32{65499, 65499, 65499, 64512})
cprabha marked this conversation as resolved.
Show resolved Hide resolved
},
},
// 1.27.6
Expand Down
17 changes: 17 additions & 0 deletions internal/cfgplugins/bgp_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"github.com/openconfig/ondatra"
)

// DeviationCiscoRoutingPolicyBGPActionSetCommunity is used as an alternative to

Check failure on line 25 in internal/cfgplugins/bgp_policy.go

View workflow job for this annotation

GitHub Actions / Static Analysis

comment on exported function DeviationCiscoRoutingPolicyBGPActionSetMed should be of the form "DeviationCiscoRoutingPolicyBGPActionSetMed ..."
// /routing-policy/policy-definitions/policy-definition/statements/statement/actions/bgp-actions/config/set-med.
// This deviation implements CLI to perform the equivalent function.
func DeviationCiscoRoutingPolicyBGPActionSetMed(t *testing.T, dut *ondatra.DUTDevice, policyName string, statement string, prefixSetName string, setMed int, origin string) {
Expand Down Expand Up @@ -61,3 +61,20 @@
cliConfig += " done\nend-policy\n"
helpers.GnmiCLIConfig(t, dut, cliConfig)
}

// DeviationJuniperRoutingPolicyBGPActionSetCommunity is used as an alternative to
// /routing-policy/policy-definitions/policy-definition/statements/statement/actions/bgp-actions/set-community
// This deviation implements CLI to perform the equivalent function.
func DeviationJuniperRoutingPolicyBGPActionSetCommunity(t *testing.T, dut *ondatra.DUTDevice, policyName string, statement string, community string) {
config := fmt.Sprintf(`
policy-options {
policy-statement %s {
term %s {
then {
community add %s;
}
}
}
}`, policyName, statement, community)
helpers.GnmiCLIConfig(t, dut, config)
}
Loading