umbim: add support for non-dhcp mode
authorMartin Schiller <ms@dev.tdt.de>
Fri, 7 Feb 2020 11:50:22 +0000 (12:50 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 29 Apr 2023 19:33:04 +0000 (21:33 +0200)
There are mbim compatible wwan modules available which do not support
the dhcp autoconfiguration. (e.g. gemalto Cinterion ELS81)

This adds the possibility to get the configuration parameters from mbim.

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

index 64bb8176a043eed20b0b9b18dfbe06fa9bf0ba96..492e06829deb214d3ecf9a04a49a45a4651a6526 100755 (executable)
@@ -19,6 +19,7 @@ proto_mbim_init_config() {
        proto_config_add_string auth
        proto_config_add_string username
        proto_config_add_string password
+       proto_config_add_boolean dhcp
        proto_config_add_defaults
 }
 
@@ -27,8 +28,8 @@ _proto_mbim_setup() {
        local tid=2
        local ret
 
-       local device apn pincode delay allow_roaming allow_partner $PROTO_DEFAULT_OPTIONS
-       json_get_vars device apn pincode delay auth username password allow_roaming allow_partner $PROTO_DEFAULT_OPTIONS
+       local device apn pincode delay allow_roaming allow_partner dhcp $PROTO_DEFAULT_OPTIONS
+       json_get_vars device apn pincode delay auth username password allow_roaming allow_partner dhcp $PROTO_DEFAULT_OPTIONS
 
        [ -n "$ctl_device" ] && device=$ctl_device
 
@@ -153,28 +154,69 @@ _proto_mbim_setup() {
        done
        tid=$((tid + 1))
 
-       uci_set_state network $interface tid "$tid"
+       echo "mbim[$$]" "Connected"
 
-       echo "mbim[$$]" "Connected, starting DHCP"
-       proto_init_update "$ifname" 1
-       proto_send_update "$interface"
+       if [ "$dhcp" = 0 ]; then
+               echo "mbim[$$]" "Setting up $ifname"
+               eval $(umbim $DBG -n -t $tid -d $device config | sed 's/: /=/g')
+               tid=$((tid + 1))
 
-       json_init
-       json_add_string name "${interface}_4"
-       json_add_string ifname "@$interface"
-       json_add_string proto "dhcp"
-       proto_add_dynamic_defaults
-       json_close_object
-       ubus call network add_dynamic "$(json_dump)"
-
-       json_init
-       json_add_string name "${interface}_6"
-       json_add_string ifname "@$interface"
-       json_add_string proto "dhcpv6"
-       json_add_string extendprefix 1
-       proto_add_dynamic_defaults
-       json_close_object
-       ubus call network add_dynamic "$(json_dump)"
+               proto_init_update "$ifname" 1
+               proto_send_update "$interface"
+
+               json_init
+               json_add_string name "${interface}_4"
+               json_add_string ifname "@$interface"
+               json_add_string proto "static"
+               json_add_array ipaddr
+               json_add_string "" "$ipv4address"
+               json_close_array
+               json_add_string gateway "$ipv4gateway"
+               json_add_array dns
+               json_add_string "" "$ipv4dnsserver"
+               json_close_array
+               proto_add_dynamic_defaults
+               json_close_object
+               ubus call network add_dynamic "$(json_dump)"
+
+               json_init
+               json_add_string name "${interface}_6"
+               json_add_string ifname "@$interface"
+               json_add_string proto "static"
+               json_add_array ip6addr
+               json_add_string "" "$ipv6address"
+               json_close_array
+               json_add_string ip6gw "$ipv6gateway"
+               json_add_array dns
+               json_add_string "" "$ipv6dnsserver"
+               json_close_array
+               proto_add_dynamic_defaults
+               json_close_object
+               ubus call network add_dynamic "$(json_dump)"
+       else
+               echo "mbim[$$]" "Starting DHCP on $ifname"
+               proto_init_update "$ifname" 1
+               proto_send_update "$interface"
+
+               json_init
+               json_add_string name "${interface}_4"
+               json_add_string ifname "@$interface"
+               json_add_string proto "dhcp"
+               proto_add_dynamic_defaults
+               json_close_object
+               ubus call network add_dynamic "$(json_dump)"
+
+               json_init
+               json_add_string name "${interface}_6"
+               json_add_string ifname "@$interface"
+               json_add_string proto "dhcpv6"
+               json_add_string extendprefix 1
+               proto_add_dynamic_defaults
+               json_close_object
+               ubus call network add_dynamic "$(json_dump)"
+       fi
+
+       uci_set_state network $interface tid "$tid"
 }
 
 proto_mbim_setup() {