Created
December 18, 2017 06:53
-
-
Save manickamk/b5ebff8719f3099b31b6e9c78754a99b to your computer and use it in GitHub Desktop.
shaper
This file contains hidden or 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 | |
# | |
# tc-bandwidth-limit Limits the bandwidth of the configured interface | |
# chkconfig: 345 95 05 | |
# | |
# description: Limits the bandwidth of the configured interface | |
### BEGIN INIT INFO | |
# Provides: tc-bandwidth-limit | |
# Default-Start: 3 4 5 | |
# Default-Stop: 0 1 2 6 | |
# Required-Start: | |
### END INIT INFO | |
## | |
# original source :http://atmail.com/kb/2009/throttling-bandwidth/ | |
# 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 | |
#######-------------------Modified By Manickam-------------------------############## | |
##Original Source Below link ############### | |
# https://forums.fedoraforum.org/showthread.php?281486-tc-and-traffic-shaping-problem | |
# 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) | |
DNLD1=2mbps # DOWNLOAD Limit | |
DNLD2=4mbps # Download Limit | |
DNLD3=1mbps # Download Limit | |
# Upload limit (in mega bits) | |
UPLD1=2mbps # UPLOAD Limit | |
UPLD2=4mbps # Upload Limit | |
UPLD3=1Mbps # | |
# IP address of the machine we are controlling | |
IP=192.168.50.50 # Host IP | |
IP1=192.168.51.205 # Host IP | |
IP2=192.168.51.201 # 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 $DNLD1 | |
$TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD1 | |
$TC class add dev $IF parent 1: classid 1:3 htb rate $DNLD2 | |
$TC class add dev $IF parent 1: classid 1:4 htb rate $UPLD2 | |
$TC class add dev $IF parent 1: classid 1:5 htb rate $DNLD3 | |
$TC class add dev $IF parent 1: classid 1:6 htb rate $UPLD3 | |
$U32 match ip dst $IP flowid 1:1 | |
$U32 match ip src $IP flowid 1:2 | |
$U32 match ip dst $IP1 flowid 1:3 | |
$U32 match ip dst $IP1 flowid 1:4 | |
$U32 match ip dst $IP2 flowid 1:5 | |
$U32 match ip dst $IP2 flowid 1:6 | |
# 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