From 0209d3478dc9a4503f3265df335379d26c840550 Mon Sep 17 00:00:00 2001 From: wenovus Date: Wed, 3 Apr 2024 16:37:35 -0700 Subject: [PATCH] Support Community Count BGP Policy Condition --- bgp/config_test.go | 32 +- bgp/ocgobgp.go | 17 + bgp/tests/local_tests/BUILD | 1 + bgp/tests/local_tests/community_count_test.go | 381 ++++++++++++++++++ go.mod | 2 + go.sum | 4 +- repositories.bzl | 5 +- 7 files changed, 426 insertions(+), 16 deletions(-) create mode 100644 bgp/tests/local_tests/community_count_test.go diff --git a/bgp/config_test.go b/bgp/config_test.go index 07455737..f7bae245 100644 --- a/bgp/config_test.go +++ b/bgp/config_test.go @@ -66,6 +66,8 @@ func TestIntendedToGoBGPPolicies(t *testing.T) { } v4Stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(prefixSet1Name) v4Stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetMatchSetOptions(oc.PolicyTypes_MatchSetOptionsRestrictedType_ANY) + v4Stmt.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateCommunityCount().SetOperator(oc.PolicyTypes_ATTRIBUTE_COMPARISON_ATTRIBUTE_EQ) + v4Stmt.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateCommunityCount().SetValue(42) v4Stmt.GetOrCreateActions().GetOrCreateBgpActions().GetOrCreateSetCommunity().GetOrCreateReference().SetCommunitySetRef(commsetName) v4Stmt.GetOrCreateActions().GetOrCreateBgpActions().GetOrCreateSetCommunity().SetMethod(oc.SetCommunity_Method_REFERENCE) v4Stmt.GetOrCreateActions().GetOrCreateBgpActions().GetOrCreateSetCommunity().SetOptions(oc.BgpPolicy_BgpSetCommunityOptionType_ADD) @@ -156,12 +158,15 @@ func TestIntendedToGoBGPPolicies(t *testing.T) { MatchAsPathSet: gobgpoc.MatchAsPathSet{ AsPathSet: "", MatchSetOptions: "any", }, - MedEq: 0x0, - OriginEq: "", - NextHopInList: []string(nil), - AfiSafiInList: []gobgpoc.AfiSafiType(nil), - LocalPrefEq: 0x0, - CommunityCount: gobgpoc.CommunityCount{Operator: "", Value: 0x0}, + MedEq: 0x0, + OriginEq: "", + NextHopInList: []string(nil), + AfiSafiInList: []gobgpoc.AfiSafiType(nil), + LocalPrefEq: 0x0, + CommunityCount: gobgpoc.CommunityCount{ + Operator: gobgpoc.ATTRIBUTE_COMPARISON_EQ, + Value: 42, + }, AsPathLength: gobgpoc.AsPathLength{Operator: "", Value: 0x0}, RouteType: "", RpkiValidationResult: "", @@ -273,12 +278,15 @@ func TestIntendedToGoBGPPolicies(t *testing.T) { MatchAsPathSet: gobgpoc.MatchAsPathSet{ AsPathSet: "", MatchSetOptions: "any", }, - MedEq: 0x0, - OriginEq: "", - NextHopInList: []string(nil), - AfiSafiInList: []gobgpoc.AfiSafiType(nil), - LocalPrefEq: 0x0, - CommunityCount: gobgpoc.CommunityCount{Operator: "", Value: 0x0}, + MedEq: 0x0, + OriginEq: "", + NextHopInList: []string(nil), + AfiSafiInList: []gobgpoc.AfiSafiType(nil), + LocalPrefEq: 0x0, + CommunityCount: gobgpoc.CommunityCount{ + Operator: gobgpoc.ATTRIBUTE_COMPARISON_EQ, + Value: 42, + }, AsPathLength: gobgpoc.AsPathLength{Operator: "", Value: 0x0}, RouteType: "", RpkiValidationResult: "", diff --git a/bgp/ocgobgp.go b/bgp/ocgobgp.go index 722561c6..a41a6b8b 100644 --- a/bgp/ocgobgp.go +++ b/bgp/ocgobgp.go @@ -101,6 +101,10 @@ func convertPolicyDefinition(policy *oc.RoutingPolicy_PolicyDefinition, neighAdd CommunitySet: statement.Conditions.GetBgpConditions().GetCommunitySet(), MatchSetOptions: convertMatchSetOptionsType(occommset[statement.GetConditions().GetBgpConditions().GetCommunitySet()].GetMatchSetOptions()), }, + CommunityCount: gobgpoc.CommunityCount{ + Operator: convertAttributeComparison(statement.Conditions.GetBgpConditions().GetCommunityCount().GetOperator()), + Value: statement.Conditions.GetBgpConditions().GetCommunityCount().GetValue(), + }, MatchAsPathSet: gobgpoc.MatchAsPathSet{ AsPathSet: statement.Conditions.GetBgpConditions().GetMatchAsPathSet().GetAsPathSet(), MatchSetOptions: convertMatchSetOptionsType(statement.GetConditions().GetBgpConditions().GetMatchAsPathSet().GetMatchSetOptions()), @@ -203,6 +207,19 @@ func defaultPolicyToRouteDisp(gobgpdefaultpolicy gobgpoc.DefaultPolicyType) gobg } } +func convertAttributeComparison(ocpolicy oc.E_PolicyTypes_ATTRIBUTE_COMPARISON) gobgpoc.AttributeComparison { + switch ocpolicy { + case oc.PolicyTypes_ATTRIBUTE_COMPARISON_ATTRIBUTE_EQ: + return gobgpoc.ATTRIBUTE_COMPARISON_EQ + case oc.PolicyTypes_ATTRIBUTE_COMPARISON_ATTRIBUTE_GE: + return gobgpoc.ATTRIBUTE_COMPARISON_GE + case oc.PolicyTypes_ATTRIBUTE_COMPARISON_ATTRIBUTE_LE: + return gobgpoc.ATTRIBUTE_COMPARISON_LE + default: + return "" + } +} + // ConvertCommunity converts any community union type to its string representation to be used in GoBGP. func ConvertCommunity(community any) string { switch c := community.(type) { diff --git a/bgp/tests/local_tests/BUILD b/bgp/tests/local_tests/BUILD index a857f68c..f042816a 100644 --- a/bgp/tests/local_tests/BUILD +++ b/bgp/tests/local_tests/BUILD @@ -4,6 +4,7 @@ go_test( name = "local_tests_test", size = "large", srcs = [ + "community_count_test.go", "community_set_test.go", "policy_test.go", "prefix_set_test.go", diff --git a/bgp/tests/local_tests/community_count_test.go b/bgp/tests/local_tests/community_count_test.go new file mode 100644 index 00000000..a309f2da --- /dev/null +++ b/bgp/tests/local_tests/community_count_test.go @@ -0,0 +1,381 @@ +// 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 local_test + +import ( + "fmt" + "testing" + + "github.com/openconfig/lemming/bgp" + "github.com/openconfig/lemming/gnmi/oc" + "github.com/openconfig/lemming/gnmi/oc/ocpath" + "github.com/openconfig/ygot/ygot" + + valpb "github.com/openconfig/lemming/proto/policyval" +) + +func TestCommunityCount(t *testing.T) { + installRejectPolicy := func(t *testing.T, dut1, dut2, dut3, _, _ *Device) { + policyName := "community-count" + policy := &oc.RoutingPolicy_PolicyDefinition_Statement_OrderedMap{} + + // Create prefix set for prefixes under test. + prefixSetName := "tenRoutes" + tenRoutes := "10.0.0.0/8" + prefixSetPath := ocpath.Root().RoutingPolicy().DefinedSets().PrefixSet(prefixSetName) + Replace(t, dut2, prefixSetPath.Mode().Config(), oc.PrefixSet_Mode_IPV4) + Replace(t, dut2, prefixSetPath.Prefix(tenRoutes, "8..32").IpPrefix().Config(), tenRoutes) + + // Reject size 3 communities. + stmt, err := policy.AppendNew("reject-communities-sized-3") + if err != nil { + t.Fatalf("Cannot append new BGP policy statement: %v", err) + } + stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(prefixSetName) + stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetMatchSetOptions(oc.PolicyTypes_MatchSetOptionsRestrictedType_ANY) + stmt.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateCommunityCount().SetOperator(oc.PolicyTypes_ATTRIBUTE_COMPARISON_ATTRIBUTE_EQ) + stmt.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateCommunityCount().SetValue(3) + stmt.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_REJECT_ROUTE) + + stmt, err = policy.AppendNew("reject-communities-sized-le-1") + if err != nil { + t.Fatalf("Cannot append new BGP policy statement: %v", err) + } + stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(prefixSetName) + stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetMatchSetOptions(oc.PolicyTypes_MatchSetOptionsRestrictedType_ANY) + stmt.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateCommunityCount().SetOperator(oc.PolicyTypes_ATTRIBUTE_COMPARISON_ATTRIBUTE_LE) + stmt.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateCommunityCount().SetValue(1) + stmt.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_REJECT_ROUTE) + + stmt, err = policy.AppendNew("reject-communities-sized-ge-5") + if err != nil { + t.Fatalf("Cannot append new BGP policy statement: %v", err) + } + stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(prefixSetName) + stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetMatchSetOptions(oc.PolicyTypes_MatchSetOptionsRestrictedType_ANY) + stmt.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateCommunityCount().SetOperator(oc.PolicyTypes_ATTRIBUTE_COMPARISON_ATTRIBUTE_GE) + stmt.GetOrCreateConditions().GetOrCreateBgpConditions().GetOrCreateCommunityCount().SetValue(5) + stmt.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_REJECT_ROUTE) + + // Install policy + Replace(t, dut2, ocpath.Root().RoutingPolicy().PolicyDefinition(policyName).Config(), &oc.RoutingPolicy_PolicyDefinition{Statement: policy}) + Replace(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().ImportPolicy().Config(), []string{policyName}) + + Await(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().ImportPolicy().State(), []string{policyName}) + } + + routeUnderTestList := []string{ + "10.0.0.0/10", + "10.0.0.0/11", + "10.0.0.0/12", + "10.0.0.0/13", + "10.0.0.0/14", + "10.0.0.0/15", + "10.0.0.0/16", + "10.0.0.0/17", + "20.0.0.0/18", + "20.0.0.0/19", + "20.0.0.0/20", + "20.0.0.0/21", + "20.0.0.0/22", + "20.0.0.0/23", + } + + installSetPolicy := func(t *testing.T, dut1, dut2, _, _, _ *Device) { + if debug { + fmt.Println("Installing test policies") + } + + policyName := "set-communities" + policy := &oc.RoutingPolicy_PolicyDefinition_Statement_OrderedMap{} + + for i, route := range routeUnderTestList { + // Create prefix set + prefixSetName := "accept-" + route + prefixSetPath := ocpath.Root().RoutingPolicy().DefinedSets().PrefixSet(prefixSetName) + Replace(t, dut1, prefixSetPath.Mode().Config(), oc.PrefixSet_Mode_IPV4) + Replace(t, dut1, prefixSetPath.Prefix(route, "exact").IpPrefix().Config(), route) + + stmt, err := policy.AppendNew(fmt.Sprintf("stmt%d", i)) + if err != nil { + t.Fatalf("Cannot append new BGP policy statement: %v", err) + } + stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetPrefixSet(prefixSetName) + stmt.GetOrCreateConditions().GetOrCreateMatchPrefixSet().SetMatchSetOptions(oc.PolicyTypes_MatchSetOptionsRestrictedType_ANY) + + comms := []oc.UnionString{ + oc.UnionString("11111:11111"), + oc.UnionString("22222:22222"), + oc.UnionString("33333:33333"), + oc.UnionString("44444:44444"), + oc.UnionString("55555:55555"), + oc.UnionString("60000:60000"), + oc.UnionString("7777:7777"), + } + + switch i { + case 0: + case 1, 2, 3, 4, 5, 6, 7: + configureSetCommunityPolicy(t, i, dut1, stmt, true, comms[:i]...) + case 8: + case 9: + configureSetCommunityPolicy(t, i, dut1, stmt, true, comms[:1]...) + case 10: + configureSetCommunityPolicy(t, i, dut1, stmt, true, comms[:2]...) + case 11: + configureSetCommunityPolicy(t, i, dut1, stmt, true, comms[:3]...) + case 12: + configureSetCommunityPolicy(t, i, dut1, stmt, true, comms[:4]...) + case 13: + configureSetCommunityPolicy(t, i, dut1, stmt, true, comms[:5]...) + default: + t.Fatalf("BGP set policy not specified for test case %d", i) + } + stmt.GetOrCreateActions().SetPolicyResult(oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE) + } + // Install policy + Replace(t, dut1, ocpath.Root().RoutingPolicy().PolicyDefinition(policyName).Config(), &oc.RoutingPolicy_PolicyDefinition{Name: ygot.String(policyName), Statement: policy}) + Replace(t, dut1, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().ExportPolicy().Config(), []string{policyName}) + Await(t, dut1, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().ExportPolicy().State(), []string{policyName}) + } + + test := func() { + testName := "test-community-count" + t.Run(testName, func(t *testing.T) { + testPolicy(t, PolicyTestCase{ + spec: &valpb.PolicyTestCase{ + Description: "community-count", + RouteTests: []*valpb.RouteTestCase{{ + Description: "0", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[0], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_DISCARD, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: nil, + AdjRibInPreCommunities: nil, + AdjRibInPostCommunities: nil, + LocalRibCommunities: nil, + AdjRibOutPreCommunities: nil, + AdjRibOutPostCommunities: nil, + NextAdjRibInPreCommunities: nil, + NextLocalRibCommunities: nil, + }, { + Description: "1", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[1], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_DISCARD, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111"}, + AdjRibInPreCommunities: []string{"11111:11111"}, + AdjRibInPostCommunities: nil, + LocalRibCommunities: nil, + AdjRibOutPreCommunities: nil, + AdjRibOutPostCommunities: nil, + NextAdjRibInPreCommunities: nil, + NextLocalRibCommunities: nil, + }, { + Description: "2", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[2], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_ACCEPT, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222"}, + AdjRibInPostCommunities: []string{"11111:11111", "22222:22222"}, + LocalRibCommunities: []string{"11111:11111", "22222:22222"}, + AdjRibOutPreCommunities: []string{"11111:11111", "22222:22222"}, + AdjRibOutPostCommunities: []string{"11111:11111", "22222:22222"}, + NextAdjRibInPreCommunities: []string{"11111:11111", "22222:22222"}, + NextLocalRibCommunities: []string{"11111:11111", "22222:22222"}, + }, { + Description: "3", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[3], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_DISCARD, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + AdjRibInPostCommunities: nil, + LocalRibCommunities: nil, + AdjRibOutPreCommunities: nil, + AdjRibOutPostCommunities: nil, + NextAdjRibInPreCommunities: nil, + NextLocalRibCommunities: nil, + }, { + Description: "4", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[4], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_ACCEPT, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + AdjRibInPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + LocalRibCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + AdjRibOutPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + AdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + NextAdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + NextLocalRibCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + }, { + Description: "5", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[5], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_DISCARD, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + AdjRibInPostCommunities: nil, + LocalRibCommunities: nil, + AdjRibOutPreCommunities: nil, + AdjRibOutPostCommunities: nil, + NextAdjRibInPreCommunities: nil, + NextLocalRibCommunities: nil, + }, { + Description: "6", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[6], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_DISCARD, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555", "60000:60000"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555", "60000:60000"}, + AdjRibInPostCommunities: nil, + LocalRibCommunities: nil, + AdjRibOutPreCommunities: nil, + AdjRibOutPostCommunities: nil, + NextAdjRibInPreCommunities: nil, + NextLocalRibCommunities: nil, + }, { + Description: "7", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[7], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_DISCARD, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555", "60000:60000", "7777:7777"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555", "60000:60000", "7777:7777"}, + AdjRibInPostCommunities: nil, + LocalRibCommunities: nil, + AdjRibOutPreCommunities: nil, + AdjRibOutPostCommunities: nil, + NextAdjRibInPreCommunities: nil, + NextLocalRibCommunities: nil, + }, { + Description: "0-different-prefix", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[8], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_ACCEPT, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: nil, + AdjRibInPreCommunities: nil, + AdjRibInPostCommunities: nil, + LocalRibCommunities: nil, + AdjRibOutPreCommunities: nil, + AdjRibOutPostCommunities: nil, + NextAdjRibInPreCommunities: nil, + NextLocalRibCommunities: nil, + }, { + Description: "1-different-prefix", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[9], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_ACCEPT, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111"}, + AdjRibInPreCommunities: []string{"11111:11111"}, + AdjRibInPostCommunities: []string{"11111:11111"}, + LocalRibCommunities: []string{"11111:11111"}, + AdjRibOutPreCommunities: []string{"11111:11111"}, + AdjRibOutPostCommunities: []string{"11111:11111"}, + NextAdjRibInPreCommunities: []string{"11111:11111"}, + NextLocalRibCommunities: []string{"11111:11111"}, + }, { + Description: "2-different-prefix", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[10], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_ACCEPT, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222"}, + AdjRibInPostCommunities: []string{"11111:11111", "22222:22222"}, + LocalRibCommunities: []string{"11111:11111", "22222:22222"}, + AdjRibOutPreCommunities: []string{"11111:11111", "22222:22222"}, + AdjRibOutPostCommunities: []string{"11111:11111", "22222:22222"}, + NextAdjRibInPreCommunities: []string{"11111:11111", "22222:22222"}, + NextLocalRibCommunities: []string{"11111:11111", "22222:22222"}, + }, { + Description: "3-different-prefix", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[11], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_ACCEPT, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + AdjRibInPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + LocalRibCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + AdjRibOutPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + AdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + NextAdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + NextLocalRibCommunities: []string{"11111:11111", "22222:22222", "33333:33333"}, + }, { + Description: "4-different-prefix", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[12], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_ACCEPT, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + AdjRibInPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + LocalRibCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + AdjRibOutPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + AdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + NextAdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + NextLocalRibCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444"}, + }, { + Description: "5-different-prefix", + Input: &valpb.TestRoute{ + ReachPrefix: routeUnderTestList[13], + }, + ExpectedResult: valpb.RouteTestResult_ROUTE_TEST_RESULT_ACCEPT, + PrevAdjRibOutPreCommunities: nil, + PrevAdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + AdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + AdjRibInPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + LocalRibCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + AdjRibOutPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + AdjRibOutPostCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + NextAdjRibInPreCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + NextLocalRibCommunities: []string{"11111:11111", "22222:22222", "33333:33333", "44444:44444", "55555:55555"}, + }}, + }, + installPolicies: func(t *testing.T, dut1, dut2, dut3, dut4, dut5 *Device) { + installSetPolicy(t, dut1, dut2, dut3, dut4, dut5) + installRejectPolicy(t, dut1, dut2, dut3, dut4, dut5) + }, + }) + }) + } + + test() +} diff --git a/go.mod b/go.mod index 6a0d0e4f..55ac209b 100644 --- a/go.mod +++ b/go.mod @@ -161,3 +161,5 @@ require ( ) replace github.com/openconfig/gnoi => github.com/DanG100/gnoi v0.0.0-20240319222444-26c1b86c4d42 + +replace github.com/osrg/gobgp/v3 => github.com/wenovus/gobgp/v3 v3.0.0-20240403233151-f765066449b4 diff --git a/go.sum b/go.sum index 137d943b..f994c59c 100644 --- a/go.sum +++ b/go.sum @@ -1573,8 +1573,6 @@ github.com/openconfig/ygot v0.10.4/go.mod h1:oCQNdXnv7dWc8scTDgoFkauv1wwplJn5Hsp github.com/openconfig/ygot v0.13.2/go.mod h1:kJN0yCXIH07dOXvNBEFm3XxXdnDD5NI6K99tnD5x49c= github.com/openconfig/ygot v0.29.18 h1:vgG2r7RVwaVDXgHtpsCNW+qdSGSdxqRxUfRN2rPCy7M= github.com/openconfig/ygot v0.29.18/go.mod h1:sp6roPPmVDcTCF2E3qTjILA+jzJMkZ9d6spC9KLMqpc= -github.com/osrg/gobgp/v3 v3.24.1-0.20240317054555-912eb5a92026 h1:IQb3xVd9A8O767O3xEDnXn2n1rvmwlnNjrxUVR46Ug8= -github.com/osrg/gobgp/v3 v3.24.1-0.20240317054555-912eb5a92026/go.mod h1:/0UclzjayCRM1hLcUcnb+BaKWsosdN083xajBZx70DU= github.com/p4lang/p4runtime v1.4.0-rc.5.0.20220728214547-13f0d02a521e h1:AfZKoikDXbZ7zWvO/lvCRzLo7i6lM+gNleYVMxPiWyQ= github.com/p4lang/p4runtime v1.4.0-rc.5.0.20220728214547-13f0d02a521e/go.mod h1:m9laObIMXM9N1ElGXijc66/MSM5eheZJLRLxg/TG+fU= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= @@ -1678,6 +1676,8 @@ github.com/vishvananda/netlink v1.2.1-beta.2/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhg github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= +github.com/wenovus/gobgp/v3 v3.0.0-20240403233151-f765066449b4 h1:fJ3iMg0+1XAzxiT7RstwFHJbeyVf1ObJ905yiuKswfk= +github.com/wenovus/gobgp/v3 v3.0.0-20240403233151-f765066449b4/go.mod h1:/0UclzjayCRM1hLcUcnb+BaKWsosdN083xajBZx70DU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/repositories.bzl b/repositories.bzl index 6bb82a4d..b4ed1200 100644 --- a/repositories.bzl +++ b/repositories.bzl @@ -1799,8 +1799,9 @@ def go_repositories(): name = "com_github_osrg_gobgp_v3", build_file_proto_mode = "disable", importpath = "github.com/osrg/gobgp/v3", - sum = "h1:IQb3xVd9A8O767O3xEDnXn2n1rvmwlnNjrxUVR46Ug8=", - version = "v3.24.1-0.20240317054555-912eb5a92026", + replace = "github.com/wenovus/gobgp/v3", + sum = "h1:fJ3iMg0+1XAzxiT7RstwFHJbeyVf1ObJ905yiuKswfk=", + version = "v3.0.0-20240403233151-f765066449b4", ) go_repository(