Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # tc uses the following units when passed as a parameter.
- # kbps: Kilobytes per second
- # mbps: Megabytes per second
- # kbit: Kilobits per second
- # mbit: Megabits per second
- # bps: Bytes per second
- # Amounts of data can be specified in:
- # kb or k: Kilobytes
- # mb or m: Megabytes
- # mbit: Megabits
- # kbit: Kilobits
- # To get the byte figure from bits, divide the number by 8 bit
- #
- TC=/sbin/tc
- IF=eth0
- # Download and Upload Bandwidth
- DNLD=10mbit
- UPLD=10mbit
- LATENCY=50ms
- # Destination Host
- IP=128.2.213.24
- # Filter options for limiting the intended interface.
- U32="$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32"
- start() {
- # We'll use Hierarchical Token Bucket (HTB) to shape bandwidth.
- # For detailed configuration options, please consult Linux man
- # page.
- $TC qdisc add dev $IF root handle 1: htb default 30
- $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
- $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD
- $TC qdisc add dev $IF parent 1:1 handle 10: netem delay $LATENCY
- $TC qdisc add dev $IF parent 1:2 handle 20: netem delay $LATENCY
- $U32 match ip dst $IP/32 flowid 1:1
- $U32 match ip src $IP/32 flowid 1:2
- # The first line creates the root qdisc, and the next two lines
- # create two child qdisc that are to be used to shape download
- # and upload bandwidth.
- #
- # The 4th and 5th line creates the filter to match the interface.
- # The 'dst' IP address is used to limit download speed, and the
- # 'src' IP address is used to limit upload speed.
- }
- stop() {
- # Stop the bandwidth shaping.
- $TC qdisc del dev $IF root
- }
- restart() {
- # Self-explanatory.
- stop
- sleep 1
- start
- }
- show() {
- # Display status of traffic control status.
- $TC -s qdisc ls dev $IF
- }
- case "$1" in
- start)
- echo -n "Starting bandwidth shaping: "
- start
- echo "done"
- ;;
- stop)
- echo -n "Stopping bandwidth shaping: "
- stop
- echo "done"
- ;;
- restart)
- echo -n "Restarting bandwidth shaping: "
- if [ "$#" -ne 2 ]; then
- echo "Illegal number of parameters"
- echo "Usage: tc.bash restart bw(mbps)"
- exit 1
- fi
- DNLD=$2mbit
- UPLD=$2mbit
- echo "Network throughput: $2 Mbps"
- restart
- echo "done"
- ;;
- show)
- echo "Bandwidth shaping status for $IF:"
- show
- echo ""
- ;;
- *)
- pwd=$(pwd)
- echo "Usage: tc.bash {start|stop|restart|show}"
- ;;
- esac
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement