diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2016-09-20 17:31:11 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2016-09-20 17:31:11 +0200 |
commit | 92d98f0612c147171a0e9e03dd7fdfde890ee9e5 (patch) | |
tree | 5485641aa624940230130f62cc657b9fe67b9809 | |
parent | 244fdd45c798477d6ee2e221a8c2473647b402d6 (diff) | |
download | busybox-w32-92d98f0612c147171a0e9e03dd7fdfde890ee9e5.tar.gz busybox-w32-92d98f0612c147171a0e9e03dd7fdfde890ee9e5.tar.bz2 busybox-w32-92d98f0612c147171a0e9e03dd7fdfde890ee9e5.zip |
ifupdown: when flushing addresses with "ip", add label %label%
User report:
or our board we setup eth0:0 on a 10.10.10.x/29 netwrok.
The problem is ip addr flush dev eth0:0 removes all ip addresses from
eth0. You can see this if you run
ip -stat -stat addr flush dev eth0:0
2: eth0 inet 172.27.105.10/22 brd 172.27.107.255 scope global eth0
valid_lft forever preferred_lft forever
2: eth0 inet 10.10.10.9/29 scope global eth0:0
valid_lft forever preferred_lft forever
2: eth0 inet6 fe80::a2f6:fdff:fe18:2b13/64 scope link
valid_lft forever preferred_lft forever
*** Round 1, deleting 3 addresses ***
*** Flush is complete after 1 round ***
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/ifupdown.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/networking/ifupdown.c b/networking/ifupdown.c index 25b04c9d7..5c24451ba 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c | |||
@@ -492,7 +492,7 @@ static int FAST_FUNC static_up(struct interface_defn_t *ifd, execfn *exec) | |||
492 | result = execute("ifconfig %iface%[[ hw %hwaddress%]][[ media %media%]][[ mtu %mtu%]] up", | 492 | result = execute("ifconfig %iface%[[ hw %hwaddress%]][[ media %media%]][[ mtu %mtu%]] up", |
493 | ifd, exec); | 493 | ifd, exec); |
494 | result += execute("ifconfig %iface% %address% netmask %netmask%" | 494 | result += execute("ifconfig %iface% %address% netmask %netmask%" |
495 | "[[ broadcast %broadcast%]][[ pointopoint %pointopoint%]] ", | 495 | "[[ broadcast %broadcast%]][[ pointopoint %pointopoint%]]", |
496 | ifd, exec); | 496 | ifd, exec); |
497 | result += execute("[[route add default gw %gateway%[[ metric %metric%]] %iface%]]", ifd, exec); | 497 | result += execute("[[route add default gw %gateway%[[ metric %metric%]] %iface%]]", ifd, exec); |
498 | return ((result == 3) ? 3 : 0); | 498 | return ((result == 3) ? 3 : 0); |
@@ -503,7 +503,10 @@ static int FAST_FUNC static_down(struct interface_defn_t *ifd, execfn *exec) | |||
503 | { | 503 | { |
504 | int result; | 504 | int result; |
505 | # if ENABLE_FEATURE_IFUPDOWN_IP | 505 | # if ENABLE_FEATURE_IFUPDOWN_IP |
506 | result = execute("ip addr flush dev %iface%", ifd, exec); | 506 | /* Optional "label LBL" is necessary if interface is an alias (eth0:0), |
507 | * otherwise "ip addr flush dev eth0:0" flushes all addresses on eth0. | ||
508 | */ | ||
509 | result = execute("ip addr flush dev %iface%[[ label %label%]]", ifd, exec); | ||
507 | result += execute("ip link set %iface% down", ifd, exec); | 510 | result += execute("ip link set %iface% down", ifd, exec); |
508 | # else | 511 | # else |
509 | /* result = execute("[[route del default gw %gateway% %iface%]]", ifd, exec); */ | 512 | /* result = execute("[[route del default gw %gateway% %iface%]]", ifd, exec); */ |