Useful Scripts

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 19:21, 15 May 2006 (edit)
Striker (Talk | contribs)
(GPIO Info)
← Previous diff
Revision as of 19:25, 15 May 2006 (edit) (undo)
Striker (Talk | contribs)
(WRT Scripts)
Next diff →
Line 1: Line 1:
=WRT Scripts= =WRT Scripts=
-This page is intended to house useful scripts that help monitor or enhance the features of your Linksys WRT.+This page is intended to house useful scripts that help monitor or enhance the features of your DD-WRT capable router.
 + 
 +'''The example scripts are written using the GPIO info for the Linksys WRT. Remember to change them for whatever router you have.'''
See [[Startup Scripts]] to run scripts on router startup. See [[Startup Scripts]] to run scripts on router startup.

Revision as of 19:25, 15 May 2006

Contents

WRT Scripts

This page is intended to house useful scripts that help monitor or enhance the features of your DD-WRT capable router.

The example scripts are written using the GPIO info for the Linksys WRT. Remember to change them for whatever router you have.

See Startup Scripts to run scripts on router startup.

LED Scripts

GPIO Info For Linksys WRT

Pin	Direction	Name		Use
GPIO 0	Output		WLAN LED	(LED - Wireless)
GPIO 1	Output		POWER LED	(LED - Power)
GPIO 2	Output		ADM_EECS 	(LED - White, Cisco Button V3.0+)
GPIO 3	Output		ADM_EESK 	(LED - Amber, Cisco Button V3.0+)
GPIO 4	Input		ADM_EEDO 	(Button - Cisco Button V3.0+)
GPIO 5	Output		ADM_EEDI 	(Unknown) Seems to cycle all LED colors disabled.
GPIO 6	Input		RESET		(Button - Reset Button)
GPIO 7	Output		DMZ LED		(LED - DMZ)

GPIO Info For Buffalo WHR

Pin	Direction	Use
GPIO 0	Input		AOSS Button
GPIO 1	Output		Bridge LED
GPIO 2	Output		WLAN LED
GPIO 3	Output		Extra LED between bridge and WLAN
GPIO 4	Input		Reset Button
GPIO 5	Input		Bridge/Auto Switch
GPIO 6	Output		AOSS LED
GPIO 7	Output		DIAG LED
GPIO 8	n/a		Unkown/None
GPIO 9	Output		Power LED

load.sh

  • Uses front button LED to display current load on router.
#!/bin/sh
gpio="gpio"

amber=3
white=2

delay=3

meltdown=400
overload=100
highload=70
medload=30


while sleep $delay
do
   load=$(cat /proc/loadavg | cut -d " " -f1 | tr -d ".")

   if [ $load -gt $meltdown ]
   then
       $gpio disable $amber
       usleep 50000
       $gpio disable $white
       usleep 50000
       reboot
   elif [ $load -gt $overload ]
   then
      $gpio disable $amber
      usleep 50000
   elif [ $load -gt $highload ]
   then
      $gpio disable $amber
      usleep 12500
      $gpio enable $amber
      usleep 12500
      $gpio disable $amber
      usleep 12500
      $gpio enable $amber
      usleep 12500
      $gpio disable $amber
      usleep 12500
      $gpio enable $amber
      usleep 12500
   elif [ $load -gt $medload ]
   then
      $gpio enable $amber
      $gpio disable $white
      usleep 25000
      $gpio enable $white
      usleep 25000
      $gpio disable $white
      usleep 25000
      $gpio enable $white
      usleep 25000
   else
      $gpio disable $white
      usleep 50000
      $gpio enable $white
      usleep 50000
   fi
    load=000
done

ssh_users.sh

  • Displays when someone is connected using SSH.
#!/bin/sh 

led=2
interval=5 


on=0
/sbin/gpio enable $led 

while sleep $interval 
do 
   users=$(/bin/netstat -n | /bin/grep :22 | /usr/bin/wc -l) 

   if [ $users -gt 0 ]; then 
      if [ $on -eq 0 ]; then 
          /sbin/gpio disable $led
          on=1 
      fi 
   else 
      if [ $on -eq 1 ]; then 
          /sbin/gpio enable $led
          on=0 
      fi 
   fi 
done

wake.sh

  • Enables you to power on a LAN computer by name instead of IP address/MAC, based on DHCP lease table (mandatory).
    Usage: /path/to/wake.sh <hostname>
    (Default hostname is desktop)
STATION=desktop
WOL=/usr/sbin/wol
STATICS=/tmp/udhcpd.statics
DEV=br0

if [ -n  "$1" ]; then
   STATION=$1
fi

while read LINE
do
   IP=`echo $LINE | awk '{print $1}'`
   MAC=`echo $LINE | awk '{print $2}'`
   FOUND=`ip neigh | grep "$IP.*REACHABLE"`
   if [ -z "$FOUND" ]; then
      echo Creating ARP entry for $IP $MAC
      ip neigh add $IP lladdr $MAC dev $DEV nud reachable 2> /dev/null
      ip neigh change $IP lladdr $MAC dev $DEV nud reachable 2> /dev/null
   fi
done < $STATICS


LEASE=`cat $STATICS | grep "\b$STATION\b$"`
if [ -n "$LEASE" ]; then
   IP=`echo $LEASE | awk '{print $1}'`
   MAC=`echo $LEASE | awk '{print $2}'`
   $WOL -i $IP $MAC
else
   echo Unable to find \"$STATION\" in DHCP static file $STATICS, please use \"$0 \<hostname\>\"
fi


always_on.sh

  • Pings your default gateway every time and force a DHCP renew if no packets are received.
    Usage: /path/to/always_on.sh &
#!/bin/sh
INTERVAL=10
PACKETS=1
UDHCPC="udhcpc -i vlan1 -p /var/run/udhcpc.pid -s /tmp/udhcpc"
IFACE=vlan1


ME=`basename $0`
RUNNING=`ps | grep $ME | wc -l`
if [ "$RUNNING" -gt 3 ]; then
   echo "Another instance of \"$ME\" is running"
   exit
fi

while sleep $INTERVAL
do
   TARGET=`ip route | grep 'default via' | awk '{print $3}'`
   RET=`ping -c $PACKETS $TARGET 2> /dev/null | grep "packets received" | awk '{print $4}'`

   if [ "$RET" -ne "$PACKETS" ]; then
      echo Ping failed, releasing IP address: $IFACE
	#send a RELEASE signal
      kill -USR2 `cat /var/run/udhcpc.pid` 2> /dev/null
	#ensure udhcpc is not running
      killall udhcpc 2> /dev/null
      echo Renewing IP address: $IFACE
      $UDHCPC
      echo Waiting 10 s ...
      sleep 10
   else
      echo Network is up via $TARGET
   fi
done

Remarks

Links

Startup Scripts

Script Examples