From 32b3b3243f5ef16c241f708d950964466af4e038 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Fri, 13 Sep 2013 17:23:10 +0200 Subject: qmi-network: implement --help and --version --- .gitignore | 2 + utils/Makefile.am | 10 +- utils/qmi-network | 229 -------------------------------------------- utils/qmi-network.in | 262 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 273 insertions(+), 230 deletions(-) delete mode 100755 utils/qmi-network create mode 100755 utils/qmi-network.in diff --git a/.gitignore b/.gitignore index 2b2dfcd..ffc0ab1 100644 --- a/.gitignore +++ b/.gitignore @@ -85,3 +85,5 @@ docs/reference/libqmi-glib/xml docs/reference/libqmi-glib/.libs docs/man/qmicli.1 + +utils/qmi-network diff --git a/utils/Makefile.am b/utils/Makefile.am index 5d4ffa3..4145418 100644 --- a/utils/Makefile.am +++ b/utils/Makefile.am @@ -1,2 +1,10 @@ -dist_bin_SCRIPTS = qmi-network +bin_SCRIPTS = qmi-network + +qmi-network: qmi-network.in + $(AM_V_GEN) sed -e s,@VERSION\@,$(VERSION), $< > $@.tmp && mv $@.tmp $@ + @chmod a+x $@ + +EXTRA_DIST = qmi-network.in + +CLEANFILES = qmi-network diff --git a/utils/qmi-network b/utils/qmi-network deleted file mode 100755 index 89b1fc4..0000000 --- a/utils/qmi-network +++ /dev/null @@ -1,229 +0,0 @@ -#!/bin/sh - -# This program is free software; you can redistribute it and/or modify it under -# the terms of the GNU General Public License as published by the Free Software -# Foundation, either version 2 of the License, or (at your option) any later -# version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -# details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Copyright (C) 2012 Aleksander Morgado - -print_usage () -{ - echo "usage: $0 [DEVICE] [COMMAND]" -} - -if [ $# -ne 2 ]; then - echo "error: missing arguments" 1>&2 - print_usage - exit 255 -fi - -DEVICE=$1 -COMMAND=$2 -STATE_FILE=/tmp/qmi-network-state -PROFILE_FILE=/etc/qmi-network.conf - -load_profile () -{ - if [ -f $PROFILE_FILE ]; then - echo "Loading profile..." - source $PROFILE_FILE - - if [ "x$APN" != "x" ]; then - echo " APN: $APN" - fi - fi -} - -save_state () -{ - KEY=$1 - VAL=$2 - - echo "Saving state... ($KEY: $VAL)" - - if [ -f $STATE_FILE ]; then - PREVIOUS=`cat $STATE_FILE` - PREVIOUS=`echo "$PREVIOUS" | grep -v $KEY` - if [ "x$PREVIOUS" != "x" ]; then - echo $PREVIOUS > $STATE_FILE - else - rm $STATE_FILE - fi - fi - - if [ "x$VAL" != "x" ]; then - echo "$KEY=\"$VAL\"" >> $STATE_FILE - fi -} - -load_state () -{ - if [ -f $STATE_FILE ]; then - echo "Loading previous state..." - source $STATE_FILE - - if [ "x$CID" != "x" ]; then - echo " Previous CID: $CID" - fi - if [ "x$PDH" != "x" ]; then - echo " Previous PDH: $PDH" - fi - fi -} - -clear_state () -{ - echo "Clearing state..." - rm -f $STATE_FILE -} - -# qmicli -d /dev/cdc-wdm0 --wds-start-network --client-no-release-cid -# [/dev/cdc-wdm0] Network started -# Packet data handle: 3634026241 -# [/dev/cdc-wdm0] Client ID not released: -# Service: 'wds' -# CID: '80' -start_network () -{ - if [ "x$CID" != "x" ]; then - USE_PREVIOUS_CID="--client-cid=$CID" - fi - - if [ "x$PDH" != "x" ]; then - echo "error: cannot re-start network, PDH already exists" 1>&2 - exit 3 - fi - - START_NETWORK_CMD="qmicli -d $DEVICE --wds-start-network=$APN $USE_PREVIOUS_CID --client-no-release-cid" - echo "Starting network with '$START_NETWORK_CMD'..." - - if [ "x$QMIDEBUG" != "x" ]; then - START_NETWORK_OUT="\ -[/dev/cdc-wdm0] Network started - Packet data handle: '3634026241' -[/dev/cdc-wdm0] Client ID not released: - Service: 'wds' - CID: '80'" - else - START_NETWORK_OUT=`$START_NETWORK_CMD` - fi - - # Save the new CID if we didn't use any before - if [ "x$CID" = "x" ]; then - CID=`echo "$START_NETWORK_OUT" | sed -n "s/.*CID.*'\(.*\)'.*/\1/p"` - if [ "x$CID" = "x" ]; then - echo "error: network start failed, client not allocated" 1>&2 - exit 1 - else - save_state "CID" $CID - fi - fi - - PDH=`echo "$START_NETWORK_OUT" | sed -n "s/.*handle.*'\(.*\)'.*/\1/p"` - if [ "x$PDH" = "x" ]; then - echo "error: network start failed, no packet data handle" 1>&2 - # Cleanup the client - qmicli -d "$DEVICE" --wds-noop --client-cid="$CID" - clear_state - exit 2 - else - save_state "PDH" $PDH - fi - - echo "Network started successfully" -} - -# qmicli -d /dev/cdc-wdm0 --wds-stop-network -stop_network () -{ - if [ "x$CID" = "x" ]; then - echo "Network already stopped" - elif [ "x$PDH" = "x" ]; then - echo "Network already stopped; need to cleanup CID $CID" - # Cleanup the client - qmicli -d "$DEVICE" --wds-noop --client-cid="$CID" - else - STOP_NETWORK_CMD="qmicli -d $DEVICE --wds-stop-network=$PDH --client-cid=$CID" - echo "Stopping network with '$STOP_NETWORK_CMD'..." - - if [ "x$QMIDEBUG" != "x" ]; then - STOP_NETWORK_OUT="\ -[/dev/cdc-wdm0] Network stopped -" - else - STOP_NETWORK_OUT=`$STOP_NETWORK_CMD` - fi - - echo "Network stopped successfully" - fi - - clear_state -} - -# qmicli -d /dev/cdc-wdm0 --wds-get-packet-service-status -packet_service_status () -{ - if [ "x$CID" != "x" ]; then - USE_PREVIOUS_CID="--client-cid=$CID --client-no-release-cid" - fi - - STATUS_CMD="qmicli -d $DEVICE --wds-get-packet-service-status $USE_PREVIOUS_CID" - echo "Getting status with '$STATUS_CMD'..." - - if [ "x$QMIDEBUG" != "x" ]; then - STATUS_OUT="\ -[/dev/cdc-wdm0] Connection status: 'disconnected' -" - else - STATUS_OUT=`$STATUS_CMD` - fi - - CONN=`echo "$STATUS_OUT" | sed -n "s/.*Connection status:.*'\(.*\)'.*/\1/p"` - if [ "x$CONN" = "x" ]; then - echo "error: couldn't get packet service status" 1>&2 - exit 2 - else - echo "Status: $CONN" - if [ "x$CONN" != "xconnected" ]; then - exit 64 - fi - fi -} - -# Main - -# Load profile, if any -load_profile - -# Load previous state, if any -load_state - -# Process commands -case $COMMAND in - "start") - start_network - ;; - "stop") - stop_network - ;; - "status") - packet_service_status - ;; - *) - echo "error: unexpected command '$COMMAND'" 1>&2 - print_usage - exit 255 - ;; -esac - -exit 0 diff --git a/utils/qmi-network.in b/utils/qmi-network.in new file mode 100755 index 0000000..2bef24a --- /dev/null +++ b/utils/qmi-network.in @@ -0,0 +1,262 @@ +#!/bin/sh + +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation, either version 2 of the License, or (at your option) any later +# version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 51 +# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Copyright (C) 2012-2013 Aleksander Morgado + +print_usage () +{ + echo "usage: $0 [DEVICE] [COMMAND]" +} + +help () +{ + echo "Usage: qmi-network [OPTIONS] [DEVICE] [COMMAND] - Simple network management of QMI devices" + echo + echo "Commands:" + echo " start Start network connection" + echo " stop Stop network connection" + echo " status Query network connection status" + echo + echo "Options:" + echo " --help Show help options" + echo " --version Show version" + echo +} + +version () +{ + echo "qmi-network @VERSION@" + echo "Copyright (2013) Aleksander Morgado" + echo "License GPLv2+: GNU GPL version 2 or later " + echo "This is free software: you are free to change and redistribute it." + echo "There is NO WARRANTY, to the extent permitted by law." + echo +} + +if [ $# -ne 2 ]; then + if [ $1 == "--help" ]; then + help + exit 0 + elif [ $1 == "--version" ]; then + version + exit 0 + fi + + echo "error: missing arguments" 1>&2 + print_usage + exit 255 +fi + +DEVICE=$1 +COMMAND=$2 +STATE_FILE=/tmp/qmi-network-state +PROFILE_FILE=/etc/qmi-network.conf + +load_profile () +{ + if [ -f $PROFILE_FILE ]; then + echo "Loading profile..." + source $PROFILE_FILE + + if [ "x$APN" != "x" ]; then + echo " APN: $APN" + fi + fi +} + +save_state () +{ + KEY=$1 + VAL=$2 + + echo "Saving state... ($KEY: $VAL)" + + if [ -f $STATE_FILE ]; then + PREVIOUS=`cat $STATE_FILE` + PREVIOUS=`echo "$PREVIOUS" | grep -v $KEY` + if [ "x$PREVIOUS" != "x" ]; then + echo $PREVIOUS > $STATE_FILE + else + rm $STATE_FILE + fi + fi + + if [ "x$VAL" != "x" ]; then + echo "$KEY=\"$VAL\"" >> $STATE_FILE + fi +} + +load_state () +{ + if [ -f $STATE_FILE ]; then + echo "Loading previous state..." + source $STATE_FILE + + if [ "x$CID" != "x" ]; then + echo " Previous CID: $CID" + fi + if [ "x$PDH" != "x" ]; then + echo " Previous PDH: $PDH" + fi + fi +} + +clear_state () +{ + echo "Clearing state..." + rm -f $STATE_FILE +} + +# qmicli -d /dev/cdc-wdm0 --wds-start-network --client-no-release-cid +# [/dev/cdc-wdm0] Network started +# Packet data handle: 3634026241 +# [/dev/cdc-wdm0] Client ID not released: +# Service: 'wds' +# CID: '80' +start_network () +{ + if [ "x$CID" != "x" ]; then + USE_PREVIOUS_CID="--client-cid=$CID" + fi + + if [ "x$PDH" != "x" ]; then + echo "error: cannot re-start network, PDH already exists" 1>&2 + exit 3 + fi + + START_NETWORK_CMD="qmicli -d $DEVICE --wds-start-network=$APN $USE_PREVIOUS_CID --client-no-release-cid" + echo "Starting network with '$START_NETWORK_CMD'..." + + if [ "x$QMIDEBUG" != "x" ]; then + START_NETWORK_OUT="\ +[/dev/cdc-wdm0] Network started + Packet data handle: '3634026241' +[/dev/cdc-wdm0] Client ID not released: + Service: 'wds' + CID: '80'" + else + START_NETWORK_OUT=`$START_NETWORK_CMD` + fi + + # Save the new CID if we didn't use any before + if [ "x$CID" = "x" ]; then + CID=`echo "$START_NETWORK_OUT" | sed -n "s/.*CID.*'\(.*\)'.*/\1/p"` + if [ "x$CID" = "x" ]; then + echo "error: network start failed, client not allocated" 1>&2 + exit 1 + else + save_state "CID" $CID + fi + fi + + PDH=`echo "$START_NETWORK_OUT" | sed -n "s/.*handle.*'\(.*\)'.*/\1/p"` + if [ "x$PDH" = "x" ]; then + echo "error: network start failed, no packet data handle" 1>&2 + # Cleanup the client + qmicli -d "$DEVICE" --wds-noop --client-cid="$CID" + clear_state + exit 2 + else + save_state "PDH" $PDH + fi + + echo "Network started successfully" +} + +# qmicli -d /dev/cdc-wdm0 --wds-stop-network +stop_network () +{ + if [ "x$CID" = "x" ]; then + echo "Network already stopped" + elif [ "x$PDH" = "x" ]; then + echo "Network already stopped; need to cleanup CID $CID" + # Cleanup the client + qmicli -d "$DEVICE" --wds-noop --client-cid="$CID" + else + STOP_NETWORK_CMD="qmicli -d $DEVICE --wds-stop-network=$PDH --client-cid=$CID" + echo "Stopping network with '$STOP_NETWORK_CMD'..." + + if [ "x$QMIDEBUG" != "x" ]; then + STOP_NETWORK_OUT="\ +[/dev/cdc-wdm0] Network stopped +" + else + STOP_NETWORK_OUT=`$STOP_NETWORK_CMD` + fi + + echo "Network stopped successfully" + fi + + clear_state +} + +# qmicli -d /dev/cdc-wdm0 --wds-get-packet-service-status +packet_service_status () +{ + if [ "x$CID" != "x" ]; then + USE_PREVIOUS_CID="--client-cid=$CID --client-no-release-cid" + fi + + STATUS_CMD="qmicli -d $DEVICE --wds-get-packet-service-status $USE_PREVIOUS_CID" + echo "Getting status with '$STATUS_CMD'..." + + if [ "x$QMIDEBUG" != "x" ]; then + STATUS_OUT="\ +[/dev/cdc-wdm0] Connection status: 'disconnected' +" + else + STATUS_OUT=`$STATUS_CMD` + fi + + CONN=`echo "$STATUS_OUT" | sed -n "s/.*Connection status:.*'\(.*\)'.*/\1/p"` + if [ "x$CONN" = "x" ]; then + echo "error: couldn't get packet service status" 1>&2 + exit 2 + else + echo "Status: $CONN" + if [ "x$CONN" != "xconnected" ]; then + exit 64 + fi + fi +} + +# Main + +# Load profile, if any +load_profile + +# Load previous state, if any +load_state + +# Process commands +case $COMMAND in + "start") + start_network + ;; + "stop") + stop_network + ;; + "status") + packet_service_status + ;; + *) + echo "error: unexpected command '$COMMAND'" 1>&2 + print_usage + exit 255 + ;; +esac + +exit 0 -- cgit v1.1