Created
January 6, 2017 23:40
-
-
Save dryliketoast/49c3d73d17401bfe49050eda5461af9c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# src: https://www.iplocation.net/traffic-control | |
# | |
# 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 | |
# | |
# | |
# Name of the traffic control command. | |
TC=/sbin/tc | |
# The network interface we're planning on limiting bandwidth. | |
IF=eth0 # Interface | |
# Download limit (in mega bits) | |
DNLD=1mbit # DOWNLOAD Limit | |
# Upload limit (in mega bits) | |
UPLD=1mbit # UPLOAD Limit | |
# IP address of the machine we are controlling | |
IP=216.3.128.12 # Host IP | |
# 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 | |
$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: " | |
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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment