#!/bin/sh

test -n "$FAILSAFE" && exit
WIFIDEV=$(l=$(grep : /proc/net/wireless);l=${l%:*};echo ${l##* })
test -z "$WIFIDEV" && exit

. /etc/functions.sh

MTU=$(nvram get ff_mtu)
MTU=${MTU:-"1500"}

case $1 in
	start)
		echo "Starting olsr prio..."
		tc qdisc add dev $WIFIDEV root handle 1: prio
		tc qdisc add dev $WIFIDEV parent 1:1 handle 10: sfq perturb 10 quantum $MTU
		tc qdisc add dev $WIFIDEV parent 1:2 handle 20: sfq perturb 10 quantum $MTU
		tc qdisc add dev $WIFIDEV parent 1:3 handle 30: sfq perturb 10 quantum $MTU
		tc filter add dev $WIFIDEV protocol ip parent 1:0 prio 1 u32 match ip dport 698 0xffff flowid 1:3
		tc filter add dev $WIFIDEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 flowid 1:1
		tc filter add dev $WIFIDEV protocol ip parent 1:0 prio 3 u32 match u16 0x00ff 0xff00 at 2 flowid 1:2
		tc filter add dev $WIFIDEV protocol ip parent 1:0 prio 4 u32 match ip dst 0.0.0.0/0 flowid 1:3
	;;
	stop)
		echo "Stopping olsr prio..."
		tc filter del dev $WIFIDEV protocol ip parent 1:0 prio 4 u32 match ip dst 0.0.0.0/0 flowid 1:3
		tc filter del dev $WIFIDEV protocol ip parent 1:0 prio 3 u32 match u16 0x00ff 0xff00 at 2 flowid 1:2
		tc filter del dev $WIFIDEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match u8 0x10 0xff at nexthdr+13 flowid 1:1
		tc filter del dev $WIFIDEV protocol ip parent 1:0 prio 1 u32 match ip dport 698 0xffff flowid 1:3
		tc qdisc del dev $WIFIDEV parent 1:3 handle 30: sfq perturb 10 quantum $MTU
		tc qdisc del dev $WIFIDEV parent 1:2 handle 20: sfq perturb 10 quantum $MTU
		tc qdisc del dev $WIFIDEV parent 1:1 handle 10: sfq perturb 10 quantum $MTU
		tc qdisc del dev $WIFIDEV root handle 1: prio
	;;
	restart)
		$0 stop
		$0 start
	;;
	*)
		echo "Usage: $0 start|stop|restart"
	;;
esac
