Постала задача підключатися через 3G-модем. В даному випадку це Huawei e3372.
Скрипт підключення /opt/scripts/usb_modem.sh:
#!/bin/sh
#e3372 huawei
vid="12d1"
pid="14db"
ip_addr="192.168.222.22/24"
base="/etc/firewall"
path_dev="/sys/bus/usb/drivers/usb"
MODESWITCH=/usr/sbin/usb_modeswitch
MODPROBE=/sbin/modprobe
AWK=/usr/bin/awk
SED=/bin/sed
IP=/bin/ip
LSUSB=/usr/bin/lsusb
IPTABLES=/usr/sbin/iptables
IPSET=/usr/sbin/ipset
GREP=/bin/grep
XARGS=/usr/bin/xargs
TR=/usr/bin/tr
FIND=/usr/bin/find
SLEEP=/bin/sleep
$MODESWITCH -v $vid -p $pid -V $vid -P $pid
$MODPROBE usbserial vendor=${vid} product=${pid}
$SLEEP 3
bus=`$LSUSB | $GREP "${vid}:${pid}" | $AWK '{print $2}' | $TR -d '0'`
path_usb=`$FIND ${path_dev} -name ${bus}-*`
echo "-1" > ${path_usb}/power/autosuspend_delay_ms
echo "on" > ${path_usb}/power/control
mac=`$LSUSB -d ${vid}:${pid} -v 2>/dev/null | $SED -n 's/.*\(iMacAddress.*\)/\1/p' | $AWK '{print $3}' | $SED -e 's/\(.*\)/\L\1/'`
eth_if="enx${mac}"
$IP address add $ip_addr dev $eth_if
$IP link set $eth_if up
/etc/firewall/rc.firewall
$IPTABLES -t nat -A POSTROUTING -o $eth_if -j MASQUERADE
$IPTABLES -I FORWARD -p TCP -o $eth_if --dport smtp -j DROP
В даному скрипті відключається автозасипання модему а також переключення його в режим “модем”, бо інколи він буває в режимі диску.
Наступний скрипт перевіряє чи живий модем і якщо ні – вимикає і вмикає USB-порт:
#!/bin/sh
ip_addr="192.168.222.22/24"
gw="192.168.222.1"
path_dev="/sys/bus/usb/drivers/usb"
vid="12d1"
pid="14db"
sleep_time=3
IP=/bin/ip
GREP=/bin/grep
CURL=/usr/bin/curl
TR=/usr/bin/tr
LSUSB=/usr/bin/lsusb
AWK=/usr/bin/awk
FIND=/usr/bin/find
SED=/bin/sed
SLEEP=/bin/sleep
($IP addr | $GREP $ip_addr) && ($CURL -s -m 7 --connect-timeout 5 http://${gw}/html/index.html | $GREP hilinkapp_string) && exit 0
bus=`$LSUSB | $GREP "${vid}:${pid}" | $AWK '{print $2}' | $TR -d '0'`
cd $path_dev || exit 1
usb_number=`$FIND . -name ${bus}-* | $SED 's/^.\///'`
echo "$usb_number" > unbind
$SLEEP $sleep_time
echo "$usb_number" > bind
$SLEEP $sleep_time
/opt/scripts/usb_modem.sh