#!/bin/sh

prefix=/usr/local
exec_prefix=${prefix}
ETC=${prefix}/etc
BIN=${exec_prefix}/bin

GREP_OPTIONS=""

export PATH=/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH

CHANNEL=6

if test "$#" -lt 2; then
	echo "kismet_monitor - kismet helper script called by kismet directly."
	echo "kismet_monitor DEVICE TYPE"
	exit -1;
fi

CARDTYPE=$2
DEVICE=$1

case "$CARDTYPE" in
	"cisco")
		echo "Enabling monitor mode for a cisco card on $DEVICE"
		iwconfig $DEVICE essid off
		echo "Mode: r" > /proc/driver/aironet/$DEVICE/Config
		echo "Mode: y" > /proc/driver/aironet/$DEVICE/Config
		echo "XmitPower: 1" > /proc/driver/aironet/$DEVICE/Config
		ifconfig $DEVICE promisc up
		;;
	"cisco_cvs")
		echo "Enabling monitor mode for a cisco card on $DEVICE"
		DEVICE1=`echo $DEVICE | cut -f 1 -d:`;
		DEVICE2=`echo $DEVICE | cut -f 2 -d:`;
		iwconfig $DEVICE1 essid off
		echo "Mode: r" > /proc/driver/aironet/$DEVICE1/Config
		echo "Mode: y" > /proc/driver/aironet/$DEVICE1/Config
		echo "XmitPower: 1" > /proc/driver/aironet/$DEVICE1/Config
		ifconfig $DEVICE2 promisc up
		;;
	"cisco_bsd")
		echo "Enabling monitor mode for a cisco card on $DEVICE"
		ancontrol -i $DEVICE -o 1
		ancontrol -i $DEVICE -p 1
		ancontrol -i $DEVICE -M 7
		;;
	"prism2_legacy")
		echo "Enabling monitor mode for a prism2 card on $DEVICE channel $CHANNEL"
		wlanctl-ng $DEVICE lnxreq_wlansniff channel=$CHANNEL enable=true
		ifconfig $DEVICE promisc up
		;;
	"prism2")
		echo "Enabling monitor mode for a pcap prism2 card on $DEVICE channel $CHANNEL"
		wlanctl-ng $DEVICE lnxreq_ifstate ifstate=enable
		wlanctl-ng $DEVICE dot11req_mibset mibattribute=dot11PrivacyInvoked=false
		wlanctl-ng $DEVICE dot11req_mibset mibattribute=dot11ExcludeUnencrypted=false 
		wlanctl-ng $DEVICE lnxreq_wlansniff channel=$CHANNEL enable=true prismheader=true
		ifconfig $DEVICE promisc up
		;;
	"prism2_avs")
		echo "Enabling monitor mode for a pcap prism2 card with AVS headers on $DEVICE channel $CHANNEL"
		wlanctl-ng $DEVICE lnxreq_ifstate ifstate=enable
		wlanctl-ng $DEVICE dot11req_mibset mibattribute=dot11PrivacyInvoked=false
		wlanctl-ng $DEVICE dot11req_mibset mibattribute=dot11ExcludeUnencrypted=false 
		wlanctl-ng $DEVICE lnxreq_wlansniff channel=$CHANNEL prismheader=false wlanheader=true stripfcs=false keepwepflags=false enable=true
		ifconfig $DEVICE promisc up
		;;
	"prism2_bsd")
		echo "Enabling monitor mode for a prism2 card on $DEVICE channel $CHANNEL using prism2ctl"
		prism2ctl $DEVICE -m 
		prism2ctl $DEVICE -f $CHANNEL
		;;
	"prism2_hostap")
		echo "Enabling monitor mode for a hostap prism2 card on $DEVICE channel $CHANNEL"
		# They've changed again...
		iwpriv $DEVICE monitor 3                                        
		iwconfig $DEVICE channel $CHANNEL                               
		iwconfig $DEVICE mode monitor                                   
		ifconfig $DEVICE promisc up   
		;;
	"orinoco")
		echo "Enabling monitor mode for an orinoco card on $DEVICE channel $CHANNEL"
		iwpriv $DEVICE monitor 1 $CHANNEL
		ifconfig $DEVICE promisc up
		;;
	"orinoco_bsd")
		echo "orinoco BSD - we need commands here!"
		;;
	"acx100")
		echo "Enabling monitor mode for an acx100 card on $DEVICE channel $CHANNEL"
		ifconfig $DEVICE promisc up
		iwpriv $DEVICE packhdr 1
		iwconfig $DEVICE mode monitor
		;;
	"generic")
		echo "Generic card specified, so we do nothing."
		;;
	"drone")
		echo "Drone connection Specified, so we do nothing."
		;;
	"wsp100")
		echo "Enabling a wsp100 at $DEVICE for channel $CHANNEL"
		if test "$HOSTIP" == ""; then
			HOSTIP=`hostname -i`
			echo "'hostname -i' thinks our IP is $HOSTIP.  Set HOSTIP manually if this is wrong."
			echo "     ie, HOSTIP=1.2.3.4 kismet_monitor"
		fi

		WSPDEVICE=`echo $DEVICE | cut -f 1 -d:`;
		WSPPORT=`echo $DEVICE | cut -f 2 -d:`;

		# sensor::loghostaddress
		snmpset -v 1 -c public $WSPDEVICE .1.3.6.1.4.1.14422.1.1.5 a $HOSTIP
		# sensor::channel
		snmpset -v 1 -c public $WSPDEVICE .1.3.6.1.4.1.14422.1.3.1 i $CHANNEL
		# sensor::serverport
		snmpset -v 1 -c public $WSPDEVICE .1.3.6.1.4.1.14422.1.4.1 i $WSPPORT
		# sensor::running
		snmpset -v 1 -c public $WSPDEVICE .1.3.6.1.4.1.14422.1.1.4 i 1
		;;
	"ar5k")
		echo "Enabling an ar5k 802.11a on $DEVICE"
		iwpriv $DEVICE prism 1
		iwconfig $DEVICE mode monitor
		ifconfig $DEVICE promisc up
		;;
	*)
		exit 0
		;;
esac

# Wait a moment
sleep 1

exit 0
