summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--server/peer.go138
-rw-r--r--server/server.go4
-rw-r--r--test/scenario_test/policy/policy_generator.go5
3 files changed, 72 insertions, 75 deletions
diff --git a/server/peer.go b/server/peer.go
index 2e97ccee..1649b2c2 100644
--- a/server/peer.go
+++ b/server/peer.go
@@ -33,16 +33,16 @@ const (
)
type Peer struct {
- globalConfig config.Global
- config config.Neighbor
- fsm *FSM
- rfMap map[bgp.RouteFamily]bool
- capMap map[bgp.BGPCapabilityCode]bgp.ParameterCapabilityInterface
- adjRib *table.AdjRib
- peerInfo *table.PeerInfo
- outgoing chan *bgp.BGPMessage
- distPolicies []*policy.Policy
- defaultDistributePolicy config.DefaultPolicyType
+ globalConfig config.Global
+ config config.Neighbor
+ fsm *FSM
+ rfMap map[bgp.RouteFamily]bool
+ capMap map[bgp.BGPCapabilityCode]bgp.ParameterCapabilityInterface
+ adjRib *table.AdjRib
+ peerInfo *table.PeerInfo
+ outgoing chan *bgp.BGPMessage
+ distPolicies []*policy.Policy
+ defaultDistributePolicy config.DefaultPolicyType
}
func NewPeer(g config.Global, config config.Neighbor) *Peer {
@@ -174,8 +174,8 @@ func (peer *Peer) handleBGPmessage(m *bgp.BGPMessage) ([]*table.Path, bool, []*b
table.UpdatePathAttrs4ByteAs(body)
originalPaths := table.ProcessMessage(m, peer.peerInfo)
peer.adjRib.UpdateIn(originalPaths)
- // apply distribute filter before propagate
- pathList = applyPolicies(peer, nil, POLICY_DIRECTION_DISTRIBUTE, originalPaths)
+ // apply distribute filter before propagate
+ pathList = applyPolicies(peer, nil, POLICY_DIRECTION_DISTRIBUTE, originalPaths)
}
return pathList, update, bgpMsgList
}
@@ -303,34 +303,32 @@ func (peer *Peer) ToApiStruct() *api.Peer {
}
func (peer *Peer) setPolicy(policyMap map[string]*policy.Policy) {
- // configure distribute policy
- policyConfig := peer.config.ApplyPolicy
- distPolicies := make([]*policy.Policy, 0)
- for _, policyName := range policyConfig.DistributePolicies {
- log.WithFields(log.Fields{
- "Topic": "Peer",
- "Key": peer.config.NeighborAddress,
- "PolicyName": policyName,
- }).Info("distribute policy installed")
- if pol, ok := policyMap[policyName]; ok {
- log.Debug("distribute policy : ", pol)
- distPolicies = append(distPolicies, pol)
- }
- }
- peer.distPolicies = distPolicies
- peer.defaultDistributePolicy = policyConfig.DefaultDistributePolicy
+ // configure distribute policy
+ policyConfig := peer.config.ApplyPolicy
+ distPolicies := make([]*policy.Policy, 0)
+ for _, policyName := range policyConfig.DistributePolicies {
+ log.WithFields(log.Fields{
+ "Topic": "Peer",
+ "Key": peer.config.NeighborAddress,
+ "PolicyName": policyName,
+ }).Info("distribute policy installed")
+ if pol, ok := policyMap[policyName]; ok {
+ log.Debug("distribute policy : ", pol)
+ distPolicies = append(distPolicies, pol)
+ }
+ }
+ peer.distPolicies = distPolicies
+ peer.defaultDistributePolicy = policyConfig.DefaultDistributePolicy
}
-
func (peer *Peer) applyPolicies(original table.Path) (bool, table.Path) {
- policies := peer.distPolicies
- var d Direction = POLICY_DIRECTION_DISTRIBUTE
+ policies := peer.distPolicies
+ var d Direction = POLICY_DIRECTION_DISTRIBUTE
- return applyPolicy("Peer", peer.config.NeighborAddress.String(), d, policies, original)
+ return applyPolicy("Peer", peer.config.NeighborAddress.String(), d, policies, original)
}
-
type LocalRib struct {
rib *table.TableManager
importPolicies []*policy.Policy
@@ -412,42 +410,42 @@ func (loc *LocalRib) setPolicy(peer *Peer, policyMap map[string]*policy.Policy)
//
func (loc *LocalRib) applyPolicies(d Direction, original *table.Path) (bool, *table.Path) {
var policies []*policy.Policy
- switch(d) {
- case POLICY_DIRECTION_EXPORT:
- policies = loc.exportPolicies
- case POLICY_DIRECTION_IMPORT:
- policies = loc.importPolicies
- }
- return applyPolicy("Loc", loc.OwnerName(), d, policies, original)
+ switch d {
+ case POLICY_DIRECTION_EXPORT:
+ policies = loc.exportPolicies
+ case POLICY_DIRECTION_IMPORT:
+ policies = loc.importPolicies
+ }
+ return applyPolicy("Loc", loc.OwnerName(), d, policies, original)
}
-func applyPolicy(component, owner string, d Direction, policies []*policy.Policy, original table.Path) (bool, table.Path){
- var applied bool = true
- for _, pol := range policies {
- if result, action, newpath := pol.Apply(original); result {
- log.Debug("newpath: ", newpath)
- if action == policy.ROUTE_TYPE_REJECT {
- log.WithFields(log.Fields{
- "Topic": component,
- "Key": owner,
- "NRLI": original.GetNlri(),
- "Dir": d,
- }).Debug("path was rejected")
- // return applied, nil, this means path was rejected
- return applied, nil
- } else {
- // return applied, new path
- return applied, newpath
- }
- }
- }
-
- log.WithFields(log.Fields{
- "Topic": component,
- "Key": owner,
- "Len": len(policies),
- "NRLI": original,
- "Dir": d,
- }).Debug("no policy applied")
- return !applied, original
-} \ No newline at end of file
+func applyPolicy(component, owner string, d Direction, policies []*policy.Policy, original table.Path) (bool, table.Path) {
+ var applied bool = true
+ for _, pol := range policies {
+ if result, action, newpath := pol.Apply(original); result {
+ log.Debug("newpath: ", newpath)
+ if action == policy.ROUTE_TYPE_REJECT {
+ log.WithFields(log.Fields{
+ "Topic": component,
+ "Key": owner,
+ "NRLI": original.GetNlri(),
+ "Dir": d,
+ }).Debug("path was rejected")
+ // return applied, nil, this means path was rejected
+ return applied, nil
+ } else {
+ // return applied, new path
+ return applied, newpath
+ }
+ }
+ }
+
+ log.WithFields(log.Fields{
+ "Topic": component,
+ "Key": owner,
+ "Len": len(policies),
+ "NRLI": original,
+ "Dir": d,
+ }).Debug("no policy applied")
+ return !applied, original
+}
diff --git a/server/server.go b/server/server.go
index fb957cac..8fd32193 100644
--- a/server/server.go
+++ b/server/server.go
@@ -646,8 +646,8 @@ func (server *BgpServer) handlePolicy(pl config.RoutingPolicy) {
}
targetPeer := server.neighborMap[loc.OwnerName()]
log.WithFields(log.Fields{
- "Topic": "Peer",
- "Key": targetPeer.config.NeighborAddress,
+ "Topic": "Peer",
+ "Key": targetPeer.config.NeighborAddress,
}).Info("call set policy")
loc.setPolicy(targetPeer, server.policyMap)
// set distribute policy
diff --git a/test/scenario_test/policy/policy_generator.go b/test/scenario_test/policy/policy_generator.go
index a4f70d0e..0d6b433c 100644
--- a/test/scenario_test/policy/policy_generator.go
+++ b/test/scenario_test/policy/policy_generator.go
@@ -489,7 +489,7 @@ func createPolicyConfig() *config.RoutingPolicy {
st_distribute_accept := config.Statement{
Name: "st_distriibute_accept",
Conditions: config.Conditions{
- MatchPrefixSet: "ps6",
+ MatchPrefixSet: "ps6",
MatchSetOptions: config.MATCH_SET_OPTIONS_TYPE_ALL,
},
Actions: config.Actions{
@@ -497,7 +497,6 @@ func createPolicyConfig() *config.RoutingPolicy {
},
}
-
st_distribute_comm_add := config.Statement{
Name: "st_distribute_comm_add",
Conditions: config.Conditions{
@@ -727,7 +726,7 @@ func main() {
Target string `short:"t" long:"target" description:"target such as export or import to which add policy"`
PolicyName string `short:"p" long:"policy" description:"policy name bound to peer"`
Replace bool `short:"r" long:"replace" description:"Replace existing policy with new one" default:"false"`
- Reject bool `short:"j" long:"reject" description:"Set default policy reject" default:"false"`
+ Reject bool `short:"j" long:"reject" description:"Set default policy reject" default:"false"`
}
parser := flags.NewParser(&opts, flags.Default)