|
@@ -1,187 +0,0 @@
|
|
|
-From: Matthias Schiffer <mschiffer@universe-factory.net>
|
|
|
-Date: Sun, 12 Jan 2014 00:42:43 +0100
|
|
|
-Subject: radvd: update to 1.9.8 and add patch to fix race condition
|
|
|
-
|
|
|
-diff --git a/ipv6/radvd/Makefile b/ipv6/radvd/Makefile
|
|
|
-index 571d9de..b14c02b 100644
|
|
|
---- a/ipv6/radvd/Makefile
|
|
|
-+++ b/ipv6/radvd/Makefile
|
|
|
-@@ -8,13 +8,13 @@
|
|
|
- include $(TOPDIR)/rules.mk
|
|
|
-
|
|
|
- PKG_NAME:=radvd
|
|
|
--PKG_VERSION:=1.9.1
|
|
|
--PKG_RELEASE:=2
|
|
|
-+PKG_VERSION:=1.9.8
|
|
|
-+PKG_RELEASE:=1
|
|
|
-
|
|
|
- PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
|
|
- PKG_SOURCE_URL:=http://v6web.litech.org/radvd/dist \
|
|
|
- http://download.sourcemage.org/mirror
|
|
|
--PKG_MD5SUM:=e807ad7e9a76d46b6133df391385cd31
|
|
|
-+PKG_MD5SUM:=7a96a38252c3964ee18bbc1fdeae25fa
|
|
|
-
|
|
|
- PKG_INSTALL:=1
|
|
|
-
|
|
|
-diff --git a/ipv6/radvd/patches/100-silent-netlink-config-reload.patch b/ipv6/radvd/patches/100-silent-netlink-config-reload.patch
|
|
|
-index 049d654..313b8cb 100644
|
|
|
---- a/ipv6/radvd/patches/100-silent-netlink-config-reload.patch
|
|
|
-+++ b/ipv6/radvd/patches/100-silent-netlink-config-reload.patch
|
|
|
-@@ -1,26 +1,26 @@
|
|
|
- --- a/netlink.c
|
|
|
- +++ b/netlink.c
|
|
|
--@@ -67,7 +67,7 @@ void process_netlink_msg(int sock)
|
|
|
-- else {
|
|
|
-- dlog(LOG_DEBUG, 3, "%s, ifindex %d, flags is *NOT* running", ifname, ifinfo->ifi_index);
|
|
|
-- }
|
|
|
--- reload_config();
|
|
|
--+ reload_config(LOG_DEBUG);
|
|
|
-- }
|
|
|
-- }
|
|
|
--
|
|
|
-+@@ -75,7 +75,7 @@ void process_netlink_msg(int sock)
|
|
|
-+ dlog(LOG_DEBUG, 3, "%s, ifindex %d, flags is *NOT* running", ifname, ifinfo->ifi_index);
|
|
|
-+ }
|
|
|
-+ if (!reloaded) {
|
|
|
-+- reload_config();
|
|
|
-++ reload_config(LOG_DEBUG);
|
|
|
-+ reloaded = 1;
|
|
|
-+ }
|
|
|
-+ }
|
|
|
- --- a/radvd.c
|
|
|
- +++ b/radvd.c
|
|
|
- @@ -443,7 +443,7 @@ void main_loop(void)
|
|
|
-- if (sighup_received)
|
|
|
-- {
|
|
|
-+
|
|
|
-+ if (sighup_received) {
|
|
|
- dlog(LOG_INFO, 3, "sig hup received.\n");
|
|
|
- - reload_config();
|
|
|
- + reload_config(LOG_INFO);
|
|
|
- sighup_received = 0;
|
|
|
- }
|
|
|
-
|
|
|
--@@ -552,11 +552,11 @@ stop_adverts(void)
|
|
|
-+@@ -545,11 +545,11 @@ void stop_adverts(void)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-@@ -32,9 +32,9 @@
|
|
|
- - flog(LOG_INFO, "attempting to reread config file");
|
|
|
- + flog(loglevel, "attempting to reread config file");
|
|
|
-
|
|
|
-- iface=IfaceList;
|
|
|
-- while(iface)
|
|
|
--@@ -626,7 +626,7 @@ void reload_config(void)
|
|
|
-+ iface = IfaceList;
|
|
|
-+ while (iface) {
|
|
|
-+@@ -614,7 +614,7 @@ void reload_config(void)
|
|
|
- config_interface();
|
|
|
- kickoff_adverts();
|
|
|
-
|
|
|
-@@ -42,10 +42,10 @@
|
|
|
- + flog(loglevel, "resuming normal operation");
|
|
|
- }
|
|
|
-
|
|
|
-- void
|
|
|
-+ void sighup_handler(int sig)
|
|
|
- --- a/radvd.h
|
|
|
- +++ b/radvd.h
|
|
|
--@@ -185,7 +185,7 @@ int yylex(void);
|
|
|
-+@@ -186,7 +186,7 @@ int yylex(void);
|
|
|
-
|
|
|
- /* radvd.c */
|
|
|
- int check_ip6_forwarding(void);
|
|
|
-@@ -56,7 +56,7 @@
|
|
|
- /* timer.c */
|
|
|
- --- a/send.c
|
|
|
- +++ b/send.c
|
|
|
--@@ -154,7 +154,7 @@ send_ra(struct Interface *iface, struct
|
|
|
-+@@ -143,7 +143,7 @@ int send_ra(struct Interface *iface, str
|
|
|
- * reload_config() will kick off new timers anyway. This avoids
|
|
|
- * timer list corruption.
|
|
|
- */
|
|
|
-diff --git a/ipv6/radvd/patches/200-handle-setup_linklocal_addr-failure.patch b/ipv6/radvd/patches/200-handle-setup_linklocal_addr-failure.patch
|
|
|
-new file mode 100644
|
|
|
-index 0000000..3f22f76
|
|
|
---- /dev/null
|
|
|
-+++ b/ipv6/radvd/patches/200-handle-setup_linklocal_addr-failure.patch
|
|
|
-@@ -0,0 +1,78 @@
|
|
|
-+diff --git a/device-linux.c b/device-linux.c
|
|
|
-+index bbf508d..054937e 100644
|
|
|
-+--- a/device-linux.c
|
|
|
-++++ b/device-linux.c
|
|
|
-+@@ -141,7 +141,13 @@ int setup_linklocal_addr(struct Interface *iface)
|
|
|
-+ }
|
|
|
-+ }
|
|
|
-+
|
|
|
-+- flog(LOG_ERR, "no linklocal address configured for %s", iface->Name);
|
|
|
-++ if (iface->IgnoreIfMissing)
|
|
|
-++ dlog(LOG_DEBUG, 4, "no linklocal address configured for %s", iface->Name);
|
|
|
-++ else
|
|
|
-++ flog(LOG_ERR, "no linklocal address configured for %s", iface->Name);
|
|
|
-++
|
|
|
-++ iface->if_index = 0;
|
|
|
-++
|
|
|
-+ fclose(fp);
|
|
|
-+ return (-1);
|
|
|
-+ }
|
|
|
-+diff --git a/gram.y b/gram.y
|
|
|
-+index 9b453a1..3239848 100644
|
|
|
-+--- a/gram.y
|
|
|
-++++ b/gram.y
|
|
|
-+@@ -176,19 +176,33 @@ ifacedef : ifacehead '{' ifaceparams '}' ';'
|
|
|
-+ flog(LOG_ERR, "interface %s does not exist", iface->Name);
|
|
|
-+ ABORT;
|
|
|
-+ }
|
|
|
-++
|
|
|
-++ iface->HasFailed = 1;
|
|
|
-+ }
|
|
|
-+- if (update_device_info(iface) < 0)
|
|
|
-++ if (update_device_info(iface) < 0) {
|
|
|
-+ if (!iface->IgnoreIfMissing)
|
|
|
-+- ABORT;
|
|
|
-+- if (check_iface(iface) < 0)
|
|
|
-++ ABORT;
|
|
|
-++
|
|
|
-++ iface->HasFailed = 1;
|
|
|
-++ }
|
|
|
-++ if (check_iface(iface) < 0) {
|
|
|
-+ if (!iface->IgnoreIfMissing)
|
|
|
-+- ABORT;
|
|
|
-+- if (setup_linklocal_addr(iface) < 0)
|
|
|
-++ ABORT;
|
|
|
-++
|
|
|
-++ iface->HasFailed = 1;
|
|
|
-++ }
|
|
|
-++ if (setup_linklocal_addr(iface) < 0) {
|
|
|
-+ if (!iface->IgnoreIfMissing)
|
|
|
-+- ABORT;
|
|
|
-+- if (setup_allrouters_membership(iface) < 0)
|
|
|
-++ ABORT;
|
|
|
-++
|
|
|
-++ iface->HasFailed = 1;
|
|
|
-++ }
|
|
|
-++ if (setup_allrouters_membership(iface) < 0) {
|
|
|
-+ if (!iface->IgnoreIfMissing)
|
|
|
-+- ABORT;
|
|
|
-++ ABORT;
|
|
|
-++
|
|
|
-++ iface->HasFailed = 1;
|
|
|
-++ }
|
|
|
-+
|
|
|
-+ dlog(LOG_DEBUG, 4, "interface definition for %s is ok", iface->Name);
|
|
|
-+
|
|
|
-+diff --git a/send.c b/send.c
|
|
|
-+index 0d7ed5b..d6a3da2 100644
|
|
|
-+--- a/send.c
|
|
|
-++++ b/send.c
|
|
|
-+@@ -124,7 +124,7 @@ int send_ra(struct Interface *iface, struct in6_addr *dest)
|
|
|
-+ update_device_info(iface);
|
|
|
-+
|
|
|
-+ /* First we need to check that the interface hasn't been removed or deactivated */
|
|
|
-+- if (check_device(iface) < 0) {
|
|
|
-++ if (check_device(iface) < 0 || (iface->if_index == 0 && setup_linklocal_addr(iface) < 0)) {
|
|
|
-+ if (iface->IgnoreIfMissing) /* a bit more quiet warning message.. */
|
|
|
-+ dlog(LOG_DEBUG, 4, "interface %s does not exist, ignoring the interface", iface->Name);
|
|
|
-+ else {
|