Enhance struct bgp to add a new flag BGP_FLAG_GR_PRESERVE_FWD, which allow to set the Preserve State F bit of Graceful Restart capability in OPEN messages.
Signed-off-by: Julien Courtat <julien.cour...@6wind.com> --- bgpd/bgp_open.c | 15 +++++++++------ bgpd/bgpd.h | 1 + 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c index 39c038c..bc17990 100644 --- a/bgpd/bgp_open.c +++ b/bgpd/bgp_open.c @@ -385,17 +385,16 @@ bgp_capability_restart (struct peer *peer, struct capability_header *caphdr) } else { + SET_FLAG (peer->af_cap[afi][safi], PEER_CAP_RESTART_AF_RCV); + if (CHECK_FLAG (flag, RESTART_F_BIT)) + SET_FLAG (peer->af_cap[afi][safi], PEER_CAP_RESTART_AF_PRESERVE_RCV); + if (BGP_DEBUG (normal, NORMAL)) zlog_debug ("%s Address family %s is%spreserved", peer->host, afi_safi_print (afi, safi), CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_RESTART_AF_PRESERVE_RCV) ? " " : " not "); - - SET_FLAG (peer->af_cap[afi][safi], PEER_CAP_RESTART_AF_RCV); - if (CHECK_FLAG (flag, RESTART_F_BIT)) - SET_FLAG (peer->af_cap[afi][safi], PEER_CAP_RESTART_AF_PRESERVE_RCV); - } } return 0; @@ -1120,11 +1119,15 @@ bgp_open_capability (struct stream *s, struct peer *peer) { for (afi = AFI_IP ; afi < AFI_MAX ; afi++) for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++) + if (peer->afc[afi][safi]) { stream_putw (s, afi); stream_putc (s, (safi == SAFI_MPLS_VPN) ? SAFI_MPLS_LABELED_VPN : safi); - stream_putc (s, 0); //Forwarding is not retained as of now. + if (bgp_flag_check(peer->bgp, BGP_FLAG_GR_PRESERVE_FWD)) + stream_putc (s, RESTART_F_BIT); + else + stream_putc (s, 0); } } diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index 98f5451..7e92cb6 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -140,6 +140,7 @@ struct bgp #define BGP_FLAG_ASPATH_MULTIPATH_RELAX (1 << 14) #define BGP_FLAG_DELETING (1 << 15) #define BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY (1 << 16) +#define BGP_FLAG_GR_PRESERVE_FWD (1 << 17) /* BGP Per AF flags */ u_int16_t af_flags[AFI_MAX][SAFI_MAX]; -- 2.1.4 _______________________________________________ Quagga-dev mailing list Quagga-dev@lists.quagga.net https://lists.quagga.net/mailman/listinfo/quagga-dev