diff --git a/common/linux_iphelper.sh b/common/linux_iphelper.sh index b7dc0db..8338799 100644 --- a/common/linux_iphelper.sh +++ b/common/linux_iphelper.sh @@ -111,6 +111,14 @@ unprepare_route_localnet() set_route_localnet 0 "$@" } +get_uevent_devtype() +{ + local DEVTYPE INTERFACE IFINDEX OF_NAME OF_FULLNAME OF_COMPATIBLE_N + [ -f "/sys/class/net/$1/uevent" ] && { + . "/sys/class/net/$1/uevent" + echo -n $DEVTYPE + } +} resolve_lower_devices() { # $1 - bridge interface name diff --git a/common/nft.sh b/common/nft.sh index 6d791a4..8907bd6 100644 --- a/common/nft.sh +++ b/common/nft.sh @@ -320,7 +320,7 @@ nft_fill_ifsets() # $5 - space separated wan physical interface names (optional) # $6 - space separated wan6 physical interface names (optional) - local script i j ALLDEVS devs + local script i j ALLDEVS devs devtype b # if large sets exist nft works very ineffectively # looks like it analyzes the whole table blob to find required data pieces @@ -348,15 +348,18 @@ flush set inet $ZAPRET_NFT_TABLE lanif" nft_create_or_update_flowtable 'offload' 2>/dev/null # then add elements. some of them can cause error because unsupported for i in $ALLDEVS; do - # first try to add interface itself - nft_create_or_update_flowtable 'offload' $i 2>/dev/null # bridge members must be added instead of the bridge itself # some members may not support hw offload. example : lan1 lan2 lan3 support, wlan0 wlan1 - not + b= devs=$(resolve_lower_devices $i) for j in $devs; do # do not display error if addition failed - nft_create_or_update_flowtable 'offload' $j 2>/dev/null + nft_create_or_update_flowtable 'offload' $j && b=1 2>/dev/null done + [ -n "$b" ] || { + # no lower devices added ? try to add interface itself + nft_create_or_update_flowtable 'offload' $i 2>/dev/null + } done ;; esac