summaryrefslogtreecommitdiffhomepage
path: root/config/serve.go
diff options
context:
space:
mode:
Diffstat (limited to 'config/serve.go')
-rw-r--r--config/serve.go40
1 files changed, 37 insertions, 3 deletions
diff --git a/config/serve.go b/config/serve.go
index eeb7cb4d..ac893ea7 100644
--- a/config/serve.go
+++ b/config/serve.go
@@ -83,6 +83,15 @@ func inSlice(n Neighbor, b []Neighbor) int {
return -1
}
+func existPeerGroup(n string, b []PeerGroup) int {
+ for i, nb := range b {
+ if nb.Config.PeerGroupName == n {
+ return i
+ }
+ }
+ return -1
+}
+
func ConfigSetToRoutingPolicy(c *BgpConfigSet) *RoutingPolicy {
return &RoutingPolicy{
DefinedSets: c.DefinedSets,
@@ -90,8 +99,34 @@ func ConfigSetToRoutingPolicy(c *BgpConfigSet) *RoutingPolicy {
}
}
-func UpdateConfig(curC, newC *BgpConfigSet) ([]Neighbor, []Neighbor, []Neighbor, bool) {
+func UpdatePeerGroupConfig(curC, newC *BgpConfigSet) ([]PeerGroup, []PeerGroup, []PeerGroup) {
+ addedPg := []PeerGroup{}
+ deletedPg := []PeerGroup{}
+ updatedPg := []PeerGroup{}
+ for _, n := range newC.PeerGroups {
+ if idx := existPeerGroup(n.Config.PeerGroupName, curC.PeerGroups); idx < 0 {
+ addedPg = append(addedPg, n)
+ } else if !n.Equal(&curC.PeerGroups[idx]) {
+ log.WithFields(log.Fields{
+ "Topic": "Config",
+ }).Debugf("Current peer-group config:%s", curC.PeerGroups[idx])
+ log.WithFields(log.Fields{
+ "Topic": "Config",
+ }).Debugf("New peer-group config:%s", n)
+ updatedPg = append(updatedPg, n)
+ }
+ }
+
+ for _, n := range curC.PeerGroups {
+ if existPeerGroup(n.Config.PeerGroupName, newC.PeerGroups) < 0 {
+ deletedPg = append(deletedPg, n)
+ }
+ }
+ return addedPg, deletedPg, updatedPg
+}
+
+func UpdateNeighborConfig(curC, newC *BgpConfigSet) ([]Neighbor, []Neighbor, []Neighbor) {
added := []Neighbor{}
deleted := []Neighbor{}
updated := []Neighbor{}
@@ -115,8 +150,7 @@ func UpdateConfig(curC, newC *BgpConfigSet) ([]Neighbor, []Neighbor, []Neighbor,
deleted = append(deleted, n)
}
}
-
- return added, deleted, updated, CheckPolicyDifference(ConfigSetToRoutingPolicy(curC), ConfigSetToRoutingPolicy(newC))
+ return added, deleted, updated
}
func CheckPolicyDifference(currentPolicy *RoutingPolicy, newPolicy *RoutingPolicy) bool {