conn

A script repository to manage connections in Linux.
git clone git://r-36.net/conn
Log | Files | Refs | LICENSE

common.sh (3212B)


      1 #!/bin/sh
      2 
      3 . /etc/conn/config.sh
      4 
      5 [ $DEBUG -eq 1 ] && set -x
      6 
      7 ## Common dirs
      8 WIFIDIR="${ETCDIR}/wifi"
      9 WWANDIR="${ETCDIR}/wwan"
     10 ETHDIR="${ETCDIR}/eth"
     11 
     12 mkpaths() {
     13 	for i in $RUNDIR $STATEDIR;
     14 	do
     15 		[ ! -e $i ] && mkdir -p $i
     16 	done
     17 }
     18 
     19 ## Locking in bash
     20 lock() {
     21 	LOCKF="$1.lock"
     22 	lock=0
     23 
     24 	[ -e $LOCKF ] && lock=1
     25 
     26 	i=0
     27 	while [ $lock -eq 1 ]
     28 	do
     29 		[ ! -e $LOCKF ] && lock=0
     30 		sleep 0.5;
     31 
     32 		i=`expr $i + 1`
     33 		if [ $i -gt 100 ];
     34 		then
     35 			echo "It took too long to aquire lock $1"
     36 			exit 1
     37 		fi
     38 	done
     39 
     40 	touch $LOCKF
     41 }
     42 
     43 unlock() {
     44 	LOCKF="$1.lock"
     45 	[ -e $LOCKF ] && rm $LOCKF
     46 }
     47 
     48 ## Global conn lock, when there is database access.
     49 CONNLOCKF="$STATEDIR/conn"
     50 lockconn() {
     51 	lock $CONNLOCKF
     52 }
     53 
     54 unlockconn() {
     55 	unlock $CONNLOCKF
     56 }
     57 
     58 ## State handling
     59 getstate() {
     60 	[ ! -e $STATEDIR/$1 ] && return 1
     61 	[ `stat -c%s $STATEDIR/$1` -eq 0 ] && return 1
     62 	cat $STATEDIR/$1
     63 	return 0
     64 }
     65 
     66 getstates() {
     67 	getstate $1 | egrep "$2|$3"
     68 	return 0
     69 }
     70 
     71 isset() {
     72 	isin=`getstate $1 | grep "$2|$3"`
     73 	[ -z "$isin" ] && return 1 
     74 	return 0
     75 }
     76 
     77 addstate() {
     78 	isset $1 $2 $3 && return 1
     79 	echo "$2|$3" >> $STATEDIR/$1
     80 }
     81 
     82 delstate() {
     83 	[ ! -e $STATEDIR/$1 ] && return 1
     84 
     85 	if ! isset $1 $2 $3;
     86 	then
     87 		return 1 
     88 	else
     89 		cat $STATEDIR/$1 | grep -v "$2|$3" \
     90 			> $STATEDIR/$1.bak
     91 		mv $STATEDIR/$1.bak $STATEDIR/$1
     92 	fi
     93 }
     94 
     95 getdefaultstate() {
     96 	case "$1" in
     97 		open)
     98 			echo "$DEFAULTCONNECTION $DEFAULTPROFILE"
     99 			;;
    100 		*)
    101 			;;
    102 	esac
    103 }
    104 
    105 ## WPA handling 
    106 
    107 startwpa() {
    108 	PID=`pgrep -f "$WPACMD -i $1"`
    109 	[ -z "$PID" ] && $WPACMD -i $1
    110 	PID=`pgrep -f "$WPACLICMD -i $1 -a $WIFIDIR/$1-action.sh -B"`
    111 	[ -z "$PID" ] && $WPACLICMD -i $1 -a $WIFIDIR/$1-action.sh -B \
    112 		2>&1 >/dev/null &
    113 }
    114 
    115 hupwpa() {
    116 	PID=`pgrep -f "$WPACMD -i $1"`
    117 	[ ! -z "$PID" ] && kill -HUP $PID
    118 }
    119 
    120 stopwpa() {
    121 	pkill -KILL -f "$WPACMD -i $1"
    122 	pkill -KILL -f "$WPACLICMD -i $1 -a $WIFIDIR/$1-action.sh -B"
    123 }
    124 
    125 iswparunning() {
    126 	if [ -n "$(pgrep -f "$WPACMD -i $1")" ];
    127 	then
    128 		return 1
    129 	else
    130 		return 0
    131 	fi
    132 }
    133 
    134 getssid() {
    135 	$WPACLIREQ -i $1 list_networks \
    136 		| awk -F'\t' "/\[CURRENT\]$/ {print \$2}"
    137 }	
    138 
    139 ## DHCP handling
    140 startdhcp() {
    141 	$DHCPRELEASECMD $1 2>&1 >/dev/null
    142 	$DHCPCMD $1 2>&1 >/dev/null
    143 }
    144 
    145 stopdhcp() {
    146 	$DHCPKILLCMD $1 2>&1 >/dev/null
    147 }
    148 
    149 isdhcprunning() {
    150 	if [ -n "$(pgrep -f "$DHCPCMD $1")" ];
    151 	then
    152 		return 1
    153 	else
    154 		return 0
    155 	fi
    156 }
    157 
    158 ## Connection handling
    159 runconnection() {
    160 	SRVDIR="${ETCDIR}/$1"
    161 	SRVRUN="${ETCDIR}/$1/run.sh"
    162 	shift 1
    163 	if [ -e $SRVRUN ];
    164 	then
    165 		cd $SRVDIR 
    166 		sh $SRVRUN $*
    167 	fi
    168 }
    169 
    170 ## Interface handling
    171 PINGPID="${RUNDIR}/pingd.pid"
    172 
    173 startpingd() {
    174 	ping -q $PINGHOST 2>&1 >/dev/null &
    175 	echo $! > $PINGPID.$1
    176 }
    177 
    178 stoppingd() {
    179 	if [ -e $PINGPID.$1 ];
    180 	then
    181 		/bin/kill -KILL `cat $PINGPID.$1`
    182 		rm $PINGPID.$1
    183 	fi
    184 }	
    185 
    186 getinterface() {
    187 	basename $1 | awk -F'-' '{print $1}'
    188 }
    189 
    190 ## Link handling
    191 setlinkup() {
    192 	ip link set $1 up
    193 }
    194 
    195 setlinkdown() {
    196 	ip link set $1 down
    197 }
    198 
    199 islinkup() {
    200 	state=`ip link show $1 2>/dev/null | grep ',UP'`
    201 	if [ -z "$state" ];
    202 	then
    203 		return 1
    204 	else
    205 		return 0
    206 	fi
    207 }
    208 
    209 ## Rfkill handling
    210 isblocked() {
    211 	res=`rfkill list $1 | grep ' yes'`
    212 	if [ -z "$res" ];
    213 	then
    214 		return 1
    215 	else
    216 		return 0
    217 	fi
    218 }
    219 
    220 doblock() {
    221 	if ! isblocked $1;
    222 	then
    223 		rfkill block $1
    224 	fi
    225 }
    226 
    227 dounblock() {
    228 	if isblocked $1;
    229 	then
    230 		rfkill unblock $1
    231 	fi
    232 }
    233