From f6c70e980d41066df51ce8cf63f2351911391e47 Mon Sep 17 00:00:00 2001 From: ISHIDA Wataru Date: Wed, 27 Apr 2016 09:41:29 +0000 Subject: config: make route-target config struct aligned with open-config model have config/state container Signed-off-by: ISHIDA Wataru --- config/bgp_configs.go | 43 +++++++++++++++++++++++++++++++++++++++--- server/server.go | 6 +++--- test/lib/gobgp.py | 2 +- tools/pyang_plugins/gobgp.yang | 15 ++++++++++++--- 4 files changed, 56 insertions(+), 10 deletions(-) diff --git a/config/bgp_configs.go b/config/bgp_configs.go index 7beaeec9..d69995d1 100644 --- a/config/bgp_configs.go +++ b/config/bgp_configs.go @@ -2561,13 +2561,29 @@ func (lhs *Zebra) Equal(rhs *Zebra) bool { return true } -//struct for container gobgp:route-target-membership -type RouteTargetMembership struct { +//struct for container gobgp:state +type RouteTargetMembershipState struct { // original -> gobgp:deferral-time DeferralTime uint16 `mapstructure:"deferral-time"` } -func (lhs *RouteTargetMembership) Equal(rhs *RouteTargetMembership) bool { +func (lhs *RouteTargetMembershipState) Equal(rhs *RouteTargetMembershipState) bool { + if lhs == nil || rhs == nil { + return false + } + if lhs.DeferralTime != rhs.DeferralTime { + return false + } + return true +} + +//struct for container gobgp:config +type RouteTargetMembershipConfig struct { + // original -> gobgp:deferral-time + DeferralTime uint16 `mapstructure:"deferral-time"` +} + +func (lhs *RouteTargetMembershipConfig) Equal(rhs *RouteTargetMembershipConfig) bool { if lhs == nil || rhs == nil { return false } @@ -2577,6 +2593,27 @@ func (lhs *RouteTargetMembership) Equal(rhs *RouteTargetMembership) bool { return true } +//struct for container gobgp:route-target-membership +type RouteTargetMembership struct { + // original -> gobgp:route-target-membership-config + Config RouteTargetMembershipConfig `mapstructure:"config"` + // original -> gobgp:route-target-membership-state + State RouteTargetMembershipState `mapstructure:"state"` +} + +func (lhs *RouteTargetMembership) Equal(rhs *RouteTargetMembership) bool { + if lhs == nil || rhs == nil { + return false + } + if !lhs.Config.Equal(&(rhs.Config)) { + return false + } + if !lhs.State.Equal(&(rhs.State)) { + return false + } + return true +} + //struct for container bgp-mp:l2vpn-evpn type L2vpnEvpn struct { // original -> bgp-mp:prefix-limit diff --git a/server/server.go b/server/server.go index 37c43447..bed5029f 100644 --- a/server/server.go +++ b/server/server.go @@ -766,9 +766,9 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) []*SenderMsg { // waiting sending non-route-target NLRIs since the peer won't send // any routes (and EORs) before we send ours (or deferral-timer expires). var pathList []*table.Path - if c := config.GetAfiSafi(peer.fsm.pConf, bgp.RF_RTC_UC); !peer.fsm.pConf.GracefulRestart.State.PeerRestarting && peer.fsm.rfMap[bgp.RF_RTC_UC] && c.RouteTargetMembership.DeferralTime > 0 { + if c := config.GetAfiSafi(peer.fsm.pConf, bgp.RF_RTC_UC); !peer.fsm.pConf.GracefulRestart.State.PeerRestarting && peer.fsm.rfMap[bgp.RF_RTC_UC] && c.RouteTargetMembership.Config.DeferralTime > 0 { pathList, _ = peer.getBestFromLocal([]bgp.RouteFamily{bgp.RF_RTC_UC}) - t := c.RouteTargetMembership.DeferralTime + t := c.RouteTargetMembership.Config.DeferralTime for _, f := range peer.configuredRFlist() { if f != bgp.RF_RTC_UC { time.AfterFunc(time.Second*time.Duration(t), deferralExpiredFunc(f)) @@ -944,7 +944,7 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *FsmMsg) []*SenderMsg { // received EOR of route-target address family // outbound filter is now ready, let's flash non-route-target NLRIs - if c := config.GetAfiSafi(peer.fsm.pConf, bgp.RF_RTC_UC); rtc && c != nil && c.RouteTargetMembership.DeferralTime > 0 { + if c := config.GetAfiSafi(peer.fsm.pConf, bgp.RF_RTC_UC); rtc && c != nil && c.RouteTargetMembership.Config.DeferralTime > 0 { log.WithFields(log.Fields{ "Topic": "Peer", "Key": peer.ID(), diff --git a/test/lib/gobgp.py b/test/lib/gobgp.py index 5b7a847e..12846749 100644 --- a/test/lib/gobgp.py +++ b/test/lib/gobgp.py @@ -237,7 +237,7 @@ class GoBGPContainer(BGPContainer): afi_safi_list.append({'config': {'afi-safi-name': 'l3vpn-ipv4-unicast'}}) afi_safi_list.append({'config': {'afi-safi-name': 'l3vpn-ipv6-unicast'}}) afi_safi_list.append({'config': {'afi-safi-name': 'l2vpn-evpn'}}) - afi_safi_list.append({'config': {'afi-safi-name': 'rtc'}, 'route-target-membership': {'deferral-time': 10}}) + afi_safi_list.append({'config': {'afi-safi-name': 'rtc'}, 'route-target-membership': {'config': {'deferral-time': 10}}}) if info['flowspec']: afi_safi_list.append({'config': {'afi-safi-name': 'ipv4-flowspec'}}) diff --git a/tools/pyang_plugins/gobgp.yang b/tools/pyang_plugins/gobgp.yang index 6650711d..9ca5f78d 100644 --- a/tools/pyang_plugins/gobgp.yang +++ b/tools/pyang_plugins/gobgp.yang @@ -816,11 +816,20 @@ module gobgp { uses bgp-mp:all-afi-safi-common; } + grouping route-target-membership-config { + leaf deferral-time { + type uint16; + } + } + augment "/bgp:bgp/bgp:global/bgp:afi-safis/bgp:afi-safi" { container route-target-membership { - leaf deferral-time { - type uint16; - } + container config { + uses route-target-membership-config; + } + container state { + uses route-target-membership-config; + } } } } -- cgit v1.2.3