diff options
-rw-r--r-- | server/fsm.go | 2 | ||||
-rw-r--r-- | server/peer.go | 2 | ||||
-rw-r--r-- | server/server.go | 10 | ||||
-rw-r--r-- | table/policy.go | 37 | ||||
-rw-r--r-- | table/policy_test.go | 210 |
5 files changed, 132 insertions, 129 deletions
diff --git a/server/fsm.go b/server/fsm.go index 25aefaa2..89366d72 100644 --- a/server/fsm.go +++ b/server/fsm.go @@ -525,7 +525,7 @@ func (h *FSMHandler) recvMessageWithError() error { id := h.fsm.pConf.Config.NeighborAddress policyMutex.RLock() for _, path := range fmsg.PathList { - if h.fsm.policy.ApplyPolicy(id, table.POLICY_DIRECTION_IN, path) == nil { + if h.fsm.policy.ApplyPolicy(id, table.POLICY_DIRECTION_IN, path, nil) == nil { path.Filter(id, table.POLICY_DIRECTION_IN) } } diff --git a/server/peer.go b/server/peer.go index 5233c892..c4e09617 100644 --- a/server/peer.go +++ b/server/peer.go @@ -106,7 +106,7 @@ func (peer *Peer) getBestFromLocal(rfList []bgp.RouteFamily) ([]*table.Path, []* pathList := []*table.Path{} filtered := []*table.Path{} for _, path := range peer.localRib.GetBestPathList(peer.TableID(), rfList) { - p := peer.policy.ApplyPolicy(peer.TableID(), table.POLICY_DIRECTION_EXPORT, filterpath(peer, path)) + p := peer.policy.ApplyPolicy(peer.TableID(), table.POLICY_DIRECTION_EXPORT, filterpath(peer, path), nil) if p == nil { filtered = append(filtered, path) continue diff --git a/server/server.go b/server/server.go index 4a198e49..7c18f088 100644 --- a/server/server.go +++ b/server/server.go @@ -744,7 +744,7 @@ func (server *BgpServer) RSimportPaths(peer *Peer, pathList []*table.Path) []*ta before.Filter(peer.ID(), table.POLICY_DIRECTION_IMPORT) continue } - after := server.policy.ApplyPolicy(peer.TableID(), table.POLICY_DIRECTION_IMPORT, before) + after := server.policy.ApplyPolicy(peer.TableID(), table.POLICY_DIRECTION_IMPORT, before, nil) if after == nil { before.Filter(peer.ID(), table.POLICY_DIRECTION_IMPORT) } else if after != before { @@ -784,7 +784,7 @@ func (server *BgpServer) propagateUpdate(peer *Peer, pathList []*table.Path) ([] } sendPathList := make([]*table.Path, 0, len(dsts)) for _, dst := range dsts { - path := server.policy.ApplyPolicy(targetPeer.TableID(), table.POLICY_DIRECTION_EXPORT, filterpath(targetPeer, dst.NewFeed(targetPeer.TableID()))) + path := server.policy.ApplyPolicy(targetPeer.TableID(), table.POLICY_DIRECTION_EXPORT, filterpath(targetPeer, dst.NewFeed(targetPeer.TableID())), nil) if path != nil { sendPathList = append(sendPathList, path) } @@ -795,7 +795,7 @@ func (server *BgpServer) propagateUpdate(peer *Peer, pathList []*table.Path) ([] } } else { for idx, path := range pathList { - pathList[idx] = server.policy.ApplyPolicy(table.GLOBAL_RIB_NAME, table.POLICY_DIRECTION_IMPORT, path) + pathList[idx] = server.policy.ApplyPolicy(table.GLOBAL_RIB_NAME, table.POLICY_DIRECTION_IMPORT, path, nil) } alteredPathList = pathList dsts := rib.ProcessPaths(pathList) @@ -819,7 +819,7 @@ func (server *BgpServer) propagateUpdate(peer *Peer, pathList []*table.Path) ([] pathList := make([]*table.Path, len(sendPathList)) copy(pathList, sendPathList) for idx, path := range pathList { - path = server.policy.ApplyPolicy(table.GLOBAL_RIB_NAME, table.POLICY_DIRECTION_EXPORT, filterpath(targetPeer, path)) + path = server.policy.ApplyPolicy(table.GLOBAL_RIB_NAME, table.POLICY_DIRECTION_EXPORT, filterpath(targetPeer, path), nil) if path != nil { path.UpdatePathAttrs(&server.bgpConfig.Global, &targetPeer.conf) } @@ -1817,7 +1817,7 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { for _, peer := range peers { pathList := []*table.Path{} for _, path := range peer.adjRibIn.PathList([]bgp.RouteFamily{grpcReq.RouteFamily}, false) { - if path = server.policy.ApplyPolicy(peer.ID(), table.POLICY_DIRECTION_IN, path); path != nil { + if path = server.policy.ApplyPolicy(peer.ID(), table.POLICY_DIRECTION_IN, path, nil); path != nil { pathList = append(pathList, path.Clone(net.ParseIP(peer.conf.Config.NeighborAddress), false)) } } diff --git a/table/policy.go b/table/policy.go index 4484e7e6..a8192a58 100644 --- a/table/policy.go +++ b/table/policy.go @@ -31,6 +31,9 @@ import ( "github.com/osrg/gobgp/packet" ) +type PolicyOptions struct { +} + type DefinedType int const ( @@ -1027,7 +1030,7 @@ func NewDefinedSetFromApiStruct(a *api.DefinedSet) (DefinedSet, error) { type Condition interface { Type() ConditionType - Evaluate(*Path) bool + Evaluate(*Path, *PolicyOptions) bool Set() DefinedSet } @@ -1051,7 +1054,7 @@ func (c *PrefixCondition) Option() MatchOption { // compare prefixes in this condition and nlri of path and // subsequent comparison is skipped if that matches the conditions. // If PrefixList's length is zero, return true. -func (c *PrefixCondition) Evaluate(path *Path) bool { +func (c *PrefixCondition) Evaluate(path *Path, _ *PolicyOptions) bool { var key string var masklen uint8 keyf := func(ip net.IP, ones int) string { @@ -1149,7 +1152,7 @@ func (c *NeighborCondition) Option() MatchOption { // compare neighbor ipaddress of this condition and source address of path // and, subsequent comparisons are skipped if that matches the conditions. // If NeighborList's length is zero, return true. -func (c *NeighborCondition) Evaluate(path *Path) bool { +func (c *NeighborCondition) Evaluate(path *Path, _ *PolicyOptions) bool { if len(c.set.list) == 0 { log.Debug("NeighborList doesn't have elements") @@ -1242,7 +1245,7 @@ func (c *AsPathCondition) ToApiStruct() *api.MatchSet { } } -func (c *AsPathCondition) Evaluate(path *Path) bool { +func (c *AsPathCondition) Evaluate(path *Path, _ *PolicyOptions) bool { result := false aspath := path.GetAsSeqList() for _, m := range c.set.singleList { @@ -1333,7 +1336,7 @@ func (c *CommunityCondition) ToApiStruct() *api.MatchSet { } } -func (c *CommunityCondition) Evaluate(path *Path) bool { +func (c *CommunityCondition) Evaluate(path *Path, _ *PolicyOptions) bool { cs := path.GetCommunities() result := false for _, x := range cs { @@ -1418,7 +1421,7 @@ func (c *ExtCommunityCondition) ToApiStruct() *api.MatchSet { } } -func (c *ExtCommunityCondition) Evaluate(path *Path) bool { +func (c *ExtCommunityCondition) Evaluate(path *Path, _ *PolicyOptions) bool { es := path.GetExtCommunities() result := false for _, x := range es { @@ -1495,7 +1498,7 @@ func (c *AsPathLengthCondition) Type() ConditionType { // compare AS_PATH length in the message's AS_PATH attribute with // the one in condition. -func (c *AsPathLengthCondition) Evaluate(path *Path) bool { +func (c *AsPathLengthCondition) Evaluate(path *Path, _ *PolicyOptions) bool { length := uint32(path.GetAsPathLen()) result := false @@ -1561,7 +1564,7 @@ func (c *RpkiValidationCondition) Type() ConditionType { return CONDITION_RPKI } -func (c *RpkiValidationCondition) Evaluate(path *Path) bool { +func (c *RpkiValidationCondition) Evaluate(path *Path, _ *PolicyOptions) bool { return c.result == path.Validation() } @@ -2077,17 +2080,17 @@ type Statement struct { } // evaluate each condition in the statement according to MatchSetOptions -func (s *Statement) Evaluate(p *Path) bool { +func (s *Statement) Evaluate(p *Path, options *PolicyOptions) bool { for _, c := range s.Conditions { - if !c.Evaluate(p) { + if !c.Evaluate(p, options) { return false } } return true } -func (s *Statement) Apply(path *Path) (RouteType, *Path) { - result := s.Evaluate(path) +func (s *Statement) Apply(path *Path, options *PolicyOptions) (RouteType, *Path) { + result := s.Evaluate(path, options) if result { if len(s.ModActions) != 0 { // apply all modification actions @@ -2446,10 +2449,10 @@ func (p *Policy) Name() string { // Compare path with a policy's condition in stored order in the policy. // If a condition match, then this function stops evaluation and // subsequent conditions are skipped. -func (p *Policy) Apply(path *Path) (RouteType, *Path) { +func (p *Policy) Apply(path *Path, options *PolicyOptions) (RouteType, *Path) { for _, stmt := range p.Statements { var result RouteType - result, path = stmt.Apply(path) + result, path = stmt.Apply(path, options) if result != ROUTE_TYPE_NONE { return result, path } @@ -2571,7 +2574,7 @@ type RoutingPolicy struct { AssignmentMap map[string]*Assignment } -func (r *RoutingPolicy) ApplyPolicy(id string, dir PolicyDirection, before *Path) *Path { +func (r *RoutingPolicy) ApplyPolicy(id string, dir PolicyDirection, before *Path, options *PolicyOptions) *Path { if before == nil { return nil } @@ -2581,7 +2584,7 @@ func (r *RoutingPolicy) ApplyPolicy(id string, dir PolicyDirection, before *Path result := ROUTE_TYPE_NONE after := before for _, p := range r.GetPolicy(id, dir) { - result, after = p.Apply(before) + result, after = p.Apply(before, options) if result != ROUTE_TYPE_NONE { break } @@ -2839,7 +2842,7 @@ func CanImportToVrf(v *Vrf, path *Path) bool { MatchSetOptions: config.MATCH_SET_OPTIONS_TYPE_ANY, } c, _ := NewExtCommunityCondition(matchSet, map[string]DefinedSet{v.Name: set}) - return c.Evaluate(path) + return c.Evaluate(path, nil) } func PoliciesToString(ps []*api.Policy) []string { diff --git a/table/policy_test.go b/table/policy_test.go index d7cc0254..38b55794 100644 --- a/table/policy_test.go +++ b/table/policy_test.go @@ -241,7 +241,7 @@ func TestPolicyNotMatch(t *testing.T) { r := NewRoutingPolicy() err := r.Reload(pl) assert.Nil(t, err) - pType, newPath := r.PolicyMap["pd1"].Apply(path) + pType, newPath := r.PolicyMap["pd1"].Apply(path, nil) assert.Equal(t, ROUTE_TYPE_NONE, pType) assert.Equal(t, newPath, path) } @@ -272,7 +272,7 @@ func TestPolicyMatchAndReject(t *testing.T) { r := NewRoutingPolicy() err := r.Reload(pl) assert.Nil(t, err) - pType, newPath := r.PolicyMap["pd1"].Apply(path) + pType, newPath := r.PolicyMap["pd1"].Apply(path, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType) assert.Equal(t, newPath, path) } @@ -304,7 +304,7 @@ func TestPolicyMatchAndAccept(t *testing.T) { r := NewRoutingPolicy() err := r.Reload(pl) assert.Nil(t, err) - pType, newPath := r.PolicyMap["pd1"].Apply(path) + pType, newPath := r.PolicyMap["pd1"].Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.Equal(t, path, newPath) } @@ -347,11 +347,11 @@ func TestPolicyRejectOnlyPrefixSet(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path1) + pType, newPath := p.Apply(path1, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType) assert.Equal(t, newPath, path1) - pType2, newPath2 := p.Apply(path2) + pType2, newPath2 := p.Apply(path2, nil) assert.Equal(t, ROUTE_TYPE_NONE, pType2) assert.Equal(t, newPath2, path2) } @@ -393,11 +393,11 @@ func TestPolicyRejectOnlyNeighborSet(t *testing.T) { r := NewRoutingPolicy() err := r.Reload(pl) assert.Nil(t, err) - pType, newPath := r.PolicyMap["pd1"].Apply(path1) + pType, newPath := r.PolicyMap["pd1"].Apply(path1, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType) assert.Equal(t, newPath, path1) - pType2, newPath2 := r.PolicyMap["pd1"].Apply(path2) + pType2, newPath2 := r.PolicyMap["pd1"].Apply(path2, nil) assert.Equal(t, ROUTE_TYPE_NONE, pType2) assert.Equal(t, newPath2, path2) } @@ -447,11 +447,11 @@ func TestPolicyDifferentRoutefamilyOfPathAndPolicy(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType1, newPath1 := p.Apply(pathIPv4) + pType1, newPath1 := p.Apply(pathIPv4, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType1) assert.Equal(t, newPath1, pathIPv4) - pType2, newPath2 := p.Apply(pathIPv6) + pType2, newPath2 := p.Apply(pathIPv6, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType2) assert.Equal(t, newPath2, pathIPv6) } @@ -482,7 +482,7 @@ func TestAsPathLengthConditionEvaluate(t *testing.T) { c, _ := NewAsPathLengthCondition(asPathLength) // test - assert.Equal(t, true, c.Evaluate(path)) + assert.Equal(t, true, c.Evaluate(path, nil)) // create match condition asPathLength = config.AsPathLength{ @@ -492,7 +492,7 @@ func TestAsPathLengthConditionEvaluate(t *testing.T) { c, _ = NewAsPathLengthCondition(asPathLength) // test - assert.Equal(t, true, c.Evaluate(path)) + assert.Equal(t, true, c.Evaluate(path, nil)) // create match condition asPathLength = config.AsPathLength{ @@ -502,7 +502,7 @@ func TestAsPathLengthConditionEvaluate(t *testing.T) { c, _ = NewAsPathLengthCondition(asPathLength) // test - assert.Equal(t, false, c.Evaluate(path)) + assert.Equal(t, false, c.Evaluate(path, nil)) } func TestAsPathLengthConditionWithOtherCondition(t *testing.T) { @@ -547,7 +547,7 @@ func TestAsPathLengthConditionWithOtherCondition(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType) assert.Equal(t, newPath, path) @@ -589,7 +589,7 @@ func TestAs4PathLengthConditionEvaluate(t *testing.T) { c, _ := NewAsPathLengthCondition(asPathLength) // test - assert.Equal(t, true, c.Evaluate(path)) + assert.Equal(t, true, c.Evaluate(path, nil)) // create match condition asPathLength = config.AsPathLength{ @@ -599,7 +599,7 @@ func TestAs4PathLengthConditionEvaluate(t *testing.T) { c, _ = NewAsPathLengthCondition(asPathLength) // test - assert.Equal(t, true, c.Evaluate(path)) + assert.Equal(t, true, c.Evaluate(path, nil)) // create match condition asPathLength = config.AsPathLength{ @@ -609,7 +609,7 @@ func TestAs4PathLengthConditionEvaluate(t *testing.T) { c, _ = NewAsPathLengthCondition(asPathLength) // test - assert.Equal(t, false, c.Evaluate(path)) + assert.Equal(t, false, c.Evaluate(path, nil)) } func TestAs4PathLengthConditionWithOtherCondition(t *testing.T) { @@ -664,7 +664,7 @@ func TestAs4PathLengthConditionWithOtherCondition(t *testing.T) { r := NewRoutingPolicy() r.Reload(pl) p, _ := NewPolicy(pl.PolicyDefinitions[0], r.DefinedSetMap) - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType) assert.Equal(t, newPath, path) @@ -753,15 +753,15 @@ func TestAsPathConditionEvaluate(t *testing.T) { p8 := createAspathC("asset3", config.MATCH_SET_OPTIONS_TYPE_INVERT) // test - assert.Equal(t, true, p1.Evaluate(path1)) - assert.Equal(t, true, p2.Evaluate(path1)) - assert.Equal(t, true, p3.Evaluate(path1)) - assert.Equal(t, false, p4.Evaluate(path1)) - assert.Equal(t, true, p5.Evaluate(path1)) - assert.Equal(t, false, p6.Evaluate(path1)) - assert.Equal(t, true, p6.Evaluate(path2)) - assert.Equal(t, true, p7.Evaluate(path1)) - assert.Equal(t, true, p8.Evaluate(path2)) + assert.Equal(t, true, p1.Evaluate(path1, nil)) + assert.Equal(t, true, p2.Evaluate(path1, nil)) + assert.Equal(t, true, p3.Evaluate(path1, nil)) + assert.Equal(t, false, p4.Evaluate(path1, nil)) + assert.Equal(t, true, p5.Evaluate(path1, nil)) + assert.Equal(t, false, p6.Evaluate(path1, nil)) + assert.Equal(t, true, p6.Evaluate(path2, nil)) + assert.Equal(t, true, p7.Evaluate(path1, nil)) + assert.Equal(t, true, p8.Evaluate(path2, nil)) } func TestMultipleAsPathConditionEvaluate(t *testing.T) { @@ -854,15 +854,15 @@ func TestMultipleAsPathConditionEvaluate(t *testing.T) { p9 := createAspathC("asset9", config.MATCH_SET_OPTIONS_TYPE_ANY) // test - assert.Equal(t, true, p1.Evaluate(path1)) - assert.Equal(t, true, p2.Evaluate(path1)) - assert.Equal(t, true, p3.Evaluate(path1)) - assert.Equal(t, true, p4.Evaluate(path1)) - assert.Equal(t, true, p5.Evaluate(path1)) - assert.Equal(t, true, p6.Evaluate(path1)) - assert.Equal(t, true, p7.Evaluate(path1)) - assert.Equal(t, true, p8.Evaluate(path1)) - assert.Equal(t, false, p9.Evaluate(path1)) + assert.Equal(t, true, p1.Evaluate(path1, nil)) + assert.Equal(t, true, p2.Evaluate(path1, nil)) + assert.Equal(t, true, p3.Evaluate(path1, nil)) + assert.Equal(t, true, p4.Evaluate(path1, nil)) + assert.Equal(t, true, p5.Evaluate(path1, nil)) + assert.Equal(t, true, p6.Evaluate(path1, nil)) + assert.Equal(t, true, p7.Evaluate(path1, nil)) + assert.Equal(t, true, p8.Evaluate(path1, nil)) + assert.Equal(t, false, p9.Evaluate(path1, nil)) } func TestAsPathCondition(t *testing.T) { @@ -921,7 +921,7 @@ func TestAsPathCondition(t *testing.T) { MatchSetOptions: config.MATCH_SET_OPTIONS_TYPE_ANY, }, map[string]DefinedSet{k: s}) for _, a := range v { - result := c.Evaluate(a.path) + result := c.Evaluate(a.path, nil) if a.result != result { log.WithFields(log.Fields{ "EXP": k, @@ -978,7 +978,7 @@ func TestAsPathConditionWithOtherCondition(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType) assert.Equal(t, newPath, path) @@ -1085,16 +1085,16 @@ func TestAs4PathConditionEvaluate(t *testing.T) { p8 := createAspathC("asset3", config.MATCH_SET_OPTIONS_TYPE_INVERT) // test - assert.Equal(t, true, p1.Evaluate(path1)) - assert.Equal(t, true, p2.Evaluate(path1)) - assert.Equal(t, true, p3.Evaluate(path1)) - assert.Equal(t, false, p4.Evaluate(path1)) - assert.Equal(t, true, p5.Evaluate(path1)) - assert.Equal(t, false, p6.Evaluate(path1)) - assert.Equal(t, true, p6.Evaluate(path2)) - - assert.Equal(t, true, p7.Evaluate(path1)) - assert.Equal(t, true, p8.Evaluate(path2)) + assert.Equal(t, true, p1.Evaluate(path1, nil)) + assert.Equal(t, true, p2.Evaluate(path1, nil)) + assert.Equal(t, true, p3.Evaluate(path1, nil)) + assert.Equal(t, false, p4.Evaluate(path1, nil)) + assert.Equal(t, true, p5.Evaluate(path1, nil)) + assert.Equal(t, false, p6.Evaluate(path1, nil)) + assert.Equal(t, true, p6.Evaluate(path2, nil)) + + assert.Equal(t, true, p7.Evaluate(path1, nil)) + assert.Equal(t, true, p8.Evaluate(path2, nil)) } func TestMultipleAs4PathConditionEvaluate(t *testing.T) { @@ -1206,15 +1206,15 @@ func TestMultipleAs4PathConditionEvaluate(t *testing.T) { p9 := createAspathC("asset9", config.MATCH_SET_OPTIONS_TYPE_ANY) // test - assert.Equal(t, true, p1.Evaluate(path1)) - assert.Equal(t, true, p2.Evaluate(path1)) - assert.Equal(t, true, p3.Evaluate(path1)) - assert.Equal(t, true, p4.Evaluate(path1)) - assert.Equal(t, true, p5.Evaluate(path1)) - assert.Equal(t, true, p6.Evaluate(path1)) - assert.Equal(t, true, p7.Evaluate(path1)) - assert.Equal(t, true, p8.Evaluate(path1)) - assert.Equal(t, false, p9.Evaluate(path1)) + assert.Equal(t, true, p1.Evaluate(path1, nil)) + assert.Equal(t, true, p2.Evaluate(path1, nil)) + assert.Equal(t, true, p3.Evaluate(path1, nil)) + assert.Equal(t, true, p4.Evaluate(path1, nil)) + assert.Equal(t, true, p5.Evaluate(path1, nil)) + assert.Equal(t, true, p6.Evaluate(path1, nil)) + assert.Equal(t, true, p7.Evaluate(path1, nil)) + assert.Equal(t, true, p8.Evaluate(path1, nil)) + assert.Equal(t, false, p9.Evaluate(path1, nil)) } func TestAs4PathConditionWithOtherCondition(t *testing.T) { @@ -1271,7 +1271,7 @@ func TestAs4PathConditionWithOtherCondition(t *testing.T) { r := NewRoutingPolicy() r.Reload(pl) p, _ := NewPolicy(pl.PolicyDefinitions[0], r.DefinedSetMap) - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType) assert.Equal(t, newPath, path) @@ -1365,13 +1365,13 @@ func TestAs4PathConditionEvaluateMixedWith2byteAS(t *testing.T) { p7 := createAspathC("asset7", config.MATCH_SET_OPTIONS_TYPE_ANY) // test - assert.Equal(t, true, p1.Evaluate(path1)) - assert.Equal(t, true, p2.Evaluate(path1)) - assert.Equal(t, true, p3.Evaluate(path1)) - assert.Equal(t, true, p4.Evaluate(path1)) - assert.Equal(t, true, p5.Evaluate(path1)) - assert.Equal(t, false, p6.Evaluate(path1)) - assert.Equal(t, true, p7.Evaluate(path1)) + assert.Equal(t, true, p1.Evaluate(path1, nil)) + assert.Equal(t, true, p2.Evaluate(path1, nil)) + assert.Equal(t, true, p3.Evaluate(path1, nil)) + assert.Equal(t, true, p4.Evaluate(path1, nil)) + assert.Equal(t, true, p5.Evaluate(path1, nil)) + assert.Equal(t, false, p6.Evaluate(path1, nil)) + assert.Equal(t, true, p7.Evaluate(path1, nil)) } @@ -1508,16 +1508,16 @@ func TestCommunityConditionEvaluate(t *testing.T) { p10 := createCommunityC("comset10", config.MATCH_SET_OPTIONS_TYPE_INVERT) // test - assert.Equal(t, true, p1.Evaluate(path1)) - assert.Equal(t, true, p2.Evaluate(path1)) - assert.Equal(t, true, p3.Evaluate(path1)) - assert.Equal(t, true, p4.Evaluate(path1)) - assert.Equal(t, true, p5.Evaluate(path1)) - assert.Equal(t, true, p6.Evaluate(path1)) - assert.Equal(t, true, p7.Evaluate(path1)) - assert.Equal(t, true, p8.Evaluate(path1)) - assert.Equal(t, true, p9.Evaluate(path2)) - assert.Equal(t, true, p10.Evaluate(path1)) + assert.Equal(t, true, p1.Evaluate(path1, nil)) + assert.Equal(t, true, p2.Evaluate(path1, nil)) + assert.Equal(t, true, p3.Evaluate(path1, nil)) + assert.Equal(t, true, p4.Evaluate(path1, nil)) + assert.Equal(t, true, p5.Evaluate(path1, nil)) + assert.Equal(t, true, p6.Evaluate(path1, nil)) + assert.Equal(t, true, p7.Evaluate(path1, nil)) + assert.Equal(t, true, p8.Evaluate(path1, nil)) + assert.Equal(t, true, p9.Evaluate(path2, nil)) + assert.Equal(t, true, p10.Evaluate(path1, nil)) } @@ -1591,12 +1591,12 @@ func TestCommunityConditionEvaluateWithOtherCondition(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType) assert.Equal(t, newPath, path) p = r.PolicyMap["pd2"] - pType, newPath = p.Apply(path) + pType, newPath = p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_NONE, pType) assert.Equal(t, newPath, path) @@ -1637,7 +1637,7 @@ func TestPolicyMatchAndAddCommunities(t *testing.T) { assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) log.Debug(newPath) @@ -1682,7 +1682,7 @@ func TestPolicyMatchAndReplaceCommunities(t *testing.T) { assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) assert.Equal(t, []uint32{stringToCommunityValue(community)}, newPath.GetCommunities()) @@ -1726,7 +1726,7 @@ func TestPolicyMatchAndRemoveCommunities(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommunities()) @@ -1772,7 +1772,7 @@ func TestPolicyMatchAndRemoveCommunitiesRegexp(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommunities()) @@ -1818,7 +1818,7 @@ func TestPolicyMatchAndRemoveCommunitiesRegexp2(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) assert.Equal(t, []uint32{stringToCommunityValue(community2)}, newPath.GetCommunities()) @@ -1865,7 +1865,7 @@ func TestPolicyMatchAndClearCommunities(t *testing.T) { assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) //assert.Equal(t, []uint32{}, newPath.GetCommunities()) @@ -2036,17 +2036,17 @@ func TestExtCommunityConditionEvaluate(t *testing.T) { p11 := createExtCommunityC("ecomSet11", config.MATCH_SET_OPTIONS_TYPE_INVERT) // test - assert.Equal(t, true, p1.Evaluate(path1)) - assert.Equal(t, true, p2.Evaluate(path1)) - assert.Equal(t, true, p3.Evaluate(path1)) - assert.Equal(t, false, p4.Evaluate(path1)) - assert.Equal(t, false, p5.Evaluate(path1)) - assert.Equal(t, false, p6.Evaluate(path1)) - assert.Equal(t, true, p7.Evaluate(path1)) - assert.Equal(t, true, p8.Evaluate(path1)) - assert.Equal(t, true, p9.Evaluate(path1)) - assert.Equal(t, true, p10.Evaluate(path1)) - assert.Equal(t, true, p11.Evaluate(path1)) + assert.Equal(t, true, p1.Evaluate(path1, nil)) + assert.Equal(t, true, p2.Evaluate(path1, nil)) + assert.Equal(t, true, p3.Evaluate(path1, nil)) + assert.Equal(t, false, p4.Evaluate(path1, nil)) + assert.Equal(t, false, p5.Evaluate(path1, nil)) + assert.Equal(t, false, p6.Evaluate(path1, nil)) + assert.Equal(t, true, p7.Evaluate(path1, nil)) + assert.Equal(t, true, p8.Evaluate(path1, nil)) + assert.Equal(t, true, p9.Evaluate(path1, nil)) + assert.Equal(t, true, p10.Evaluate(path1, nil)) + assert.Equal(t, true, p11.Evaluate(path1, nil)) } @@ -2169,12 +2169,12 @@ func TestExtCommunityConditionEvaluateWithOtherCondition(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_NONE, pType) assert.Equal(t, newPath, path) p = r.PolicyMap["pd2"] - pType, newPath = p.Apply(path) + pType, newPath = p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_REJECT, pType) assert.Equal(t, newPath, path) @@ -2215,7 +2215,7 @@ func TestPolicyMatchAndReplaceMed(t *testing.T) { assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) v, err := newPath.GetMed() @@ -2258,7 +2258,7 @@ func TestPolicyMatchAndAddingMed(t *testing.T) { err := r.Reload(pl) assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) @@ -2304,7 +2304,7 @@ func TestPolicyMatchAndAddingMedOverFlow(t *testing.T) { assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) @@ -2350,7 +2350,7 @@ func TestPolicyMatchAndSubtractMed(t *testing.T) { assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) @@ -2396,7 +2396,7 @@ func TestPolicyMatchAndSubtractMedUnderFlow(t *testing.T) { assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) @@ -2439,7 +2439,7 @@ func TestPolicyMatchWhenPathHaveNotMed(t *testing.T) { assert.Nil(t, err) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(t, ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(t, nil, newPath) @@ -2486,7 +2486,7 @@ func TestPolicyAsPathPrepend(t *testing.T) { r.Reload(pl) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(nil, newPath) assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, newPath.GetAsSeqList()) @@ -2530,7 +2530,7 @@ func TestPolicyAsPathPrependLastAs(t *testing.T) { r.Reload(pl) p := r.PolicyMap["pd1"] - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(nil, newPath) assert.Equal([]uint32{65002, 65002, 65002, 65002, 65002, 65002, 65001, 65000}, newPath.GetAsSeqList()) @@ -2580,7 +2580,7 @@ func TestPolicyAs4PathPrepend(t *testing.T) { r.Reload(pl) p, _ := NewPolicy(pl.PolicyDefinitions[0], r.DefinedSetMap) - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(nil, newPath) asn := createAs4Value("65002.1") @@ -2635,7 +2635,7 @@ func TestPolicyAs4PathPrependLastAs(t *testing.T) { r.Reload(pl) p, _ := NewPolicy(pl.PolicyDefinitions[0], r.DefinedSetMap) - pType, newPath := p.Apply(path) + pType, newPath := p.Apply(path, nil) assert.Equal(ROUTE_TYPE_ACCEPT, pType) assert.NotEqual(nil, newPath) asn := createAs4Value("65002.1") |