123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #!/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_directip_setup() {
- local interface="$1"
- local chat devpath devname
- local device apn pincode ifname auth username password
- json_get_vars device apn pincode auth username password
- [ -n "$ctl_device" ] && device=$ctl_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
- }
- cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom)
- [ -n $(echo "$cardinfo" | 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"
- 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
- 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
- }
|