diff mbox series

[v1,1/4] uqmi: add support for IPv4 autoconf from QMI

Message ID 670d74fae6055189078aae6b87fe67a8229f4ee0.1605364389.git.lede@moc6.cz
State Superseded
Headers show
Series [v1,1/4] uqmi: add support for IPv4 autoconf from QMI | expand

Commit Message

Filip Moc Nov. 17, 2020, 10:47 a.m. UTC
There already was an option for autoconfiguring IPv4 from QMI but this
was removed by commit 3b9b963e6e08 ("uqmi: always use DHCP for IPv4").

DHCP does not work on MR400 LTE module (in TL-MR6400 v4) so let's readd
support for IPv4 autoconf from QMI but this time allow to configure this
for IPv4 and IPv6 independently and keep DHCP default on IPv4.

Signed-off-by: Filip Moc <lede@moc6.cz>
---
 .../utils/uqmi/files/lib/netifd/proto/qmi.sh  | 49 ++++++++++++++-----
 1 file changed, 38 insertions(+), 11 deletions(-)
diff mbox series

Patch

diff --git a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
index 8cbe9e97e7..7870eb7382 100755
--- a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
+++ b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
@@ -19,6 +19,7 @@  proto_qmi_init_config() {
 	proto_config_add_string modes
 	proto_config_add_string pdptype
 	proto_config_add_int profile
+	proto_config_add_boolean dhcp
 	proto_config_add_boolean dhcpv6
 	proto_config_add_boolean autoconnect
 	proto_config_add_int plmn
@@ -31,13 +32,13 @@  proto_qmi_setup() {
 	local interface="$1"
 	local dataformat connstat
 	local device apn auth username password pincode delay modes pdptype
-	local profile dhcpv6 autoconnect plmn timeout mtu $PROTO_DEFAULT_OPTIONS
+	local profile dhcp dhcpv6 autoconnect plmn timeout mtu $PROTO_DEFAULT_OPTIONS
 	local ip4table ip6table
 	local cid_4 pdh_4 cid_6 pdh_6
 	local ip_6 ip_prefix_length gateway_6 dns1_6 dns2_6
 
 	json_get_vars device apn auth username password pincode delay modes
-	json_get_vars pdptype profile dhcpv6 autoconnect plmn ip4table
+	json_get_vars pdptype profile dhcp dhcpv6 autoconnect plmn ip4table
 	json_get_vars ip6table timeout mtu $PROTO_DEFAULT_OPTIONS
 
 	[ "$timeout" = "" ] && timeout="10"
@@ -353,15 +354,41 @@  proto_qmi_setup() {
 	}
 
 	[ -n "$pdh_4" ] && {
-		json_init
-		json_add_string name "${interface}_4"
-		json_add_string ifname "@$interface"
-		json_add_string proto "dhcp"
-		[ -n "$ip4table" ] && json_add_string ip4table "$ip4table"
-		proto_add_dynamic_defaults
-		[ -n "$zone" ] && json_add_string zone "$zone"
-		json_close_object
-		ubus call network add_dynamic "$(json_dump)"
+		if [ "$dhcp" = 0 ]; then
+			json_load "$(uqmi -s -d $device --set-client-id wds,$cid_4 --get-current-settings)"
+			json_select ipv4
+			json_get_var ip_4 ip
+			json_get_var gateway_4 gateway
+			json_get_var dns1_4 dns1
+			json_get_var dns2_4 dns2
+			json_get_var subnet_4 subnet
+
+			proto_init_update "$ifname" 1
+			proto_set_keep 1
+			proto_add_ipv4_address "$ip_4" "$subnet_4"
+			proto_add_ipv4_route "$gateway_4" "128"
+			[ "$defaultroute" = 0 ] || proto_add_ipv4_route "0.0.0.0" 0 "$gateway_4"
+			[ "$peerdns" = 0 ] || {
+				proto_add_dns_server "$dns1_4"
+				proto_add_dns_server "$dns2_4"
+			}
+			[ -n "$zone" ] && {
+				proto_add_data
+				json_add_string zone "$zone"
+				proto_close_data
+			}
+			proto_send_update "$interface"
+		else
+			json_init
+			json_add_string name "${interface}_4"
+			json_add_string ifname "@$interface"
+			json_add_string proto "dhcp"
+			[ -n "$ip4table" ] && json_add_string ip4table "$ip4table"
+			proto_add_dynamic_defaults
+			[ -n "$zone" ] && json_add_string zone "$zone"
+			json_close_object
+			ubus call network add_dynamic "$(json_dump)"
+		fi
 	}
 }