Mailing List Archive

[PATCH 2/6] bgpd: enable send of Graceful Restart Preserve State F bit
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.courtat@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