diff --git a/networking/ifupdown.c b/networking/ifupdown.c index c232d86a6..d7cb40f32 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c @@ -349,7 +349,7 @@ static int static_up6(struct interface_defn_t *ifd, execfn *exec) int result; #if ENABLE_FEATURE_IFUPDOWN_IP result = execute("ip addr add %address%/%netmask% dev %iface%[[ label %label%]]", ifd, exec); - result += execute("ip link set[[ mtu %mtu%]][[ address %hwaddress%]] %iface% up", ifd, exec); + result += execute("ip link set[[ mtu %mtu%]][[ addr %hwaddress%]] %iface% up", ifd, exec); /* Was: "[[ ip ....%gateway% ]]". Removed extra spaces w/o checking */ result += execute("[[ip route add ::/0 via %gateway%]]", ifd, exec); #else @@ -433,7 +433,7 @@ static int static_up(struct interface_defn_t *ifd, execfn *exec) #if ENABLE_FEATURE_IFUPDOWN_IP result = execute("ip addr add %address%/%bnmask%[[ broadcast %broadcast%]] " "dev %iface%[[ peer %pointopoint%]][[ label %label%]]", ifd, exec); - result += execute("ip link set[[ mtu %mtu%]][[ address %hwaddress%]] %iface% up", ifd, exec); + result += execute("ip link set[[ mtu %mtu%]][[ addr %hwaddress%]] %iface% up", ifd, exec); result += execute("[[ip route add default via %gateway% dev %iface%]]", ifd, exec); return ((result == 3) ? 3 : 0); #else @@ -500,7 +500,7 @@ static int dhcp_up(struct interface_defn_t *ifd, execfn *exec) unsigned i; #if ENABLE_FEATURE_IFUPDOWN_IP /* ip doesn't up iface when it configures it (unlike ifconfig) */ - if (!execute("ip link set[[ address %hwaddress%]] %iface% up", ifd, exec)) + if (!execute("ip link set[[ addr %hwaddress%]] %iface% up", ifd, exec)) return 0; #else /* needed if we have hwaddress on dhcp iface */ @@ -519,7 +519,7 @@ static int dhcp_up(struct interface_defn_t *ifd, execfn *exec) { #if ENABLE_FEATURE_IFUPDOWN_IP /* ip doesn't up iface when it configures it (unlike ifconfig) */ - if (!execute("ip link set[[ address %hwaddress%]] %iface% up", ifd, exec)) + if (!execute("ip link set[[ addr %hwaddress%]] %iface% up", ifd, exec)) return 0; #else /* needed if we have hwaddress on dhcp iface */ diff --git a/networking/libiproute/iplink.c b/networking/libiproute/iplink.c index dc936bdc5..8de17bfc6 100644 --- a/networking/libiproute/iplink.c +++ b/networking/libiproute/iplink.c @@ -174,15 +174,18 @@ static int do_set(char **argv) char *newname = NULL; int htype, halen; static const char keywords[] ALIGN1 = - "up\0""down\0""name\0""mtu\0""multicast\0""arp\0""address\0""dev\0"; - enum { ARG_up = 0, ARG_down, ARG_name, ARG_mtu, ARG_multicast, ARG_arp, - ARG_addr, ARG_dev }; + "up\0""down\0""name\0""mtu\0""multicast\0" + "arp\0""address\0""dev\0"; + enum { ARG_up = 0, ARG_down, ARG_name, ARG_mtu, ARG_multicast, + ARG_arp, ARG_addr, ARG_dev }; static const char str_on_off[] ALIGN1 = "on\0""off\0"; enum { PARM_on = 0, PARM_off }; smalluint key; while (*argv) { - key = index_in_strings(keywords, *argv); + /* substring search ensures that e.g. "addr" and "address" + * are both accepted */ + key = index_in_substrings(keywords, *argv); if (key == ARG_up) { mask |= IFF_UP; flags |= IFF_UP;