@@ -1587,15 +1587,12 @@ static void bgp_peer_send_gr_capability(struct stream *s, struct peer *peer,
15871587 uint32_t restart_time ;
15881588 unsigned long capp = 0 ;
15891589 unsigned long rcapp = 0 ;
1590+ struct bgp * bgp = peer -> bgp ;
15901591
15911592 if (!CHECK_FLAG (peer -> flags , PEER_FLAG_GRACEFUL_RESTART )
15921593 && !CHECK_FLAG (peer -> flags , PEER_FLAG_GRACEFUL_RESTART_HELPER ))
15931594 return ;
15941595
1595- if (BGP_DEBUG (graceful_restart , GRACEFUL_RESTART ))
1596- zlog_debug ("[BGP_GR] Sending helper Capability for Peer :%s :" ,
1597- peer -> host );
1598-
15991596 SET_FLAG (peer -> cap , PEER_CAP_RESTART_ADV );
16001597 stream_putc (s , BGP_OPEN_OPT_CAP );
16011598 capp = stream_get_endp (s ); /* Set Capability Len Pointer */
@@ -1605,54 +1602,57 @@ static void bgp_peer_send_gr_capability(struct stream *s, struct peer *peer,
16051602 /* Set Restart Capability Len Pointer */
16061603 rcapp = stream_get_endp (s );
16071604 stream_putc (s , 0 );
1608- restart_time = peer -> bgp -> restart_time ;
1609- if (peer -> bgp -> t_startup ) {
1605+ restart_time = bgp -> restart_time ;
1606+ if (bgp_in_graceful_restart () ) {
16101607 SET_FLAG (restart_time , GRACEFUL_RESTART_R_BIT );
16111608 SET_FLAG (peer -> cap , PEER_CAP_GRACEFUL_RESTART_R_BIT_ADV );
1612- if (BGP_DEBUG (graceful_restart , GRACEFUL_RESTART ))
1613- zlog_debug ("[BGP_GR] Sending R-Bit for peer: %s" ,
1614- peer -> host );
16151609 }
16161610
1617- if (CHECK_FLAG (peer -> bgp -> flags , BGP_FLAG_GRACEFUL_NOTIFICATION )) {
1611+ if (CHECK_FLAG (bgp -> flags , BGP_FLAG_GRACEFUL_NOTIFICATION )) {
16181612 SET_FLAG (restart_time , GRACEFUL_RESTART_N_BIT );
16191613 SET_FLAG (peer -> cap , PEER_CAP_GRACEFUL_RESTART_N_BIT_ADV );
1620- if (BGP_DEBUG (graceful_restart , GRACEFUL_RESTART ))
1621- zlog_debug ("[BGP_GR] Sending N-Bit for peer: %s" ,
1622- peer -> host );
16231614 }
16241615
16251616 stream_putw (s , restart_time );
16261617
1618+ if (BGP_DEBUG (graceful_restart , GRACEFUL_RESTART ))
1619+ zlog_debug ("%s: Sending GR Capability, Restart time %d R-bit %s, N-bit %s" ,
1620+ peer -> host , bgp -> restart_time ,
1621+ CHECK_FLAG (peer -> cap ,
1622+ PEER_CAP_GRACEFUL_RESTART_R_BIT_ADV )
1623+ ? "SET"
1624+ : "NOT-SET" ,
1625+ CHECK_FLAG (peer -> cap ,
1626+ PEER_CAP_GRACEFUL_RESTART_N_BIT_ADV )
1627+ ? "SET"
1628+ : "NOT-SET" );
1629+
16271630 /* Send address-family specific graceful-restart capability
16281631 * only when GR config is present
16291632 */
16301633 if (CHECK_FLAG (peer -> flags , PEER_FLAG_GRACEFUL_RESTART )) {
1631- if (CHECK_FLAG (peer -> bgp -> flags , BGP_FLAG_GR_PRESERVE_FWD )
1632- && BGP_DEBUG (graceful_restart , GRACEFUL_RESTART ))
1633- zlog_debug ("[BGP_GR] F bit Set" );
1634-
16351634 FOREACH_AFI_SAFI (afi , safi ) {
1635+ bool f_bit = false;
1636+
16361637 if (!peer -> afc [afi ][safi ])
16371638 continue ;
16381639
1639- if (BGP_DEBUG (graceful_restart , GRACEFUL_RESTART ))
1640- zlog_debug (
1641- "[BGP_GR] Sending GR Capability for AFI :%d :, SAFI :%d:" ,
1642- afi , safi );
1643-
16441640 /* Convert AFI, SAFI to values for
16451641 * packet.
16461642 */
16471643 bgp_map_afi_safi_int2iana (afi , safi , & pkt_afi ,
16481644 & pkt_safi );
16491645 stream_putw (s , pkt_afi );
16501646 stream_putc (s , pkt_safi );
1651- if (CHECK_FLAG (peer -> bgp -> flags ,
1652- BGP_FLAG_GR_PRESERVE_FWD ))
1653- stream_putc (s , GRACEFUL_RESTART_F_BIT );
1654- else
1655- stream_putc (s , 0 );
1647+
1648+ f_bit = bgp_gr_is_forwarding_preserved (bgp );
1649+
1650+ if (BGP_DEBUG (graceful_restart , GRACEFUL_RESTART ))
1651+ zlog_debug ("... F-bit %s for %s" ,
1652+ f_bit ? "SET" : "NOT-SET" ,
1653+ get_afi_safi_str (afi , safi , false));
1654+
1655+ stream_putc (s , f_bit ? GRACEFUL_RESTART_F_BIT : 0 );
16561656 }
16571657 }
16581658
0 commit comments