This commit was generated by cvs2svn to compensate for changes in r45,
[pingofdeath.git] / pl-podcntl
diff --git a/pl-podcntl b/pl-podcntl
new file mode 100755 (executable)
index 0000000..0d0c191
--- /dev/null
@@ -0,0 +1,96 @@
+#/bin/sh -
+#
+# Enable ICMP ping-of-death.  Runs on the target node and sets the
+# passed parameters into the kernel.
+# Invocation: pl-podcntl HOSTIP HOSTMASK HASH
+
+# -----------------------------------------------------------------
+# $Header: /shareddata/CVS/planetlab/admin/ipod/pl-podcntl,v 1.2 2003/01/18 01:43:48 radams Exp $
+#
+# Copyright (c) 2003 Intel Corporation
+# All rights reserved.
+# This file is distributed under the terms in the attached INTEL_LICENSE
+# file.  If you do not find this file, a copy can be obtained by
+# writing to Intel Research Berkeley; Attention: Intel License Inquiry;
+# 2150 Shattuck Avenue; Berkeley, CA 94704
+# -----------------------------------------------------------------
+
+# Modified from origional EMULAB script.  Origional copyright:
+# EMULAB-COPYRIGHT
+# Copyright (c) 2000-2002 University of Utah and the Flux Group.
+# All rights reserved.
+#
+# Enable ICMP ping-of-death
+# Support both the old style (host only) and the new style (host+mask+key)
+#
+
+IPODHOSTP=$1
+IPODMASKP=$2
+IPODHASHP=$3
+
+SYSCTL="/sbin/sysctl"
+
+# Grotesque sed/awk converts IP addrs into an integer for sysctl
+if [ x"$IPODHOSTP" != x ]; then
+       IPODHOST=`echo $IPODHOSTP | \
+               sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \2 \3 \4/' | \
+               awk '{ printf "%d\n", $1*16777216+$2*65536+$3*256+$4 }'`
+       IPODMASK=`echo $IPODMASKP | \
+               sed -e 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \2 \3 \4/' | \
+               awk '{ printf "%d\n", $1*16777216+$2*65536+$3*256+$4 }'`
+       IPODKEY=`echo $IPODHASHP | \
+               sed -e 's/\(.*\)/\1/'`
+
+       echo "IPODHOST = $IPODHOST"
+       echo "IPODMASK = $IPODMASK"
+       echo "IPODKEY = $IPODKEY"
+
+       # figure out the version
+       version=`$SYSCTL net.ipv4.icmp_ipod_version 2>/dev/null`
+       if [ "$version"x = x ]; then
+               $SYSCTL net.ipv4.icmp_ipod_enabled >/dev/null 2>&1
+               case $? in
+               0)
+                       version=1
+                       ;;
+               *)
+                       version=0
+                       ;;
+               esac
+       fi
+
+       echo "Version = $version"
+       # enable if possible
+       case $version in
+       0)
+               echo "*** WARNING: no IPOD sysctls, not enabled"
+               exit 1
+               ;;
+       1)
+               $SYSCTL -w net.ipv4.icmp_ipod_host=$IPODHOST >/dev/null
+               $SYSCTL -w net.ipv4.icmp_ipod_enabled=1 >/dev/null
+               str="Old-style"
+               ;;
+       *)
+               $SYSCTL -w net.ipv4.icmp_ipod_host=$IPODHOST >/dev/null
+               Success=$?
+               $SYSCTL -w net.ipv4.icmp_ipod_mask=$IPODMASK >/dev/null
+               $SYSCTL -w net.ipv4.icmp_ipod_key=$IPODKEY >/dev/null
+               $SYSCTL -w net.ipv4.icmp_ipod_enabled=1 >/dev/null
+               str="Authenticated"
+               ;;
+       esac
+       echo Success = $Success
+       if [[ $Success -eq 0 ]] ; then
+               IPODHOST=`echo $IPODINFO | \
+            sed -e 's/.*HOST=\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`
+               IPODMASK=`echo $IPODINFO | \
+            sed -e 's/.*MASK=\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`
+        echo "$str IPOD enabled from $IPODHOST/$IPODMASK"
+    else
+        echo "*** WARNING: could not set IPOD info, not enabled"
+    fi
+else
+       echo "*** WARNING: no IPOD info, not enabled"
+fi
+