169.254 may be used by local networks. This patch allows specifying your own IP range.
Signed-off-by: Michel Stam <m.s...@fugro.nl> --- .../busybox/patches/450-zcip-own-ip-range.patch | 110 +++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 package/utils/busybox/patches/450-zcip-own-ip-range.patch diff --git a/package/utils/busybox/patches/450-zcip-own-ip-range.patch b/package/utils/busybox/patches/450-zcip-own-ip-range.patch new file mode 100644 index 0000000..7193402 --- /dev/null +++ b/package/utils/busybox/patches/450-zcip-own-ip-range.patch @@ -0,0 +1,110 @@ +From bddeb00a36df927c8372fc40b96e6e8dd13e6609 Mon Sep 17 00:00:00 2001 +From: Michel Stam <m.s...@fugro.nl> +Date: Thu, 25 Sep 2014 13:43:33 +0200 +Subject: [PATCH] zcip: allow our own class B range to be used for ZeroConf + +169.254 may already be used by a local network. This patch allows +specifying your own IP range. + +Signed-off-by: Michel Stam <m.s...@fugro.nl> +--- + networking/zcip.c | 21 ++++++++++++++++++--- + 1 file changed, 18 insertions(+), 3 deletions(-) + +diff --git a/networking/zcip.c b/networking/zcip.c +index 45d1f7c..2a57543 100644 +--- a/networking/zcip.c ++++ b/networking/zcip.c +@@ -30,6 +30,7 @@ + //usage: "\n -f Run in foreground" + //usage: "\n -q Quit after obtaining address" + //usage: "\n -r 169.254.x.x Request this address first" ++//usage: "\n -l w.x.0.0 Use this class B range instead of 169.254" + //usage: "\n -v Verbose" + //usage: "\n" + //usage: "\nWith no -q, runs continuously monitoring for ARP conflicts," +@@ -87,10 +88,12 @@ enum { + struct globals { + struct sockaddr saddr; + struct ether_addr eth_addr; ++ uint32_t localnet_addr; + } FIX_ALIASING; + #define G (*(struct globals*)&bb_common_bufsiz1) + #define saddr (G.saddr ) + #define eth_addr (G.eth_addr) ++#define localnet_addr (G.localnet_addr) + #define INIT_G() do { } while (0) + + +@@ -105,7 +108,7 @@ static uint32_t pick(void) + do { + tmp = rand() & IN_CLASSB_HOST; + } while (tmp > (IN_CLASSB_HOST - 0x0200)); +- return htonl((LINKLOCAL_ADDR + 0x0100) + tmp); ++ return htonl((localnet_addr + 0x0100) + tmp); + } + + /** +@@ -197,6 +200,7 @@ int zcip_main(int argc UNUSED_PARAM, char **argv) + { + int state; + char *r_opt; ++ char *l_opt; + unsigned opts; + + // ugly trick, but I want these zeroed in one go +@@ -204,6 +208,7 @@ int zcip_main(int argc UNUSED_PARAM, char **argv) + const struct in_addr null_ip; + const struct ether_addr null_addr; + struct in_addr ip; ++ struct in_addr net; + struct ifreq ifr; + int timeout_ms; /* must be signed */ + unsigned conflicts; +@@ -215,6 +220,7 @@ int zcip_main(int argc UNUSED_PARAM, char **argv) + #define null_ip (L.null_ip ) + #define null_addr (L.null_addr ) + #define ip (L.ip ) ++#define net (L.net ) + #define ifr (L.ifr ) + #define timeout_ms (L.timeout_ms) + #define conflicts (L.conflicts ) +@@ -224,6 +230,7 @@ int zcip_main(int argc UNUSED_PARAM, char **argv) + #define verbose (L.verbose ) + + memset(&L, 0, sizeof(L)); ++ localnet_addr = LINKLOCAL_ADDR; // Assume default 169.254.x.x + INIT_G(); + + #define FOREGROUND (opts & 1) +@@ -231,7 +238,7 @@ int zcip_main(int argc UNUSED_PARAM, char **argv) + // parse commandline: prog [options] ifname script + // exactly 2 args; -v accumulates and implies -f + opt_complementary = "=2:vv:vf"; +- opts = getopt32(argv, "fqr:v", &r_opt, &verbose); ++ opts = getopt32(argv, "fqr:l:v", &r_opt, &l_opt, &verbose); + #if !BB_MMU + // on NOMMU reexec early (or else we will rerun things twice) + if (!FOREGROUND) +@@ -246,9 +253,17 @@ int zcip_main(int argc UNUSED_PARAM, char **argv) + openlog(applet_name, 0, LOG_DAEMON); + logmode |= LOGMODE_SYSLOG; + } ++ if (opts & 8) { // -l n.n.n.n ++ if (inet_aton(l_opt, &net) == 0 ++ || (net.s_addr & htonl(IN_CLASSB_NET)) != net.s_addr ++ ) { ++ bb_error_msg_and_die("invalid network address"); ++ } ++ localnet_addr = ntohl(net.s_addr); ++ } + if (opts & 4) { // -r n.n.n.n + if (inet_aton(r_opt, &ip) == 0 +- || (ntohl(ip.s_addr) & IN_CLASSB_NET) != LINKLOCAL_ADDR ++ || (ntohl(ip.s_addr) & IN_CLASSB_NET) != localnet_addr + ) { + bb_error_msg_and_die("invalid link address"); + } +-- +1.7.12.1 + -- 1.7.12.1 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel