diff --git a/feature/bgp/otg_tests/bgp_afi_safi_defaults/bgp_afi_safi_defaults_test.go b/feature/bgp/otg_tests/bgp_afi_safi_defaults/bgp_afi_safi_defaults_test.go index 0898f0285e2..13ed1cf127b 100644 --- a/feature/bgp/otg_tests/bgp_afi_safi_defaults/bgp_afi_safi_defaults_test.go +++ b/feature/bgp/otg_tests/bgp_afi_safi_defaults/bgp_afi_safi_defaults_test.go @@ -134,8 +134,6 @@ func bgpCreateNbr(t *testing.T, localAs, peerAs uint32, dut *ondatra.DUTDevice, global := bgp.GetOrCreateGlobal() global.RouterId = ygot.String(dutPort2.IPv4) 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) // Note: we have to define the peer group even if we aren't setting any policy because it's // invalid OC for the neighbor to be part of a peer group that doesn't exist. @@ -155,50 +153,37 @@ func bgpCreateNbr(t *testing.T, localAs, peerAs uint32, dut *ondatra.DUTDevice, switch afiSafiLevel { case globalLevel: - pg1.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(false) - pg1.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(false) - pg2.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(false) - pg2.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(false) - if isV4Only { + if nbr.isV4 == true { 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(false) - nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true) - nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(false) } else { - global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(false) global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true) - nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(false) - nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true) } - if deviations.BGPGlobalExtendedNextHopEncodingUnsupported(dut) { - global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Ipv4Unicast = nil - } - case nbrLevel: - if isV4Only { - nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true) - nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(false) - extNh := nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).GetOrCreateIpv4Unicast() - if !deviations.BgpExtendedNextHopEncodingLeafUnsupported(dut) { + if !isV4Only { + if !deviations.BGPGlobalExtendedNextHopEncodingUnsupported(dut) { + extNh := global.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).GetOrCreateIpv4Unicast() extNh.ExtendedNextHopEncoding = ygot.Bool(true) } + } + case nbrLevel: + if nbr.isV4 == true { + af4 := nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST) + af4.Enabled = ygot.Bool(true) } else { - nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(false) - nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true) + af6 := nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST) + af6.Enabled = ygot.Bool(true) } if deviations.BGPGlobalExtendedNextHopEncodingUnsupported(dut) { nv4.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Ipv4Unicast = nil } case peerGrpLevel: - if isV4Only { - pg1.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true) - pg1.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(false) - pg2.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(true) - pg2.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(false) + // V4 peer group + if nbr.isV4 == true { + pg1af4 := pg1.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST) + pg1af4.Enabled = ygot.Bool(true) } else { - pg1.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(false) - pg1.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true) - pg2.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).Enabled = ygot.Bool(false) - pg2.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).Enabled = ygot.Bool(true) + // V6 peer group + pg2af6 := pg2.GetOrCreateAfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST) + pg2af6.Enabled = ygot.Bool(true) } case afiSafiSetToFalse: t.Log("AFI-SAFI is set to false") @@ -332,7 +317,7 @@ func configureOTG(t *testing.T, otg *otg.OTG, otgPeerList []string) gosnappi.Con } // verifyBGPCapabilities is used to Verify BGP capabilities like route refresh as32 and mpbgp. -func verifyBgpCapabilities(t *testing.T, dut *ondatra.DUTDevice, afiSafiLevel string, nbrs []*bgpNeighbor, isV4Only bool) { +func verifyBgpCapabilities(t *testing.T, dut *ondatra.DUTDevice, afiSafiLevel string, nbrs []*bgpNeighbor) { t.Helper() t.Log("Verifying BGP AFI-SAFI capabilities.") @@ -372,8 +357,9 @@ func verifyBgpCapabilities(t *testing.T, dut *ondatra.DUTDevice, afiSafiLevel st } t.Logf("Capabilities for peer %v are %v", nbr.neighborip, capabilities) } + switch afiSafiLevel { - case nbrLevel: + case nbrLevel, peerGrpLevel, globalLevel: if nbr.isV4 && capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST] { t.Errorf("AFI_SAFI_TYPE_IPV6_UNICAST should not be enabled for v4 Peer: %v, %v", capabilities, nbr.neighborip) } @@ -381,26 +367,8 @@ func verifyBgpCapabilities(t *testing.T, dut *ondatra.DUTDevice, afiSafiLevel st t.Errorf("AFI_SAFI_TYPE_IPV4_UNICAST should not be for v6 Peer: %v, %v", capabilities, nbr.neighborip) } t.Logf("Capabilities for peer %v are %v", nbr.neighborip, capabilities) - case peerGrpLevel: - if isV4Only && capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST] == true { - t.Logf("Both V4 and V6 AFI-SAFI are inherited from peer-group level for peer: %v, %v", nbr.neighborip, capabilities) - } else if !isV4Only && capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST] == true { - t.Logf("Both V4 and V6 AFI-SAFI are inherited from peer-group level for peer: %v, %v", nbr.neighborip, capabilities) - } else { - t.Errorf("Both V4 and V6 AFI-SAFI are not inherited from peer-group level for peer: %v, %v", nbr.neighborip, capabilities) - } - t.Logf("Capabilities for peer %v are %v", nbr.neighborip, capabilities) - case globalLevel: - if isV4Only && capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST] == true { - t.Logf("Both V4 and V6 AFI-SAFI are inherited from global level for peer: %v, %v", nbr.neighborip, capabilities) - } else if !isV4Only && capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST] == true { - t.Logf("Both V4 and V6 AFI-SAFI are inherited from global level for peer: %v, %v", nbr.neighborip, capabilities) - } else { - t.Errorf("Both V4 and V6 AFI-SAFI are not inherited from global level for peer: %v, %v", nbr.neighborip, capabilities) - } - t.Logf("Capabilities for peer %v are %v", nbr.neighborip, capabilities) case afiSafiSetToFalse: - t.Logf("afiSafiSetToFalse capabilities: %v, v4 -> %v, v6 ->%v", isV4Only, capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST], capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST]) + t.Logf("afiSafiSetToFalse capabilities: v4 -> %v, v6 ->%v", capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST], capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST]) if nbr.isV4 && capabilities[oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST] == true { t.Errorf("AFI-SAFI are Active after disabling: %v, %v", capabilities, nbr.neighborip) } @@ -447,15 +415,7 @@ func TestAfiSafiOcDefaults(t *testing.T) { configureDUT(t, dut) }) - t.Run("Configure DEFAULT network instance", func(t *testing.T) { - dutConfNIPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)) - name := deviations.DefaultNetworkInstance(dut) - c := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)) - gnmi.Update(t, dut, c.Config(), &oc.NetworkInstance{ - Name: ygot.String(name), - }) - 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") @@ -525,7 +485,7 @@ func TestAfiSafiOcDefaults(t *testing.T) { t.Run("Verify BGP telemetry", func(t *testing.T) { verifyBgpTelemetry(t, dut, tc.nbrs) verifyOtgBgpTelemetry(t, otg, otgConfig, tc.otgPeerList, "ESTABLISHED") - verifyBgpCapabilities(t, dut, tc.afiSafiLevel, tc.nbrs, tc.isV4Only) + verifyBgpCapabilities(t, dut, tc.afiSafiLevel, tc.nbrs) }) }) } @@ -592,7 +552,7 @@ func TestAfiSafiSetToFalse(t *testing.T) { verifyBgpSession(t, dut, tc.nbrs) }) t.Run("Verify BGP capabilities", func(t *testing.T) { - verifyBgpCapabilities(t, dut, tc.afiSafiLevel, tc.nbrs, tc.isV4Only) + verifyBgpCapabilities(t, dut, tc.afiSafiLevel, tc.nbrs) }) }) } diff --git a/feature/bgp/policybase/otg_tests/aspath_and_community_test/aspath_and_community_test.go b/feature/bgp/policybase/otg_tests/aspath_and_community_test/aspath_and_community_test.go index de109463b72..f9bab65b546 100644 --- a/feature/bgp/policybase/otg_tests/aspath_and_community_test/aspath_and_community_test.go +++ b/feature/bgp/policybase/otg_tests/aspath_and_community_test/aspath_and_community_test.go @@ -100,7 +100,9 @@ func configureImportBGPPolicy(t *testing.T, dut *ondatra.DUTDevice, ipv4 string, cs = append(cs, oc.UnionString(communityMatch)) } communitySet.SetCommunityMember(cs) - communitySet.SetMatchSetOptions(commMatchSetOptions) + if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { + communitySet.SetMatchSetOptions(commMatchSetOptions) + } } var communitySetCLIConfig string @@ -118,6 +120,7 @@ func configureImportBGPPolicy(t *testing.T, dut *ondatra.DUTDevice, ipv4 string, stmt1.GetOrCreateConditions().GetOrCreateBgpConditions().SetCommunitySet(communitySetName) } else { stmt1.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetCommunitySet(communitySetName) + stmt1.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetMatchSetOptions(oc.E_RoutingPolicy_MatchSetOptionsType(commMatchSetOptions)) } if deviations.CommunityMemberRegexUnsupported(dut) && communitySetName == "any_my_3_comms" { diff --git a/feature/bgp/policybase/otg_tests/aspath_and_community_test/metadata.textproto b/feature/bgp/policybase/otg_tests/aspath_and_community_test/metadata.textproto index 27c44c4f08d..6075ea0b951 100644 --- a/feature/bgp/policybase/otg_tests/aspath_and_community_test/metadata.textproto +++ b/feature/bgp/policybase/otg_tests/aspath_and_community_test/metadata.textproto @@ -34,4 +34,14 @@ platform_exceptions: { default_route_policy_unsupported: true } } +platform_exceptions: { + platform: { + vendor: NOKIA + } + deviations: { + interface_enabled: true + static_protocol_name: "static" + explicit_interface_in_default_vrf: true + } +} diff --git a/feature/bgp/policybase/otg_tests/import_export_multi_test/README.md b/feature/bgp/policybase/otg_tests/import_export_multi_test/README.md index 6e8fca19c0c..f171b442f06 100644 --- a/feature/bgp/policybase/otg_tests/import_export_multi_test/README.md +++ b/feature/bgp/policybase/otg_tests/import_export_multi_test/README.md @@ -90,7 +90,7 @@ functions. * conditions/bgp-conditions/match-community-set/config/ * community-set: "regex-community" * match-set-options: "ANY" - * actions/config/policy-result = "NEXT_STATEMENT" + * actions/config/policy-result = "ACCEPT_ROUTE" * Create policy-definitions/policy-definition/config/name = "multi_policy" * statements/statement/config/name = "reject_route_community" diff --git a/feature/bgp/policybase/otg_tests/import_export_multi_test/import_export_multi_test.go b/feature/bgp/policybase/otg_tests/import_export_multi_test/import_export_multi_test.go index 0e20c80a60c..bab83b7d524 100644 --- a/feature/bgp/policybase/otg_tests/import_export_multi_test/import_export_multi_test.go +++ b/feature/bgp/policybase/otg_tests/import_export_multi_test/import_export_multi_test.go @@ -63,6 +63,8 @@ const ( myCommunitySet = "my_community" prefixSetName = "prefix-set-5" myAsPathName = "my_aspath" + addComm60 = "add_comm_60" + addComm70 = "add_comm_70" bgpActionMethod = oc.SetCommunity_Method_REFERENCE bgpSetCommunityOptionType = oc.BgpPolicy_BgpSetCommunityOptionType_ADD prefixSetNameSetOptions = oc.RoutingPolicy_MatchSetOptionsRestrictedType_ANY @@ -128,9 +130,12 @@ func deleteBGPPolicy(t *testing.T, dut *ondatra.DUTDevice, nbrList []*bgpNbrList bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp() for _, nbr := range nbrList { nbrAfiSafiPath := bgpPath.Neighbor(nbr.nbrAddr).AfiSafi(nbr.afiSafi) + peerAfiSafiPath := bgpPath.PeerGroup(cfgplugins.BGPPeerGroup1).AfiSafi(nbr.afiSafi) b := &gnmi.SetBatch{} gnmi.BatchDelete(b, nbrAfiSafiPath.ApplyPolicy().ImportPolicy().Config()) gnmi.BatchDelete(b, nbrAfiSafiPath.ApplyPolicy().ExportPolicy().Config()) + gnmi.BatchDelete(b, peerAfiSafiPath.ApplyPolicy().ImportPolicy().Config()) + gnmi.BatchDelete(b, peerAfiSafiPath.ApplyPolicy().ExportPolicy().Config()) b.Set(t, dut) } } @@ -180,6 +185,8 @@ func configureImportExportMultifacetMatchActionsBGPPolicy(t *testing.T, dut *ond addCommunitiesRefs := []string{"40:1", "40:2"} addCommunitiesSetRefsAction := []string{"add-communities"} setCommunitySetRefs := []string{"add_comm_60", "add_comm_70"} + addComm60Refs := []string{"60:1"} + addComm70Refs := []string{"70:1"} myCommunitySets := []string{"50:1"} if deviations.BgpCommunityMemberIsAString(dut) { regexCommunities = []string{"(^|\\s)30:[0-9]+($|\\s)"} @@ -210,7 +217,9 @@ func configureImportExportMultifacetMatchActionsBGPPolicy(t *testing.T, dut *ond } } communitySetRegex.SetCommunityMember(pd2cs1) - communitySetRegex.SetMatchSetOptions(matchAny) + if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { + communitySetRegex.SetMatchSetOptions(matchAny) + } } var communitySetCLIConfig string @@ -228,10 +237,11 @@ func configureImportExportMultifacetMatchActionsBGPPolicy(t *testing.T, dut *ond pd2stmt1.GetOrCreateConditions().GetOrCreateBgpConditions().SetCommunitySet(regexCommunitySet) } else { pd2stmt1.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetCommunitySet(regexCommunitySet) + pd2stmt1.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetMatchSetOptions(oc.E_RoutingPolicy_MatchSetOptionsType(matchAny)) } if !deviations.SkipSettingStatementForPolicy(dut) { - pd2stmt1.GetOrCreateActions().SetPolicyResult(nextstatementResult) + pd2stmt1.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE) } // Configure the parent policy multi_policy. @@ -254,12 +264,15 @@ func configureImportExportMultifacetMatchActionsBGPPolicy(t *testing.T, dut *ond } } communitySetReject.SetCommunityMember(cs1) - communitySetReject.SetMatchSetOptions(matchAny) + if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { + communitySetReject.SetMatchSetOptions(matchAny) + } if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { stmt1.GetOrCreateConditions().GetOrCreateBgpConditions().SetCommunitySet(rejectCommunitySet) } else { stmt1.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetCommunitySet(rejectCommunitySet) + stmt1.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetMatchSetOptions(oc.E_RoutingPolicy_MatchSetOptionsType(matchAny)) } stmt1.GetOrCreateActions().SetPolicyResult(rejectResult) @@ -286,12 +299,15 @@ func configureImportExportMultifacetMatchActionsBGPPolicy(t *testing.T, dut *ond } } communitySetNestedReject.SetCommunityMember(cs2) - communitySetNestedReject.SetMatchSetOptions(matchInvert) + if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { + communitySetNestedReject.SetMatchSetOptions(matchInvert) + } if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { stmt2.GetOrCreateConditions().GetOrCreateBgpConditions().SetCommunitySet(nestedRejectCommunitySet) } else { stmt2.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetCommunitySet(nestedRejectCommunitySet) + stmt2.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetMatchSetOptions(oc.E_RoutingPolicy_MatchSetOptionsType(matchInvert)) } stmt2.GetOrCreateActions().SetPolicyResult(rejectResult) @@ -313,7 +329,9 @@ func configureImportExportMultifacetMatchActionsBGPPolicy(t *testing.T, dut *ond } } communitySetRefsAddCommunities.SetCommunityMember(cs3) - communitySetRefsAddCommunities.SetMatchSetOptions(matchInvert) + if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { + communitySetRefsAddCommunities.SetMatchSetOptions(matchInvert) + } if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { stmt3.GetOrCreateConditions().GetOrCreateBgpConditions().SetCommunitySet(addCommunitiesSetRefs) @@ -346,7 +364,9 @@ func configureImportExportMultifacetMatchActionsBGPPolicy(t *testing.T, dut *ond } } communitySetMatchCommPrefixAddCommu.SetCommunityMember(cs4) - communitySetMatchCommPrefixAddCommu.SetMatchSetOptions(matchAny) + if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { + communitySetMatchCommPrefixAddCommu.SetMatchSetOptions(matchAny) + } // Configure multi_policy:STATEMENT4: match_comm_and_prefix_add_2_community_sets statement @@ -365,6 +385,8 @@ func configureImportExportMultifacetMatchActionsBGPPolicy(t *testing.T, dut *ond } else { stmt4.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetCommunitySet(myCommunitySet) stmt6.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetCommunitySet(myCommunitySet) + stmt4.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetMatchSetOptions(oc.E_RoutingPolicy_MatchSetOptionsType(matchAny)) + stmt6.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateMatchCommunitySet().SetMatchSetOptions(oc.E_RoutingPolicy_MatchSetOptionsType(matchAny)) } // configure match-prefix-set: prefix-set-5 to match_comm_and_prefix_add_2_community_sets statement @@ -391,7 +413,34 @@ func configureImportExportMultifacetMatchActionsBGPPolicy(t *testing.T, dut *ond if deviations.BgpCommunitySetRefsUnsupported(dut) { t.Logf("TODO: community-set-refs not supported b/316833803") } else { - // TODO: Add bgp-actions: community-set-refs to match_comm_and_prefix_add_2_community_sets statement + // Configure add_comm_60 [60:1] to match_comm_and_prefix_add_2_community_sets statement + addCommunity60 := rp.GetOrCreateDefinedSets().GetOrCreateBgpDefinedSets().GetOrCreateCommunitySet(addComm60) + + cs5 := []oc.RoutingPolicy_DefinedSets_BgpDefinedSets_CommunitySet_CommunityMember_Union{} + for _, commMatch5 := range addComm60Refs { + if commMatch5 != "" { + cs5 = append(cs5, oc.UnionString(commMatch5)) + } + } + addCommunity60.SetCommunityMember(cs5) + if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { + addCommunity60.SetMatchSetOptions(matchInvert) + } + + // Configure add_comm_70 [70:1] to match_comm_and_prefix_add_2_community_sets statement + addCommunity70 := rp.GetOrCreateDefinedSets().GetOrCreateBgpDefinedSets().GetOrCreateCommunitySet(addComm70) + + cs6 := []oc.RoutingPolicy_DefinedSets_BgpDefinedSets_CommunitySet_CommunityMember_Union{} + for _, commMatch6 := range addComm70Refs { + if commMatch6 != "" { + cs6 = append(cs6, oc.UnionString(commMatch6)) + } + } + addCommunity70.SetCommunityMember(cs6) + if deviations.BGPConditionsMatchCommunitySetUnsupported(dut) { + addCommunity70.SetMatchSetOptions(matchInvert) + } + // Added bgp-actions: community-set-refs to match_comm_and_prefix_add_2_community_sets statement stmt4.GetOrCreateActions().GetOrCreateBgpActions().GetOrCreateSetCommunity().GetOrCreateReference().SetCommunitySetRefs(setCommunitySetRefs) stmt4.GetOrCreateActions().GetOrCreateBgpActions().GetOrCreateSetCommunity().SetMethod(oc.SetCommunity_Method_REFERENCE) stmt4.GetOrCreateActions().GetOrCreateBgpActions().GetOrCreateSetCommunity().SetOptions(oc.BgpPolicy_BgpSetCommunityOptionType_ADD) @@ -707,7 +756,7 @@ func validateOTGBgpPrefixV6AndASLocalPrefMED(t *testing.T, otg *otg.OTG, dut *on if bgpPrefix.Address != nil && bgpPrefix.GetAddress() == ipAddr && bgpPrefix.PrefixLength != nil && bgpPrefix.GetPrefixLength() == prefixLen { foundPrefix = true - t.Logf("Prefix recevied on OTG is correct, got prefix %v, want prefix %v", bgpPrefix, ipAddr) + t.Logf("Prefix recevied on OTG is correct, got prefix %v, want prefix %v", bgpPrefix.GetAddress(), ipAddr) switch pathAttr { case otgMED: if bgpPrefix.GetMultiExitDiscriminator() != metric[0] { @@ -847,6 +896,18 @@ func TestImportExportMultifacetMatchActionsBGPPolicy(t *testing.T) { testResults := [6]bool{true, true, true, true, true, true} verifyTrafficV4AndV6(t, bs, testResults) + // Delete routePolicy policy applied to neighbor + deleteBGPPolicy(t, dut, []*bgpNbrList{ + { + nbrAddr: ipv4, + afiSafi: oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST, + }, + { + nbrAddr: ipv6, + afiSafi: oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST, + }, + }) + configureImportExportMultifacetMatchActionsBGPPolicy(t, bs.DUT, ipv4, ipv6, ipv41, ipv61) time.Sleep(time.Second * 120) diff --git a/feature/bgp/policybase/otg_tests/import_export_multi_test/metadata.textproto b/feature/bgp/policybase/otg_tests/import_export_multi_test/metadata.textproto index 1efb0711660..98502cb3188 100644 --- a/feature/bgp/policybase/otg_tests/import_export_multi_test/metadata.textproto +++ b/feature/bgp/policybase/otg_tests/import_export_multi_test/metadata.textproto @@ -36,3 +36,14 @@ platform_exceptions: { skip_bgp_send_community_type: true } } +platform_exceptions: { + platform: { + vendor: NOKIA + } + deviations: { + skip_prefix_set_mode: true + explicit_interface_in_default_vrf: true + interface_enabled: true + skip_bgp_send_community_type: true + } +} diff --git a/feature/bgp/static_route_bgp_redistribution/otg_tests/static_route_bgp_redistribution_test/metadata.textproto b/feature/bgp/static_route_bgp_redistribution/otg_tests/static_route_bgp_redistribution_test/metadata.textproto index a0da74fe48d..03580ac4f2c 100644 --- a/feature/bgp/static_route_bgp_redistribution/otg_tests/static_route_bgp_redistribution_test/metadata.textproto +++ b/feature/bgp/static_route_bgp_redistribution/otg_tests/static_route_bgp_redistribution_test/metadata.textproto @@ -37,3 +37,18 @@ platform_exceptions: { set_metric_as_preference: true } } +platform_exceptions: { + platform: { + vendor: CISCO + } + deviations: { + set_metric_as_preference: true + skip_bgp_send_community_type: true + bgp_community_set_refs_unsupported: true + tc_default_import_policy_unsupported: true + tc_metric_propagation_unsupported: true + tc_attribute_propagation_unsupported: true + tc_subscription_unsupported: true + default_bgp_instance_name: "default" + } +} \ No newline at end of file diff --git a/feature/bgp/static_route_bgp_redistribution/otg_tests/static_route_bgp_redistribution_test/static_route_bgp_redistribution_test.go b/feature/bgp/static_route_bgp_redistribution/otg_tests/static_route_bgp_redistribution_test/static_route_bgp_redistribution_test.go index 44a3ca35150..15cad6877eb 100644 --- a/feature/bgp/static_route_bgp_redistribution/otg_tests/static_route_bgp_redistribution_test/static_route_bgp_redistribution_test.go +++ b/feature/bgp/static_route_bgp_redistribution/otg_tests/static_route_bgp_redistribution_test/static_route_bgp_redistribution_test.go @@ -28,11 +28,13 @@ import ( "encoding/json" "fmt" "reflect" + "sort" "testing" "time" "github.com/open-traffic-generator/snappi/gosnappi" "github.com/openconfig/featureprofiles/internal/attrs" + "github.com/openconfig/featureprofiles/internal/cfgplugins" "github.com/openconfig/featureprofiles/internal/deviations" "github.com/openconfig/featureprofiles/internal/fptest" "github.com/openconfig/featureprofiles/internal/otgutils" @@ -175,7 +177,6 @@ func configureDUTStatic(t *testing.T, dut *ondatra.DUTDevice) { t.Helper() staticPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_STATIC, deviations.StaticProtocolName(dut)) - gnmi.Delete(t, dut, staticPath.Config()) dutOcRoot := &oc.Root{} networkInstance := dutOcRoot.GetOrCreateNetworkInstance(deviations.DefaultNetworkInstance(dut)) @@ -197,7 +198,8 @@ func configureDUTStatic(t *testing.T, dut *ondatra.DUTDevice) { } else { ipv4StaticRouteNextHop.Preference = ygot.Uint32(104) } - ipv4StaticRouteNextHop.SetNextHop(oc.LocalRouting_LOCAL_DEFINED_NEXT_HOP_DROP) + + ipv4StaticRouteNextHop.SetNextHop(oc.UnionString("192.168.1.6")) ipv6StaticRoute := networkInstanceProtocolStatic.GetOrCreateStatic("2024:db8:128:128::/64") if !deviations.UseVendorNativeTagSetConfig(dut) { @@ -206,22 +208,22 @@ func configureDUTStatic(t *testing.T, dut *ondatra.DUTDevice) { attachTagSetToStaticRoute(t, dut, "2024:db8:128:128::/64", "tag-static-v6") } - ipv6StaticRouteNextHop := ipv6StaticRoute.GetOrCreateNextHop("1") + ipv6StaticRouteNextHop := ipv6StaticRoute.GetOrCreateNextHop("0") if deviations.SetMetricAsPreference(dut) { ipv6StaticRouteNextHop.Metric = ygot.Uint32(106) } else { ipv6StaticRouteNextHop.Preference = ygot.Uint32(106) } - ipv6StaticRouteNextHop.SetNextHop(oc.LocalRouting_LOCAL_DEFINED_NEXT_HOP_DROP) + ipv6StaticRouteNextHop.SetNextHop(oc.UnionString("2001:DB8::6")) - gnmi.Replace(t, dut, staticPath.Config(), networkInstanceProtocolStatic) + gnmi.Update(t, dut, staticPath.Config(), networkInstanceProtocolStatic) } func configureDUTBGP(t *testing.T, dut *ondatra.DUTDevice) { t.Helper() dutOcRoot := &oc.Root{} - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP") + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)) // permit all policy rp := dutOcRoot.GetOrCreateRoutingPolicy() @@ -235,7 +237,7 @@ func configureDUTBGP(t *testing.T, dut *ondatra.DUTDevice) { // setup BGP networkInstance := dutOcRoot.GetOrCreateNetworkInstance(deviations.DefaultNetworkInstance(dut)) - networkInstanceProtocolBgp := networkInstance.GetOrCreateProtocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP") + networkInstanceProtocolBgp := networkInstance.GetOrCreateProtocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)) networkInstanceProtocolBgp.SetEnabled(true) bgp := networkInstanceProtocolBgp.GetOrCreateBgp() @@ -320,13 +322,19 @@ func configureDUT(t *testing.T, dut *ondatra.DUTDevice) { func awaitBGPEstablished(t *testing.T, dut *ondatra.DUTDevice, neighbors []string) { for _, neighbor := range neighbors { gnmi.Await(t, dut, gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)). - Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP"). + Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)). Bgp(). Neighbor(neighbor). SessionState().State(), time.Second*240, oc.Bgp_Neighbor_SessionState_ESTABLISHED) } } +func sortDevicesByName(devices []gosnappi.Device) { + sort.Slice(devices, func(i, j int) bool { + return devices[i].Name() < devices[j].Name() + }) +} + func configureOTG(t *testing.T, ate *ondatra.ATEDevice) gosnappi.Config { t.Helper() @@ -338,6 +346,7 @@ func configureOTG(t *testing.T, ate *ondatra.ATEDevice) gosnappi.Config { } devices := otgConfig.Devices().Items() + sortDevicesByName(devices) // eBGP v4 session on Port1. bgp := devices[0].Bgp().SetRouterId(atePort1.IPv4) @@ -479,6 +488,20 @@ func configureTableConnection(t *testing.T, dut *ondatra.DUTDevice, isV4, mPropa } batchSet.Set(t, dut) + if deviations.TcMetricPropagationUnsupported(dut) { + switch dut.Vendor() { + case ondatra.CISCO: + med := medZero + if mPropagation { + if isV4 { + med = medIPv4 + } else if !isV4 { + med = medIPv6 + } + } + cfgplugins.DeviationCiscoTableConnectionsStatictoBGPMetricPropagation(t, dut, isV4, med, importPolicy) + } + } } // Populate routing-policy to redistribute static-route @@ -518,10 +541,10 @@ func configureStaticRedistributionPolicy(t *testing.T, dut *ondatra.DUTDevice, i rp = redistributeStaticRoute(t, isV4, mPropagation, !policyResultNext, rp) redistributeStaticPolicyName := redistributeStaticPolicyNameV4 - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() if !isV4 { redistributeStaticPolicyName = redistributeStaticPolicyNameV6 - bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() } astmt := rp.GetPolicyDefinition(redistributeStaticPolicyName).GetStatement("redistribute-static") @@ -541,14 +564,20 @@ func validateRedistributeStatic(t *testing.T, dut *ondatra.DUTDevice, acceptRout redistributeStaticPolicyName := redistributeStaticPolicyNameV4 policyStatementName := "redistribute-static" af := oc.Types_ADDRESS_FAMILY_IPV4 - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy().State() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy().State() if !isV4 { redistributeStaticPolicyName = redistributeStaticPolicyNameV6 af = oc.Types_ADDRESS_FAMILY_IPV6 - bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy().State() + bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy().State() } if !deviations.TableConnectionsUnsupported(dut) { + if deviations.TcSubscriptionUnsupported(dut) { + // wait for routes to propagate to otg + time.Sleep(20 * time.Second) + return + } + tcState := gnmi.Get(t, dut, gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).TableConnection( oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_STATIC, oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, @@ -745,7 +774,12 @@ func redistributeIPv4StaticDefaultRejectPolicy(t *testing.T, dut *ondatra.DUTDev if deviations.TableConnectionsUnsupported(dut) { configureStaticRedistributionPolicy(t, dut, isV4, !acceptRoute, !metricPropagate) } else { - configureTableConnection(t, dut, isV4, !metricPropagate, "", oc.RoutingPolicy_DefaultPolicyType_REJECT_ROUTE) + defaultRejectPolicyName := "" + if deviations.TcDefaultImportPolicyUnsupported(dut) { + configureRejectRedistributionPolicy(t, dut, isV4) + defaultRejectPolicyName = redistributeStaticPolicyNameV4 + } + configureTableConnection(t, dut, isV4, !metricPropagate, defaultRejectPolicyName, oc.RoutingPolicy_DefaultPolicyType_REJECT_ROUTE) } } @@ -754,7 +788,12 @@ func redistributeIPv6StaticDefaultRejectPolicy(t *testing.T, dut *ondatra.DUTDev if deviations.TableConnectionsUnsupported(dut) { configureStaticRedistributionPolicy(t, dut, !isV4, !acceptRoute, !metricPropagate) } else { - configureTableConnection(t, dut, !isV4, !metricPropagate, "", oc.RoutingPolicy_DefaultPolicyType_REJECT_ROUTE) + defaultRejectPolicyName := "" + if deviations.TcDefaultImportPolicyUnsupported(dut) { + configureRejectRedistributionPolicy(t, dut, !isV4) + defaultRejectPolicyName = redistributeStaticPolicyNameV6 + } + configureTableConnection(t, dut, !isV4, !metricPropagate, defaultRejectPolicyName, oc.RoutingPolicy_DefaultPolicyType_REJECT_ROUTE) } } @@ -815,9 +854,14 @@ func redistributeIPv4PrefixRoutePolicy(t *testing.T, dut *ondatra.DUTDevice, ate } gnmi.Replace(t, dut, policyPath.Config(), redistributePolicyDefinition) - + if deviations.TcAttributePropagationUnsupported(dut) { + switch dut.Vendor() { + case ondatra.CISCO: + cfgplugins.DeviationCiscoRoutingPolicyBGPActionSetMed(t, dut, redistributeStaticPolicyNameV4, "statement-v4", "prefix-set-v4", medIPv4, "igp") + } + } if deviations.TableConnectionsUnsupported(dut) { - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() gnmi.Replace(t, dut, bgpPath.Config(), []string{redistributeStaticPolicyNameV4}) } else { configureTableConnection(t, dut, isV4, metricPropagate, redistributeStaticPolicyNameV4, oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE) @@ -839,12 +883,12 @@ func redistributeStaticRoutePolicyWithASN(t *testing.T, dut *ondatra.DUTDevice, redistributeStaticPolicyName := redistributeStaticPolicyNameV4 policyStatementName := policyStatementNameV4 - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() if !isV4 { redistributeStaticPolicyName = redistributeStaticPolicyNameV6 policyStatementName = policyStatementNameV6 - bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() } policyPath := gnmi.OC().RoutingPolicy().PolicyDefinition(redistributeStaticPolicyName) @@ -883,12 +927,12 @@ func redistributeStaticRoutePolicyWithASN(t *testing.T, dut *ondatra.DUTDevice, func redistributeStaticRoutePolicyWithMED(t *testing.T, dut *ondatra.DUTDevice, isV4 bool, medValue uint32) { redistributeStaticPolicyName := redistributeStaticPolicyNameV4 policyStatementName := policyStatementNameV4 - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() if !isV4 { redistributeStaticPolicyName = redistributeStaticPolicyNameV6 policyStatementName = policyStatementNameV6 - bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() } policyPath := gnmi.OC().RoutingPolicy().PolicyDefinition(redistributeStaticPolicyName) @@ -916,6 +960,12 @@ func redistributeStaticRoutePolicyWithMED(t *testing.T, dut *ondatra.DUTDevice, gnmi.Replace(t, dut, bgpPath.Config(), []string{redistributeStaticPolicyName}) } else { configureTableConnection(t, dut, isV4, metricPropagate, redistributeStaticPolicyName, oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE) + if deviations.TcMetricPropagationUnsupported(dut) { + switch dut.Vendor() { + case ondatra.CISCO: + cfgplugins.DeviationCiscoTableConnectionsStatictoBGPMetricPropagation(t, dut, isV4, int(medValue), redistributeStaticPolicyName) + } + } } } @@ -924,12 +974,12 @@ func redistributeStaticRoutePolicyWithLocalPreference(t *testing.T, dut *ondatra redistributeStaticPolicyName := redistributeStaticPolicyNameV4 policyStatementName := policyStatementNameV4 - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort3.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort3.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() if !isV4 { redistributeStaticPolicyName = redistributeStaticPolicyNameV6 policyStatementName = policyStatementNameV6 - bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort3.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort3.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() } policyPath := gnmi.OC().RoutingPolicy().PolicyDefinition(redistributeStaticPolicyName) @@ -966,13 +1016,13 @@ func redistributeStaticRoutePolicyWithCommunitySet(t *testing.T, dut *ondatra.DU redistributeStaticPolicyName := redistributeStaticPolicyNameV4 policyStatementName := policyStatementNameV4 communitySetName := "community-set-v4" - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort3.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort3.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() if !isV4 { redistributeStaticPolicyName = redistributeStaticPolicyNameV6 policyStatementName = policyStatementNameV6 communitySetName = "community-set-v6" - bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort3.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort3.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() } policyPath := gnmi.OC().RoutingPolicy().PolicyDefinition(redistributeStaticPolicyName) @@ -999,10 +1049,17 @@ func redistributeStaticRoutePolicyWithCommunitySet(t *testing.T, dut *ondatra.DU policyStatementAction := policyStatement.GetOrCreateActions() policyStatementAction.SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE) - policyStatementAction.GetOrCreateBgpActions().GetOrCreateSetCommunity().SetOptions(oc.BgpPolicy_BgpSetCommunityOptionType_ADD) - policyStatementAction.GetOrCreateBgpActions().GetOrCreateSetCommunity().GetOrCreateReference().SetCommunitySetRef(communitySetName) - + if !deviations.BgpCommunitySetRefsUnsupported(dut) { + policyStatementAction.GetOrCreateBgpActions().GetOrCreateSetCommunity().SetOptions(oc.BgpPolicy_BgpSetCommunityOptionType_ADD) + policyStatementAction.GetOrCreateBgpActions().GetOrCreateSetCommunity().GetOrCreateReference().SetCommunitySetRef(communitySetName) + } gnmi.Replace(t, dut, policyPath.Config(), redistributePolicyDefinition) + if deviations.BgpCommunitySetRefsUnsupported(dut) { + switch dut.Vendor() { + case ondatra.CISCO: + cfgplugins.DeviationCiscoRoutingPolicyBGPActionSetCommunity(t, dut, redistributeStaticPolicyName, policyStatementName, communitySetName) + } + } if deviations.TableConnectionsUnsupported(dut) { gnmi.Replace(t, dut, bgpPath.Config(), []string{redistributeStaticPolicyName}) @@ -1017,12 +1074,12 @@ func redistributeStaticRoutePolicyWithTagSet(t *testing.T, dut *ondatra.DUTDevic redistributeStaticPolicyName := redistributeStaticPolicyNameV4 tagSetName := "tag-set-v4" policyStatementName := policyStatementNameV4 - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() if !isV4 { redistributeStaticPolicyName = redistributeStaticPolicyNameV6 tagSetName = "tag-set-v6" policyStatementName = policyStatementNameV6 - bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() } policyPath := gnmi.OC().RoutingPolicy().PolicyDefinition(redistributeStaticPolicyName) @@ -1070,7 +1127,7 @@ func redistributeNullNextHopStaticRoute(t *testing.T, dut *ondatra.DUTDevice, at policyStatementName := policyStatementNameV4 ipRoute := "192.168.20.0/24" routeNextHop := "192.168.1.9" - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv4).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV4_UNICAST).ApplyPolicy().ExportPolicy() if !isV4 { redistributeStaticPolicyName = redistributeStaticPolicyNameV6 tagSetName = "tag-set-v6" @@ -1078,7 +1135,7 @@ func redistributeNullNextHopStaticRoute(t *testing.T, dut *ondatra.DUTDevice, at policyStatementName = policyStatementNameV6 ipRoute = "2024:db8:64:64::/64" routeNextHop = "2001:DB8::9" - bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath = gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() } policyPath := gnmi.OC().RoutingPolicy().PolicyDefinition(redistributeStaticPolicyName) @@ -1105,7 +1162,7 @@ func redistributeNullNextHopStaticRoute(t *testing.T, dut *ondatra.DUTDevice, at attachTagSetToStaticRoute(t, dut, ipRoute, tagSetName) } ipStaticRouteNextHop := ipStaticRoute.GetOrCreateNextHop("0") - ipStaticRouteNextHop.SetNextHop(oc.LocalRouting_LOCAL_DEFINED_NEXT_HOP_DROP) + ipStaticRouteNextHop.SetNextHop(oc.UnionString("DROP")) gnmi.Update(t, dut, staticPath.Config(), networkInstanceProtocolStatic) redistributePolicy := dutOcRoot.GetOrCreateRoutingPolicy() @@ -1193,10 +1250,16 @@ func redistributeIPv6StaticRoutePolicy(t *testing.T, dut *ondatra.DUTDevice, ate gnmi.Replace(t, dut, policyPath.Config(), redistributePolicyDefinition) if deviations.TableConnectionsUnsupported(dut) { - bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() + bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, deviations.DefaultBgpInstanceName(dut)).Bgp().Neighbor(atePort1.IPv6).AfiSafi(oc.BgpTypes_AFI_SAFI_TYPE_IPV6_UNICAST).ApplyPolicy().ExportPolicy() gnmi.Replace(t, dut, bgpPath.Config(), []string{redistributeStaticPolicyNameV6}) } else { configureTableConnection(t, dut, !isV4, metricPropagate, redistributeStaticPolicyNameV6, oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE) + if deviations.TcAttributePropagationUnsupported(dut) { + switch dut.Vendor() { + case ondatra.CISCO: + cfgplugins.DeviationCiscoRoutingPolicyBGPActionSetMed(t, dut, redistributeStaticPolicyNameV6, "statement-v6", "prefix-set-v6", medIPv6, "igp") + } + } } sendTraffic(t, ate.OTG()) @@ -1217,7 +1280,7 @@ func validatePrefixASN(t *testing.T, ate *ondatra.ATEDevice, isV4 bool, bgpPeerN if isV4 { prefixPath := gnmi.OTG().BgpPeer(bgpPeerName).UnicastIpv4PrefixAny() - prefix, ok := gnmi.WatchAll(t, ate.OTG(), prefixPath.State(), 10*time.Second, func(val *ygnmi.Value[*otgtelemetry.BgpPeer_UnicastIpv4Prefix]) bool { + prefix, ok := gnmi.WatchAll(t, ate.OTG(), prefixPath.State(), 20*time.Second, func(val *ygnmi.Value[*otgtelemetry.BgpPeer_UnicastIpv4Prefix]) bool { prefix, _ := val.Val() if prefix.GetAddress() == subnet { foundPrefix = true @@ -1233,7 +1296,7 @@ func validatePrefixASN(t *testing.T, ate *ondatra.ATEDevice, isV4 bool, bgpPeerN } } else { prefixPath := gnmi.OTG().BgpPeer(bgpPeerName).UnicastIpv6PrefixAny() - prefix, ok := gnmi.WatchAll(t, ate.OTG(), prefixPath.State(), 10*time.Second, func(val *ygnmi.Value[*otgtelemetry.BgpPeer_UnicastIpv6Prefix]) bool { + prefix, ok := gnmi.WatchAll(t, ate.OTG(), prefixPath.State(), 20*time.Second, func(val *ygnmi.Value[*otgtelemetry.BgpPeer_UnicastIpv6Prefix]) bool { prefix, _ := val.Val() if prefix.GetAddress() == subnet { foundPrefix = true @@ -1374,7 +1437,7 @@ func validateRedistributeRouteWithTagSet(t *testing.T, dut *ondatra.DUTDevice, a policyStatementName = policyStatementNameV6 } - if !deviations.TableConnectionsUnsupported(dut) { + if !deviations.TableConnectionsUnsupported(dut) && !deviations.TcSubscriptionUnsupported(dut) { tcState := gnmi.Get(t, dut, gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).TableConnection( oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_STATIC, oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, @@ -1434,7 +1497,7 @@ func validateRedistributeNullNextHopStaticRoute(t *testing.T, dut *ondatra.DUTDe nextHop = "2001:db8::9" } - if !deviations.TableConnectionsUnsupported(dut) { + if !deviations.TableConnectionsUnsupported(dut) && !deviations.TcSubscriptionUnsupported(dut) { tcState := gnmi.Get(t, dut, gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).TableConnection( oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_STATIC, oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, @@ -1478,55 +1541,71 @@ func validateRedistributeNullNextHopStaticRoute(t *testing.T, dut *ondatra.DUTDe // Used by multiple IPv4 test validations for route presence and MED value func validateLearnedIPv4Prefix(t *testing.T, ate *ondatra.ATEDevice, bgpPeerName, subnet string, expectedMED uint32, shouldBePresent bool) { - - _, ok := gnmi.WatchAll(t, ate.OTG(), gnmi.OTG().BgpPeer(bgpPeerName).UnicastIpv4PrefixAny().State(), + // Track if the expected prefix is found + found := false + medMatched := false + var gotMed uint32 + gnmi.WatchAll(t, ate.OTG(), gnmi.OTG().BgpPeer(bgpPeerName).UnicastIpv4PrefixAny().State(), time.Minute, func(v *ygnmi.Value[*otgtelemetry.BgpPeer_UnicastIpv4Prefix]) bool { - return v.IsPresent() - }).Await(t) + if !v.IsPresent() { + return false + } - if !ok { - t.Errorf("No BGP prefixes learnt") - } + bgpPrefix, _ := v.Val() + if bgpPrefix.Address != nil && bgpPrefix.GetAddress() == subnet { + found = true + t.Logf("Prefix received on OTG is correct, got prefix %v, want prefix %v", bgpPrefix.GetAddress(), subnet) + t.Logf("Prefix MED %d", bgpPrefix.GetMultiExitDiscriminator()) - bgpPrefixes := gnmi.GetAll(t, ate.OTG(), gnmi.OTG().BgpPeer(bgpPeerName).UnicastIpv4PrefixAny().State()) - found := false - for _, bgpPrefix := range bgpPrefixes { - if bgpPrefix.Address != nil && bgpPrefix.GetAddress() == subnet { - found = true - t.Logf("Prefix recevied on OTG is correct, got prefix %v, want prefix %v", bgpPrefix, subnet) - t.Logf("Prefix MED %d", bgpPrefix.GetMultiExitDiscriminator()) - if bgpPrefix.GetMultiExitDiscriminator() != expectedMED { - t.Errorf("For Prefix %v, got MED %d want MED %d", bgpPrefix.GetAddress(), bgpPrefix.GetMultiExitDiscriminator(), expectedMED) + if gotMed = bgpPrefix.GetMultiExitDiscriminator(); gotMed == expectedMED { + medMatched = true + return true + } } - break - } - } + return false + }).Await(t) - if !found { - t.Errorf("No Route found for prefix %s", subnet) + if shouldBePresent { + if !found { + t.Errorf("No Route found for prefix %s", subnet) + } else if !medMatched { + t.Errorf("For Prefix %v, got MED %d, want MED %d", subnet, gotMed, expectedMED) + } } } // Used by multiple IPv6 test validations for route presence and MED value func validateLearnedIPv6Prefix(t *testing.T, ate *ondatra.ATEDevice, bgpPeerName, subnet string, expectedMED uint32, shouldBePresent bool) { - time.Sleep(5 * time.Second) - - bgpPrefixes := gnmi.GetAll[*otgtelemetry.BgpPeer_UnicastIpv6Prefix](t, ate.OTG(), gnmi.OTG().BgpPeer(bgpPeerName).UnicastIpv6PrefixAny().State()) + // Track if the expected prefix is found found := false - for _, bgpPrefix := range bgpPrefixes { - if bgpPrefix.Address != nil && bgpPrefix.GetAddress() == subnet { - found = true - t.Logf("Prefix recevied on OTG is correct, got prefix %v, want prefix %v", bgpPrefix, subnet) - t.Logf("Prefix MED %d", bgpPrefix.GetMultiExitDiscriminator()) - if bgpPrefix.GetMultiExitDiscriminator() != expectedMED { - t.Errorf("For Prefix %v, got MED %d want MED %d", bgpPrefix.GetAddress(), bgpPrefix.GetMultiExitDiscriminator(), expectedMED) + medMatched := false + var gotMed uint32 + gnmi.WatchAll(t, ate.OTG(), gnmi.OTG().BgpPeer(bgpPeerName).UnicastIpv6PrefixAny().State(), + time.Minute, func(v *ygnmi.Value[*otgtelemetry.BgpPeer_UnicastIpv6Prefix]) bool { + if !v.IsPresent() { + return false } - break - } - } - if !found { - t.Errorf("No Route found for prefix %s", subnet) + bgpPrefix, _ := v.Val() + if bgpPrefix.Address != nil && bgpPrefix.GetAddress() == subnet { + found = true + t.Logf("Prefix received on OTG is correct, got prefix %v, want prefix %v", bgpPrefix.GetAddress(), subnet) + t.Logf("Prefix MED %d", bgpPrefix.GetMultiExitDiscriminator()) + + if gotMed = bgpPrefix.GetMultiExitDiscriminator(); gotMed == expectedMED { + medMatched = true + return true + } + } + return false + }).Await(t) + + if shouldBePresent { + if !found { + t.Errorf("No Route found for prefix %s", subnet) + } else if !medMatched { + t.Errorf("For Prefix %v, got MED %d, want MED %d", subnet, gotMed, expectedMED) + } } } @@ -1901,3 +1980,18 @@ func configureRoutingPolicyTagSet(t *testing.T, dut *ondatra.DUTDevice, isV4 boo t.Fatalf("Unexpected error updating SRL routing-policy tag-set: %v", err) } } + +// Configure default reject route-policy with no entries +func configureRejectRedistributionPolicy(t *testing.T, dut *ondatra.DUTDevice, isV4 bool) { + t.Helper() + + dutOcRoot := &oc.Root{} + rp := dutOcRoot.GetOrCreateRoutingPolicy() + + redistributeStaticPolicyName := redistributeStaticPolicyNameV4 + if !isV4 { + redistributeStaticPolicyName = redistributeStaticPolicyNameV6 + } + rpConfPath := gnmi.OC().RoutingPolicy() + gnmi.Replace(t, dut, rpConfPath.PolicyDefinition(redistributeStaticPolicyName).Config(), rp.GetOrCreatePolicyDefinition(redistributeStaticPolicyName)) +} diff --git a/feature/platform/storage/README.md b/feature/platform/storage/README.md new file mode 100644 index 00000000000..8c28951493f --- /dev/null +++ b/feature/platform/storage/README.md @@ -0,0 +1,53 @@ +# Storage-1.1: Storage File System Check + +## Summary + +Storage File System Check + +## Testbed type + +* dut.testbed + +## Procedure + +* For each storage file system collect and verify if the following path are not empty and returns valid values. Log the values returned. + + * /components/component/storage/state/counters/soft-read-error-rate: + Check if the response is a counter64 + * /components/component/storage/state/counters/reallocated-sectors: + Check if the response is a counter64 + * /components/component/storage/state/counters/end-to-end-error: + Check if the response is a counter64 + * /components/component/storage/state/counters/offline-uncorrectable-sectors-count: + Check if the response is a counter64 + * /components/component/storage/state/counters/life-left: + Check if the response is an integer + * /components/component/storage/state/counters/percentage-used: + Check if the response is an integer + +## OpenConfig Path and RPC Coverage + +```yaml + +paths: + + /components/component/storage/state/counters/soft-read-error-rate: + platform_type: [ "STORAGE" ] + /components/component/storage/state/counters/reallocated-sectors: + platform_type: [ "STORAGE" ] + /components/component/storage/state/counters/end-to-end-error: + platform_type: [ "STORAGE" ] + /components/component/storage/state/counters/offline-uncorrectable-sectors-count: + platform_type: [ "STORAGE" ] + /components/component/storage/state/counters/life-left: + platform_type: [ "STORAGE" ] + /components/component/storage/state/counters/percentage-used: + platform_type: [ "STORAGE" ] + + +rpcs: + gnmi: + gNMI.Get: +``` +## Required DUT platform +Single DUT diff --git a/feature/qos/tests/qos_policy_config_test/qos_policy_config_test.go b/feature/qos/tests/qos_policy_config_test/qos_policy_config_test.go index 267cb0bddee..46f6be23745 100644 --- a/feature/qos/tests/qos_policy_config_test/qos_policy_config_test.go +++ b/feature/qos/tests/qos_policy_config_test/qos_policy_config_test.go @@ -1705,27 +1705,35 @@ func testJuniperSchedulerPoliciesConfig(t *testing.T) { cases := []struct { desc string + queueName string targetGroup string }{{ desc: "output-interface-BE1", + queueName: queues.BE1, targetGroup: "BE1", }, { desc: "output-interface-BE0", + queueName: queues.BE0, targetGroup: "BE0", }, { desc: "output-interface-AF1", + queueName: queues.AF1, targetGroup: "AF1", }, { desc: "output-interface-AF2", + queueName: queues.AF2, targetGroup: "AF2", }, { desc: "output-interface-AF3", + queueName: queues.AF3, targetGroup: "AF3", }, { desc: "output-interface-AF4", + queueName: queues.AF4, targetGroup: "AF4", }, { desc: "output-interface-NC1", + queueName: queues.NC1, targetGroup: "NC1", }} @@ -1737,7 +1745,7 @@ func testJuniperSchedulerPoliciesConfig(t *testing.T) { schedulerPolicy.SetName("scheduler") queue := output.GetOrCreateQueue("scheduler") queue.SetQueueManagementProfile("DropProfile") - queue.SetName(tc.targetGroup) + queue.SetName(tc.queueName) gnmi.Replace(t, dut, gnmi.OC().Qos().Config(), q) }) diff --git a/go.mod b/go.mod index 9965d7ca82f..d4f361a0c74 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,8 @@ require ( cloud.google.com/go/pubsub v1.36.1 cloud.google.com/go/storage v1.38.0 github.com/cisco-open/go-p4 v0.1.2 - github.com/go-git/go-billy/v5 v5.5.0 - github.com/go-git/go-git/v5 v5.11.0 + github.com/go-git/go-billy/v5 v5.6.0 + github.com/go-git/go-git/v5 v5.13.0 github.com/golang/glog v1.2.1 github.com/google/go-cmp v0.6.0 github.com/google/go-github/v50 v50.1.0 @@ -42,7 +42,7 @@ require ( github.com/yoheimuta/go-protoparser/v4 v4.9.0 github.com/yuin/goldmark v1.4.13 golang.org/x/crypto v0.31.0 - golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 golang.org/x/text v0.21.0 google.golang.org/api v0.171.0 google.golang.org/grpc v1.66.2 @@ -65,7 +65,7 @@ require ( cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.6 // indirect dario.cat/mergo v1.0.0 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/ProtonMail/go-crypto v1.1.3 // indirect github.com/aristanetworks/arista-ceoslab-operator/v2 v2.1.2 // indirect github.com/carlmontanari/difflibgo v0.0.0-20210718194309-31b9e131c298 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect @@ -74,7 +74,7 @@ require ( github.com/cloudflare/circl v1.3.7 // indirect github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b // indirect github.com/creack/pty v1.1.18 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/cyphar/filepath-securejoin v0.2.5 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/drivenets/cdnos-controller v1.7.4 // indirect github.com/emicklei/go-restful/v3 v3.10.2 // indirect @@ -134,9 +134,9 @@ require ( github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/scrapli/scrapligo v1.1.11 // indirect github.com/scrapli/scrapligocfg v1.0.0 // indirect - github.com/sergi/go-diff v1.1.0 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/sirikothe/gotextfsm v1.0.1-0.20200816110946-6aa2cfd355e4 // indirect - github.com/skeema/knownhosts v1.2.1 // indirect + github.com/skeema/knownhosts v1.3.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect @@ -152,13 +152,13 @@ require ( go.opentelemetry.io/otel/trace v1.24.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/mod v0.18.0 // indirect - golang.org/x/net v0.29.0 // indirect + golang.org/x/mod v0.19.0 // indirect + golang.org/x/net v0.33.0 // indirect golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.27.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.22.0 // indirect + golang.org/x/tools v0.23.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect diff --git a/go.sum b/go.sum index f5b7340ff7c..4dab81848e5 100644 --- a/go.sum +++ b/go.sum @@ -1215,8 +1215,8 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= +github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -1240,7 +1240,6 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/carlmontanari/difflibgo v0.0.0-20210718194309-31b9e131c298 h1:Y8rTum6LZ8oP/2aC+OaaP76OCjHbunKMkim81mzNCH0= github.com/carlmontanari/difflibgo v0.0.0-20210718194309-31b9e131c298/go.mod h1:+3MuSIeC3qmdSesR12cTLeb47R/Vvo+bHdB6hC5HShk= github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= @@ -1262,7 +1261,6 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/cisco-open/go-p4 v0.1.2 h1:ycRluNWG3yz86pnEg78d87C25rx7fJQvEv5l77TKfQ0= github.com/cisco-open/go-p4 v0.1.2/go.mod h1:pXywOqfJvcYm7PB2qj8Ib3w9EvAAL44xLbGaUKpeX4Y= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -1287,8 +1285,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.2.5 h1:6iR5tXJ/e6tJZzzdMc1km3Sa7RRIVBKAK32O2s7AYfo= +github.com/cyphar/filepath-securejoin v0.2.5/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -1304,8 +1302,8 @@ github.com/eapache/channels v1.1.0 h1:F1taHcn7/F0i8DYqKXJnyhJcVpp2kgFcNePxXtnyu4 github.com/eapache/channels v1.1.0/go.mod h1:jMm2qB5Ubtg9zLd+inMZd2/NUvXgzmWXsDaLyQIGfH0= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/elazarl/goproxy v1.2.1 h1:njjgvO6cRG9rIqN2ebkqy6cQz2Njkx7Fsfv/zIZqgug= +github.com/elazarl/goproxy v1.2.1/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= github.com/emicklei/go-restful/v3 v3.10.2 h1:hIovbnmBTLjHXkqEBUz3HGpXZdM7ZrE9fJIZIqlJLqE= github.com/emicklei/go-restful/v3 v3.10.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -1350,8 +1348,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= +github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= @@ -1359,12 +1357,12 @@ github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2H github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8= +github.com/go-git/go-billy/v5 v5.6.0/go.mod h1:sFDq7xD3fn3E0GOwUSZqHo9lrkmx8xJhA0ZrfvjBRGM= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= -github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= +github.com/go-git/go-git/v5 v5.13.0 h1:vLn5wlGIh/X78El6r3Jr+30W16Blk0CTcxTYcYPWi5E= +github.com/go-git/go-git/v5 v5.13.0/go.mod h1:Wjo7/JyVKtQgUNdXYXIepzWfJQkUEIGvkvVkiXRR/zw= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -1645,8 +1643,8 @@ github.com/networkop/meshnet-cni v0.3.1-0.20230525201116-d7c306c635cf/go.mod h1: github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU= github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/open-traffic-generator/keng-operator v0.3.28 h1:FpDe1wtGODN7ByAhF2LxMIlbDqb5yVmbSE5Y49nyc28= github.com/open-traffic-generator/keng-operator v0.3.28/go.mod h1:+koaOnSyrJHdzxnaye+M6k+ZbszQlWI9u3tMxSpORNA= github.com/open-traffic-generator/snappi/gosnappi v1.3.0 h1:6SFSuZLTuncLW1xMcBG5HEvVCWh9wVuxiYb71C3yj7s= @@ -1771,16 +1769,16 @@ github.com/scrapli/scrapligo v1.1.11 h1:ATvpF2LDoxnd/HlfSj5A0IiJDro75D6nuCx8m6S4 github.com/scrapli/scrapligo v1.1.11/go.mod h1:XrSom4Gd87B110QkyTaTkuL2EbzEVOlgCJGKIZa6wns= github.com/scrapli/scrapligocfg v1.0.0 h1:540SuGqqM6rKN87SLCfR54IageQ6s3a/ZOycGRgbbak= github.com/scrapli/scrapligocfg v1.0.0/go.mod h1:9+6k9dQeIqEZEg6EK5YXEjuVb7h+nvvel26CY1RGjy4= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirikothe/gotextfsm v1.0.1-0.20200816110946-6aa2cfd355e4 h1:FHUL2HofYJuslFOQdy/JjjP36zxqIpd/dcoiwLMIs7k= github.com/sirikothe/gotextfsm v1.0.1-0.20200816110946-6aa2cfd355e4/go.mod h1:CJYqpTg9u5VPCoD0VEl9E68prCIiWQD8m457k098DdQ= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= -github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= +github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -1820,8 +1818,9 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/vishvananda/netlink v1.2.1-beta.2 h1:Llsql0lnQEbHj0I1OuKyp8otXp0r3q0mPkuhwHfStVs= @@ -1907,7 +1906,6 @@ golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= @@ -1937,8 +1935,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM= -golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1984,8 +1982,8 @@ golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2057,8 +2055,8 @@ golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= -golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= +golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2334,8 +2332,8 @@ golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2741,7 +2739,6 @@ gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/internal/cfgplugins/bgp_policy.go b/internal/cfgplugins/bgp_policy.go new file mode 100644 index 00000000000..91b39b39b22 --- /dev/null +++ b/internal/cfgplugins/bgp_policy.go @@ -0,0 +1,63 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cfgplugins + +import ( + "fmt" + "testing" + + "github.com/openconfig/featureprofiles/internal/helpers" + "github.com/openconfig/ondatra" +) + +// DeviationCiscoRoutingPolicyBGPActionSetCommunity is used as an alternative to +// /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) { + //route-policy route-policy-v4 + // #statement-name statement-v4 + // if destination in prefix-set-v4 then + // set med 104 + // set origin igp + // endif + // end-policy + cliConfig := fmt.Sprintf("route-policy %s\n #statement-name %v\n if destination in %v then\n", policyName, statement, prefixSetName) + + if setMed != 0 { + cliConfig += fmt.Sprintf(" set med %d\n", setMed) + } + if origin != "" { + cliConfig += fmt.Sprintf(" set origin %v\n", origin) + } + cliConfig += " done\n endif\nend-policy\n" + helpers.GnmiCLIConfig(t, dut, cliConfig) +} + +// DeviationCiscoRoutingPolicyBGPActionSetCommunity 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 DeviationCiscoRoutingPolicyBGPActionSetCommunity(t *testing.T, dut *ondatra.DUTDevice, policyName string, statement string, community string) { + // route-policy route-policy-v4 + // #statement-name statement-v4 + // set community community-set-v4 + // done + // end-policy + cliConfig := fmt.Sprintf("route-policy %s\n #statement-name %v\n", policyName, statement) + if community != "" { + cliConfig += fmt.Sprintf(" set community %v\n", community) + } + cliConfig += " done\nend-policy\n" + helpers.GnmiCLIConfig(t, dut, cliConfig) +} diff --git a/internal/cfgplugins/tableconnections.go b/internal/cfgplugins/tableconnections.go new file mode 100644 index 00000000000..34459758999 --- /dev/null +++ b/internal/cfgplugins/tableconnections.go @@ -0,0 +1,48 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cfgplugins + +import ( + "fmt" + "testing" + + "github.com/openconfig/featureprofiles/internal/helpers" + "github.com/openconfig/ondatra" +) + +// DeviationCiscoTableConnectionsStatictoBGPMetricPropagation is used as an alternative to +// /network-instances/network-instance/table-connections/table-connection/config/disable-metric-propagation. +// In OC this path is set to 'false' by default, therefore enabling table-connections to propagate metrics +// from one protocol to another. This deviation implements CLI to perform the equivalent function. +func DeviationCiscoTableConnectionsStatictoBGPMetricPropagation(t *testing.T, dut *ondatra.DUTDevice, isV4 bool, metric int, routePolicyName string) { + // router bgp 64512 + // + // address-family ipv4 unicast + // redistribute static metric 104 + // ! + // address-family ipv6 unicast + // redistribute static metric 106 + var aftype string + if isV4 { + aftype = "ipv4" + } else { + aftype = "ipv6" + } + cliConfig := fmt.Sprintf("router bgp 64512\n address-family %v unicast\n redistribute static metric %d\n !\n!\n", aftype, metric) + if routePolicyName != "" { + cliConfig = fmt.Sprintf("router bgp 64512\n address-family %v unicast\n redistribute static metric %d route-policy %s\n !\n!\n", aftype, metric, routePolicyName) + } + helpers.GnmiCLIConfig(t, dut, cliConfig) +} diff --git a/internal/deviations/deviations.go b/internal/deviations/deviations.go index b72497f020e..3db593a0e27 100644 --- a/internal/deviations/deviations.go +++ b/internal/deviations/deviations.go @@ -1265,6 +1265,34 @@ func EnableTableConnections(dut *ondatra.DUTDevice) bool { return lookupDUTDeviations(dut).GetEnableTableConnections() } +// TcDefaultImportPolicyUnsupported returns true if default import policy for table connection is unsupported +func TcDefaultImportPolicyUnsupported(dut *ondatra.DUTDevice) bool { + return lookupDUTDeviations(dut).GetTcDefaultImportPolicyUnsupported() +} + +// TcMetricPropagationUnsupported returns true if metric propagation for table connection is unsupported +func TcMetricPropagationUnsupported(dut *ondatra.DUTDevice) bool { + return lookupDUTDeviations(dut).GetTcMetricPropagationUnsupported() +} + +// TcAttributePropagationUnsupported returns true if attribute propagation for table connection is unsupported +func TcAttributePropagationUnsupported(dut *ondatra.DUTDevice) bool { + return lookupDUTDeviations(dut).GetTcAttributePropagationUnsupported() +} + +// TcSubscriptionUnsupported returns true if subscription for table connection is unsupported +func TcSubscriptionUnsupported(dut *ondatra.DUTDevice) bool { + return lookupDUTDeviations(dut).GetTcSubscriptionUnsupported() +} + +// DefaultBgpInstanceName returns bgp instance name as set in deviation to override default value "DEFAULT" +func DefaultBgpInstanceName(dut *ondatra.DUTDevice) string { + if dbin := lookupDUTDeviations(dut).GetDefaultBgpInstanceName(); dbin != "" { + return dbin + } + return "DEFAULT" +} + // RequireZrOperMode returns true for the devices that require a mandatory value in operational-mode leaf for optical-channel func RequireZrOperMode(dut *ondatra.DUTDevice) bool { return lookupDUTDeviations(dut).GetRequireZrOperMode() diff --git a/proto/metadata.proto b/proto/metadata.proto index 60a3af0d7f0..2d998bd06e3 100644 --- a/proto/metadata.proto +++ b/proto/metadata.proto @@ -117,8 +117,7 @@ message Metadata { // Device requires additional config for ECN. // Juniper: partnerissuetracker.corp.google.com/277657269 bool ecn_profile_required_definition = 25; - // Set true for device that does not support interface ipv6 discarded packet - // statistics. + // Device does not support interface ipv6 discarded packet statistics. // Juniper: partnerissuetracker.corp.google.com/277762075 bool ipv6_discarded_pkts_unsupported = 26; // Device does not support drop and weight leaves under queue management @@ -127,6 +126,7 @@ message Metadata { bool drop_weight_leaves_unsupported = 27; // Config pushed through origin CLI takes precedence over config pushed // through origin OC. + // Juniper: partnerissuetracker.corp.google.com/270474468 bool cli_takes_precedence_over_oc = 29; // Device does not support weight above 100. // Juniper: partnerissuetracker.corp.google.com/277066804 @@ -143,12 +143,15 @@ message Metadata { bool interface_counters_from_container = 33; // Use this deviation when the device does not support a mix of tagged and // untagged subinterfaces. + // Juniper: partnerissuetracker.corp.google.com/267822588 bool no_mix_of_tagged_and_untagged_subinterfaces = 34; // Device does not support reporting software version according to the // requirements in gNMI-1.10. + // Juniper: partnerissuetracker.corp.google.com/278764547 bool sw_version_unsupported = 37; // Device requires explicit interface ref configuration when applying // features to interface. + // Juniper: partnerissuetracker.corp.google.com/267691571 bool explicit_interface_ref_definition = 38; // Device does not support telemetry path /components/component/storage. // Juniper: partnerissuetracker.corp.google.com/284239001 @@ -161,6 +164,7 @@ message Metadata { // Nokia: partnerissuetracker.corp.google.com/260928639 bool explicit_interface_in_default_vrf = 42; // Skip checking QOS Dropped octets stats for interface. + // Juniper: partnerissuetracker.corp.google.com/282686094 bool qos_dropped_octets = 43; // Device is missing subinterface packet counters for IPv4/IPv6. bool subinterface_packet_counters_missing = 44; @@ -667,12 +671,28 @@ message Metadata { // Juniper: b/358534837 // Devices that do not support setting med value using union type in OC. bool bgp_set_med_v7_unsupported = 241; + // Cisco: b/388980373 + // default import policy for table connection unsupported is set to true for devices that do not support default import policy. + bool tc_default_import_policy_unsupported = 242; + // Cisco: b/388955361 + // table connection metric propagation unsupported is set to true for devices that do not support metric propagation. + bool tc_metric_propagation_unsupported = 243; + // Cisco: b/388980376 + // table connection attribute propagation unsupported is set to true for devices that do not support attribute propagation. + bool tc_attribute_propagation_unsupported = 244; + // Cisco: b/388955364 + // table connection subscription unsupported is set to true for devices that do not support subscription for table connection leaves. + bool tc_subscription_unsupported = 245; + // Cisco: b/388983709 + // default bgp instance name is used to set bgp instance name value other than DEFAULT + string default_bgp_instance_name = 246; // Nokia: b/383369830 // RequireZrOperMode returns true if a user-configured value is required in operational-mode for the optical-channel - bool require_zr_oper_mode = 242; + bool require_zr_oper_mode = 247; // Nokia: b/383075189 // ExplicitDcoConfig returns true if explicit configurations are required in module-functional-type for the transceiver - bool explicit_dco_config = 243; + bool explicit_dco_config = 248; + // Reserved field numbers and identifiers. reserved 84, 9, 28, 20, 90, 97, 55, 89, 19, 36, 35, 40, 173; } diff --git a/proto/metadata_go_proto/metadata.pb.go b/proto/metadata_go_proto/metadata.pb.go index 034887fb389..3ed63eeb632 100644 --- a/proto/metadata_go_proto/metadata.pb.go +++ b/proto/metadata_go_proto/metadata.pb.go @@ -398,8 +398,7 @@ type Metadata_Deviations struct { // Device requires additional config for ECN. // Juniper: partnerissuetracker.corp.google.com/277657269 EcnProfileRequiredDefinition bool `protobuf:"varint,25,opt,name=ecn_profile_required_definition,json=ecnProfileRequiredDefinition,proto3" json:"ecn_profile_required_definition,omitempty"` - // Set true for device that does not support interface ipv6 discarded packet - // statistics. + // Device does not support interface ipv6 discarded packet statistics. // Juniper: partnerissuetracker.corp.google.com/277762075 Ipv6DiscardedPktsUnsupported bool `protobuf:"varint,26,opt,name=ipv6_discarded_pkts_unsupported,json=ipv6DiscardedPktsUnsupported,proto3" json:"ipv6_discarded_pkts_unsupported,omitempty"` // Device does not support drop and weight leaves under queue management @@ -408,6 +407,7 @@ type Metadata_Deviations struct { DropWeightLeavesUnsupported bool `protobuf:"varint,27,opt,name=drop_weight_leaves_unsupported,json=dropWeightLeavesUnsupported,proto3" json:"drop_weight_leaves_unsupported,omitempty"` // Config pushed through origin CLI takes precedence over config pushed // through origin OC. + // Juniper: partnerissuetracker.corp.google.com/270474468 CliTakesPrecedenceOverOc bool `protobuf:"varint,29,opt,name=cli_takes_precedence_over_oc,json=cliTakesPrecedenceOverOc,proto3" json:"cli_takes_precedence_over_oc,omitempty"` // Device does not support weight above 100. // Juniper: partnerissuetracker.corp.google.com/277066804 @@ -424,12 +424,15 @@ type Metadata_Deviations struct { InterfaceCountersFromContainer bool `protobuf:"varint,33,opt,name=interface_counters_from_container,json=interfaceCountersFromContainer,proto3" json:"interface_counters_from_container,omitempty"` // Use this deviation when the device does not support a mix of tagged and // untagged subinterfaces. + // Juniper: partnerissuetracker.corp.google.com/267822588 NoMixOfTaggedAndUntaggedSubinterfaces bool `protobuf:"varint,34,opt,name=no_mix_of_tagged_and_untagged_subinterfaces,json=noMixOfTaggedAndUntaggedSubinterfaces,proto3" json:"no_mix_of_tagged_and_untagged_subinterfaces,omitempty"` // Device does not support reporting software version according to the // requirements in gNMI-1.10. + // Juniper: partnerissuetracker.corp.google.com/278764547 SwVersionUnsupported bool `protobuf:"varint,37,opt,name=sw_version_unsupported,json=swVersionUnsupported,proto3" json:"sw_version_unsupported,omitempty"` // Device requires explicit interface ref configuration when applying // features to interface. + // Juniper: partnerissuetracker.corp.google.com/267691571 ExplicitInterfaceRefDefinition bool `protobuf:"varint,38,opt,name=explicit_interface_ref_definition,json=explicitInterfaceRefDefinition,proto3" json:"explicit_interface_ref_definition,omitempty"` // Device does not support telemetry path /components/component/storage. // Juniper: partnerissuetracker.corp.google.com/284239001 @@ -442,6 +445,7 @@ type Metadata_Deviations struct { // Nokia: partnerissuetracker.corp.google.com/260928639 ExplicitInterfaceInDefaultVrf bool `protobuf:"varint,42,opt,name=explicit_interface_in_default_vrf,json=explicitInterfaceInDefaultVrf,proto3" json:"explicit_interface_in_default_vrf,omitempty"` // Skip checking QOS Dropped octets stats for interface. + // Juniper: partnerissuetracker.corp.google.com/282686094 QosDroppedOctets bool `protobuf:"varint,43,opt,name=qos_dropped_octets,json=qosDroppedOctets,proto3" json:"qos_dropped_octets,omitempty"` // Device is missing subinterface packet counters for IPv4/IPv6. SubinterfacePacketCountersMissing bool `protobuf:"varint,44,opt,name=subinterface_packet_counters_missing,json=subinterfacePacketCountersMissing,proto3" json:"subinterface_packet_counters_missing,omitempty"` @@ -948,12 +952,27 @@ type Metadata_Deviations struct { // Juniper: b/358534837 // Devices that do not support setting med value using union type in OC. BgpSetMedV7Unsupported bool `protobuf:"varint,241,opt,name=bgp_set_med_v7_unsupported,json=bgpSetMedV7Unsupported,proto3" json:"bgp_set_med_v7_unsupported,omitempty"` + // Cisco: b/388980373 + // default import policy for table connection unsupported is set to true for devices that do not support default import policy. + TcDefaultImportPolicyUnsupported bool `protobuf:"varint,242,opt,name=tc_default_import_policy_unsupported,json=tcDefaultImportPolicyUnsupported,proto3" json:"tc_default_import_policy_unsupported,omitempty"` + // Cisco: b/388955361 + // table connection metric propagation unsupported is set to true for devices that do not support metric propagation. + TcMetricPropagationUnsupported bool `protobuf:"varint,243,opt,name=tc_metric_propagation_unsupported,json=tcMetricPropagationUnsupported,proto3" json:"tc_metric_propagation_unsupported,omitempty"` + // Cisco: b/388980376 + // table connection attribute propagation unsupported is set to true for devices that do not support attribute propagation. + TcAttributePropagationUnsupported bool `protobuf:"varint,244,opt,name=tc_attribute_propagation_unsupported,json=tcAttributePropagationUnsupported,proto3" json:"tc_attribute_propagation_unsupported,omitempty"` + // Cisco: b/388955364 + // table connection subscription unsupported is set to true for devices that do not support subscription for table connection leaves. + TcSubscriptionUnsupported bool `protobuf:"varint,245,opt,name=tc_subscription_unsupported,json=tcSubscriptionUnsupported,proto3" json:"tc_subscription_unsupported,omitempty"` + // Cisco: b/388983709 + // default bgp instance name is used to set bgp instance name value other than DEFAULT + DefaultBgpInstanceName string `protobuf:"bytes,246,opt,name=default_bgp_instance_name,json=defaultBgpInstanceName,proto3" json:"default_bgp_instance_name,omitempty"` // Nokia: b/383369830 // RequireZrOperMode returns true if a user-configured value is required in operational-mode for the optical-channel - RequireZrOperMode bool `protobuf:"varint,242,opt,name=require_zr_oper_mode,json=requireZrOperMode,proto3" json:"require_zr_oper_mode,omitempty"` + RequireZrOperMode bool `protobuf:"varint,247,opt,name=require_zr_oper_mode,json=requireZrOperMode,proto3" json:"require_zr_oper_mode,omitempty"` // Nokia: b/383075189 // ExplicitDcoConfig returns true if explicit configurations are required in module-functional-type for the transceiver - ExplicitDcoConfig bool `protobuf:"varint,243,opt,name=explicit_dco_config,json=explicitDcoConfig,proto3" json:"explicit_dco_config,omitempty"` + ExplicitDcoConfig bool `protobuf:"varint,248,opt,name=explicit_dco_config,json=explicitDcoConfig,proto3" json:"explicit_dco_config,omitempty"` } func (x *Metadata_Deviations) Reset() { @@ -2528,6 +2547,41 @@ func (x *Metadata_Deviations) GetBgpSetMedV7Unsupported() bool { return false } +func (x *Metadata_Deviations) GetTcDefaultImportPolicyUnsupported() bool { + if x != nil { + return x.TcDefaultImportPolicyUnsupported + } + return false +} + +func (x *Metadata_Deviations) GetTcMetricPropagationUnsupported() bool { + if x != nil { + return x.TcMetricPropagationUnsupported + } + return false +} + +func (x *Metadata_Deviations) GetTcAttributePropagationUnsupported() bool { + if x != nil { + return x.TcAttributePropagationUnsupported + } + return false +} + +func (x *Metadata_Deviations) GetTcSubscriptionUnsupported() bool { + if x != nil { + return x.TcSubscriptionUnsupported + } + return false +} + +func (x *Metadata_Deviations) GetDefaultBgpInstanceName() string { + if x != nil { + return x.DefaultBgpInstanceName + } + return "" +} + func (x *Metadata_Deviations) GetRequireZrOperMode() bool { if x != nil { return x.RequireZrOperMode @@ -2605,7 +2659,7 @@ var file_metadata_proto_rawDesc = []byte{ 0x74, 0x69, 0x6e, 0x67, 0x1a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6f, 0x6e, 0x64, 0x61, 0x74, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x62, 0x65, - 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xfe, 0x88, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x74, + 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xea, 0x8b, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x6c, 0x61, 0x6e, @@ -2639,7 +2693,7 @@ var file_metadata_proto_rawDesc = []byte{ 0x65, 0x67, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x73, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x67, 0x65, 0x78, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x0e, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x1a, 0xd0, 0x80, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x1a, 0xbc, 0x83, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x70, 0x76, 0x34, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x70, 0x76, 0x34, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, @@ -3657,52 +3711,74 @@ var file_metadata_proto_rawDesc = []byte{ 0x70, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x65, 0x64, 0x5f, 0x76, 0x37, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0xf1, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x62, 0x67, 0x70, 0x53, 0x65, 0x74, 0x4d, 0x65, 0x64, 0x56, 0x37, 0x55, 0x6e, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x5f, 0x7a, 0x72, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, - 0xf2, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5a, - 0x72, 0x4f, 0x70, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x70, - 0x6c, 0x69, 0x63, 0x69, 0x74, 0x5f, 0x64, 0x63, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0xf3, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, - 0x74, 0x44, 0x63, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, 0x04, 0x08, 0x54, 0x10, 0x55, - 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x14, - 0x10, 0x15, 0x4a, 0x04, 0x08, 0x5a, 0x10, 0x5b, 0x4a, 0x04, 0x08, 0x61, 0x10, 0x62, 0x4a, 0x04, - 0x08, 0x37, 0x10, 0x38, 0x4a, 0x04, 0x08, 0x59, 0x10, 0x5a, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, - 0x4a, 0x04, 0x08, 0x24, 0x10, 0x25, 0x4a, 0x04, 0x08, 0x23, 0x10, 0x24, 0x4a, 0x04, 0x08, 0x28, - 0x10, 0x29, 0x4a, 0x06, 0x08, 0xad, 0x01, 0x10, 0xae, 0x01, 0x1a, 0xa0, 0x01, 0x0a, 0x12, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x47, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xfa, 0x01, - 0x0a, 0x07, 0x54, 0x65, 0x73, 0x74, 0x62, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x45, 0x53, - 0x54, 0x42, 0x45, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, 0x55, - 0x54, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, - 0x55, 0x54, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x34, 0x4c, 0x49, 0x4e, 0x4b, 0x53, 0x10, 0x02, 0x12, - 0x1a, 0x0a, 0x16, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x41, - 0x54, 0x45, 0x5f, 0x32, 0x4c, 0x49, 0x4e, 0x4b, 0x53, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x54, - 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x41, 0x54, 0x45, 0x5f, 0x34, - 0x4c, 0x49, 0x4e, 0x4b, 0x53, 0x10, 0x04, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x45, 0x53, 0x54, 0x42, - 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x41, 0x54, 0x45, 0x5f, 0x39, 0x4c, 0x49, 0x4e, 0x4b, - 0x53, 0x5f, 0x4c, 0x41, 0x47, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x45, 0x53, 0x54, 0x42, - 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x41, 0x54, 0x45, 0x5f, 0x32, - 0x4c, 0x49, 0x4e, 0x4b, 0x53, 0x10, 0x06, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x45, 0x53, 0x54, 0x42, - 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x41, 0x54, 0x45, 0x5f, 0x38, 0x4c, 0x49, 0x4e, 0x4b, - 0x53, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, - 0x55, 0x54, 0x5f, 0x34, 0x30, 0x30, 0x5a, 0x52, 0x10, 0x08, 0x22, 0x6d, 0x0a, 0x04, 0x54, 0x61, - 0x67, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x47, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x47, 0x53, - 0x5f, 0x41, 0x47, 0x47, 0x52, 0x45, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x18, - 0x0a, 0x14, 0x54, 0x41, 0x47, 0x53, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x43, 0x45, 0x4e, 0x54, 0x45, - 0x52, 0x5f, 0x45, 0x44, 0x47, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x41, 0x47, 0x53, - 0x5f, 0x45, 0x44, 0x47, 0x45, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x41, 0x47, 0x53, 0x5f, - 0x54, 0x52, 0x41, 0x4e, 0x53, 0x49, 0x54, 0x10, 0x04, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x4f, 0x0a, 0x24, 0x74, 0x63, 0x5f, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, + 0xf2, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x20, 0x74, 0x63, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x55, 0x6e, 0x73, + 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x21, 0x74, 0x63, 0x5f, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0xf3, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x74, 0x63, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x50, 0x72, + 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, + 0x72, 0x74, 0x65, 0x64, 0x12, 0x50, 0x0a, 0x24, 0x74, 0x63, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0xf4, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x21, 0x74, 0x63, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x50, 0x72, 0x6f, 0x70, 0x61, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x1b, 0x74, 0x63, 0x5f, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0xf5, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x74, 0x63, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x73, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x5f, 0x62, 0x67, 0x70, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0xf6, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x42, 0x67, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x7a, + 0x72, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0xf7, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5a, 0x72, 0x4f, 0x70, 0x65, + 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, + 0x74, 0x5f, 0x64, 0x63, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0xf8, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x11, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x44, 0x63, 0x6f, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, 0x04, 0x08, 0x54, 0x10, 0x55, 0x4a, 0x04, 0x08, 0x09, + 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x1c, 0x10, 0x1d, 0x4a, 0x04, 0x08, 0x14, 0x10, 0x15, 0x4a, 0x04, + 0x08, 0x5a, 0x10, 0x5b, 0x4a, 0x04, 0x08, 0x61, 0x10, 0x62, 0x4a, 0x04, 0x08, 0x37, 0x10, 0x38, + 0x4a, 0x04, 0x08, 0x59, 0x10, 0x5a, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x24, + 0x10, 0x25, 0x4a, 0x04, 0x08, 0x23, 0x10, 0x24, 0x4a, 0x04, 0x08, 0x28, 0x10, 0x29, 0x4a, 0x06, + 0x08, 0xad, 0x01, 0x10, 0xae, 0x01, 0x1a, 0xa0, 0x01, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, + 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x74, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x47, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x64, + 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x07, 0x54, 0x65, + 0x73, 0x74, 0x62, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, + 0x0a, 0x0b, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x10, 0x01, 0x12, + 0x1a, 0x0a, 0x16, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x44, + 0x55, 0x54, 0x5f, 0x34, 0x4c, 0x49, 0x4e, 0x4b, 0x53, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x54, + 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x41, 0x54, 0x45, 0x5f, 0x32, + 0x4c, 0x49, 0x4e, 0x4b, 0x53, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x45, 0x53, 0x54, 0x42, + 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x41, 0x54, 0x45, 0x5f, 0x34, 0x4c, 0x49, 0x4e, 0x4b, + 0x53, 0x10, 0x04, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, + 0x55, 0x54, 0x5f, 0x41, 0x54, 0x45, 0x5f, 0x39, 0x4c, 0x49, 0x4e, 0x4b, 0x53, 0x5f, 0x4c, 0x41, + 0x47, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, + 0x55, 0x54, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x41, 0x54, 0x45, 0x5f, 0x32, 0x4c, 0x49, 0x4e, 0x4b, + 0x53, 0x10, 0x06, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, + 0x55, 0x54, 0x5f, 0x41, 0x54, 0x45, 0x5f, 0x38, 0x4c, 0x49, 0x4e, 0x4b, 0x53, 0x10, 0x07, 0x12, + 0x15, 0x0a, 0x11, 0x54, 0x45, 0x53, 0x54, 0x42, 0x45, 0x44, 0x5f, 0x44, 0x55, 0x54, 0x5f, 0x34, + 0x30, 0x30, 0x5a, 0x52, 0x10, 0x08, 0x22, 0x6d, 0x0a, 0x04, 0x54, 0x61, 0x67, 0x73, 0x12, 0x14, + 0x0a, 0x10, 0x54, 0x41, 0x47, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x47, 0x53, 0x5f, 0x41, 0x47, 0x47, + 0x52, 0x45, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x54, 0x41, + 0x47, 0x53, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x43, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x45, 0x44, + 0x47, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x41, 0x47, 0x53, 0x5f, 0x45, 0x44, 0x47, + 0x45, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x41, 0x47, 0x53, 0x5f, 0x54, 0x52, 0x41, 0x4e, + 0x53, 0x49, 0x54, 0x10, 0x04, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var (