Skip to content

Commit

Permalink
comgt: ncm: allow specification of interface name
Browse files Browse the repository at this point in the history
Add ifname property to UCI, which can be used to override the
autodetected interface name in case the detection fails due to having
none or more than one interface exposed by the modem, which is not
explicitly linked to TTY port. This is needed on certain variants of ZTE
MF286R built-in modem, which exposes both RNDIS and CDC-ECM interfaces
on the modem, on which the automatic detection may select the wrong
network interface.

Signed-off-by: Lech Perczak <lech.perczak@gmail.com>
  • Loading branch information
Leo-PL authored and hauke committed Apr 16, 2022
1 parent c99013e commit a67629b
Showing 1 changed file with 18 additions and 14 deletions.
32 changes: 18 additions & 14 deletions package/network/utils/comgt/files/ncm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ proto_ncm_init_config() {
no_device=1
available=1
proto_config_add_string "device:device"
proto_config_add_string ifname
proto_config_add_string apn
proto_config_add_string auth
proto_config_add_string username
Expand All @@ -25,10 +26,10 @@ proto_ncm_init_config() {
proto_ncm_setup() {
local interface="$1"

local manufacturer initialize setmode connect finalize ifname devname devpath
local manufacturer initialize setmode connect finalize devname devpath

local device apn auth username password pincode delay mode pdptype profile $PROTO_DEFAULT_OPTIONS
json_get_vars device apn auth username password pincode delay mode pdptype profile $PROTO_DEFAULT_OPTIONS
local device ifname apn auth username password pincode delay mode pdptype profile $PROTO_DEFAULT_OPTIONS
json_get_vars device ifname apn auth username password pincode delay mode pdptype profile $PROTO_DEFAULT_OPTIONS

[ "$metric" = "" ] && metric="0"

Expand All @@ -53,17 +54,20 @@ proto_ncm_setup() {
return 1
}

devname="$(basename "$device")"
case "$devname" in
'tty'*)
devpath="$(readlink -f /sys/class/tty/$devname/device)"
ifname="$( ls "$devpath"/../../*/net )"
;;
*)
devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)"
ifname="$( ls "$devpath"/net )"
;;
esac
[ -z "$ifname" ] && {
devname="$(basename "$device")"
case "$devname" in
'tty'*)
devpath="$(readlink -f /sys/class/tty/$devname/device)"
ifname="$( ls "$devpath"/../../*/net )"
;;
*)
devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)"
ifname="$( ls "$devpath"/net )"
;;
esac
}

[ -n "$ifname" ] || {
echo "The interface could not be found."
proto_notify_error "$interface" NO_IFACE
Expand Down

0 comments on commit a67629b

Please sign in to comment.