123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- 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 {
|