#!/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 }