diff options
author | Stefan Agner <stefan@agner.ch> | 2018-03-29 14:12:31 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-03-29 18:45:11 +0200 |
commit | 2adaa90534d7c4b189b3ce5d32262cdb7f990dfb (patch) | |
tree | fef04b712b2b2792a755846c2015795f0fce21f4 | |
parent | a82fe671f5c7ff96ca4d4d813210d18e0b02c193 (diff) | |
download | busybox-w32-2adaa90534d7c4b189b3ce5d32262cdb7f990dfb.tar.gz busybox-w32-2adaa90534d7c4b189b3ce5d32262cdb7f990dfb.tar.bz2 busybox-w32-2adaa90534d7c4b189b3ce5d32262cdb7f990dfb.zip |
ifplugd: if SIOCSIFFLAGS fails with EADDRNOTAVAIL, don't die
When using ifplugd on a RNDIS interface with monitor mode, using
SIOCSIFFLAGS seems to fail with EADDRNOTAVAIL. Treat it the same
as if iface disappeared again.
This has been observed on a Tegra TK1 using Linux 4.14. There seem
to be a race when the kernel is creating the device:
ifplugd(usb0): started: BusyBox v1.24.1 (2018-03-27 09:47:48 CEST)
ifplugd(usb0): interface doesn't exist, waiting
ifplugd(usb0): interface appeared
ifplugd(usb0): upping interface
ifplugd(usb0): setting interface flags failed: Cannot assign requested address
<exit>
With this patch ifplugd is successful in upping the device the second
time around:
ifplugd(usb0): upping interface
ifplugd(usb0): using SIOCETHTOOL detection mode
ifplugd(usb0): interface appeared
ifplugd(usb0): upping interface
ifplugd(usb0): setting interface flags failed: Cannot assign requested address
ifplugd(usb0): interface appeared
ifplugd(usb0): upping interface
ifplugd(usb0): using SIOCETHTOOL detection mode
ifplugd(usb0): link is up
ifplugd(usb0): executing '/etc/ifplugd/ifplugd.usb.action usb0 up'
ifplugd up
ifplugd(usb0): exit code: 0
function old new delta
up_iface 120 127 +7
Signed-off-by: Stefan Agner <stefan@agner.ch>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/ifplugd.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/networking/ifplugd.c b/networking/ifplugd.c index 9bc1a075f..5059eaf73 100644 --- a/networking/ifplugd.c +++ b/networking/ifplugd.c | |||
@@ -367,7 +367,7 @@ static void up_iface(void) | |||
367 | /* Let user know we mess up with interface */ | 367 | /* Let user know we mess up with interface */ |
368 | bb_error_msg("upping interface"); | 368 | bb_error_msg("upping interface"); |
369 | if (network_ioctl(SIOCSIFFLAGS, &ifrequest, "setting interface flags") < 0) { | 369 | if (network_ioctl(SIOCSIFFLAGS, &ifrequest, "setting interface flags") < 0) { |
370 | if (errno != ENODEV) | 370 | if (errno != ENODEV && errno != EADDRNOTAVAIL) |
371 | xfunc_die(); | 371 | xfunc_die(); |
372 | G.iface_exists = 0; | 372 | G.iface_exists = 0; |
373 | return; | 373 | return; |