hi below is sysvinit script for handling tcng-script .... please excuse my bad
bash skils, correct me where i''m doing stupid things :")
what is left... many things, if i have time i will implement them too :
- start [devices] - and then correct handling of service lock files i.e. per
device lock file
- stats blah ... - all ideas are welcome !!
- test or some such, i mean the ability to use temprary config file and restore
back original if something
goes wrong.. ideas? Or something like last-good-known config/s
And u normaly start this on sysv system like this :
service tcng [command] [subcommands|devices]
Don''t forget to set correct paths to "tc, tcc and
tcng-config"....
PS. probably the script can be easly tweaked to work also as pure TC -service !!
#===============sample output=================================[root@qos tcng]#
./tcng
*** Usage:
tcng {start|stop|status|restart} [devices]
tcng show [all|qdisc|class|filter] [devices]
[root@qos tcng]# ./tcng stop
Stopping some/all tcng services:
No traffic control running on : eth0
Flushing : eth1
No traffic control running on : hdlc0
No traffic control running on : hdlc1
No traffic control running on : pvc0
No traffic control running on : pvc1
[root@qos tcng]# ./tcng start
Starting tcng services:
Execute : qdisc add dev eth1 handle 1:0 root dsmark indices 4 default_index 0:
Execute : qdisc add dev eth1 handle 2:0 parent 1:0 htb:
Execute : class add dev eth1 parent 2:0 classid 2:1 htb rate 56000bps:
Execute : class add dev eth1 parent 2:1 classid 2:2 htb rate 125bps ceil
2400bps:
..................................
[root@qos tcng]# ./tcng status
traffic control on eth0: [OFF]
traffic control on eth1 : [ON]
traffic control on hdlc0: [OFF]
traffic control on hdlc1: [OFF]
traffic control on pvc0: [OFF]
traffic control on pvc1: [OFF]
[root@qos tcng]# ./tcng status eth1
traffic control on eth1 : [ON]
[root@qos tcng]# ./tcng show class eth1
class htb 2:1 root rate 56000bps ceil 56000bps burst 2159b cburst 2159b
class htb 2:2 parent 2:1 prio 0 rate 125bps ceil 2400bps burst 1600b cburst
1623b
class htb 2:3 parent 2:1 leaf 3: prio 0 rate 125bps ceil 4200bps burst 1600b
cburst 1641b
[root@qos tcng]# ./tcng show
qdisc sfq 3: limit 128p quantum 1514b
qdisc htb 2: r2q 10 default 0 direct_packets_stat 0
qdisc dsmark 1: indices 0x0004 default_index 0x0000
class htb 2:1 root rate 56000bps ceil 56000bps burst 2159b cburst 2159b
.......................
[root@qos tcng]#
#==================THE SCRIPT===================#!/bin/sh
#
# tcng: Starts the tcng Server
#
# Version: @(#) /etc/rc.d/init.d/tcng 0.1
#
# chkconfig: 2345 90 10
# description: Starts and stops the tcng at boot time and shutdown.
#
# processname: tcng
#
# created : from Raptor
#
#path to the tc command
tc=/sbin/tc
#path to the tcc command
tcc=/arh/bin/com.pl
#where is the tcng config file
tcngConf=/etc/sysconfig/tcng
offMsg=OFF
onMsg=ON
debug=1
# Source function library.
. /etc/rc.d/init.d/functions
isUp () {
res=`$tc qdisc show dev $1`
if [ -z "$res" ]; then return 1; fi
return 0
}
start () {
gprintf "Starting tcng services: "; echo
OLDIFS="$IFS"
IFS="
"
cmds=`$tcc $tcngConf | grep -v "^#" | sed -e "s/^tc//"`
for cmd in $cmds; do
[ $debug -eq 1 ] && gprintf "Execute : $cmd:"
&& echo;
eval "$tc $cmd"
done
touch /var/lock/subsys/tcng
IFS="$OLDIFS"
}
stop () {
gprintf "Stopping some/all tcng services: "
echo
#if explictly specified shut only these devices
if [ "$1" ]; then devs=$*; fi
# echo $devs
for d in $devs; do
if isUp $d ; then
gprintf "Flushing : $d"; echo
$tc qdisc del dev $d root
else gprintf "No traffic control running on : $d"; echo
fi
# rm -f /var/lock/subsys/tcng-$d
done
rm -f /var/lock/subsys/tcng;#this is not the correct behavior
}
status () {
if [ "$1" ]; then devs=$*; fi
# echo $devs
for d in $devs; do
if isUp $d ;
then gprintf "traffic control on $d : [$onMsg]"; echo;
else gprintf "traffic control on $d: [$offMsg]"; echo;
fi
done
}
show () {
if [ -z "$1" ]; then what=all; else what=$1; fi
shift
if [ "$1" ]; then devs=$*; fi
for d in $devs; do
if isUp $d; then
[ "$what" = "all" ] || [ "$what" =
"qdisc" ] && gprintf "`$tc qdisc show dev $d`"; echo
[ "$what" = "all" ] || [ "$what" =
"class" ] && gprintf "`$tc class show dev $d`"; echo
[ "$what" = "all" ] || [ "$what" =
"filter" ] && gprintf "`$tc filter show dev $d`";
echo
fi
done
}
devs=`ifconfig -a | grep ''^\w'' | grep -v lo | cut -f 1 -d
'' ''`
command=$1
shift;
case "$command" in
start) start ;;
stop) stop $@ ;;
status) status $@ ;;
show) show $@ ;;
restart)
gprintf "Restarting tcng. "; echo
stop $@
start $@
;;
*)
gprintf "*** Usage:
tcng {start|stop|status|restart} [devices]
tcng show [all|qdisc|class|filter] [devices]
"; echo
exit 1
esac
exit 0
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/