Skip to content

Commit 7b6ba4e

Browse files
committed
mwan3: prefer default route source address
Prefer the source address from the interface default route before falling back to the interface address from netifd. This fixes diagnostics and tracking in setups where the route-selected source address differs from the interface address. Fixes: #29055 Signed-off-by: Dharmik Parmar <dharmikparmar2004@yahoo.com>
1 parent f5160c8 commit 7b6ba4e

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

net/mwan3/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
99

1010
PKG_NAME:=mwan3
1111
PKG_VERSION:=2.12.1
12-
PKG_RELEASE:=1
12+
PKG_RELEASE:=2
1313

1414
PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
1515
PKG_LICENSE:=GPL-2.0

net/mwan3/files/lib/mwan3/common.sh

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ mwan3_get_true_iface()
5454

5555
mwan3_get_src_ip()
5656
{
57-
local family _src_ip interface true_iface device addr_cmd default_ip IP sed_str
57+
local family _src_ip interface true_iface device addr_cmd default_ip IP sed_str route_target
5858
interface=$2
5959
mwan3_get_true_iface true_iface $interface
6060

@@ -64,15 +64,19 @@ mwan3_get_src_ip()
6464
addr_cmd='network_get_ipaddr'
6565
default_ip="0.0.0.0"
6666
sed_str='s/ *inet \([^ \/]*\).*/\1/;T;p;q'
67+
route_target="0.0.0.0"
6768
IP="$IP4"
6869
elif [ "$family" = "ipv6" ]; then
6970
addr_cmd='network_get_ipaddr6'
7071
default_ip="::"
7172
sed_str='s/ *inet6 \([^ \/]*\).* scope.*/\1/;T;p;q'
73+
route_target="::"
7274
IP="$IP6"
7375
fi
7476

75-
$addr_cmd _src_ip "$true_iface"
77+
__network_ifstatus _src_ip "$true_iface" ".route[@.target='$route_target'].source" "" 1
78+
[ -n "$_src_ip" ] && _src_ip="${_src_ip%%/*}"
79+
[ -z "$_src_ip" ] && $addr_cmd _src_ip "$true_iface"
7680
if [ -z "$_src_ip" ]; then
7781
if [ "$family" = "ipv6" ]; then
7882
# on IPv6-PD interfaces (like PPPoE interfaces) we don't
@@ -98,8 +102,8 @@ mwan3_get_src_ip()
98102
fi
99103
fi
100104
if [ -z "$_src_ip" ]; then
101-
network_get_device device $true_iface
102-
_src_ip=$($IP address ls dev $device 2>/dev/null | sed -ne "$sed_str")
105+
network_get_device device "$true_iface"
106+
_src_ip=$($IP address ls dev "$device" 2>/dev/null | sed -ne "$sed_str")
103107
fi
104108
if [ -n "$_src_ip" ]; then
105109
LOG warn "no src $family address found from netifd for interface '$true_iface' dev '$device' guessing $_src_ip"

0 commit comments

Comments
 (0)