diff options
author | IWASE Yusuke <iwase.yusuke0@gmail.com> | 2017-09-14 11:23:46 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2017-10-03 14:53:44 +0900 |
commit | 6ed2c5624cbc7d2dcee126603e5f7893910d17d4 (patch) | |
tree | f033fe04e194d8131ce6e98e9e179005b758d234 /server/fsm.go | |
parent | 0db5461625d75fc85f1a1144d17af8d0f61b5473 (diff) |
config: add-paths structure per AFI-SAFI
This patch introduce "add-paths" structure per AFI-SAFI in order to
enable to store add-paths feature config/state per AFI-SAFI.
Also, this patch renames a few variables to avoid the name collisions.
Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com>
Diffstat (limited to 'server/fsm.go')
-rw-r--r-- | server/fsm.go | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/server/fsm.go b/server/fsm.go index 0d208eb4..03542263 100644 --- a/server/fsm.go +++ b/server/fsm.go @@ -559,6 +559,26 @@ func (h *FSMHandler) active() (bgp.FSMState, FsmStateReason) { } } +func capAddPathFromConfig(pConf *config.Neighbor) bgp.ParameterCapabilityInterface { + tuples := make([]*bgp.CapAddPathTuple, 0, len(pConf.AfiSafis)) + for _, af := range pConf.AfiSafis { + var mode bgp.BGPAddPathMode + if af.AddPaths.State.Receive { + mode |= bgp.BGP_ADD_PATH_RECEIVE + } + if af.AddPaths.State.SendMax > 0 { + mode |= bgp.BGP_ADD_PATH_SEND + } + if mode > 0 { + tuples = append(tuples, bgp.NewCapAddPathTuple(af.State.Family, mode)) + } + } + if len(tuples) == 0 { + return nil + } + return bgp.NewCapAddPath(tuples) +} + func capabilitiesFromConfig(pConf *config.Neighbor) []bgp.ParameterCapabilityInterface { caps := make([]bgp.ParameterCapabilityInterface, 0, 4) caps = append(caps, bgp.NewCapRouteRefresh()) @@ -595,9 +615,9 @@ func capabilitiesFromConfig(pConf *config.Neighbor) []bgp.ParameterCapabilityInt } } } - time := c.RestartTime + restartTime := c.RestartTime notification := c.NotificationEnabled - caps = append(caps, bgp.NewCapGracefulRestart(restarting, notification, time, tuples)) + caps = append(caps, bgp.NewCapGracefulRestart(restarting, notification, restartTime, tuples)) if c.LongLivedEnabled { caps = append(caps, bgp.NewCapLongLivedGracefulRestart(ltuples)) } @@ -614,23 +634,12 @@ func capabilitiesFromConfig(pConf *config.Neighbor) []bgp.ParameterCapabilityInt tuple := bgp.NewCapExtendedNexthopTuple(family, bgp.AFI_IP6) tuples = append(tuples, tuple) } - cap := bgp.NewCapExtendedNexthop(tuples) - caps = append(caps, cap) + caps = append(caps, bgp.NewCapExtendedNexthop(tuples)) } - var mode bgp.BGPAddPathMode - if pConf.AddPaths.Config.Receive { - mode |= bgp.BGP_ADD_PATH_RECEIVE - } - if pConf.AddPaths.Config.SendMax > 0 { - mode |= bgp.BGP_ADD_PATH_SEND - } - if uint8(mode) > 0 { - items := make([]*bgp.CapAddPathTuple, 0, len(pConf.AfiSafis)) - for _, af := range pConf.AfiSafis { - items = append(items, bgp.NewCapAddPathTuple(af.State.Family, mode)) - } - caps = append(caps, bgp.NewCapAddPath(items)) + // ADD-PATH Capability + if c := capAddPathFromConfig(pConf); c != nil { + caps = append(caps, capAddPathFromConfig(pConf)) } return caps |