common.sh - conn - A script repository to manage connections in Linux.
git clone git://r-36.net/conn
Log
Files
Refs
README
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