umbim: handle MTU configuration
authorLech Perczak <lech.perczak@gmail.com>
Sat, 6 Nov 2021 15:01:02 +0000 (16:01 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 29 Apr 2023 19:33:05 +0000 (21:33 +0200)
Allow setting interface MTU through UCI. If this is not set,
use MBIM-provided MTU, if provided through control channel.
If separate MTUs are provided for IPv4 and IPv6, apply larger of them.
This is very unlikely and possible only for IPv4v6 dual-stack configuration.

Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
package/network/utils/umbim/files/lib/netifd/proto/mbim.sh

index eab5cf3de6915506e138523385d03f75f44f8892..7ac3cb1c70c217bc920fb10dc3b5862f3f3d0165 100755 (executable)
@@ -23,6 +23,7 @@ proto_mbim_init_config() {
        proto_config_add_boolean dhcp
        proto_config_add_boolean dhcpv6
        proto_config_add_string pdptype
+       proto_config_add_int mtu
        proto_config_add_defaults
 }
 
@@ -44,9 +45,9 @@ _proto_mbim_setup() {
        local ret
 
        local device apn pincode delay auth username password allow_roaming allow_partner
-       local dhcp dhcpv6 pdptype ip4table ip6table $PROTO_DEFAULT_OPTIONS
+       local dhcp dhcpv6 pdptype ip4table ip6table mtu $PROTO_DEFAULT_OPTIONS
        json_get_vars device apn pincode delay auth username password allow_roaming allow_partner
-       json_get_vars dhcp dhcpv6 pdptype ip4table ip6table $PROTO_DEFAULT_OPTIONS
+       json_get_vars dhcp dhcpv6 pdptype ip4table ip6table mtu $PROTO_DEFAULT_OPTIONS
 
        [ ! -e /proc/sys/net/ipv6 ] && ipv6=0 || json_get_var ipv6 ipv6
 
@@ -294,6 +295,19 @@ _proto_mbim_setup() {
                fi
        }
 
+       [ -z "$mtu" ] && {
+               local ipv4mtu=$(_proto_mbim_get_field ipv4mtu "$mbimconfig")
+               ipv4mtu="${ipv4mtu:-0}"
+               local ipv6mtu=$(_proto_mbim_get_field ipv6mtu "$mbimconfig")
+               ipv6mtu="${ipv6mtu:-0}"
+
+               mtu=$((ipv6mtu > ipv4mtu ? ipv6mtu : ipv4mtu))
+       }
+       [ -n "$mtu" -a "$mtu" != 0 ] && {
+               echo Setting MTU of $ifname to $mtu
+               /sbin/ip link set dev $ifname mtu $mtu
+       }
+
        uci_set_state network $interface tid "$tid"
 }