 c06fb25d1f
			
		
	
	c06fb25d1f
	
	
		
			
	
		
	
	
		
			Some checks failed
		
		
	
	Build Kernel / Build all affected Kernels (push) Has been cancelled
				
			Build all core packages / Build all core packages for selected target (push) Has been cancelled
				
			Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
				
			Build Toolchains / Build Toolchains for each target (push) Has been cancelled
				
			Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
				
			Coverity scan build / Coverity x86/64 build (push) Has been cancelled
				
			
		
			
				
	
	
		
			119 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| [ -n "$INCLUDE_ONLY" ] || {
 | |
| 	. /lib/functions.sh
 | |
| 	. ../netifd-proto.sh
 | |
| 	init_proto "$@"
 | |
| }
 | |
| 
 | |
| proto_directip_init_config() {
 | |
| 	available=1
 | |
| 	no_device=1
 | |
| 	proto_config_add_string "device:device"
 | |
| 	proto_config_add_string "apn"
 | |
| 	proto_config_add_string "pincode"
 | |
| 	proto_config_add_string "auth"
 | |
| 	proto_config_add_string "username"
 | |
| 	proto_config_add_string "password"
 | |
| 	proto_config_add_boolean sourcefilter
 | |
| 	proto_config_add_boolean delegate
 | |
| 	proto_config_add_defaults
 | |
| }
 | |
| 
 | |
| proto_directip_setup() {
 | |
| 	local interface="$1"
 | |
| 	local chat devpath devname
 | |
| 
 | |
| 	local device apn pincode ifname auth username password sourcefilter delegate $PROTO_DEFAULT_OPTIONS
 | |
| 	json_get_vars device apn pincode auth username password sourcefilter delegate $PROTO_DEFAULT_OPTIONS
 | |
| 
 | |
| 	[ -n "$ctl_device" ] && device=$ctl_device
 | |
| 
 | |
| 	device="$(readlink -f $device)"
 | |
| 	[ -e "$device" ] || {
 | |
| 		proto_notify_error "$interface" NO_DEVICE
 | |
| 		proto_set_available "$interface" 0
 | |
| 		return 1
 | |
| 	}
 | |
| 
 | |
| 	devname="$(basename "$device")"
 | |
| 	devpath="$(readlink -f /sys/class/tty/$devname/device)"
 | |
| 	ifname="$( ls "$devpath"/../../*/net )"
 | |
| 
 | |
| 	[ -n "$ifname" ] || {
 | |
| 		proto_notify_error "$interface" NO_IFNAME
 | |
| 		proto_set_available "$interface" 0
 | |
| 		return 1
 | |
| 	}
 | |
| 
 | |
| 	gcom -d "$device" -s /etc/gcom/getcardinfo.gcom | grep -q "Sierra Wireless" || {
 | |
| 		proto_notify_error "$interface" BAD_DEVICE
 | |
| 		proto_block_restart "$interface"
 | |
| 		return 1
 | |
| 	}
 | |
| 
 | |
| 	if [ -n "$pincode" ]; then
 | |
| 		PINCODE="$pincode" gcom -d "$device" -s /etc/gcom/setpin.gcom || {
 | |
| 			proto_notify_error "$interface" PIN_FAILED
 | |
| 			proto_block_restart "$interface"
 | |
| 			return 1
 | |
| 		}
 | |
| 	fi
 | |
| 	# wait for carrier to avoid firmware stability bugs
 | |
| 	gcom -d "$device" -s /etc/gcom/getcarrier.gcom || return 1
 | |
| 
 | |
| 	local auth_type=0
 | |
| 	case $auth in
 | |
| 	pap) auth_type=1;;
 | |
| 	chap) auth_type=2;;
 | |
| 	esac
 | |
| 
 | |
| 	USE_APN="$apn" USE_USER="$username" USE_PASS="$password" USE_AUTH="$auth_type" \
 | |
| 			gcom -d "$device" -s /etc/gcom/directip.gcom || {
 | |
| 		proto_notify_error "$interface" CONNECT_FAILED
 | |
| 		proto_block_restart "$interface"
 | |
| 		return 1
 | |
| 	}
 | |
| 
 | |
| 	logger -p daemon.info -t "directip[$$]" "Connected, starting DHCP"
 | |
| 	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
 | |
| 	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
 | |
| 	[ "$delegate" = "0" ] && json_add_boolean delegate "0"
 | |
| 	[ "$sourcefilter" = "0" ] && json_add_boolean sourcefilter "0"
 | |
| 	proto_add_dynamic_defaults
 | |
| 	ubus call network add_dynamic "$(json_dump)"
 | |
| 
 | |
| 	return 0
 | |
| }
 | |
| 
 | |
| proto_directip_teardown() {
 | |
| 	local interface="$1"
 | |
| 
 | |
| 	local device
 | |
| 	json_get_vars device
 | |
| 
 | |
| 	[ -n "$ctl_device" ] && device=$ctl_device
 | |
| 
 | |
| 	gcom -d "$device" -s /etc/gcom/directip-stop.gcom || proto_notify_error "$interface" CONNECT_FAILED
 | |
| 
 | |
| 	proto_init_update "*" 0
 | |
| 	proto_send_update "$interface"
 | |
| }
 | |
| 
 | |
| [ -n "$INCLUDE_ONLY" ] || {
 | |
| 	add_protocol directip
 | |
| }
 |