{"id":587,"date":"2012-10-04T17:40:54","date_gmt":"2012-10-04T15:40:54","guid":{"rendered":"http:\/\/blog.jeremm.fr\/?p=587"},"modified":"2014-09-24T21:15:03","modified_gmt":"2014-09-24T19:15:03","slug":"tc-manipulate-traffic-control","status":"publish","type":"post","link":"https:\/\/blog.jeremm.fr\/?p=587","title":{"rendered":"tc : manipulate traffic control"},"content":{"rendered":"<p>Voici un script d&rsquo;init pour linux, pour limiter la bande passante utilis\u00e9e sur une interface r\u00e9seau et avec une IP.<br \/>\ntc se trouve dans le paquet debian iproute.<\/p>\n<pre lang=\"bash\">#!\/bin\/bash\r\n### BEGIN INIT INFO\r\n# Provides:          tc\r\n# Required-Start:    $syslog $network $remote_fs\r\n# Required-Stop:     $syslog $network $remote_fs\r\n# Default-Start:     2 3 4 5\r\n# Default-Stop:      0 1 6\r\n# Short-Description: Bandwidth Shaping\r\n# Description:       Bandwidth Shaping\r\n### END INIT INFO\r\n#  tc uses the following units when passed as a parameter.\r\n#  kbps: Kilobytes per second \r\n#  mbps: Megabytes per second\r\n#  kbit: Kilobits per second\r\n#  mbit: Megabits per second\r\n#  bps: Bytes per second \r\n#       Amounts of data can be specified in:\r\n#       kb or k: Kilobytes\r\n#       mb or m: Megabytes\r\n#       mbit: Megabits\r\n#       kbit: Kilobits\r\n#\r\n\r\n#\r\n# Name of the traffic control command.\r\nTC=\/sbin\/tc\r\n\r\n# The network interface we're planning on limiting bandwidth.\r\nIF=eth0             # Interface\r\n\r\n# Download limit (in mega bits)\r\nDNLD=10mbit          # DOWNLOAD Limit\r\n\r\n# Upload limit (in mega bits)\r\nUPLD=10mbit          # UPLOAD Limit\r\n\r\n# Burst limit\r\nBURST=2mbit\r\n\r\n# IP address of the machine we are controlling\r\nIP=10.0.1.1     # Host IP\r\n\r\n# Filter options for limiting the intended interface.\r\nU32=\"$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32\"\r\n\r\nstart() {\r\n    $TC qdisc add dev $IF root handle 1: htb default 30\r\n    $TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD burst $BURST cburst $BURST\r\n    $TC class add dev $IF parent 1: classid 1:2 htb rate $UPLD burst $BURST cburst $BURST\r\n    $U32 match ip dst $IP\/32 flowid 1:1\r\n    $U32 match ip src $IP\/32 flowid 1:2\r\n}\r\n\r\nstop() {\r\n    $TC qdisc del dev $IF root\r\n}\r\n\r\nrestart() {\r\n    stop\r\n    sleep 1\r\n    start\r\n}\r\n\r\nshow() {\r\n    $TC -s qdisc ls dev $IF\r\n    echo \"\"\r\n    $TC -s class show dev $IF\r\n}\r\n\r\nshowfilter() {\r\n    $TC -s filter show dev $IF\r\n}\r\n\r\ncase \"$1\" in\r\n\r\n  start)\r\n    echo -n \"Starting bandwidth shaping: \"\r\n    start\r\n    echo \"done\"\r\n    ;;\r\n\r\n  stop)\r\n    echo -n \"Stopping bandwidth shaping: \"\r\n    stop\r\n    echo \"done\"\r\n    ;;\r\n\r\n  restart)\r\n    echo -n \"Restarting bandwidth shaping: \"\r\n    restart\r\n    echo \"done\"\r\n    ;;\r\n\r\n  show)\r\n    echo \"Bandwidth shaping status for $IF:\"\r\n    show\r\n    echo \"\"\r\n    ;;\r\n\r\n  showfilter)\r\n    echo \"Filter shaping status for $IF:\"\r\n    showfilter\r\n    echo \"\"\r\n    ;;\r\n\r\n  *)\r\n    pwd=$(pwd)\r\n    echo \"Usage: .\/tc {start|stop|restart|show|showfilter}\"\r\n    ;;\r\n\r\nesac\r\n\r\nexit 0<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Voici un script d&rsquo;init pour linux, pour limiter la bande passante utilis\u00e9e sur une interface r\u00e9seau et avec une IP. tc se trouve dans le paquet debian iproute. #!\/bin\/bash ### BEGIN INIT INFO # Provides: tc # Required-Start: $syslog $network $remote_fs # Required-Stop: $syslog $network $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 <a href='https:\/\/blog.jeremm.fr\/?p=587' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[70,69],"_links":{"self":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts\/587"}],"collection":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=587"}],"version-history":[{"count":7,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts\/587\/revisions"}],"predecessor-version":[{"id":889,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=\/wp\/v2\/posts\/587\/revisions\/889"}],"wp:attachment":[{"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jeremm.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}