system-linux: add retry for adding member devices to a bridge
[project/netifd.git] / system-linux.c
index 7ca4c8b612953a8abecd9ce1836bfe5ce2ca8d40..1d5d2322e2d6a826ecd5c9e1f3aaaf75d40a91c9 100644 (file)
@@ -813,11 +813,20 @@ int system_bridge_addif(struct device *bridge, struct device *dev)
 {
        char buf[64];
        char *oldbr;
-       int ret = 0;
+       int tries = 0;
+       int ret;
 
+retry:
+       ret = 0;
        oldbr = system_get_bridge(dev->ifname, dev_buf, sizeof(dev_buf));
-       if (!oldbr || strcmp(oldbr, bridge->ifname) != 0)
+       if (!oldbr || strcmp(oldbr, bridge->ifname) != 0) {
                ret = system_bridge_if(bridge->ifname, dev, SIOCBRADDIF, NULL);
+               tries++;
+               D(SYSTEM, "Failed to add device '%s' to bridge '%s' (tries=%d): %s\n",
+                 dev->ifname, bridge->ifname, tries, strerror(errno));
+               if (tries <= 3)
+                       goto retry;
+       }
 
        if (dev->wireless)
                system_bridge_set_wireless(bridge, dev);