#!/bin/sh
PASS=MiniAP
#PASS=public
#PASS=SMC123
AP=192.168.238.60
MIBBASE=enterprises.smc.smc2655

SNMP=`which snmpget 2>/dev/null`
if [ "$SNMP" = "" ] ; then
	echo "Can't find SNMP tools"
	exit 1
fi

VERS=`snmpget -V 2>&1 |  awk '{ if ($1 == "NET-SNMP") {split($3,vers,"."); printf("%d", vers[1]*10000+vers[2]*100+vers[3]);}
			else if ($1 == "UCD-snmp") {split($3,vers,"."); printf("%d", vers[1]*10000+vers[2]*100+vers[3]);}
			else { print 1}}'`

if [ $VERS -gt 50000 ] ; then
	GETOPTS="-Ou -OQ"
	WALKOPTS=-Ou
else
# works for 40200
	GETOPTS="-Ov"
	WALKOPTS=-Ov
fi

export MIBDIRS=/usr/share/snmp/mibs:/usr2/cas/mibs
export MIBS=all

getstatus()
{
	echo -n "Banner:      "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.base.b1.productDescription.0
	echo -n "IP Address:  "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.base.b2.IPAddress.0
	echo -n "Subnet Mask: "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.base.b2.subnetMask.0
	echo -n "Gateway:     "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.base.b2.defaultGateway.0
	echo -n "DHCP Client: "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.base.b2.DHCPClient.0

	echo -n "AP name:     "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.wireless.c1.APName.0
	echo -n "BSSID:       "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.base.b2.MACAddress.0
	echo -n "SSID:        "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.wireless.c1.SSID.0
	echo -n "Channel:     "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.wireless.c1.channel.0

	echo -n "Wepmode:     "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.wepMode.0

	echo -n "Key1:        "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.key1.0
	echo -n "Key2:        "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.key2.0
	echo -n "Key3:        "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.key3.0
	echo -n "Key4:        "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.key4.0
	echo -n "currentKey:  "
	snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.wepKey.0
}

usage()
{
	echo "$0 - access to SMC2655W wireless access point"
	echo Options:
	echo "  -chan <chanel>"
	echo "  -dhcp"
	echo "  -gateway <gateway IP>"
	echo "  -ip [ <IP address> [ <netmask> ]]"
	echo "  -key <key (1-4)>"
	echo "  -reboot"
	echo "  -stat"
	echo "  -wep [on|off|64|<key as 13 hex pairs>"
	echo
}

case "$1" in 

	-chan*)
		if [ "$2" != "" ] ; then 
			echo Set channel to $2
			snmpset -c $PASS -v 1 $AP ${MIBBASE}.wireless.c1.channel.0 i $2
		else
			echo need a channel number
		fi		
		;;

	-dhcp)
		snmpset -c $PASS -v 1 $AP ${MIBBASE}.base.b2.DHCPClient.0 i 1
		;;
	-find)
		candidates=`ping -b -c 2 192.168.238.255 2>/dev/null | awk '/64 bytes from/{split($4, a, ":"); print a[1]}' | sort | uniq`
		for ip in $candidates ; do
			snmpget $GETOPTS -r 1 -c public -v 1 $ip ${MIBBASE}.base.b1.productDescription.0 2>&1 | grep '802.11 AP' > /dev/null 
			if [ $? = "0" ] ; then
				echo Access point at: $ip
			fi
		done
		;;
	-gate*)
		if [ "$2" != "" ] ; then 
			snmpset -c $PASS -v 1 $AP ${MIBBASE}.base.b2.gateway.0 a $2
		else
			echo Need to specify gateway IP
		fi
		;;
	-ip)
		snmpset -c $PASS -v 1 $AP ${MIBBASE}.base.b2.DHCPClient.0 i 2
		if [ "$2" != "" ] ; then
			snmpset -c $PASS -v 1 $AP ${MIBBASE}.base.b2.IPAddress.0 a $2
			if [ "$3" != "" ] ; then
				snmpset -c $PASS -v 1 $AP ${MIBBASE}.base.b2.subnetMask.0 a $3
			fi
		fi
		;;

	-key)
		if [ "$2" != "" ] ; then
			snmpset -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.wepKey 1 $2
		else
			echo "Which key ?"
		fi
		;;		
	-reboot)
		snmpset -c $PASS -v 1 $AP ${MIBBASE}.base.b1.reboot.0 i 1
		;;
	-stat*)
		echo "Show status of access point at $AP"
		getstatus
		;;

	-wep)
		echo "Set wep parameters"
		if [ "$2" != "" ] ; then 
			if [ "$2" = "on" ] ; then
				mode=3
			elif [ "$2" = "off" ] ; then
				mode=2
			elif [ "$2" = "64" ] ; then
				mode=1
			else
				k1="$2"
				k2="`echo $k1 | sed 's/.. .. .. .. .. //'`"
				k2="$k2 00 00 00 00 00"
				k3="`echo $k2 | sed 's/.. .. .. .. .. //'`"
				k3="$k3 00 00 00 00 00"
				echo k1 $k1
				echo k2 $k2
				echo k3 $k3
				snmpset -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.key1.0 x "$k1"
				snmpset -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.key2.0 x "$k2"
				snmpset -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.key3.0 x "$k3"
				snmpset -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.wepKey.0 i 1
				mode=3
			fi
			snmpset -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.wepMode.0 i $mode
		else
			snmpset -c $PASS -v 1 $AP ${MIBBASE}.wireless.wep.wepMode.0 i 2
		fi
		;;
	-walk*)
		snmpget $GETOPTS -c $PASS -v 1 $AP ${MIBBASE}.base.b2.defaultGateway.0
		snmpwalk $WALKOPTS -c $PASS -v 1 $AP enterprises.smc
		;;
	*)
		usage
		;;
esac



exit
# a1.b1.1 = string name
# a1.b1.2 = 0
# a1.b1.3 = 2
# a1.b1.4 = -1
# a1.b1.5 = hex 92 bytes long...
# a1.b1.6 = 0


snmpget -c public -v 1 192.168.51.32 ${MIBBASE}.base.b1.productDescription.0


snmpwalk -Ou -c $PASS -v 1 192.168.51.32 enterprises.smc

#snmpset -c $PASS -v 1 192.168.51.32 ${MIBBASE}.wireless.wep.key1.0 x "11 22 33 44 55 66 77 88 99 aa bb cc dd" \
#		${MIBBASE}.wireless.wep.wepMode.0 = 3

#snmpset -c $PASS -v 1 192.168.51.32 ${MIBBASE}.base.password.passwordSet.0 s "MiniAP" \
#	${MIBBASE}.base.password.passwordConfirm.0 s "MiniAP"


#snmpwalk -Ou -c $PASS -v 1 192.168.51.32 enterprises.smc

