[OE-core] [PATCH] busybox: udhcpc: fix 'ip route add' with multiple interfaces on the same network

Luca Ceresoli luca at lucaceresoli.net
Wed Jan 22 16:34:23 UTC 2020

The udhcpc script fails to properly set a default route when:

 - 'ip' is present ($have_bin_ip -eq 1)
 - there are 2 or more interfaces connected to the same network
   (e.g. ethernet + wifi on the same home LAN / same DHCP server)

In this case, when the first interface gets an address from DHCP
(e.g. eth0), a default route is set correctly. When the second interface
(e.g. wlan0) gets its address, 'ip route add' without 'dev $interface' sets
the route on the other interface. The result looks like:

  # ip route
  default via dev eth0  metric 5
  default via dev eth0  metric 10          # wrong dev here dev eth0 scope link  src dev wlan0 scope link  src

The situation might go unnoticed until eth0 is disconnected, because only
wlan0 is present but there is no route through wlan0.

Fix by explicitly passing "dev $interface" to 'ip route add'. Note that all
other 'ip' invocations already have "dev $interface" passed.

Signed-off-by: Luca Ceresoli <luca at lucaceresoli.net>
 meta/recipes-core/busybox/files/simple.script | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/recipes-core/busybox/files/simple.script b/meta/recipes-core/busybox/files/simple.script
index 6ed0293525c1..7bfa1526400f 100644
--- a/meta/recipes-core/busybox/files/simple.script
+++ b/meta/recipes-core/busybox/files/simple.script
@@ -59,7 +59,7 @@ case "$1" in
 			for i in $router ; do
                                 if [ $have_bin_ip -eq 1 ]; then
-                                        /SBIN_DIR/ip route add default via $i metric $metric
+                                        /SBIN_DIR/ip route add default via $i metric $metric dev $interface
                                         /SBIN_DIR/route add default gw $i dev $interface metric $metric 2>/dev/null

More information about the Openembedded-core mailing list