comgt: port 3g.sh to netifd

SVN-Revision: 28634
This commit is contained in:
Felix Fietkau 2011-10-27 20:29:00 +00:00
parent 2af4d04336
commit d495281b6e
8 changed files with 139 additions and 10 deletions

View file

@ -17,6 +17,10 @@ PKG_MD5SUM:=db2452680c3d953631299e331daf49ef
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME).$(PKG_VERSION)
PKG_CONFIG_DEPENDS:=CONFIG_USE_NETIFD
COMGT_VARIANT:=$(if $(CONFIG_USE_NETIFD),netifd,old)
FILES_DIR:=./files-$(COMGT_VARIANT)
include $(INCLUDE_DIR)/package.mk
define Package/comgt
@ -41,28 +45,37 @@ define Build/Compile
comgt
endef
define Package/comgt/install/netifd
$(INSTALL_DIR) $(1)/lib/netifd/proto
$(INSTALL_BIN) $(FILES_DIR)/3g.sh $(1)/lib/netifd/proto/3g.sh
endef
define Package/comgt/install/old
$(INSTALL_DIR) $(1)/etc/ppp
$(INSTALL_BIN) $(FILES_DIR)/3g.connect $(1)/etc/ppp/3g.connect
$(INSTALL_DIR) $(1)/lib/network
$(INSTALL_BIN) $(FILES_DIR)/3g.sh $(1)/lib/network/3g.sh
$(INSTALL_DIR) $(1)/etc/hotplug.d/button
$(INSTALL_DATA) $(FILES_DIR)/3g.button $(1)/etc/hotplug.d/button/05-3g
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_DATA) $(FILES_DIR)/3g.iface $(1)/etc/hotplug.d/iface/05-3g
endef
define Package/comgt/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/comgt $(1)/usr/bin/
ln -s comgt $(1)/usr/bin/gcom
$(INSTALL_DIR) $(1)/etc/ppp
$(INSTALL_BIN) ./files/3g.connect $(1)/etc/ppp/3g.connect
$(INSTALL_DIR) $(1)/etc/chatscripts
$(INSTALL_DATA) ./files/3g.chat $(1)/etc/chatscripts/3g.chat
$(INSTALL_DATA) ./files/evdo.chat $(1)/etc/chatscripts/evdo.chat
$(INSTALL_DIR) $(1)/lib/network
$(INSTALL_BIN) ./files/3g.sh $(1)/lib/network/3g.sh
$(INSTALL_DIR) $(1)/etc/hotplug.d/button
$(INSTALL_DATA) ./files/3g.button $(1)/etc/hotplug.d/button/05-3g
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
$(INSTALL_DATA) ./files/3g.iface $(1)/etc/hotplug.d/iface/05-3g
$(INSTALL_DIR) $(1)/etc/hotplug.d/tty
$(INSTALL_DATA) ./files/3g.usb $(1)/etc/hotplug.d/tty/30-3g
$(INSTALL_DIR) $(1)/etc/gcom
$(INSTALL_DATA) ./files/setpin.gcom $(1)/etc/gcom/setpin.gcom
$(INSTALL_DATA) ./files/setmode.gcom $(1)/etc/gcom/setmode.gcom
$(INSTALL_DATA) ./files/getcardinfo.gcom $(1)/etc/gcom/getcardinfo.gcom
$(INSTALL_DATA) ./files/getstrength.gcom $(1)/etc/gcom/getstrength.gcom
$(INSTALL_DIR) $(1)/etc/hotplug.d/tty
$(INSTALL_DATA) $(FILES_DIR)/3g.usb $(1)/etc/hotplug.d/tty/30-3g
$(Package/comgt/install/$(COMGT_VARIANT))
endef
$(eval $(call BuildPackage,comgt))

View file

@ -0,0 +1,83 @@
#!/bin/sh
INCLUDE_ONLY=1
. ../netifd-proto.sh
. ./ppp.sh
init_proto "$@"
proto_3g_init_config() {
no_device=1
available=1
ppp_generic_init_config
proto_config_add_string "device"
proto_config_add_string "apn"
proto_config_add_string "service"
proto_config_add_int "pincode"
}
proto_3g_setup() {
local interface="$1"
local chat
json_get_var device device
json_get_var apn apn
json_get_var service service
json_get_var pincode pincode
[ -e "$device" ] || {
proto_set_available "$interface" 0
return 1
}
case "$service" in
cdma|evdo)
chat="/etc/chatscripts/evdo.chat"
;;
*)
chat="/etc/chatscripts/3g.chat"
cardinfo=$(gcom -d "$device" -s /etc/gcom/getcardinfo.gcom)
if echo "$cardinfo" | grep -q Novatel; then
case "$service" in
umts_only) CODE=2;;
gprs_only) CODE=1;;
*) CODE=0;;
esac
export MODE="AT\$NWRAT=${CODE},2"
elif echo "$cardinfo" | grep -q Option; then
case "$service" in
umts_only) CODE=1;;
gprs_only) CODE=0;;
*) CODE=3;;
esac
export MODE="AT_OPSYS=${CODE}"
fi
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
[ -n "$MODE" ] && gcom -d "$device" -s /etc/gcom/setmode.gcom
;;
esac
connect="${apn:+USE_APN=$apn }/usr/sbin/chat -t5 -v -E -f $chat"
ppp_generic_setup "$interface" \
noaccomp \
nopcomp \
novj \
nobsdcomp \
noauth \
lock \
crtscts \
115200 "$device"
return 0
}
proto_3g_teardown() {
proto_kill_command "$interface"
}
add_protocol 3g

View file

@ -0,0 +1,33 @@
#!/bin/sh
. /etc/functions.sh
. /lib/netifd/netifd-proto.sh
find_3g_iface() {
local cfg="$1"
local tty="$2"
local proto
config_get proto "$cfg" proto
[ "$proto" = 3g ] || return 0
local dev
config_get dev "$cfg" device
if [ "${dev##*/}" = "${tty##*/}" ]; then
if [ "$ACTION" = add ]; then
available=1
else
available=0
fi
proto_set_available "$cfg" $available
fi
}
case "$DEVICENAME" in
tty*)
[ -e "/dev/$DEVICENAME" ] || [ "$ACTION" = remove ] || exit 0
config_load network
config_foreach find_3g_iface interface "/dev/$DEVICENAME"
;;
esac