59 lines
1.6 KiB
Bash
59 lines
1.6 KiB
Bash
#!/bin/sh
|
|
|
|
RETRIES=12
|
|
POLLING_WAIT=5
|
|
|
|
# Run only for cellular network interfaces
|
|
[ -z "${IF_APN}" ] && exit 0
|
|
|
|
background_connect() {
|
|
# Ensure ModemManager is running
|
|
killall -0 ModemManager 2>/dev/null || ModemManager --log-file=/dev/null &
|
|
|
|
# Wait for modem detection
|
|
while [ "${RETRIES}" -gt "0" ]; do
|
|
mmcli -m 0 > /dev/null 2>&1 && break
|
|
sleep ${POLLING_WAIT}
|
|
RETRIES="$((RETRIES - 1))"
|
|
done
|
|
|
|
# Abort if no modem detected
|
|
if [ "$RETRIES" -eq "0" ]; then
|
|
logger -s -p error -t modemmanager "No modem detected";
|
|
exit
|
|
fi
|
|
|
|
ARGS="apn=${IF_APN}"
|
|
[ -n "${IF_PIN}" ] && ARGS="${ARGS},pin=${IF_PIN}"
|
|
|
|
[ -n "${IF_USER}" ] && ARGS="${ARGS},user=${IF_USER}"
|
|
[ -n "${IF_PASSWORD}" ] && ARGS="${ARGS},password=${IF_PASSWORD}"
|
|
[ -n "${IF_PORT}" ] && ARGS="${ARGS},number=*99#"
|
|
|
|
# Enable the modem and connect to provider
|
|
mmcli -m 0 --simple-connect=${ARGS} > /dev/null 2>&1
|
|
|
|
# For serial modems, pppd creates the network interface
|
|
# Otherwise, get an IP with udhcpc
|
|
if [ -n "${IF_PORT}" ]; then
|
|
pppd ${IF_PORT} call mm_cellular > /dev/null 2>&1
|
|
else
|
|
udhcpc -q -i ${IFACE}
|
|
fi
|
|
|
|
ifconfig ${IFACE} up
|
|
}
|
|
|
|
|
|
if [ "$MODE" = "start" ]; then
|
|
background_connect &
|
|
elif [ "$MODE" = "stop" ]; then
|
|
# If a call number was used, destroy the network interface
|
|
[ -n "${IF_PORT}" ] && poff mm_cellular
|
|
|
|
ifconfig ${IFACE} down
|
|
|
|
# Disconnect and disable the modem
|
|
mmcli -m 0 -d > /dev/null 2>&1
|
|
fi
|