+++ /dev/null
-#!/bin/bash
-
-
-STROK="remote IP address"
-GCOMP="comgt"
-GCOM="/usr/bin/"${GCOMP}
-LOGF="/tmp/umtslogs"
-PPPD_PIDFILE="/var/run/umts_pppd.pid"
-DESTS_FILE="/tmp/umts_dest_file"
-FILE_TEMP_NID="/tmp/umts_temp_nid"
-FILE_UMTS_INT="/tmp/umts_dev"
-LOCK_DIR="/tmp/umts_lock_d"
-FILE_LOCK_SLIVER="/tmp/umts_locking_sliver"
-PPP_INT="ppp0"
-PPPD="pppd"
-CHAT_SCRIPTS="/etc/chatscripts"
-UMTS_CONF="/etc/umts.conf"
-
-
-
-function get_umts_dev(){
- echo "/dev/umts_modem"
-}
-
-function init_umts(){
- #local found=1
-
- if [ -e $LOCK_DIR ]; then
- rmdir $LOCK_DIR
- fi
-
- # the routing table is now managed by sliceip
- #if ! grep "umts_table" /etc/iproute2/rt_tables > /dev/null 2>&1; then
- # echo "20 umts_table" >> /etc/iproute2/rt_tables
- #fi
-
- return 0
-
-}
-
-
-function get_temp_nid(){
- cat $FILE_TEMP_NID
-}
-
-
-#called when the connection is started
-function conn_on(){
- local sliver=$1
-
- #DESTS_FILE contains added destinations
- rm -f $DESTS_FILE
-
- cat $LOGF | grep "local"
- return 0
-
-}
-
-#called when the connection is terminated to remove the rules
-#on the destinations reachable thorugh the UMTS device
-function conn_off(){
- local sliver=$1
- local ppp_addr=$2
-
-# Not needed anymore as the killing of the PPP connection
-# makes the rules pointing to it automatically disappear.
-
-# for i in `cat $DESTS_FILE`; do
-# del_destination $i $sliver > /dev/null 2>&1
-# done
-
- rm $DESTS_FILE >/dev/null 2>&1
-}
-
-function start_umts(){
- local sliver=$1
- local sliver_nid=`get_nid $sliver`
-
- if ! lock $sliver; then
- return 1
- fi
-
- if status_umts; then
- echo "Already connected"
- return 0;
- fi
-
- echo "Starting GCOM..."
- if ! $GCOM -d `get_umts_dev`; then
- unlock $sliver
- return 1
- fi
-
- rm -f $LOGF
-
- if [ -e $UMTS_CONF ]; then
- . $UMTS_CONF
- fi
-
- if ! [[ $APN ]]; then
- APN="web.omnitel.it"
- fi
- if ! [[ $NUM ]]; then
- NUM="*99***1#"
- fi
-
-
- exec /usr/sbin/pppd nodetach `get_umts_dev` 460800 \
- 0.0.0.0:0.0.0.0 \
- connect "/usr/sbin/chat -v \
- TIMEOUT 6 \
- ABORT '\nBUSY\r' \
- ABORT '\nNO ANSWER\r' \
- ABORT '\nRINGING\r\n\r\nRINGING\r' \
- '' ATZ OK 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0' OK \
- 'AT+CGDCONT=1,\"IP\",\"$APN\"' OK \
- ATD$NUM CONNECT ''" > $LOGF &
-
-
- echo $! > $PPPD_PIDFILE
-
- sleep 5s; #waiting for the interface to establish the link
- if grep "$STROK" $LOGF >/dev/null 2>&1; then
- conn_on $sliver $sliver_nid
- else
- #second try
- sleep 5s;
- if grep "$STROK" $LOGF >/dev/null 2>&1; then
- conn_on $sliver $sliver_nid
- else
- stop_umts $sliver
- return 1
- fi
- fi
-}
-
-
-# stop the UMTS connection by killing the pppd daemon and
-# then by calling conn_off
-function stop_umts(){
- local sliver=$1
- local sliver_nid=`get_nid $sliver`
- local ppp_addr
-
- if ! [ -e $PPPD_PIDFILE ]; then
- echo "Disconnected"
- return 0;
- fi
-
- ppp_addr=`get_ppp_address`
-
- if ! check_who_locked $sliver; then
- return 1
- fi
-
- PID=`cat $PPPD_PIDFILE`;
-
- if [ -d /proc/$PID ] && grep $PPPD /proc/$PID/cmdline >/dev/null 2>&1; then
- kill $PID;
- touch $DESTS_FILE
- sleep 2s;
- fi
-
- if status_umts; then
- return 1;
- else
- conn_off $sliver $ppp_addr
- cat $LOGF | grep "time"
- rm $PPPD_PIDFILE
- unlock $sliver;
- return 0
- fi
-}
-
-# check the status of the umts connection by looking at then
-# state of pppd daemon
-function status_umts(){
- local sliver=$1
-
- if ! [ -e $PPPD_PIDFILE ]; then return 1; fi
- PID=`cat $PPPD_PIDFILE`
-
- if [ -d /proc/$PID ] && grep $PPPD /proc/$PID/cmdline >/dev/null 2>&1; then
- return 0;
- else
- return 1;
- fi
-}
-
-#add the ppp interface to the slice - not used at the moment
-function add_interface(){
- local nid=`get_nid $1`
- $NADDRESS --add --nid $nid --ip $PPP_INT >>$LOGFILE 2>&1;
-}
-
-#remove the ppp interface from the slice - not used at the moment
-function del_interface(){
- local nid=`get_nid $1`
- #$NADDRESS --remove --nid $NID --ip $PPP_INT >>$LOGFILE 2>&1;
-}
-
-#get slice network id
-function get_nid(){
- id -u ${1}
-}
-
-
-# check if sliceip is activated for the slice
-function check_sliceip(){
-
- if ! [ -e /vsys/sliceip ]; then
- echo "Sliceip is not installed. Exiting."
- return 1
- fi
-
-}
-
-# Deliver a command to sliceip (basically to set the destinations to be
-# reached through the UMTS device)
-function sliceip_cmd(){
-
- local command=$2
- local sliver=$1
-
- echo "$command" | /vsys/sliceip $sliver
-
-}
-
-# Add a destination to be reached through the UMTS device
-function add_destination(){
- local dest="$1"
- local sliver=$2
-
- if [[ ! $dest ]]; then return 1; fi
-
- if ! status_umts; then
- return 1;
- fi
-
- if ! check_who_locked $sliver; then
- return 1;
- fi
-
- sliceip_cmd $sliver "route add $dest dev ${PPP_INT}"
-
-}
-
-# Delete a destination that was previously reached through the UMTS device.
-function del_destination(){
- local dest="$1"
- local sliver=$2
-
- if [[ ! $dest ]]; then return 1; fi
-
- if ! check_who_locked $sliver; then
- return 1;
- fi
-
- sliceip_cmd $sliver "route del $dest dev ${PPP_INT}";
-
-}
-
-
-function get_ppp_address(){
- ifconfig $PPP_INT | grep inet\ addr | cut -d ":" -f 2 | cut -d " " -f 1
-}
-
-
-function check_who_locked(){
- local sliver=$1
- local sliver_nid=`get_nid $sliver`
- local ret=0
-
- if [ -e $LOCK_DIR ]; then
- if [[ `cat $FILE_LOCK_SLIVER` != $sliver_nid ]]; then
- echo "Interface in use by another slice.";
- ret=1
- fi
- else
- ret=1
- fi
-
- return $ret
-
-}
-
-# kill the gcom daemon
-function kill_gcom(){
-
- killall $GCOMP
- sleep 3
- if ! ps -C $GCOMP >/dev/null 2>&1; then
- echo "$GCOMP terminated."
- else
- echo "$GCOMP still alive. Try kill -9"
- sleep 2
-
- killall -9 $GCOMP
-
- if ! ps -C $GCOMP >/dev/null 2>&1; then
- echo "$GCOMP terminated."
- else
- echo "Couldn't stop $GCOMP. Please contact administrators for assistance."
- fi
- fi
-}
-
-# lock the umts connection to a specific sliver.
-# only one sliver at a given time can use the UMTS device
-function lock(){
- local sliver=$1
-# local sliver_nid=`get_nid $sliver`
- local ret=0
-
- if [ -e $LOCK_DIR ]; then
- if ! check_who_locked $sliver; then
- ret=1
- fi
- else
- if mkdir $LOCK_DIR >/dev/null 2>&1; then
- echo "$sliver_nid" > $FILE_LOCK_SLIVER
- else
- ret=1
- fi
- fi
-
- return $ret
-}
-
-function unlock(){
- local sliver=$1
- local sliver_nid=`get_nid $sliver`
- local ret=0
-
- if ! [ -e $LOCK_DIR ]; then
- ret=1
- else
- if ! check_who_locked $sliver; then
- ret=1
- else
- if ! rmdir $LOCK_DIR; then
- ret=1
- fi
- fi
- fi
-
- return $ret
-}
-
-
-
-
-# checks an ip addresse for validity
-function valid_dotted_quad(){
- oldIFS=$IFS
- IFS=.
- set -f
- set -- $1
- if [ $# -eq 4 ]
- then
- for seg
- do
- case $seg in
- ""|*[!0-9]*) return 1; break ;; ## Segment empty or non-numeric char
- *) [ $seg -gt 255 ] && return 2 ;;
- esac
- done
- else
- return 3 ## Not 4 segments
- fi
- IFS=$oldIFS
- set +f
- return 0;
-}
-