From 796ed95e4e5e08767cee886cb463837e1e7ae6c8 Mon Sep 17 00:00:00 2001 From: cyrus Date: Wed, 9 Sep 2015 10:38:16 +0000 Subject: [PATCH] busybox: fix ip applet and netlink behavior Signed-off-by: Steven Barth git-svn-id: svn://svn.openwrt.org/openwrt/trunk@46833 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/utils/busybox/Makefile | 2 +- .../utils/busybox/patches/220-add_lock_util.patch | 2 +- .../busybox/patches/300-ip-addr-improvements.patch | 73 ++++++++++++++++++++++ .../patches/301-ip-link-fix-netlink-msg-size.patch | 11 ++++ 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 package/utils/busybox/patches/300-ip-addr-improvements.patch create mode 100644 package/utils/busybox/patches/301-ip-link-fix-netlink-msg-size.patch diff --git a/package/utils/busybox/Makefile b/package/utils/busybox/Makefile index 83eb82a928..fb247036a3 100644 --- a/package/utils/busybox/Makefile +++ b/package/utils/busybox/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=busybox PKG_VERSION:=1.23.2 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_FLAGS:=essential PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 diff --git a/package/utils/busybox/patches/220-add_lock_util.patch b/package/utils/busybox/patches/220-add_lock_util.patch index f42edcb0de..5c7ca26da8 100644 --- a/package/utils/busybox/patches/220-add_lock_util.patch +++ b/package/utils/busybox/patches/220-add_lock_util.patch @@ -1,6 +1,6 @@ --- a/include/applets.src.h +++ b/include/applets.src.h -@@ -211,6 +211,7 @@ IF_LN(APPLET_NOEXEC(ln, ln, BB_DIR_BIN, +@@ -211,6 +211,7 @@ IF_LN(APPLET_NOEXEC(ln, ln, BB_DIR_BIN, IF_LOAD_POLICY(APPLET(load_policy, BB_DIR_USR_SBIN, BB_SUID_DROP)) IF_LOADFONT(APPLET(loadfont, BB_DIR_USR_SBIN, BB_SUID_DROP)) IF_LOADKMAP(APPLET(loadkmap, BB_DIR_SBIN, BB_SUID_DROP)) diff --git a/package/utils/busybox/patches/300-ip-addr-improvements.patch b/package/utils/busybox/patches/300-ip-addr-improvements.patch new file mode 100644 index 0000000000..ba1bcd1137 --- /dev/null +++ b/package/utils/busybox/patches/300-ip-addr-improvements.patch @@ -0,0 +1,73 @@ +From 6a7cd3d4aba493c0b0d00155b1e09a867db437cf Mon Sep 17 00:00:00 2001 +From: Michael Tokarev +Date: Wed, 20 May 2015 16:27:44 +0300 +Subject: [PATCH] ip addr: support change and replace commands + +Signed-off-by: Michael Tokarev +Signed-off-by: Denys Vlasenko +--- + networking/ip.c | 2 +- + networking/libiproute/ipaddress.c | 20 ++++++++++++-------- + 2 files changed, 13 insertions(+), 9 deletions(-) + +--- a/networking/ip.c ++++ b/networking/ip.c +@@ -33,7 +33,7 @@ + //usage: "{ {add|del} IFADDR dev STRING | {show|flush}\n" + //usage: " [dev STRING] [to PREFIX] }" + //usage:#define ipaddr_full_usage "\n\n" +-//usage: "ipaddr {add|delete} IFADDR dev STRING\n" ++//usage: "ipaddr {add|change|replace|delete} IFADDR dev STRING\n" + //usage: "ipaddr {show|flush} [dev STRING] [scope SCOPE-ID]\n" + //usage: " [to PREFIX] [label PATTERN]\n" + //usage: " IFADDR := PREFIX | ADDR peer PREFIX\n" +--- a/networking/libiproute/ipaddress.c ++++ b/networking/libiproute/ipaddress.c +@@ -598,7 +598,7 @@ static int default_scope(inet_prefix *lc + } + + /* Return value becomes exitcode. It's okay to not return at all */ +-static int ipaddr_modify(int cmd, char **argv) ++static int ipaddr_modify(int cmd, int flags, char **argv) + { + static const char option[] ALIGN1 = + "peer\0""remote\0""broadcast\0""brd\0" +@@ -622,7 +622,7 @@ static int ipaddr_modify(int cmd, char * + memset(&req, 0, sizeof(req)); + + req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); +- req.n.nlmsg_flags = NLM_F_REQUEST; ++ req.n.nlmsg_flags = NLM_F_REQUEST | flags; + req.n.nlmsg_type = cmd; + req.ifa.ifa_family = preferred_family; + +@@ -749,16 +749,24 @@ static int ipaddr_modify(int cmd, char * + int FAST_FUNC do_ipaddr(char **argv) + { + static const char commands[] ALIGN1 = +- "add\0""delete\0""list\0""show\0""lst\0""flush\0"; ++ /* 0 1 2 3 4 5 6 7 8 */ ++ "add\0""change\0""chg\0""replace\0""delete\0""list\0""show\0""lst\0""flush\0"; + int cmd = 2; + if (*argv) { + cmd = index_in_substrings(commands, *argv); + if (cmd < 0) + invarg(*argv, applet_name); + argv++; +- if (cmd <= 1) +- return ipaddr_modify((cmd == 0) ? RTM_NEWADDR : RTM_DELADDR, argv); ++ if (cmd <= 4) { ++ return ipaddr_modify( ++ /*cmd:*/ cmd == 4 ? RTM_DELADDR : RTM_NEWADDR, ++ /*flags:*/ ++ cmd == 0 ? NLM_F_CREATE|NLM_F_EXCL : /* add */ ++ cmd == 1 || cmd == 2 ? NLM_F_REPLACE : /* change */ ++ cmd == 3 ? NLM_F_CREATE|NLM_F_REPLACE : /* replace */ ++ 0 /* delete */ ++ , argv); ++ } + } +- /* 2 == list, 3 == show, 4 == lst */ +- return ipaddr_list_or_flush(argv, cmd == 5); ++ return ipaddr_list_or_flush(argv, cmd == 8); + } diff --git a/package/utils/busybox/patches/301-ip-link-fix-netlink-msg-size.patch b/package/utils/busybox/patches/301-ip-link-fix-netlink-msg-size.patch new file mode 100644 index 0000000000..360324bf7c --- /dev/null +++ b/package/utils/busybox/patches/301-ip-link-fix-netlink-msg-size.patch @@ -0,0 +1,11 @@ +--- a/networking/libiproute/iplink.c ++++ b/networking/libiproute/iplink.c +@@ -470,7 +470,7 @@ static int do_add_or_delete(char **argv, + } + xrtnl_open(&rth); + ll_init_map(&rth); +- if (type_str) { ++ if (type_str && rtm == RTM_NEWLINK) { + struct rtattr *linkinfo = NLMSG_TAIL(&req.n); + + addattr_l(&req.n, sizeof(req), IFLA_LINKINFO, NULL, 0); -- 2.11.0