On 6/7/07, Pete McEvoy <pete at yerma.org> wrote:
> so far, it seems squids delay pools or cbq seem to be the preferred
> methods, I especially like the look of the webcbq project.
Hello Pete,
Never used webcbq but been using tc for some control over SSH
especially, here's an example (which was found some time ago on the
web using your favorite search engine) :
-------------------------- BEGIN SCRIPT
#!/bin/bash
#
# All Rates are in Kbits, so in order to gets Bytes divide by 8
# e.g. 25Kbps == 3.125KB/s
#
TC=/sbin/tc
IPTABLES=/sbin/iptables
PORT=22
DNLD=1000Kbit # DOWNLOAD Limit
DWEIGHT=100Kbit # DOWNLOAD Weight Factor ~ 1/10 of DOWNLOAD Limit
UPLD=1000KBit # UPLOAD Limit
UWEIGHT=100Kbit # UPLOAD Weight Factor
# CHAIN=("POSTROUTING" "PREROUTING" "INPUT" "OUTPUT")
CHAIN=("POSTROUTING" "PREROUTING" "INPUT" "OUTPUT")
# PROTOCOL=("tcp" "udp")
PROTOCOL=("tcp")
# DIRECTION=("--sport" "--dport")
DIRECTION=("--sport" "--dport")
# PORT=("22")
PORT=("22")
tc_start() {
$TC qdisc add dev eth0 root handle 11: cbq bandwidth 100Mbit
avpkt 1000 mpu 64
$TC class add dev eth0 parent 11:0 classid 11:1 cbq rate $DNLD
weight $DWEIGHT allot 1514 prio 1 avpkt 1000 bounded
$TC filter add dev eth0 parent 11:0 protocol ip handle 4 fw flowid 11:1
for chain in ${CHAIN[@]}
do
for protocol in ${PROTOCOL[@]}
do
for direction in ${DIRECTION[@]}
do
for port in ${PORT[@]}
do
${IPTABLES} -t mangle -A ${chain} -p ${protocol}
${direction} ${port} -j MARK --set-mark 4
done
done
done
done
# $TC qdisc add dev eth1 root handle 10: cbq bandwidth 10Mbit
avpkt 1000 mpu 64
# $TC class add dev eth1 parent 10:0 classid 10:1 cbq rate $UPLD
weight $UWEIGHT allot 1514 prio 1 avpkt 1000 bounded
# $TC filter add dev eth1 parent 10:0 protocol ip handle 3 fw flowid 10:1
}
tc_stop() {
$TC qdisc del dev eth0 root
for chain in ${CHAIN[@]}
do
for protocol in ${PROTOCOL[@]}
do
for direction in ${DIRECTION[@]}
do
for port in ${PORT[@]}
do
${IPTABLES} -t mangle -D ${chain} -p ${protocol}
${direction} ${port} -j MARK --set-mark 4
done
done
done
done
# $TC qdisc del dev eth1 root
}
tc_restart() {
tc_stop
sleep 1
tc_start
}
tc_show() {
echo ""
echo "eth0:"
$TC qdisc show dev eth0
$TC class show dev eth0
$TC filter show dev eth0
echo ""
$IPTABLES -t mangle --list
# echo "eth1:"
# $TC qdisc show dev eth1
# $TC class show dev eth1
# $TC filter show dev eth1
# echo ""
}
case "$1" in
start)
echo -n "Starting bandwidth shaping: "
tc_start
echo "done"
;;
stop)
echo -n "Stopping bandwidth shaping: "
tc_stop
echo "done"
;;
restart)
echo -n "Restarting bandwidth shaping: "
tc_restart
echo "done"
;;
show)
tc_show
;;
*)
echo "Usage: /etc/init.d/tc.sh {start|stop|restart|show}"
;;
esac
exit 0
-------------------------- BEGIN SCRIPT
Hope this helps,
Steph
Maintained by the ILUG website team. The aim of Linux.ie is to
support and help commercial and private users of Linux in Ireland. You can
display ILUG news in your own webpages, read backend
information to find out how. Networking services kindly provided by HEAnet, server kindly donated by
Dell. Linux is a trademark of Linus Torvalds,
used with permission. No penguins were harmed in the production or maintenance
of this highly praised website. Looking for the
Indian Linux Users' Group? Try here. If you've read all this and aren't a lawyer: you should be!