From 27ba970b9eabd254aea24848420c4d3b8674761f Mon Sep 17 00:00:00 2001 From: Xufeng Zhang Date: Thu, 24 Oct 2013 17:48:41 +0800 Subject: quagga/ripd: Fix two bugs after received SIGHUP signal There are two problems for ripd implementation after received SIGHUP signal: 1). ripd didn't clean up ifp->connected list before reload configuration file which makes the same advertise packet being sent multiple times(depends on how many SIGHUP was recieved). 2). ripd reset ri->split_horizon flag to RIP_NO_SPLIT_HORIZON during restart which is different from the flag when ripd is firstly started up, leading to unnecessary route to be advertised. [YOCTO #5266] Signed-off-by: Xufeng Zhang Signed-off-by: Joe MacDonald --- .../ripd-fix-two-bugs-after-received-SIGHUP.patch | 50 ++++++++++++++++++++++ .../recipes-protocols/quagga/quagga.inc | 3 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 meta-networking/recipes-protocols/quagga/files/ripd-fix-two-bugs-after-received-SIGHUP.patch (limited to 'meta-networking') diff --git a/meta-networking/recipes-protocols/quagga/files/ripd-fix-two-bugs-after-received-SIGHUP.patch b/meta-networking/recipes-protocols/quagga/files/ripd-fix-two-bugs-after-received-SIGHUP.patch new file mode 100644 index 0000000000..4b8c9a929b --- /dev/null +++ b/meta-networking/recipes-protocols/quagga/files/ripd-fix-two-bugs-after-received-SIGHUP.patch @@ -0,0 +1,50 @@ +ripd: Fix two bugs after received SIGHUP signal + +There are two problems for ripd implementation after received +SIGHUP signal: +1). ripd didn't clean up ifp->connected list before reload + configuration file. +2). ripd reset ri->split_horizon flag to RIP_NO_SPLIT_HORIZON + which lead to the unnecessary route to be advertised. + +Upstream-Status: Submitted [http://patchwork.diac24.net/patch/604/] + +Signed-off-by: Xufeng Zhang +Signed-off-by: Joe MacDonald +--- +--- a/ripd/rip_interface.c ++++ b/ripd/rip_interface.c +@@ -500,6 +500,8 @@ + struct listnode *node; + struct interface *ifp; + struct rip_interface *ri; ++ struct connected *ifc; ++ struct listnode *conn_node, *next; + + for (ALL_LIST_ELEMENTS_RO (iflist, node, ifp)) + { +@@ -514,6 +516,13 @@ + thread_cancel (ri->t_wakeup); + ri->t_wakeup = NULL; + } ++ ++ for (conn_node = listhead (ifp->connected); conn_node; conn_node = next) ++ { ++ ifc = listgetdata (conn_node); ++ next = conn_node->next; ++ listnode_delete (ifp->connected, ifc); ++ } + } + } + +@@ -548,8 +557,8 @@ + ri->key_chain = NULL; + } + +- ri->split_horizon = RIP_NO_SPLIT_HORIZON; +- ri->split_horizon_default = RIP_NO_SPLIT_HORIZON; ++ ri->split_horizon = RIP_SPLIT_HORIZON; ++ ri->split_horizon_default = RIP_SPLIT_HORIZON; + + ri->list[RIP_FILTER_IN] = NULL; + ri->list[RIP_FILTER_OUT] = NULL; diff --git a/meta-networking/recipes-protocols/quagga/quagga.inc b/meta-networking/recipes-protocols/quagga/quagga.inc index 8720876061..9d900afae0 100644 --- a/meta-networking/recipes-protocols/quagga/quagga.inc +++ b/meta-networking/recipes-protocols/quagga/quagga.inc @@ -31,7 +31,8 @@ SRC_URI = "http://download.savannah.gnu.org/releases/quagga${QUAGGASUBDIR}/quagg file://quagga.default \ file://watchquagga.init \ file://watchquagga.default \ - file://volatiles.03_quagga" + file://volatiles.03_quagga \ + file://ripd-fix-two-bugs-after-received-SIGHUP.patch" PACKAGECONFIG ??= "" PACKAGECONFIG[cap] = "--enable-capabilities,--disable-capabilities,libcap" -- cgit 1.2.3-korg