mirror_frr/zebra
Karen Schoener 13c46fa1a0 zebra: fix zebra pseudowire manager NHT
Intermittently, there is a 30 second delay for a LDP pseudowire to become
operational.

One way to reproduce the issue is: Once PW is up, shutdown link to trigger
a change to the pseudowire's next hop, and then restore link to cause
pseudowire to return to original NH.

Problem Descripton:
    The Zebra PW manager installs pseudowires in the data plane when the
    following two conditions are met:
        1. Pseudowire is labeled via LDP mapping messages
        2. A labeled NH route exists to reach the remote pseudowire endpoint

    The Zebra PW manager registers a NHT callback when a pseudowire is enabled.
    This allows the Zebra PW manager to install or reinstall the pseudowire.

    The Zebra PW manager deregisters for the NHT callback when the pseudowire is
    disabled.  When LDP learns the remote-pseudowire status is 'not forwarding',
    LDP notifies Zebra that the pseudowire is disabled.

    This creates a race condition where a new labeled NH can be resolved after the
    Zebra PW manager deregistered for the NHT callback.

    For static pseudowires, it makes sense for Zebra PW manager to deregister for
    NHT callbacks for disabled pseudowires.  Static pseudowires become disabled
    via CLI configuration commands.

    For LDP pseudowires, the Zebra PW manager should not deregister for NHT
    callbacks for disabled pseudowires.

Overview of changes:
    1. Zebra PW manager should not deregister for NHT callbacks when an LDP
       pseudowire is disabled.
       Zebra PW manager will register for NHT callbacks when the LDP pseudowire
       is first enabled.
       Zebra PW manager will deregister for NHT callbacks when the LDP
       pseudowire is deleted.
    2. Remove the 30 second timer that was added in PR4122.
       PR4122 tried to fix this race condition with a timer.
       Once we eliminate the race condition (by keeping the Zebra PW manager
       registered for NHT callbacks), this timer can be removed.
    3. Zebra PW manager handling of static pseudowires will remain as-is.
       Zebra PW manager will register for NHT callbacks when the static
       pseudowire is enabled.
       Zebra PW manager will deregister for NHT callbacks when the static
       pseudowire is disabled.

Signed-off-by: Lynne Morrison <lynne@voltanet.io>
Signed-off-by: Karen Schoener <karen@voltanet.io>
2020-04-28 14:39:12 -04:00
..
.gitignore *: cleanup .gitignore files 2018-09-08 21:30:42 +02:00
connected.c *: Replace __PRETTY_FUNCTION__/__FUNCTION__ to __func__ 2020-03-05 20:23:23 +02:00
connected.h zebra: Do not use connection dest for bcast 2019-08-18 18:54:46 +02:00
debug.c *: move CLI node names to cmd_node->name 2020-04-16 12:53:59 +02:00
debug.h zebra: add a debug category for nexthops 2019-12-23 08:47:38 -05:00
dplane_fpm_nl.c *: fix first header 2020-04-27 09:52:41 +02:00
if_ioctl_solaris.c *: frr_elevate_privs -> frr_with_privs 2019-09-03 17:18:35 +02:00
if_ioctl.c Revert "Ospf missing interface handling 2" 2019-06-23 19:46:39 -04:00
if_netlink.c zebra: Prevent awful misconfiguration in vrf's 2020-04-22 10:57:29 -04:00
if_netlink.h vrrpd: protodown macvlan in backup state 2019-05-17 00:27:08 +00:00
if_sysctl.c *: spelchek 2018-10-25 20:10:57 +02:00
interface.c Merge pull request #6231 from dslicenc/v6-ra-hoplimit 2020-04-18 22:48:20 +03:00
interface.h Merge pull request #6231 from dslicenc/v6-ra-hoplimit 2020-04-18 22:48:20 +03:00
ioctl_solaris.c *: frr_elevate_privs -> frr_with_privs 2019-09-03 17:18:35 +02:00
ioctl_solaris.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
ioctl.c *: frr_elevate_privs -> frr_with_privs 2019-09-03 17:18:35 +02:00
ioctl.h zebra: removing old intf address code 2019-04-22 13:49:27 -04:00
ipforward_proc.c zebra: Cleanup set but unused variables 2020-02-27 09:41:58 -05:00
ipforward_solaris.c *: frr_elevate_privs -> frr_with_privs 2019-09-03 17:18:35 +02:00
ipforward_sysctl.c *: Replace sizeof something to sizeof(something) 2020-03-08 21:44:53 +02:00
ipforward.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
irdp_interface.c *: replace all random() calls 2020-04-17 20:57:43 -03:00
irdp_main.c *: replace all random() calls 2020-04-17 20:57:43 -03:00
irdp_packet.c *: Replace sizeof something to sizeof(something) 2020-03-08 21:44:53 +02:00
irdp.h *: strip trailing whitespace 2019-09-30 16:44:43 +00:00
kernel_netlink.c zebra: Modify netlink_request to statisfy coverity 2020-04-15 09:01:56 -04:00
kernel_netlink.h zebra: Modify netlink_request to statisfy coverity 2020-04-15 09:01:56 -04:00
kernel_socket.c *: remove line breaks from log messages 2020-03-24 19:43:18 +01:00
kernel_socket.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
label_manager.c zebra,ldpd: use zapi client session id in LM apis 2020-04-16 12:07:54 -04:00
label_manager.h zebra,ldpd: use zapi client session id in LM apis 2020-04-16 12:07:54 -04:00
main.c zebra: nb callbacks support 2020-04-16 08:13:12 -07:00
Makefile
redistribute.c Zebra: Default route distribute handling. 2020-04-07 10:12:14 -07:00
redistribute.h zebra: revise redistribution delete to improve update case 2019-09-12 08:51:05 -04:00
rib.h zebra: add per-nexthop backup index 2020-03-27 11:50:03 -04:00
router-id.c *: Replace s_addr 0 => INADDR_ANY 2020-02-06 09:00:12 +02:00
router-id.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
rt_netlink.c Merge pull request #6262 from qlyoung/remove-sprintf 2020-04-23 20:27:26 +02:00
rt_netlink.h zebra: Expose vrf lookup by table id out of rt_netlink.c 2020-04-22 10:56:06 -04:00
rt_socket.c zebra: BSD null routes were not being installed 2019-11-21 09:37:36 -05:00
rt.h zebra: Add base functionality for nexthop processing via the dataplane 2019-10-25 11:13:36 -04:00
rtadv.c zebra: add ability to set hoplimit for IPv6 RAs 2020-04-15 17:56:57 +00:00
rtadv.h zebra: Don't kill the global rtadv socket when a vrf is deleted 2020-04-02 11:38:26 -04:00
rtread_getmsg.c *: Replace sizeof something to sizeof(something) 2020-03-08 21:44:53 +02:00
rtread_netlink.c zebra: evpn remote delete fetch local entry 2018-12-31 14:40:31 -08:00
rtread_sysctl.c zebra: evpn remote delete fetch local entry 2018-12-31 14:40:31 -08:00
rule_netlink.c zebra: Modify netlink_request to statisfy coverity 2020-04-15 09:01:56 -04:00
rule_netlink.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
rule_socket.c zebra: define some explicit rule replace code paths 2020-04-09 13:37:55 -04:00
sample_plugin.c zebra: Add a sample dataplane plugin module 2019-10-31 16:24:16 -04:00
subdir.am build: make clippy Makefile rules nicer 2020-04-27 09:52:41 +02:00
table_manager.c *: list_delete_and_null() -> list_delete() 2018-10-02 11:40:52 +02:00
table_manager.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
testrib.conf
zapi_msg.c zebra,ldpd: use zapi client session id in LM apis 2020-04-16 12:07:54 -04:00
zapi_msg.h zebra,ldpd: use zapi client session id in LM apis 2020-04-16 12:07:54 -04:00
zebra_dplane.c zebra: notify data plane providers about shutdown 2020-04-17 20:18:58 -03:00
zebra_dplane.h zebra: adapt and export rmac netlink functions 2020-04-14 13:45:39 -03:00
zebra_errors.c zebra: Prevent awful misconfiguration in vrf's 2020-04-22 10:57:29 -04:00
zebra_errors.h zebra: Prevent awful misconfiguration in vrf's 2020-04-22 10:57:29 -04:00
zebra_fpm_dt.c zebra: fix nexthop_group conversion in fpm code 2020-02-28 08:45:56 -05:00
zebra_fpm_netlink.c zebra: Cleanup dead code 2020-04-22 07:29:15 -04:00
zebra_fpm_private.h Zebra: Build nelink message for RMAC updates 2019-06-17 12:05:38 -07:00
zebra_fpm_protobuf.c *: Do not cast to the same type 2020-04-08 17:15:06 +03:00
zebra_fpm.c *: sprintf -> snprintf 2020-04-20 19:14:33 -04:00
zebra_gr.c lib, zebra: remove nullity check before XFREE... 2020-03-09 18:16:32 -04:00
zebra_l2.c zebra: Ensure master's ifname is known, even if slave comes up first 2019-08-13 16:29:40 +00:00
zebra_l2.h zebra: Ensure master's ifname is known, even if slave comes up first 2019-08-13 16:29:40 +00:00
zebra_memory.c zebra: use MTYPE_STATIC 2019-06-21 08:54:25 +02:00
zebra_memory.h zebra: use MTYPE_STATIC 2019-06-21 08:54:25 +02:00
zebra_mlag_private.c zebra: SO_PEERCRED is a getsockopt call 2020-03-06 16:03:52 -05:00
zebra_mlag_vty.c zebra: Do not build mlag protobuf support if version 3 is not avail 2019-12-15 09:37:51 -05:00
zebra_mlag_vty.h lib, zebra: add missing extern "C" {} blocks to new header files 2020-04-22 23:49:22 -03:00
zebra_mlag.c zebra: Fix spelling mistakes found by debian packaging 2020-03-13 19:16:11 -04:00
zebra_mlag.h lib, zebra: add missing extern "C" {} blocks to new header files 2020-04-22 23:49:22 -03:00
zebra_mpls_netlink.c zebra: convert PW updates to async dataplane 2019-01-25 10:45:57 -05:00
zebra_mpls_null.c zebra: convert PW updates to async dataplane 2019-01-25 10:45:57 -05:00
zebra_mpls_openbsd.c *: Remove parenthesis on return for constants 2020-02-09 14:21:56 +02:00
zebra_mpls_vty.c *: move CLI node names to cmd_node->name 2020-04-16 12:53:59 +02:00
zebra_mpls.c *: sprintf -> snprintf 2020-04-20 19:14:33 -04:00
zebra_mpls.h zebra,lib: use const in more apis 2020-03-27 09:37:02 -04:00
zebra_mroute.c zebra: Add some additional vrf debug for retrieving mroute info 2018-09-17 09:22:31 -04:00
zebra_mroute.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
zebra_nb_config.c *: change the signature of the northbound callbacks to be more flexible 2020-04-23 10:14:32 -03:00
zebra_nb_rpcs.c *: change the signature of the northbound callbacks to be more flexible 2020-04-23 10:14:32 -03:00
zebra_nb_state.c *: change the signature of the northbound callbacks to be more flexible 2020-04-23 10:14:32 -03:00
zebra_nb.c zebra: add weight to nb conversion 2020-04-16 08:58:09 -07:00
zebra_nb.h Merge pull request #6279 from opensourcerouting/nb-cb-args 2020-04-24 08:09:16 -04:00
zebra_netns_id.c *: Do not cast to the same type 2020-04-08 17:15:06 +03:00
zebra_netns_id.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
zebra_netns_notify.c *: use appropriate buffer sizes, specifiers 2020-04-20 19:14:33 -04:00
zebra_netns_notify.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
zebra_nhg_private.h lib, zebra: add missing extern "C" {} blocks to new header files 2020-04-22 23:49:22 -03:00
zebra_nhg.c zebra: fix some coverity SA warnings 2020-04-14 07:44:54 -04:00
zebra_nhg.h lib, zebra: add missing extern "C" {} blocks to new header files 2020-04-22 23:49:22 -03:00
zebra_ns.c zebra: read in and sweep rules on startup 2020-04-10 11:05:06 -04:00
zebra_ns.h zebra: Move the supports_nh bool to a better place 2019-10-25 11:13:41 -04:00
zebra_pbr.c *: use appropriate buffer sizes, specifiers 2020-04-20 19:14:33 -04:00
zebra_pbr.h zebra: define some explicit rule replace code paths 2020-04-09 13:37:55 -04:00
zebra_ptm_redistribute.c zebra: Add missing c-bit uint8_t 2020-03-17 16:01:59 -04:00
zebra_ptm_redistribute.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
zebra_ptm.c *: sprintf -> snprintf 2020-04-20 19:14:33 -04:00
zebra_ptm.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
zebra_pw.c zebra: fix zebra pseudowire manager NHT 2020-04-28 14:39:12 -04:00
zebra_pw.h add cplusplus guards to all zebra headers 2019-03-25 16:05:27 +01:00
zebra_rib.c *: sprintf -> snprintf 2020-04-20 19:14:33 -04:00
zebra_rnh.c *: remove tabs from log messages 2020-03-24 18:47:12 +01:00
zebra_rnh.h zebra: nht resolution default configurable per vrf 2019-08-28 16:19:34 +02:00
zebra_routemap.c *: sprintf -> snprintf 2020-04-20 19:14:33 -04:00
zebra_routemap.h zebra: Disable rmap update thread before routemap_finish while shutting down zebra 2020-03-16 23:57:45 -07:00
zebra_router.c zebra: free unhashable (dup) NHEs via ID table cleanup 2020-04-02 11:41:25 -04:00
zebra_router.h zebra: implement zebra route map northbound 2020-03-23 07:55:13 -03:00
zebra_snmp.c zebra: in_addr_cmp and struct prefix are not happy 2020-04-16 20:14:55 -04:00
zebra_vrf.c zebra: Don't kill the global rtadv socket when a vrf is deleted 2020-04-02 11:38:26 -04:00
zebra_vrf.h zebra: Add vrf name and id to debugs 2020-04-12 21:03:29 +02:00
zebra_vty.c Merge pull request #6247 from FRRouting/nb_conversions 2020-04-16 19:39:14 -04:00
zebra_vxlan_private.h zebra: adapt and export rmac netlink functions 2020-04-14 13:45:39 -03:00
zebra_vxlan.c *: sprintf -> snprintf 2020-04-20 19:14:33 -04:00
zebra_vxlan.h zebra: clear dup detect cleanup for nb conversion 2020-04-16 08:13:15 -07:00
zebra.conf.sample
zserv.c lib,zebra: add a session id for zapi sessions 2020-04-16 12:07:54 -04:00
zserv.h lib,zebra: add a session id for zapi sessions 2020-04-16 12:07:54 -04:00