mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	This replaces deprecated backticks by more versatile $(...) syntax. Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
		
			
				
	
	
		
			147 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| . /lib/functions.sh
 | |
| . ../netifd-proto.sh
 | |
| init_proto "$@"
 | |
| 
 | |
| INCLUDE_ONLY=1
 | |
| 
 | |
| ctl_device=""
 | |
| dat_device=""
 | |
| 
 | |
| proto_mbim_setup() { echo "wwan[$$] mbim proto is missing"; }
 | |
| proto_qmi_setup() { echo "wwan[$$] qmi proto is missing"; }
 | |
| proto_ncm_setup() { echo "wwan[$$] ncm proto is missing"; }
 | |
| proto_3g_setup() { echo "wwan[$$] 3g proto is missing"; }
 | |
| proto_directip_setup() { echo "wwan[$$] directip proto is missing"; }
 | |
| 
 | |
| [ -f ./mbim.sh ] && . ./mbim.sh
 | |
| [ -f ./ncm.sh ] && . ./ncm.sh
 | |
| [ -f ./qmi.sh ] && . ./qmi.sh
 | |
| [ -f ./3g.sh ] && { . ./ppp.sh; . ./3g.sh; }
 | |
| [ -f ./directip.sh ] && . ./directip.sh
 | |
| 
 | |
| proto_wwan_init_config() {
 | |
| 	available=1
 | |
| 	no_device=1
 | |
| 
 | |
| 	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_string delay
 | |
| 	proto_config_add_string modes
 | |
| 	proto_config_add_string bus
 | |
| }
 | |
| 
 | |
| proto_wwan_setup() {
 | |
| 	local driver usb devicename desc bus
 | |
| 
 | |
| 	json_get_vars bus
 | |
| 
 | |
| 	if [ -L "/sys/bus/usb/devices/${bus}" ]; then
 | |
| 		if [ -f "/sys/bus/usb/devices/${bus}/idVendor" ] \
 | |
| 			&& [ -f "/sys/bus/usb/devices/${bus}/idProduct" ]; then
 | |
| 			local vendor product
 | |
| 			vendor=$(cat /sys/bus/usb/devices/${bus}/idVendor)
 | |
| 			product=$(cat /sys/bus/usb/devices/${bus}/idProduct)
 | |
| 			[ -f /lib/network/wwan/$vendor:$product ] && {
 | |
| 				usb=/lib/network/wwan/$vendor:$product
 | |
| 				devicename=$bus
 | |
| 			}
 | |
| 		else
 | |
| 			echo "wwan[$$]" "Specified usb bus ${bus} was not found"
 | |
| 			proto_notify_error "$interface" NO_USB
 | |
| 			proto_block_restart "$interface"
 | |
| 			return 1
 | |
| 		fi
 | |
| 	else
 | |
| 		echo "wwan[$$]" "Searching for a valid wwan usb device..."
 | |
| 		for a in $(ls /sys/bus/usb/devices); do
 | |
| 			local vendor product
 | |
| 			[ -z "$usb" -a -f /sys/bus/usb/devices/$a/idVendor -a  -f /sys/bus/usb/devices/$a/idProduct ] || continue
 | |
| 			vendor=$(cat /sys/bus/usb/devices/$a/idVendor)
 | |
| 			product=$(cat /sys/bus/usb/devices/$a/idProduct)
 | |
| 			[ -f /lib/network/wwan/$vendor:$product ] && {
 | |
| 				usb=/lib/network/wwan/$vendor:$product
 | |
| 				devicename=$a
 | |
| 			}
 | |
| 		done
 | |
| 	fi
 | |
| 
 | |
| 	echo "wwan[$$]" "Using wwan usb device on bus $devicename"
 | |
| 
 | |
| 	[ -n "$usb" ] && {
 | |
| 		local old_cb control data
 | |
| 
 | |
| 		json_set_namespace wwan old_cb
 | |
| 		json_init
 | |
| 		json_load "$(cat "$usb")"
 | |
| 		json_select
 | |
| 		json_get_vars desc control data
 | |
| 		json_set_namespace "$old_cb"
 | |
| 
 | |
| 		[ -n "$control" -a -n "$data" ] && {
 | |
| 			ttys=$(ls -d /sys/bus/usb/devices/$devicename/${devicename}*/tty?* /sys/bus/usb/devices/$devicename/${devicename}*/tty/tty?* | sed "s/.*\///g" | tr "\n" " ")
 | |
| 			ctl_device=/dev/$(echo $ttys | cut -d" " -f $((control + 1)))
 | |
| 			dat_device=/dev/$(echo $ttys | cut -d" " -f $((data + 1)))
 | |
| 			driver=comgt
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	[ -z "$ctl_device" ] && for net in $(ls /sys/class/net/ | grep -e wwan -e usb); do
 | |
| 		[ -z "$ctl_device" ] || continue
 | |
| 		[ -n "$bus" ] && {
 | |
| 			[ $(readlink /sys/class/net/$net | grep $bus) ] || continue
 | |
| 		}
 | |
| 		driver=$(grep DRIVER /sys/class/net/$net/device/uevent | cut -d= -f2)
 | |
| 		case "$driver" in
 | |
| 		qmi_wwan|cdc_mbim)
 | |
| 			ctl_device=/dev/$(ls /sys/class/net/$net/device/usbmisc)
 | |
| 			;;
 | |
| 		sierra_net|cdc_ether|*cdc_ncm)
 | |
| 			ctl_device=/dev/$(cd /sys/class/net/$net/; find ../../../ -name ttyUSB* |xargs -n1 basename | head -n1)
 | |
| 			;;
 | |
| 		*) continue;;
 | |
| 		esac
 | |
| 		echo "wwan[$$]" "Using proto:$proto device:$ctl_device iface:$net desc:$desc"
 | |
| 	done
 | |
| 
 | |
| 	[ -n "$ctl_device" ] || {
 | |
| 		echo "wwan[$$]" "No valid device was found"
 | |
| 		proto_notify_error "$interface" NO_DEVICE
 | |
| 		proto_block_restart "$interface"
 | |
| 		return 1
 | |
| 	}
 | |
| 
 | |
| 	uci_set_state network "$interface" driver "$driver"
 | |
| 	uci_set_state network "$interface" ctl_device "$ctl_device"
 | |
| 	uci_set_state network "$interface" dat_device "$dat_device"
 | |
| 
 | |
| 	case $driver in
 | |
| 	qmi_wwan)		proto_qmi_setup $@ ;;
 | |
| 	cdc_mbim)		proto_mbim_setup $@ ;;
 | |
| 	sierra_net)		proto_directip_setup $@ ;;
 | |
| 	comgt)			proto_3g_setup $@ ;;
 | |
| 	cdc_ether|*cdc_ncm)	proto_ncm_setup $@ ;;
 | |
| 	esac
 | |
| }
 | |
| 
 | |
| proto_wwan_teardown() {
 | |
| 	local interface=$1
 | |
| 	local driver=$(uci_get_state network "$interface" driver)
 | |
| 	ctl_device=$(uci_get_state network "$interface" ctl_device)
 | |
| 	dat_device=$(uci_get_state network "$interface" dat_device)
 | |
| 
 | |
| 	case $driver in
 | |
| 	qmi_wwan)		proto_qmi_teardown $@ ;;
 | |
| 	cdc_mbim)		proto_mbim_teardown $@ ;;
 | |
| 	sierra_net)		proto_directip_teardown $@ ;;
 | |
| 	comgt)			proto_3g_teardown $@ ;;
 | |
| 	cdc_ether|*cdc_ncm)	proto_ncm_teardown $@ ;;
 | |
| 	esac
 | |
| }
 | |
| 
 | |
| add_protocol wwan
 |