aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Agner <stefan@agner.ch>2018-03-29 14:12:31 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2018-03-29 18:45:11 +0200
commit2adaa90534d7c4b189b3ce5d32262cdb7f990dfb (patch)
treefef04b712b2b2792a755846c2015795f0fce21f4
parenta82fe671f5c7ff96ca4d4d813210d18e0b02c193 (diff)
downloadbusybox-2adaa90534d7c4b189b3ce5d32262cdb7f990dfb.tar.gz
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.c2
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)
/* Let user know we mess up with interface */
bb_error_msg("upping interface");
if (network_ioctl(SIOCSIFFLAGS, &ifrequest, "setting interface flags") < 0) {
- if (errno != ENODEV)
+ if (errno != ENODEV && errno != EADDRNOTAVAIL)
xfunc_die();
G.iface_exists = 0;
return;