diff mbox series

uqmi: Move to community packages repo

Message ID 20210701195019.16553-1-arjunak234@gmail.com
State Rejected
Headers show
Series uqmi: Move to community packages repo | expand

Commit Message

Arjun AK July 1, 2021, 7:50 p.m. UTC
Signed-off-by: Arjun AK <arjunak234@gmail.com>
---
 package/network/utils/uqmi/Makefile           |  48 --
 .../utils/uqmi/files/lib/netifd/proto/qmi.sh  | 471 ------------------
 2 files changed, 519 deletions(-)
 delete mode 100644 package/network/utils/uqmi/Makefile
 delete mode 100755 package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh

Comments

Paul Spooren July 1, 2021, 7:53 p.m. UTC | #1
On 7/1/21 9:50 AM, Arjun AK wrote:
> Signed-off-by: Arjun AK <arjunak234@gmail.com>
> ---

Could you please add a brief commit message describing why this package 
isn't needed in core?

I'm all for moving it, don't get me wrong, we just try to have commit 
messages everywhere to keep context over time.

>   package/network/utils/uqmi/Makefile           |  48 --
>   .../utils/uqmi/files/lib/netifd/proto/qmi.sh  | 471 ------------------
>   2 files changed, 519 deletions(-)
>   delete mode 100644 package/network/utils/uqmi/Makefile
>   delete mode 100755 package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
>
> diff --git a/package/network/utils/uqmi/Makefile b/package/network/utils/uqmi/Makefile
> deleted file mode 100644
> index 53ca67230b..0000000000
> --- a/package/network/utils/uqmi/Makefile
> +++ /dev/null
> @@ -1,48 +0,0 @@
> -include $(TOPDIR)/rules.mk
> -
> -PKG_NAME:=uqmi
> -PKG_RELEASE:=3
> -
> -PKG_SOURCE_PROTO:=git
> -PKG_SOURCE_URL=$(PROJECT_GIT)/project/uqmi.git
> -PKG_SOURCE_DATE:=2020-11-22
> -PKG_SOURCE_VERSION:=0a19b5b77140465c29e2afa7d611fe93abc9672f
> -PKG_MIRROR_HASH:=0a6641f8e167efd21d464b0b2aeb1fec5f974dddcdb8822fbd5d7190d0b741b4
> -PKG_MAINTAINER:=Matti Laakso <malaakso@elisanet.fi>
> -
> -PKG_LICENSE:=GPL-2.0
> -PKG_LICENSE_FILES:=
> -
> -PKG_FLAGS:=nonshared
> -
> -include $(INCLUDE_DIR)/package.mk
> -include $(INCLUDE_DIR)/cmake.mk
> -
> -define Package/uqmi
> -  SECTION:=net
> -  CATEGORY:=Network
> -  SUBMENU:=WWAN
> -  DEPENDS:=+libubox +libblobmsg-json +kmod-usb-net +kmod-usb-net-qmi-wwan +wwan
> -  TITLE:=Control utility for mobile broadband modems
> -endef
> -
> -define Package/uqmi/description
> -  uqmi is a command line tool for controlling mobile broadband modems using
> -  the QMI-protocol.
> -endef
> -
> -TARGET_CFLAGS += \
> -	-I$(STAGING_DIR)/usr/include -ffunction-sections -fdata-sections
> -
> -TARGET_LDFLAGS += -Wl,--gc-sections
> -
> -CMAKE_OPTIONS += \
> -	-DDEBUG=1
> -
> -define Package/uqmi/install
> -	$(INSTALL_DIR) $(1)/sbin
> -	$(INSTALL_BIN) $(PKG_BUILD_DIR)/uqmi $(1)/sbin/
> -	$(CP) ./files/* $(1)/
> -endef
> -
> -$(eval $(call BuildPackage,uqmi))
> diff --git a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
> deleted file mode 100755
> index c0134f44dd..0000000000
> --- a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
> +++ /dev/null
> @@ -1,471 +0,0 @@
> -#!/bin/sh
> -
> -[ -n "$INCLUDE_ONLY" ] || {
> -	. /lib/functions.sh
> -	. ../netifd-proto.sh
> -	init_proto "$@"
> -}
> -
> -proto_qmi_init_config() {
> -	available=1
> -	no_device=1
> -	proto_config_add_string "device:device"
> -	proto_config_add_string apn
> -	proto_config_add_string auth
> -	proto_config_add_string username
> -	proto_config_add_string password
> -	proto_config_add_string pincode
> -	proto_config_add_int delay
> -	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
> -	proto_config_add_int timeout
> -	proto_config_add_int mtu
> -	proto_config_add_defaults
> -}
> -
> -proto_qmi_setup() {
> -	local interface="$1"
> -	local dataformat connstat plmn_mode mcc mnc
> -	local device apn auth username password pincode delay modes pdptype
> -	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 dhcp dhcpv6 autoconnect plmn ip4table
> -	json_get_vars ip6table timeout mtu $PROTO_DEFAULT_OPTIONS
> -
> -	[ "$timeout" = "" ] && timeout="10"
> -
> -	[ "$metric" = "" ] && metric="0"
> -
> -	[ -n "$ctl_device" ] && device=$ctl_device
> -
> -	[ -n "$device" ] || {
> -		echo "No control device specified"
> -		proto_notify_error "$interface" NO_DEVICE
> -		proto_set_available "$interface" 0
> -		return 1
> -	}
> -
> -	[ -n "$delay" ] && sleep "$delay"
> -
> -	device="$(readlink -f $device)"
> -	[ -c "$device" ] || {
> -		echo "The specified control device does not exist"
> -		proto_notify_error "$interface" NO_DEVICE
> -		proto_set_available "$interface" 0
> -		return 1
> -	}
> -
> -	devname="$(basename "$device")"
> -	devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)"
> -	ifname="$( ls "$devpath"/net )"
> -	[ -n "$ifname" ] || {
> -		echo "The interface could not be found."
> -		proto_notify_error "$interface" NO_IFACE
> -		proto_set_available "$interface" 0
> -		return 1
> -	}
> -
> -	[ -n "$mtu" ] && {
> -		echo "Setting MTU to $mtu"
> -		/sbin/ip link set dev $ifname mtu $mtu
> -	}
> -
> -	echo "Waiting for SIM initialization"
> -	local uninitialized_timeout=0
> -	while uqmi -s -d "$device" --get-pin-status | grep '"UIM uninitialized"' > /dev/null; do
> -		[ -e "$device" ] || return 1
> -		if [ "$uninitialized_timeout" -lt "$timeout" -o "$timeout" = "0" ]; then
> -			let uninitialized_timeout++
> -			sleep 1;
> -		else
> -			echo "SIM not initialized"
> -			proto_notify_error "$interface" SIM_NOT_INITIALIZED
> -			proto_block_restart "$interface"
> -			return 1
> -		fi
> -	done
> -
> -	if uqmi -s -d "$device" --get-pin-status | grep '"Not supported"\|"Invalid QMI command"' > /dev/null; then
> -		[ -n "$pincode" ] && {
> -			uqmi -s -d "$device" --verify-pin1 "$pincode" > /dev/null || uqmi -s -d "$device" --uim-verify-pin1 "$pincode" > /dev/null || {
> -				echo "Unable to verify PIN"
> -				proto_notify_error "$interface" PIN_FAILED
> -				proto_block_restart "$interface"
> -				return 1
> -			}
> -		}
> -	else
> -		. /usr/share/libubox/jshn.sh
> -		json_load "$(uqmi -s -d "$device" --get-pin-status)"
> -		json_get_var pin1_status pin1_status
> -		json_get_var pin1_verify_tries pin1_verify_tries
> -
> -		case "$pin1_status" in
> -			disabled)
> -				echo "PIN verification is disabled"
> -				;;
> -			blocked)
> -				echo "SIM locked PUK required"
> -				proto_notify_error "$interface" PUK_NEEDED
> -				proto_block_restart "$interface"
> -				return 1
> -				;;
> -			not_verified)
> -				[ "$pin1_verify_tries" -lt "3" ] && {
> -					echo "PIN verify count value is $pin1_verify_tries this is below the limit of 3"
> -					proto_notify_error "$interface" PIN_TRIES_BELOW_LIMIT
> -					proto_block_restart "$interface"
> -					return 1
> -				}
> -				if [ -n "$pincode" ]; then
> -					uqmi -s -d "$device" --verify-pin1 "$pincode" > /dev/null 2>&1 || uqmi -s -d "$device" --uim-verify-pin1 "$pincode" > /dev/null 2>&1 || {
> -						echo "Unable to verify PIN"
> -						proto_notify_error "$interface" PIN_FAILED
> -						proto_block_restart "$interface"
> -						return 1
> -					}
> -				else
> -					echo "PIN not specified but required"
> -					proto_notify_error "$interface" PIN_NOT_SPECIFIED
> -					proto_block_restart "$interface"
> -					return 1
> -				fi
> -				;;
> -			verified)
> -				echo "PIN already verified"
> -				;;
> -			*)
> -				echo "PIN status failed ($pin1_status)"
> -				proto_notify_error "$interface" PIN_STATUS_FAILED
> -				proto_block_restart "$interface"
> -				return 1
> -			;;
> -		esac
> -	fi
> -
> -	if [ -n "$plmn" ]; then
> -		json_load "$(uqmi -s -d "$device" --get-plmn)"
> -		json_get_var plmn_mode mode
> -		json_get_vars mcc mnc || {
> -			mcc=0
> -			mnc=0
> -		}
> -
> -		if [ "$plmn" = "0" ]; then
> -			if [ "$plmn_mode" != "automatic" ]; then
> -				mcc=0
> -				mnc=0
> -				echo "Setting PLMN to auto"
> -			fi
> -		elif [ "$mcc" -ne "${plmn:0:3}" -o "$mnc" -ne "${plmn:3}" ]; then
> -			mcc=${plmn:0:3}
> -			mnc=${plmn:3}
> -			echo "Setting PLMN to $plmn"
> -		else
> -			mcc=""
> -			mnc=""
> -		fi
> -	fi
> -
> -	if [ -n "$mcc" -a -n "$mnc" ]; then
> -		uqmi -s -d "$device" --set-plmn --mcc "$mcc" --mnc "$mnc" > /dev/null 2>&1 || {
> -			echo "Unable to set PLMN"
> -			proto_notify_error "$interface" PLMN_FAILED
> -			proto_block_restart "$interface"
> -			return 1
> -		}
> -	fi
> -
> -	# Cleanup current state if any
> -	uqmi -s -d "$device" --stop-network 0xffffffff --autoconnect > /dev/null 2>&1
> -
> -	# Go online
> -	uqmi -s -d "$device" --set-device-operating-mode online > /dev/null 2>&1
> -
> -	# Set IP format
> -	uqmi -s -d "$device" --set-data-format 802.3 > /dev/null 2>&1
> -	uqmi -s -d "$device" --wda-set-data-format 802.3 > /dev/null 2>&1
> -	dataformat="$(uqmi -s -d "$device" --wda-get-data-format)"
> -
> -	if [ "$dataformat" = '"raw-ip"' ]; then
> -
> -		[ -f /sys/class/net/$ifname/qmi/raw_ip ] || {
> -			echo "Device only supports raw-ip mode but is missing this required driver attribute: /sys/class/net/$ifname/qmi/raw_ip"
> -			return 1
> -		}
> -
> -		echo "Device does not support 802.3 mode. Informing driver of raw-ip only for $ifname .."
> -		echo "Y" > /sys/class/net/$ifname/qmi/raw_ip
> -	fi
> -
> -	uqmi -s -d "$device" --sync > /dev/null 2>&1
> -
> -	uqmi -s -d "$device" --network-register > /dev/null 2>&1
> -
> -	echo "Waiting for network registration"
> -	sleep 1
> -	local registration_timeout=0
> -	local registration_state=""
> -	while true; do
> -		registration_state=$(uqmi -s -d "$device" --get-serving-system 2>/dev/null | jsonfilter -e "@.registration" 2>/dev/null)
> -
> -		[ "$registration_state" = "registered" ] && break
> -
> -		if [ "$registration_state" = "searching" ] || [ "$registration_state" = "not_registered" ]; then
> -			if [ "$registration_timeout" -lt "$timeout" ] || [ "$timeout" = "0" ]; then
> -				[ "$registration_state" = "searching" ] || {
> -					echo "Device stopped network registration. Restart network registration"
> -					uqmi -s -d "$device" --network-register > /dev/null 2>&1
> -				}
> -				let registration_timeout++
> -				sleep 1
> -				continue
> -			fi
> -			echo "Network registration failed, registration timeout reached"
> -		else
> -			# registration_state is 'registration_denied' or 'unknown' or ''
> -			echo "Network registration failed (reason: '$registration_state')"
> -		fi
> -
> -		proto_notify_error "$interface" NETWORK_REGISTRATION_FAILED
> -		proto_block_restart "$interface"
> -		return 1
> -	done
> -
> -	[ -n "$modes" ] && uqmi -s -d "$device" --set-network-modes "$modes" > /dev/null 2>&1
> -
> -	echo "Starting network $interface"
> -
> -	pdptype=$(echo "$pdptype" | awk '{print tolower($0)}')
> -	[ "$pdptype" = "ip" -o "$pdptype" = "ipv6" -o "$pdptype" = "ipv4v6" ] || pdptype="ip"
> -
> -	if [ "$pdptype" = "ip" ]; then
> -		[ -z "$autoconnect" ] && autoconnect=1
> -		[ "$autoconnect" = 0 ] && autoconnect=""
> -	else
> -		[ "$autoconnect" = 1 ] || autoconnect=""
> -	fi
> -
> -	[ "$pdptype" = "ip" -o "$pdptype" = "ipv4v6" ] && {
> -		cid_4=$(uqmi -s -d "$device" --get-client-id wds)
> -		if ! [ "$cid_4" -eq "$cid_4" ] 2> /dev/null; then
> -			echo "Unable to obtain client ID"
> -			proto_notify_error "$interface" NO_CID
> -			return 1
> -		fi
> -
> -		uqmi -s -d "$device" --set-client-id wds,"$cid_4" --set-ip-family ipv4 > /dev/null 2>&1
> -
> -		pdh_4=$(uqmi -s -d "$device" --set-client-id wds,"$cid_4" \
> -			--start-network \
> -			${apn:+--apn $apn} \
> -			${profile:+--profile $profile} \
> -			${auth:+--auth-type $auth} \
> -			${username:+--username $username} \
> -			${password:+--password $password} \
> -			${autoconnect:+--autoconnect})
> -
> -		# pdh_4 is a numeric value on success
> -		if ! [ "$pdh_4" -eq "$pdh_4" ] 2> /dev/null; then
> -			echo "Unable to connect IPv4"
> -			uqmi -s -d "$device" --set-client-id wds,"$cid_4" --release-client-id wds > /dev/null 2>&1
> -			proto_notify_error "$interface" CALL_FAILED
> -			return 1
> -		fi
> -
> -		# Check data connection state
> -		connstat=$(uqmi -s -d "$device" --get-data-status)
> -		[ "$connstat" == '"connected"' ] || {
> -			echo "No data link!"
> -			uqmi -s -d "$device" --set-client-id wds,"$cid_4" --release-client-id wds > /dev/null 2>&1
> -			proto_notify_error "$interface" CALL_FAILED
> -			return 1
> -		}
> -	}
> -
> -	[ "$pdptype" = "ipv6" -o "$pdptype" = "ipv4v6" ] && {
> -		cid_6=$(uqmi -s -d "$device" --get-client-id wds)
> -		if ! [ "$cid_6" -eq "$cid_6" ] 2> /dev/null; then
> -			echo "Unable to obtain client ID"
> -			proto_notify_error "$interface" NO_CID
> -			return 1
> -		fi
> -
> -		uqmi -s -d "$device" --set-client-id wds,"$cid_6" --set-ip-family ipv6 > /dev/null 2>&1
> -
> -		pdh_6=$(uqmi -s -d "$device" --set-client-id wds,"$cid_6" \
> -			--start-network \
> -			${apn:+--apn $apn} \
> -			${profile:+--profile $profile} \
> -			${auth:+--auth-type $auth} \
> -			${username:+--username $username} \
> -			${password:+--password $password} \
> -			${autoconnect:+--autoconnect})
> -
> -		# pdh_6 is a numeric value on success
> -		if ! [ "$pdh_6" -eq "$pdh_6" ] 2> /dev/null; then
> -			echo "Unable to connect IPv6"
> -			uqmi -s -d "$device" --set-client-id wds,"$cid_6" --release-client-id wds > /dev/null 2>&1
> -			proto_notify_error "$interface" CALL_FAILED
> -			return 1
> -		fi
> -
> -		# Check data connection state
> -		connstat=$(uqmi -s -d "$device" --get-data-status)
> -		[ "$connstat" == '"connected"' ] || {
> -			echo "No data link!"
> -			uqmi -s -d "$device" --set-client-id wds,"$cid_6" --release-client-id wds > /dev/null 2>&1
> -			proto_notify_error "$interface" CALL_FAILED
> -			return 1
> -		}
> -	}
> -
> -	echo "Setting up $ifname"
> -	proto_init_update "$ifname" 1
> -	proto_set_keep 1
> -	proto_add_data
> -	[ -n "$pdh_4" ] && {
> -		json_add_string "cid_4" "$cid_4"
> -		json_add_string "pdh_4" "$pdh_4"
> -	}
> -	[ -n "$pdh_6" ] && {
> -		json_add_string "cid_6" "$cid_6"
> -		json_add_string "pdh_6" "$pdh_6"
> -	}
> -	proto_close_data
> -	proto_send_update "$interface"
> -
> -	local zone="$(fw3 -q network "$interface" 2>/dev/null)"
> -
> -	[ -n "$pdh_6" ] && {
> -		if [ -z "$dhcpv6" -o "$dhcpv6" = 0 ]; then
> -			json_load "$(uqmi -s -d $device --set-client-id wds,$cid_6 --get-current-settings)"
> -			json_select ipv6
> -			json_get_var ip_6 ip
> -			json_get_var gateway_6 gateway
> -			json_get_var dns1_6 dns1
> -			json_get_var dns2_6 dns2
> -			json_get_var ip_prefix_length ip-prefix-length
> -
> -			proto_init_update "$ifname" 1
> -			proto_set_keep 1
> -			proto_add_ipv6_address "$ip_6" "128"
> -			proto_add_ipv6_prefix "${ip_6}/${ip_prefix_length}"
> -			proto_add_ipv6_route "$gateway_6" "128"
> -			[ "$defaultroute" = 0 ] || proto_add_ipv6_route "::0" 0 "$gateway_6" "" "" "${ip_6}/${ip_prefix_length}"
> -			[ "$peerdns" = 0 ] || {
> -				proto_add_dns_server "$dns1_6"
> -				proto_add_dns_server "$dns2_6"
> -			}
> -			[ -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}_6"
> -			json_add_string ifname "@$interface"
> -			json_add_string proto "dhcpv6"
> -			[ -n "$ip6table" ] && json_add_string ip6table "$ip6table"
> -			proto_add_dynamic_defaults
> -			# RFC 7278: Extend an IPv6 /64 Prefix to LAN
> -			json_add_string extendprefix 1
> -			[ -n "$zone" ] && json_add_string zone "$zone"
> -			json_close_object
> -			ubus call network add_dynamic "$(json_dump)"
> -		fi
> -	}
> -
> -	[ -n "$pdh_4" ] && {
> -		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
> -	}
> -}
> -
> -qmi_wds_stop() {
> -	local cid="$1"
> -	local pdh="$2"
> -
> -	[ -n "$cid" ] || return
> -
> -	uqmi -s -d "$device" --set-client-id wds,"$cid" \
> -		--stop-network 0xffffffff \
> -		--autoconnect > /dev/null 2>&1
> -
> -	[ -n "$pdh" ] && {
> -		uqmi -s -d "$device" --set-client-id wds,"$cid" \
> -			--stop-network "$pdh" > /dev/null 2>&1
> -	}
> -
> -	uqmi -s -d "$device" --set-client-id wds,"$cid" \
> -		--release-client-id wds > /dev/null 2>&1
> -}
> -
> -proto_qmi_teardown() {
> -	local interface="$1"
> -
> -	local device cid_4 pdh_4 cid_6 pdh_6
> -	json_get_vars device
> -
> -	[ -n "$ctl_device" ] && device=$ctl_device
> -
> -	echo "Stopping network $interface"
> -
> -	json_load "$(ubus call network.interface.$interface status)"
> -	json_select data
> -	json_get_vars cid_4 pdh_4 cid_6 pdh_6
> -
> -	qmi_wds_stop "$cid_4" "$pdh_4"
> -	qmi_wds_stop "$cid_6" "$pdh_6"
> -
> -	proto_init_update "*" 0
> -	proto_send_update "$interface"
> -}
> -
> -[ -n "$INCLUDE_ONLY" ] || {
> -	add_protocol qmi
> -}
David Bauer July 1, 2021, 8:06 p.m. UTC | #2
[resend, as I've missed to keep the list CC'ed]

Hi Arjun

On 7/1/21 9:50 PM, Arjun AK wrote:
> Signed-off-by: Arjun AK <arjunak234@gmail.com>

Describing the rationale of this change would've been nice. This package 
is used on most boards with a cellular modem to provide ootb internet 
capability, so please explain how you intend to deal with that.

And just my personal opinion: While I think it makes sense to move 
optional packages to the packages feed, this is clearly a core 
functional dependency for multiple targets. We win absolutely nothing by 
moving it to packages, but lose the ability to build images providing 
seamless ootb internet connectivity without pulling in packages feed.

Just because a lot of packages were moved in the not-so-distant past 
means this has to be done to each and every packages in core.

Best
David

> ---
>   package/network/utils/uqmi/Makefile           |  48 --
>   .../utils/uqmi/files/lib/netifd/proto/qmi.sh  | 471 ------------------
>   2 files changed, 519 deletions(-)
>   delete mode 100644 package/network/utils/uqmi/Makefile
>   delete mode 100755 package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
> 
> diff --git a/package/network/utils/uqmi/Makefile b/package/network/utils/uqmi/Makefile
> deleted file mode 100644
> index 53ca67230b..0000000000
> --- a/package/network/utils/uqmi/Makefile
> +++ /dev/null
> @@ -1,48 +0,0 @@
> -include $(TOPDIR)/rules.mk
> -
> -PKG_NAME:=uqmi
> -PKG_RELEASE:=3
> -
> -PKG_SOURCE_PROTO:=git
> -PKG_SOURCE_URL=$(PROJECT_GIT)/project/uqmi.git
> -PKG_SOURCE_DATE:=2020-11-22
> -PKG_SOURCE_VERSION:=0a19b5b77140465c29e2afa7d611fe93abc9672f
> -PKG_MIRROR_HASH:=0a6641f8e167efd21d464b0b2aeb1fec5f974dddcdb8822fbd5d7190d0b741b4
> -PKG_MAINTAINER:=Matti Laakso <malaakso@elisanet.fi>
> -
> -PKG_LICENSE:=GPL-2.0
> -PKG_LICENSE_FILES:=
> -
> -PKG_FLAGS:=nonshared
> -
> -include $(INCLUDE_DIR)/package.mk
> -include $(INCLUDE_DIR)/cmake.mk
> -
> -define Package/uqmi
> -  SECTION:=net
> -  CATEGORY:=Network
> -  SUBMENU:=WWAN
> -  DEPENDS:=+libubox +libblobmsg-json +kmod-usb-net +kmod-usb-net-qmi-wwan +wwan
> -  TITLE:=Control utility for mobile broadband modems
> -endef
> -
> -define Package/uqmi/description
> -  uqmi is a command line tool for controlling mobile broadband modems using
> -  the QMI-protocol.
> -endef
> -
> -TARGET_CFLAGS += \
> -	-I$(STAGING_DIR)/usr/include -ffunction-sections -fdata-sections
> -
> -TARGET_LDFLAGS += -Wl,--gc-sections
> -
> -CMAKE_OPTIONS += \
> -	-DDEBUG=1
> -
> -define Package/uqmi/install
> -	$(INSTALL_DIR) $(1)/sbin
> -	$(INSTALL_BIN) $(PKG_BUILD_DIR)/uqmi $(1)/sbin/
> -	$(CP) ./files/* $(1)/
> -endef
> -
> -$(eval $(call BuildPackage,uqmi))
> diff --git a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
> deleted file mode 100755
> index c0134f44dd..0000000000
> --- a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
> +++ /dev/null
> @@ -1,471 +0,0 @@
> -#!/bin/sh
> -
> -[ -n "$INCLUDE_ONLY" ] || {
> -	. /lib/functions.sh
> -	. ../netifd-proto.sh
> -	init_proto "$@"
> -}
> -
> -proto_qmi_init_config() {
> -	available=1
> -	no_device=1
> -	proto_config_add_string "device:device"
> -	proto_config_add_string apn
> -	proto_config_add_string auth
> -	proto_config_add_string username
> -	proto_config_add_string password
> -	proto_config_add_string pincode
> -	proto_config_add_int delay
> -	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
> -	proto_config_add_int timeout
> -	proto_config_add_int mtu
> -	proto_config_add_defaults
> -}
> -
> -proto_qmi_setup() {
> -	local interface="$1"
> -	local dataformat connstat plmn_mode mcc mnc
> -	local device apn auth username password pincode delay modes pdptype
> -	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 dhcp dhcpv6 autoconnect plmn ip4table
> -	json_get_vars ip6table timeout mtu $PROTO_DEFAULT_OPTIONS
> -
> -	[ "$timeout" = "" ] && timeout="10"
> -
> -	[ "$metric" = "" ] && metric="0"
> -
> -	[ -n "$ctl_device" ] && device=$ctl_device
> -
> -	[ -n "$device" ] || {
> -		echo "No control device specified"
> -		proto_notify_error "$interface" NO_DEVICE
> -		proto_set_available "$interface" 0
> -		return 1
> -	}
> -
> -	[ -n "$delay" ] && sleep "$delay"
> -
> -	device="$(readlink -f $device)"
> -	[ -c "$device" ] || {
> -		echo "The specified control device does not exist"
> -		proto_notify_error "$interface" NO_DEVICE
> -		proto_set_available "$interface" 0
> -		return 1
> -	}
> -
> -	devname="$(basename "$device")"
> -	devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)"
> -	ifname="$( ls "$devpath"/net )"
> -	[ -n "$ifname" ] || {
> -		echo "The interface could not be found."
> -		proto_notify_error "$interface" NO_IFACE
> -		proto_set_available "$interface" 0
> -		return 1
> -	}
> -
> -	[ -n "$mtu" ] && {
> -		echo "Setting MTU to $mtu"
> -		/sbin/ip link set dev $ifname mtu $mtu
> -	}
> -
> -	echo "Waiting for SIM initialization"
> -	local uninitialized_timeout=0
> -	while uqmi -s -d "$device" --get-pin-status | grep '"UIM uninitialized"' > /dev/null; do
> -		[ -e "$device" ] || return 1
> -		if [ "$uninitialized_timeout" -lt "$timeout" -o "$timeout" = "0" ]; then
> -			let uninitialized_timeout++
> -			sleep 1;
> -		else
> -			echo "SIM not initialized"
> -			proto_notify_error "$interface" SIM_NOT_INITIALIZED
> -			proto_block_restart "$interface"
> -			return 1
> -		fi
> -	done
> -
> -	if uqmi -s -d "$device" --get-pin-status | grep '"Not supported"\|"Invalid QMI command"' > /dev/null; then
> -		[ -n "$pincode" ] && {
> -			uqmi -s -d "$device" --verify-pin1 "$pincode" > /dev/null || uqmi -s -d "$device" --uim-verify-pin1 "$pincode" > /dev/null || {
> -				echo "Unable to verify PIN"
> -				proto_notify_error "$interface" PIN_FAILED
> -				proto_block_restart "$interface"
> -				return 1
> -			}
> -		}
> -	else
> -		. /usr/share/libubox/jshn.sh
> -		json_load "$(uqmi -s -d "$device" --get-pin-status)"
> -		json_get_var pin1_status pin1_status
> -		json_get_var pin1_verify_tries pin1_verify_tries
> -
> -		case "$pin1_status" in
> -			disabled)
> -				echo "PIN verification is disabled"
> -				;;
> -			blocked)
> -				echo "SIM locked PUK required"
> -				proto_notify_error "$interface" PUK_NEEDED
> -				proto_block_restart "$interface"
> -				return 1
> -				;;
> -			not_verified)
> -				[ "$pin1_verify_tries" -lt "3" ] && {
> -					echo "PIN verify count value is $pin1_verify_tries this is below the limit of 3"
> -					proto_notify_error "$interface" PIN_TRIES_BELOW_LIMIT
> -					proto_block_restart "$interface"
> -					return 1
> -				}
> -				if [ -n "$pincode" ]; then
> -					uqmi -s -d "$device" --verify-pin1 "$pincode" > /dev/null 2>&1 || uqmi -s -d "$device" --uim-verify-pin1 "$pincode" > /dev/null 2>&1 || {
> -						echo "Unable to verify PIN"
> -						proto_notify_error "$interface" PIN_FAILED
> -						proto_block_restart "$interface"
> -						return 1
> -					}
> -				else
> -					echo "PIN not specified but required"
> -					proto_notify_error "$interface" PIN_NOT_SPECIFIED
> -					proto_block_restart "$interface"
> -					return 1
> -				fi
> -				;;
> -			verified)
> -				echo "PIN already verified"
> -				;;
> -			*)
> -				echo "PIN status failed ($pin1_status)"
> -				proto_notify_error "$interface" PIN_STATUS_FAILED
> -				proto_block_restart "$interface"
> -				return 1
> -			;;
> -		esac
> -	fi
> -
> -	if [ -n "$plmn" ]; then
> -		json_load "$(uqmi -s -d "$device" --get-plmn)"
> -		json_get_var plmn_mode mode
> -		json_get_vars mcc mnc || {
> -			mcc=0
> -			mnc=0
> -		}
> -
> -		if [ "$plmn" = "0" ]; then
> -			if [ "$plmn_mode" != "automatic" ]; then
> -				mcc=0
> -				mnc=0
> -				echo "Setting PLMN to auto"
> -			fi
> -		elif [ "$mcc" -ne "${plmn:0:3}" -o "$mnc" -ne "${plmn:3}" ]; then
> -			mcc=${plmn:0:3}
> -			mnc=${plmn:3}
> -			echo "Setting PLMN to $plmn"
> -		else
> -			mcc=""
> -			mnc=""
> -		fi
> -	fi
> -
> -	if [ -n "$mcc" -a -n "$mnc" ]; then
> -		uqmi -s -d "$device" --set-plmn --mcc "$mcc" --mnc "$mnc" > /dev/null 2>&1 || {
> -			echo "Unable to set PLMN"
> -			proto_notify_error "$interface" PLMN_FAILED
> -			proto_block_restart "$interface"
> -			return 1
> -		}
> -	fi
> -
> -	# Cleanup current state if any
> -	uqmi -s -d "$device" --stop-network 0xffffffff --autoconnect > /dev/null 2>&1
> -
> -	# Go online
> -	uqmi -s -d "$device" --set-device-operating-mode online > /dev/null 2>&1
> -
> -	# Set IP format
> -	uqmi -s -d "$device" --set-data-format 802.3 > /dev/null 2>&1
> -	uqmi -s -d "$device" --wda-set-data-format 802.3 > /dev/null 2>&1
> -	dataformat="$(uqmi -s -d "$device" --wda-get-data-format)"
> -
> -	if [ "$dataformat" = '"raw-ip"' ]; then
> -
> -		[ -f /sys/class/net/$ifname/qmi/raw_ip ] || {
> -			echo "Device only supports raw-ip mode but is missing this required driver attribute: /sys/class/net/$ifname/qmi/raw_ip"
> -			return 1
> -		}
> -
> -		echo "Device does not support 802.3 mode. Informing driver of raw-ip only for $ifname .."
> -		echo "Y" > /sys/class/net/$ifname/qmi/raw_ip
> -	fi
> -
> -	uqmi -s -d "$device" --sync > /dev/null 2>&1
> -
> -	uqmi -s -d "$device" --network-register > /dev/null 2>&1
> -
> -	echo "Waiting for network registration"
> -	sleep 1
> -	local registration_timeout=0
> -	local registration_state=""
> -	while true; do
> -		registration_state=$(uqmi -s -d "$device" --get-serving-system 2>/dev/null | jsonfilter -e "@.registration" 2>/dev/null)
> -
> -		[ "$registration_state" = "registered" ] && break
> -
> -		if [ "$registration_state" = "searching" ] || [ "$registration_state" = "not_registered" ]; then
> -			if [ "$registration_timeout" -lt "$timeout" ] || [ "$timeout" = "0" ]; then
> -				[ "$registration_state" = "searching" ] || {
> -					echo "Device stopped network registration. Restart network registration"
> -					uqmi -s -d "$device" --network-register > /dev/null 2>&1
> -				}
> -				let registration_timeout++
> -				sleep 1
> -				continue
> -			fi
> -			echo "Network registration failed, registration timeout reached"
> -		else
> -			# registration_state is 'registration_denied' or 'unknown' or ''
> -			echo "Network registration failed (reason: '$registration_state')"
> -		fi
> -
> -		proto_notify_error "$interface" NETWORK_REGISTRATION_FAILED
> -		proto_block_restart "$interface"
> -		return 1
> -	done
> -
> -	[ -n "$modes" ] && uqmi -s -d "$device" --set-network-modes "$modes" > /dev/null 2>&1
> -
> -	echo "Starting network $interface"
> -
> -	pdptype=$(echo "$pdptype" | awk '{print tolower($0)}')
> -	[ "$pdptype" = "ip" -o "$pdptype" = "ipv6" -o "$pdptype" = "ipv4v6" ] || pdptype="ip"
> -
> -	if [ "$pdptype" = "ip" ]; then
> -		[ -z "$autoconnect" ] && autoconnect=1
> -		[ "$autoconnect" = 0 ] && autoconnect=""
> -	else
> -		[ "$autoconnect" = 1 ] || autoconnect=""
> -	fi
> -
> -	[ "$pdptype" = "ip" -o "$pdptype" = "ipv4v6" ] && {
> -		cid_4=$(uqmi -s -d "$device" --get-client-id wds)
> -		if ! [ "$cid_4" -eq "$cid_4" ] 2> /dev/null; then
> -			echo "Unable to obtain client ID"
> -			proto_notify_error "$interface" NO_CID
> -			return 1
> -		fi
> -
> -		uqmi -s -d "$device" --set-client-id wds,"$cid_4" --set-ip-family ipv4 > /dev/null 2>&1
> -
> -		pdh_4=$(uqmi -s -d "$device" --set-client-id wds,"$cid_4" \
> -			--start-network \
> -			${apn:+--apn $apn} \
> -			${profile:+--profile $profile} \
> -			${auth:+--auth-type $auth} \
> -			${username:+--username $username} \
> -			${password:+--password $password} \
> -			${autoconnect:+--autoconnect})
> -
> -		# pdh_4 is a numeric value on success
> -		if ! [ "$pdh_4" -eq "$pdh_4" ] 2> /dev/null; then
> -			echo "Unable to connect IPv4"
> -			uqmi -s -d "$device" --set-client-id wds,"$cid_4" --release-client-id wds > /dev/null 2>&1
> -			proto_notify_error "$interface" CALL_FAILED
> -			return 1
> -		fi
> -
> -		# Check data connection state
> -		connstat=$(uqmi -s -d "$device" --get-data-status)
> -		[ "$connstat" == '"connected"' ] || {
> -			echo "No data link!"
> -			uqmi -s -d "$device" --set-client-id wds,"$cid_4" --release-client-id wds > /dev/null 2>&1
> -			proto_notify_error "$interface" CALL_FAILED
> -			return 1
> -		}
> -	}
> -
> -	[ "$pdptype" = "ipv6" -o "$pdptype" = "ipv4v6" ] && {
> -		cid_6=$(uqmi -s -d "$device" --get-client-id wds)
> -		if ! [ "$cid_6" -eq "$cid_6" ] 2> /dev/null; then
> -			echo "Unable to obtain client ID"
> -			proto_notify_error "$interface" NO_CID
> -			return 1
> -		fi
> -
> -		uqmi -s -d "$device" --set-client-id wds,"$cid_6" --set-ip-family ipv6 > /dev/null 2>&1
> -
> -		pdh_6=$(uqmi -s -d "$device" --set-client-id wds,"$cid_6" \
> -			--start-network \
> -			${apn:+--apn $apn} \
> -			${profile:+--profile $profile} \
> -			${auth:+--auth-type $auth} \
> -			${username:+--username $username} \
> -			${password:+--password $password} \
> -			${autoconnect:+--autoconnect})
> -
> -		# pdh_6 is a numeric value on success
> -		if ! [ "$pdh_6" -eq "$pdh_6" ] 2> /dev/null; then
> -			echo "Unable to connect IPv6"
> -			uqmi -s -d "$device" --set-client-id wds,"$cid_6" --release-client-id wds > /dev/null 2>&1
> -			proto_notify_error "$interface" CALL_FAILED
> -			return 1
> -		fi
> -
> -		# Check data connection state
> -		connstat=$(uqmi -s -d "$device" --get-data-status)
> -		[ "$connstat" == '"connected"' ] || {
> -			echo "No data link!"
> -			uqmi -s -d "$device" --set-client-id wds,"$cid_6" --release-client-id wds > /dev/null 2>&1
> -			proto_notify_error "$interface" CALL_FAILED
> -			return 1
> -		}
> -	}
> -
> -	echo "Setting up $ifname"
> -	proto_init_update "$ifname" 1
> -	proto_set_keep 1
> -	proto_add_data
> -	[ -n "$pdh_4" ] && {
> -		json_add_string "cid_4" "$cid_4"
> -		json_add_string "pdh_4" "$pdh_4"
> -	}
> -	[ -n "$pdh_6" ] && {
> -		json_add_string "cid_6" "$cid_6"
> -		json_add_string "pdh_6" "$pdh_6"
> -	}
> -	proto_close_data
> -	proto_send_update "$interface"
> -
> -	local zone="$(fw3 -q network "$interface" 2>/dev/null)"
> -
> -	[ -n "$pdh_6" ] && {
> -		if [ -z "$dhcpv6" -o "$dhcpv6" = 0 ]; then
> -			json_load "$(uqmi -s -d $device --set-client-id wds,$cid_6 --get-current-settings)"
> -			json_select ipv6
> -			json_get_var ip_6 ip
> -			json_get_var gateway_6 gateway
> -			json_get_var dns1_6 dns1
> -			json_get_var dns2_6 dns2
> -			json_get_var ip_prefix_length ip-prefix-length
> -
> -			proto_init_update "$ifname" 1
> -			proto_set_keep 1
> -			proto_add_ipv6_address "$ip_6" "128"
> -			proto_add_ipv6_prefix "${ip_6}/${ip_prefix_length}"
> -			proto_add_ipv6_route "$gateway_6" "128"
> -			[ "$defaultroute" = 0 ] || proto_add_ipv6_route "::0" 0 "$gateway_6" "" "" "${ip_6}/${ip_prefix_length}"
> -			[ "$peerdns" = 0 ] || {
> -				proto_add_dns_server "$dns1_6"
> -				proto_add_dns_server "$dns2_6"
> -			}
> -			[ -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}_6"
> -			json_add_string ifname "@$interface"
> -			json_add_string proto "dhcpv6"
> -			[ -n "$ip6table" ] && json_add_string ip6table "$ip6table"
> -			proto_add_dynamic_defaults
> -			# RFC 7278: Extend an IPv6 /64 Prefix to LAN
> -			json_add_string extendprefix 1
> -			[ -n "$zone" ] && json_add_string zone "$zone"
> -			json_close_object
> -			ubus call network add_dynamic "$(json_dump)"
> -		fi
> -	}
> -
> -	[ -n "$pdh_4" ] && {
> -		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
> -	}
> -}
> -
> -qmi_wds_stop() {
> -	local cid="$1"
> -	local pdh="$2"
> -
> -	[ -n "$cid" ] || return
> -
> -	uqmi -s -d "$device" --set-client-id wds,"$cid" \
> -		--stop-network 0xffffffff \
> -		--autoconnect > /dev/null 2>&1
> -
> -	[ -n "$pdh" ] && {
> -		uqmi -s -d "$device" --set-client-id wds,"$cid" \
> -			--stop-network "$pdh" > /dev/null 2>&1
> -	}
> -
> -	uqmi -s -d "$device" --set-client-id wds,"$cid" \
> -		--release-client-id wds > /dev/null 2>&1
> -}
> -
> -proto_qmi_teardown() {
> -	local interface="$1"
> -
> -	local device cid_4 pdh_4 cid_6 pdh_6
> -	json_get_vars device
> -
> -	[ -n "$ctl_device" ] && device=$ctl_device
> -
> -	echo "Stopping network $interface"
> -
> -	json_load "$(ubus call network.interface.$interface status)"
> -	json_select data
> -	json_get_vars cid_4 pdh_4 cid_6 pdh_6
> -
> -	qmi_wds_stop "$cid_4" "$pdh_4"
> -	qmi_wds_stop "$cid_6" "$pdh_6"
> -
> -	proto_init_update "*" 0
> -	proto_send_update "$interface"
> -}
> -
> -[ -n "$INCLUDE_ONLY" ] || {
> -	add_protocol qmi
> -}
>
Piotr Dymacz July 1, 2021, 8:10 p.m. UTC | #3
Hi Arjun,

On 01.07.2021 21:50, Arjun AK wrote:
> Signed-off-by: Arjun AK <arjunak234@gmail.com>

There are many devices with uqmi dependency (more than 10?).
Personally, I would prefer to keep this one in the core packages set.
Arjun AK July 1, 2021, 8:12 p.m. UTC | #4
On 02/07/21 1:36 am, David Bauer wrote:
> [resend, as I've missed to keep the list CC'ed]
> 
> Hi Arjun
> 
> On 7/1/21 9:50 PM, Arjun AK wrote:
>> Signed-off-by: Arjun AK <arjunak234@gmail.com>
> 

> And just my personal opinion: While I think it makes sense to move 
> optional packages to the packages feed, this is clearly a core 
> functional dependency for multiple targets. We win absolutely nothing by 
> moving it to packages, but lose the ability to build images providing 
> seamless ootb internet connectivity without pulling in packages feed.
> 
> Just because a lot of packages were moved in the not-so-distant past 
> means this has to be done to each and every packages in core.
> 
> Best
> David
> 

For now i would be happy with the patch titled "uim: add 
--uim-get-sim-state" be merged in.
Arjun AK July 1, 2021, 8:18 p.m. UTC | #5
On 02/07/21 1:42 am, Arjun wrote:
> On 02/07/21 1:36 am, David Bauer wrote:
>> [resend, as I've missed to keep the list CC'ed]
>>
>> Hi Arjun
>>
>> On 7/1/21 9:50 PM, Arjun AK wrote:
>>> Signed-off-by: Arjun AK <arjunak234@gmail.com>
>>
> 
>> And just my personal opinion: While I think it makes sense to move 
>> optional packages to the packages feed, this is clearly a core 
>> functional dependency for multiple targets. We win absolutely nothing 
>> by moving it to packages, but lose the ability to build images 
>> providing seamless ootb internet connectivity without pulling in 
>> packages feed.
>>
>> Just because a lot of packages were moved in the not-so-distant past 
>> means this has to be done to each and every packages in core.
>>
>> Best
>> David
>>
> 
> For now i would be happy with the patch titled "uim: add 
> --uim-get-sim-state" be merged in.
> 
> 
> 
Also the current maintainers (Matti Laakso <malaakso@elisanet.fi>) 
server is not accepting emails anymore.
Rafał Miłecki July 2, 2021, 5:20 a.m. UTC | #6
On 01.07.2021 21:50, Arjun AK wrote:
> Signed-off-by: Arjun AK <arjunak234@gmail.com>

Nacked-by: Rafał Miłecki <rafal@milecki.pl>

No proper explanation.
Package is included by default in few device images.
Petr Štetiar July 2, 2021, 9:28 a.m. UTC | #7
Paul Spooren <mail@aparcar.org> [2021-07-01 09:53:27]:

Hi,

> I'm all for moving it

maybe we should get back[1] to the drawing board and finally formaly define
what is core/base package, so it's clear? BTW in that email I've proposed
initial list of potential packages for cleanup/move, but comgt/uqmi and
probably few others were omitted.

In this case removing the package in DEFAULT_PACKAGES would clearly result in
the regression during sysupgrade to the next release, as folks might lose
upstream connectivity if they're using uqmi/comgt for that purpose.

Yeah, we can document it and all, but it would be really silly to remove such
essential and core networking/wireless feature. It seems, that once the
feature is in official image it can't be removed easily without making some
users angry.

1. https://lists.infradead.org/pipermail/openwrt-devel/2019-August/024109.html

-- ynezz
Koen Vandeputte July 2, 2021, 11:35 a.m. UTC | #8
On 01.07.21 22:12, Arjun wrote:
> On 02/07/21 1:36 am, David Bauer wrote:
>> [resend, as I've missed to keep the list CC'ed]
>>
>> Hi Arjun
>>
>> On 7/1/21 9:50 PM, Arjun AK wrote:
>>> Signed-off-by: Arjun AK <arjunak234@gmail.com>
>>
>
>> And just my personal opinion: While I think it makes sense to move 
>> optional packages to the packages feed, this is clearly a core 
>> functional dependency for multiple targets. We win absolutely nothing 
>> by moving it to packages, but lose the ability to build images 
>> providing seamless ootb internet connectivity without pulling in 
>> packages feed.
>>
>> Just because a lot of packages were moved in the not-so-distant past 
>> means this has to be done to each and every packages in core.
>>
>> Best
>> David
>>
+1 for keeping it in the core


>
> For now i would be happy with the patch titled "uim: add 
> --uim-get-sim-state" be merged in.
>
>

I'm preparing a major update in the background (using libqmi 1.28.4 as 
source).
Hold on a little longer please.

Kind regards,

Koen
John Crispin July 2, 2021, 12:33 p.m. UTC | #9
On 02.07.21 13:35, Koen Vandeputte wrote:
>>>
> +1 for keeping it in the core


I agree, moving packages into the feed makes sense, but stuff needed for 
connectivity should stay in trunk

     John
diff mbox series

Patch

diff --git a/package/network/utils/uqmi/Makefile b/package/network/utils/uqmi/Makefile
deleted file mode 100644
index 53ca67230b..0000000000
--- a/package/network/utils/uqmi/Makefile
+++ /dev/null
@@ -1,48 +0,0 @@ 
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=uqmi
-PKG_RELEASE:=3
-
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_URL=$(PROJECT_GIT)/project/uqmi.git
-PKG_SOURCE_DATE:=2020-11-22
-PKG_SOURCE_VERSION:=0a19b5b77140465c29e2afa7d611fe93abc9672f
-PKG_MIRROR_HASH:=0a6641f8e167efd21d464b0b2aeb1fec5f974dddcdb8822fbd5d7190d0b741b4
-PKG_MAINTAINER:=Matti Laakso <malaakso@elisanet.fi>
-
-PKG_LICENSE:=GPL-2.0
-PKG_LICENSE_FILES:=
-
-PKG_FLAGS:=nonshared
-
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/cmake.mk
-
-define Package/uqmi
-  SECTION:=net
-  CATEGORY:=Network
-  SUBMENU:=WWAN
-  DEPENDS:=+libubox +libblobmsg-json +kmod-usb-net +kmod-usb-net-qmi-wwan +wwan
-  TITLE:=Control utility for mobile broadband modems
-endef
-
-define Package/uqmi/description
-  uqmi is a command line tool for controlling mobile broadband modems using
-  the QMI-protocol.
-endef
-
-TARGET_CFLAGS += \
-	-I$(STAGING_DIR)/usr/include -ffunction-sections -fdata-sections
-
-TARGET_LDFLAGS += -Wl,--gc-sections
-
-CMAKE_OPTIONS += \
-	-DDEBUG=1
-
-define Package/uqmi/install
-	$(INSTALL_DIR) $(1)/sbin
-	$(INSTALL_BIN) $(PKG_BUILD_DIR)/uqmi $(1)/sbin/
-	$(CP) ./files/* $(1)/
-endef
-
-$(eval $(call BuildPackage,uqmi))
diff --git a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
deleted file mode 100755
index c0134f44dd..0000000000
--- a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
+++ /dev/null
@@ -1,471 +0,0 @@ 
-#!/bin/sh
-
-[ -n "$INCLUDE_ONLY" ] || {
-	. /lib/functions.sh
-	. ../netifd-proto.sh
-	init_proto "$@"
-}
-
-proto_qmi_init_config() {
-	available=1
-	no_device=1
-	proto_config_add_string "device:device"
-	proto_config_add_string apn
-	proto_config_add_string auth
-	proto_config_add_string username
-	proto_config_add_string password
-	proto_config_add_string pincode
-	proto_config_add_int delay
-	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
-	proto_config_add_int timeout
-	proto_config_add_int mtu
-	proto_config_add_defaults
-}
-
-proto_qmi_setup() {
-	local interface="$1"
-	local dataformat connstat plmn_mode mcc mnc
-	local device apn auth username password pincode delay modes pdptype
-	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 dhcp dhcpv6 autoconnect plmn ip4table
-	json_get_vars ip6table timeout mtu $PROTO_DEFAULT_OPTIONS
-
-	[ "$timeout" = "" ] && timeout="10"
-
-	[ "$metric" = "" ] && metric="0"
-
-	[ -n "$ctl_device" ] && device=$ctl_device
-
-	[ -n "$device" ] || {
-		echo "No control device specified"
-		proto_notify_error "$interface" NO_DEVICE
-		proto_set_available "$interface" 0
-		return 1
-	}
-
-	[ -n "$delay" ] && sleep "$delay"
-
-	device="$(readlink -f $device)"
-	[ -c "$device" ] || {
-		echo "The specified control device does not exist"
-		proto_notify_error "$interface" NO_DEVICE
-		proto_set_available "$interface" 0
-		return 1
-	}
-
-	devname="$(basename "$device")"
-	devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)"
-	ifname="$( ls "$devpath"/net )"
-	[ -n "$ifname" ] || {
-		echo "The interface could not be found."
-		proto_notify_error "$interface" NO_IFACE
-		proto_set_available "$interface" 0
-		return 1
-	}
-
-	[ -n "$mtu" ] && {
-		echo "Setting MTU to $mtu"
-		/sbin/ip link set dev $ifname mtu $mtu
-	}
-
-	echo "Waiting for SIM initialization"
-	local uninitialized_timeout=0
-	while uqmi -s -d "$device" --get-pin-status | grep '"UIM uninitialized"' > /dev/null; do
-		[ -e "$device" ] || return 1
-		if [ "$uninitialized_timeout" -lt "$timeout" -o "$timeout" = "0" ]; then
-			let uninitialized_timeout++
-			sleep 1;
-		else
-			echo "SIM not initialized"
-			proto_notify_error "$interface" SIM_NOT_INITIALIZED
-			proto_block_restart "$interface"
-			return 1
-		fi
-	done
-
-	if uqmi -s -d "$device" --get-pin-status | grep '"Not supported"\|"Invalid QMI command"' > /dev/null; then
-		[ -n "$pincode" ] && {
-			uqmi -s -d "$device" --verify-pin1 "$pincode" > /dev/null || uqmi -s -d "$device" --uim-verify-pin1 "$pincode" > /dev/null || {
-				echo "Unable to verify PIN"
-				proto_notify_error "$interface" PIN_FAILED
-				proto_block_restart "$interface"
-				return 1
-			}
-		}
-	else
-		. /usr/share/libubox/jshn.sh
-		json_load "$(uqmi -s -d "$device" --get-pin-status)"
-		json_get_var pin1_status pin1_status
-		json_get_var pin1_verify_tries pin1_verify_tries
-
-		case "$pin1_status" in
-			disabled)
-				echo "PIN verification is disabled"
-				;;
-			blocked)
-				echo "SIM locked PUK required"
-				proto_notify_error "$interface" PUK_NEEDED
-				proto_block_restart "$interface"
-				return 1
-				;;
-			not_verified)
-				[ "$pin1_verify_tries" -lt "3" ] && {
-					echo "PIN verify count value is $pin1_verify_tries this is below the limit of 3"
-					proto_notify_error "$interface" PIN_TRIES_BELOW_LIMIT
-					proto_block_restart "$interface"
-					return 1
-				}
-				if [ -n "$pincode" ]; then
-					uqmi -s -d "$device" --verify-pin1 "$pincode" > /dev/null 2>&1 || uqmi -s -d "$device" --uim-verify-pin1 "$pincode" > /dev/null 2>&1 || {
-						echo "Unable to verify PIN"
-						proto_notify_error "$interface" PIN_FAILED
-						proto_block_restart "$interface"
-						return 1
-					}
-				else
-					echo "PIN not specified but required"
-					proto_notify_error "$interface" PIN_NOT_SPECIFIED
-					proto_block_restart "$interface"
-					return 1
-				fi
-				;;
-			verified)
-				echo "PIN already verified"
-				;;
-			*)
-				echo "PIN status failed ($pin1_status)"
-				proto_notify_error "$interface" PIN_STATUS_FAILED
-				proto_block_restart "$interface"
-				return 1
-			;;
-		esac
-	fi
-
-	if [ -n "$plmn" ]; then
-		json_load "$(uqmi -s -d "$device" --get-plmn)"
-		json_get_var plmn_mode mode
-		json_get_vars mcc mnc || {
-			mcc=0
-			mnc=0
-		}
-
-		if [ "$plmn" = "0" ]; then
-			if [ "$plmn_mode" != "automatic" ]; then
-				mcc=0
-				mnc=0
-				echo "Setting PLMN to auto"
-			fi
-		elif [ "$mcc" -ne "${plmn:0:3}" -o "$mnc" -ne "${plmn:3}" ]; then
-			mcc=${plmn:0:3}
-			mnc=${plmn:3}
-			echo "Setting PLMN to $plmn"
-		else
-			mcc=""
-			mnc=""
-		fi
-	fi
-
-	if [ -n "$mcc" -a -n "$mnc" ]; then
-		uqmi -s -d "$device" --set-plmn --mcc "$mcc" --mnc "$mnc" > /dev/null 2>&1 || {
-			echo "Unable to set PLMN"
-			proto_notify_error "$interface" PLMN_FAILED
-			proto_block_restart "$interface"
-			return 1
-		}
-	fi
-
-	# Cleanup current state if any
-	uqmi -s -d "$device" --stop-network 0xffffffff --autoconnect > /dev/null 2>&1
-
-	# Go online
-	uqmi -s -d "$device" --set-device-operating-mode online > /dev/null 2>&1
-
-	# Set IP format
-	uqmi -s -d "$device" --set-data-format 802.3 > /dev/null 2>&1
-	uqmi -s -d "$device" --wda-set-data-format 802.3 > /dev/null 2>&1
-	dataformat="$(uqmi -s -d "$device" --wda-get-data-format)"
-
-	if [ "$dataformat" = '"raw-ip"' ]; then
-
-		[ -f /sys/class/net/$ifname/qmi/raw_ip ] || {
-			echo "Device only supports raw-ip mode but is missing this required driver attribute: /sys/class/net/$ifname/qmi/raw_ip"
-			return 1
-		}
-
-		echo "Device does not support 802.3 mode. Informing driver of raw-ip only for $ifname .."
-		echo "Y" > /sys/class/net/$ifname/qmi/raw_ip
-	fi
-
-	uqmi -s -d "$device" --sync > /dev/null 2>&1
-
-	uqmi -s -d "$device" --network-register > /dev/null 2>&1
-
-	echo "Waiting for network registration"
-	sleep 1
-	local registration_timeout=0
-	local registration_state=""
-	while true; do
-		registration_state=$(uqmi -s -d "$device" --get-serving-system 2>/dev/null | jsonfilter -e "@.registration" 2>/dev/null)
-
-		[ "$registration_state" = "registered" ] && break
-
-		if [ "$registration_state" = "searching" ] || [ "$registration_state" = "not_registered" ]; then
-			if [ "$registration_timeout" -lt "$timeout" ] || [ "$timeout" = "0" ]; then
-				[ "$registration_state" = "searching" ] || {
-					echo "Device stopped network registration. Restart network registration"
-					uqmi -s -d "$device" --network-register > /dev/null 2>&1
-				}
-				let registration_timeout++
-				sleep 1
-				continue
-			fi
-			echo "Network registration failed, registration timeout reached"
-		else
-			# registration_state is 'registration_denied' or 'unknown' or ''
-			echo "Network registration failed (reason: '$registration_state')"
-		fi
-
-		proto_notify_error "$interface" NETWORK_REGISTRATION_FAILED
-		proto_block_restart "$interface"
-		return 1
-	done
-
-	[ -n "$modes" ] && uqmi -s -d "$device" --set-network-modes "$modes" > /dev/null 2>&1
-
-	echo "Starting network $interface"
-
-	pdptype=$(echo "$pdptype" | awk '{print tolower($0)}')
-	[ "$pdptype" = "ip" -o "$pdptype" = "ipv6" -o "$pdptype" = "ipv4v6" ] || pdptype="ip"
-
-	if [ "$pdptype" = "ip" ]; then
-		[ -z "$autoconnect" ] && autoconnect=1
-		[ "$autoconnect" = 0 ] && autoconnect=""
-	else
-		[ "$autoconnect" = 1 ] || autoconnect=""
-	fi
-
-	[ "$pdptype" = "ip" -o "$pdptype" = "ipv4v6" ] && {
-		cid_4=$(uqmi -s -d "$device" --get-client-id wds)
-		if ! [ "$cid_4" -eq "$cid_4" ] 2> /dev/null; then
-			echo "Unable to obtain client ID"
-			proto_notify_error "$interface" NO_CID
-			return 1
-		fi
-
-		uqmi -s -d "$device" --set-client-id wds,"$cid_4" --set-ip-family ipv4 > /dev/null 2>&1
-
-		pdh_4=$(uqmi -s -d "$device" --set-client-id wds,"$cid_4" \
-			--start-network \
-			${apn:+--apn $apn} \
-			${profile:+--profile $profile} \
-			${auth:+--auth-type $auth} \
-			${username:+--username $username} \
-			${password:+--password $password} \
-			${autoconnect:+--autoconnect})
-
-		# pdh_4 is a numeric value on success
-		if ! [ "$pdh_4" -eq "$pdh_4" ] 2> /dev/null; then
-			echo "Unable to connect IPv4"
-			uqmi -s -d "$device" --set-client-id wds,"$cid_4" --release-client-id wds > /dev/null 2>&1
-			proto_notify_error "$interface" CALL_FAILED
-			return 1
-		fi
-
-		# Check data connection state
-		connstat=$(uqmi -s -d "$device" --get-data-status)
-		[ "$connstat" == '"connected"' ] || {
-			echo "No data link!"
-			uqmi -s -d "$device" --set-client-id wds,"$cid_4" --release-client-id wds > /dev/null 2>&1
-			proto_notify_error "$interface" CALL_FAILED
-			return 1
-		}
-	}
-
-	[ "$pdptype" = "ipv6" -o "$pdptype" = "ipv4v6" ] && {
-		cid_6=$(uqmi -s -d "$device" --get-client-id wds)
-		if ! [ "$cid_6" -eq "$cid_6" ] 2> /dev/null; then
-			echo "Unable to obtain client ID"
-			proto_notify_error "$interface" NO_CID
-			return 1
-		fi
-
-		uqmi -s -d "$device" --set-client-id wds,"$cid_6" --set-ip-family ipv6 > /dev/null 2>&1
-
-		pdh_6=$(uqmi -s -d "$device" --set-client-id wds,"$cid_6" \
-			--start-network \
-			${apn:+--apn $apn} \
-			${profile:+--profile $profile} \
-			${auth:+--auth-type $auth} \
-			${username:+--username $username} \
-			${password:+--password $password} \
-			${autoconnect:+--autoconnect})
-
-		# pdh_6 is a numeric value on success
-		if ! [ "$pdh_6" -eq "$pdh_6" ] 2> /dev/null; then
-			echo "Unable to connect IPv6"
-			uqmi -s -d "$device" --set-client-id wds,"$cid_6" --release-client-id wds > /dev/null 2>&1
-			proto_notify_error "$interface" CALL_FAILED
-			return 1
-		fi
-
-		# Check data connection state
-		connstat=$(uqmi -s -d "$device" --get-data-status)
-		[ "$connstat" == '"connected"' ] || {
-			echo "No data link!"
-			uqmi -s -d "$device" --set-client-id wds,"$cid_6" --release-client-id wds > /dev/null 2>&1
-			proto_notify_error "$interface" CALL_FAILED
-			return 1
-		}
-	}
-
-	echo "Setting up $ifname"
-	proto_init_update "$ifname" 1
-	proto_set_keep 1
-	proto_add_data
-	[ -n "$pdh_4" ] && {
-		json_add_string "cid_4" "$cid_4"
-		json_add_string "pdh_4" "$pdh_4"
-	}
-	[ -n "$pdh_6" ] && {
-		json_add_string "cid_6" "$cid_6"
-		json_add_string "pdh_6" "$pdh_6"
-	}
-	proto_close_data
-	proto_send_update "$interface"
-
-	local zone="$(fw3 -q network "$interface" 2>/dev/null)"
-
-	[ -n "$pdh_6" ] && {
-		if [ -z "$dhcpv6" -o "$dhcpv6" = 0 ]; then
-			json_load "$(uqmi -s -d $device --set-client-id wds,$cid_6 --get-current-settings)"
-			json_select ipv6
-			json_get_var ip_6 ip
-			json_get_var gateway_6 gateway
-			json_get_var dns1_6 dns1
-			json_get_var dns2_6 dns2
-			json_get_var ip_prefix_length ip-prefix-length
-
-			proto_init_update "$ifname" 1
-			proto_set_keep 1
-			proto_add_ipv6_address "$ip_6" "128"
-			proto_add_ipv6_prefix "${ip_6}/${ip_prefix_length}"
-			proto_add_ipv6_route "$gateway_6" "128"
-			[ "$defaultroute" = 0 ] || proto_add_ipv6_route "::0" 0 "$gateway_6" "" "" "${ip_6}/${ip_prefix_length}"
-			[ "$peerdns" = 0 ] || {
-				proto_add_dns_server "$dns1_6"
-				proto_add_dns_server "$dns2_6"
-			}
-			[ -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}_6"
-			json_add_string ifname "@$interface"
-			json_add_string proto "dhcpv6"
-			[ -n "$ip6table" ] && json_add_string ip6table "$ip6table"
-			proto_add_dynamic_defaults
-			# RFC 7278: Extend an IPv6 /64 Prefix to LAN
-			json_add_string extendprefix 1
-			[ -n "$zone" ] && json_add_string zone "$zone"
-			json_close_object
-			ubus call network add_dynamic "$(json_dump)"
-		fi
-	}
-
-	[ -n "$pdh_4" ] && {
-		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
-	}
-}
-
-qmi_wds_stop() {
-	local cid="$1"
-	local pdh="$2"
-
-	[ -n "$cid" ] || return
-
-	uqmi -s -d "$device" --set-client-id wds,"$cid" \
-		--stop-network 0xffffffff \
-		--autoconnect > /dev/null 2>&1
-
-	[ -n "$pdh" ] && {
-		uqmi -s -d "$device" --set-client-id wds,"$cid" \
-			--stop-network "$pdh" > /dev/null 2>&1
-	}
-
-	uqmi -s -d "$device" --set-client-id wds,"$cid" \
-		--release-client-id wds > /dev/null 2>&1
-}
-
-proto_qmi_teardown() {
-	local interface="$1"
-
-	local device cid_4 pdh_4 cid_6 pdh_6
-	json_get_vars device
-
-	[ -n "$ctl_device" ] && device=$ctl_device
-
-	echo "Stopping network $interface"
-
-	json_load "$(ubus call network.interface.$interface status)"
-	json_select data
-	json_get_vars cid_4 pdh_4 cid_6 pdh_6
-
-	qmi_wds_stop "$cid_4" "$pdh_4"
-	qmi_wds_stop "$cid_6" "$pdh_6"
-
-	proto_init_update "*" 0
-	proto_send_update "$interface"
-}
-
-[ -n "$INCLUDE_ONLY" ] || {
-	add_protocol qmi
-}