diff options
| author | Luca Ceresoli <luca@lucaceresoli.net> | 2020-01-22 17:34:23 +0100 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-01-27 16:48:08 +0000 |
| commit | e223f7cbb11079662ea7786b259d4d9c4e5b23fc (patch) | |
| tree | b7d9bca00c674c6ca434d51997eb4fa1af782682 | |
| parent | 1e709614b5d2d0b27b981dc622cb949ef43b241f (diff) | |
| download | poky-e223f7cbb11079662ea7786b259d4d9c4e5b23fc.tar.gz | |
busybox: udhcpc: fix 'ip route add' with multiple interfaces on the same network
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 192.168.1.1 dev eth0 metric 5
default via 192.168.1.1 dev eth0 metric 10 # wrong dev here
192.168.1.0/24 dev eth0 scope link src 192.168.1.20
192.168.1.0/24 dev wlan0 scope link src 192.168.1.30
#
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.
(From OE-Core rev: bb526eee429f25b85372f41e4d6d2865bcc39173)
Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | meta/recipes-core/busybox/files/simple.script | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/meta/recipes-core/busybox/files/simple.script b/meta/recipes-core/busybox/files/simple.script index 8b5eb53633..013440574d 100644 --- a/meta/recipes-core/busybox/files/simple.script +++ b/meta/recipes-core/busybox/files/simple.script | |||
| @@ -59,7 +59,7 @@ case "$1" in | |||
| 59 | metric=10 | 59 | metric=10 |
| 60 | for i in $router ; do | 60 | for i in $router ; do |
| 61 | if [ $have_bin_ip -eq 1 ]; then | 61 | if [ $have_bin_ip -eq 1 ]; then |
| 62 | /SBIN_DIR/ip route add default via $i metric $metric | 62 | /SBIN_DIR/ip route add default via $i metric $metric dev $interface |
| 63 | else | 63 | else |
| 64 | /SBIN_DIR/route add default gw $i dev $interface metric $metric 2>/dev/null | 64 | /SBIN_DIR/route add default gw $i dev $interface metric $metric 2>/dev/null |
| 65 | fi | 65 | fi |
