NSR
NSF/GR uses modifications to existing protocols (OSPF, ISIS, BGP and LDP) to allow a router to switchover from an active RP to a standby RP without disruption to the routing protocol adjacency. This adds quite a bit of complexity and each protocol handles GR slightly differently. Wouldn’t it be better if the router could internally sync it’s active RP and standby RP, so that when a switchover happens, the standby RP already knows the adjancy states, LSDBs, etc, and the neighbor does not need to “help” rebuild the RIB?
This is exactly what NSR enables. NSR stands for Non-stop routing and can be enabled and used on a router without any support or negotiation with its neighbors. NSR is transparent, because a neighbor will not know whether the router underwent a SSO event. It is a completely internal process on the router preforming switchover.
ISIS NSR
We saw in the previous article that the cisco mode for nsf effectively enables NSR. On IOS-XE I believe this is still the only way to achieve NSR for ISIS. On IOS-XR you have the option of NSF modes plus NSR. My guess is that cisco mode and NSR effectively do the same thing.
csr1000v(config)#router isis
csr1000v(config-router)#nsf cisco
RP/0/0/CPU0:XRv(config-isis)#nsf ?
cisco Cisco Proprietary NSF restart
ietf IETF NSF restart
interface-expires # of times T1 can expire waiting for the restart ACK
interface-timer Timer used to wait for a restart ACK (seconds)
lifetime Maximum route lifetime following restart (seconds)
RP/0/0/CPU0:XRv(config-isis)#nsr ?
<cr>
OSPF NSR
NSR for OSPF is quite straightforward. Simply enable nsr under the ospf process.
csr1000v(config)#router ospf 1
csr1000v(config-router)#nsr
RP/0/0/CPU0:XRv(config)#router ospf 1
RP/0/0/CPU0:XRv(config-ospf)#nsr
LDP NSR
Likewise NSR for LDP is simple. NSR for LDP syncs the LIB with the standby RP so that during a switchover event, all label bindings and LDP adjacencies are retained.
csr1000v(config)#mpls ldp nsr
RP/0/0/CPU0:XRv(config)#mpls ldp
RP/0/0/CPU0:XRv(config-ldp)#nsr
BGP NSR
To enable NSR in XR you use the following command:
RP/0/0/CPU0:XRv(config)#router bgp 65000
RP/0/0/CPU0:XRv(config-bgp)#nsr
The command syntax for XE is slightly different:
csr1000v(config)#router bgp 65000
csr1000v(config-router)#bgp ha-mode sso
In both cases it appears that you are supposed to also enable GR, and the router will preform GR if the peer supports it. If not, the router can use NSR.
In IOS-XE you can also enable NSR or GR on a per-neighbor basis:
csr1000v(config-router)#neighbor 1.1.1.1 ha-mode ?
graceful-restart graceful-restart for this peer
sso stateful-switchover support for this peer
Futher Reading
https://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/sbb_bnsr.html
Last updated