[OpenWrt-Devel] [PATCH 1/2] wwan: Add support for CDC (Huawei 'HiLink') Modems

Matti Laakso malaakso at elisanet.fi
Tue Feb 23 02:11:49 EST 2016


> Huawei HiLink ("h" model names) modems just provide a CDC Ethernet interface
> where we have to run DHCP to get an IP address (usually in the 192.168.8.0
> range). While this may be bad design in general it's sometimes necessary to
> support these modems.
>
> This adds autodetection and handling of these to wwan.
>
> Tested with Huawei E3030h-1.

Why do you need an extra protocol for these? They work just fine with 
the regular DHCP protocol.

Matti

>
> Signed-off-by: Bruno Randolf <br1 at einfach.org 
> <https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel>>
> ---
>   package/network/utils/wwan/Makefile        |  3 +-
>   package/network/utils/wwan/files/hilink.sh | 56 ++++++++++++++++++++++++++++++
>   package/network/utils/wwan/files/wwan.sh   |  9 ++++-
>   3 files changed, 66 insertions(+), 2 deletions(-)
>   create mode 100644 package/network/utils/wwan/files/hilink.sh
>
> diff --git a/package/network/utils/wwan/Makefile b/package/network/utils/wwan/Makefile
> index 8d388dc..1917d1c 100644
> --- a/package/network/utils/wwan/Makefile
> +++ b/package/network/utils/wwan/Makefile
> @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
>   
>   PKG_NAME:=wwan
>   PKG_VERSION:=2014-07-17
> -PKG_RELEASE=1
> +PKG_RELEASE=3
>   
>   PKG_LICENSE:=GPL-2.0
>   PKG_LICENSE_FILES:=
> @@ -24,6 +24,7 @@ endef
>   define Package/wwan/install
>   	$(INSTALL_DIR) $(1)/lib/netifd/proto/
>   	$(CP) ./files/wwan.sh $(1)/lib/netifd/proto/
> +	$(CP) ./files/hilink.sh $(1)/lib/netifd/proto/
>   	$(INSTALL_DIR) $(1)/etc/hotplug.d/usb
>   	$(INSTALL_BIN) ./files/wwan.usb $(1)/etc/hotplug.d/usb/00_wwan.sh
>   	$(INSTALL_DIR) $(1)/etc/hotplug.d/usbmisc
> diff --git a/package/network/utils/wwan/files/hilink.sh b/package/network/utils/wwan/files/hilink.sh
> new file mode 100644
> index 0000000..229e1a4
> --- /dev/null
> +++ b/package/network/utils/wwan/files/hilink.sh
> @@ -0,0 +1,56 @@
> +#!/bin/sh
> +
> +[ -n "$INCLUDE_ONLY" ] || {
> +	. /lib/functions.sh
> +	. ../netifd-proto.sh
> +	init_proto "$@"
> +}
> +
> +proto_hilink_init_config() {
> +	available=1
> +	no_device=1
> +	proto_config_add_boolean defaultroute
> +	proto_config_add_boolean peerdns
> +	proto_config_add_int metric
> +}
> +
> +proto_hilink_setup() {
> +	local interface="$1"
> +	local ifname="$ctl_device"
> +	local defaultroute peerdns metric
> +
> +	json_get_vars defaultroute peerdns metric
> +
> +	[ -n "$ifname" ] || {
> +		proto_notify_error "$interface" NO_IFNAME
> +		proto_set_available "$interface" 0
> +		return 1
> +	}
> +
> +	logger -p daemon.info -t "hilink[$$]" "Starting DHCP on $ifname"
> +	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"
> +	[ -n "$defaultroute" ] && json_add_boolean defaultroute "$defaultroute"
> +	[ -n "$peerdns" ] && json_add_boolean peerdns "$peerdns"
> +	[ -n "$metric" ] && json_add_int metric "$metric"
> +	json_close_object
> +	ubus call network add_dynamic "$(json_dump)"
> +
> +	return 0
> +}
> +
> +proto_hilink_teardown() {
> +	local interface="$1"
> +
> +	proto_init_update "*" 0
> +	proto_send_update "$interface"
> +}
> +
> +[ -n "$INCLUDE_ONLY" ] || {
> +	add_protocol hilink
> +}
> diff --git a/package/network/utils/wwan/files/wwan.sh b/package/network/utils/wwan/files/wwan.sh
> index 6b33600..3d80aba 100755
> --- a/package/network/utils/wwan/files/wwan.sh
> +++ b/package/network/utils/wwan/files/wwan.sh
> @@ -14,12 +14,14 @@ 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"; }
> +proto_hilink_setup() { echo "wwan[$$] hilink 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
> +[ -f ./hilink.sh ] && . ./hilink.sh
>   
>   proto_wwan_init_config() {
>   	available=1
> @@ -66,7 +68,7 @@ proto_wwan_setup() {
>   		}
>   	}
>   
> -	[ -z "$ctl_device" ] && for net in $(ls /sys/class/net/ | grep wwan); do
> +	[ -z "$ctl_device" ] && for net in $(ls /sys/class/net/ | grep -E "wwan|eth"); do
>   		[ -z "$ctl_device" ] || continue
>   		driver=$(grep DRIVER /sys/class/net/$net/device/uevent | cut -d= -f2)
>   		case "$driver" in
> @@ -76,6 +78,9 @@ proto_wwan_setup() {
>   		sierra_net|*cdc_ncm)
>   			ctl_device=/dev/$(cd /sys/class/net/$net/; find ../../../ -name ttyUSB* |xargs basename | head -n1)
>   			;;
> +		cdc_ether)
> +			ctl_device=$net
> +			;;
>   		*) continue;;
>   		esac
>   		echo "wwan[$$]" "Using proto:$proto device:$ctl_device iface:$net desc:$desc"
> @@ -98,6 +103,7 @@ proto_wwan_setup() {
>   	sierra_net)	proto_directip_setup $@ ;;
>   	comgt)		proto_3g_setup $@ ;;
>   	*cdc_ncm)	proto_ncm_setup $@ ;;
> +	cdc_ether)	proto_hilink_setup $@ ;;
>   	esac
>   }
>   
> @@ -113,6 +119,7 @@ proto_wwan_teardown() {
>   	sierra_net)	proto_mbim_teardown $@ ;;
>   	comgt)		proto_3g_teardown $@ ;;
>   	*cdc_ncm)	proto_ncm_teardown $@ ;;
> +	cdc_ether)	proto_hilink_teardown $@ ;;
>   	esac
>   }
>   
> -- 
> 1.9.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list