Centos 5.x Traffic Shape on multiple interfaces

Discussion in 'Installation/Configuration' started by jariasca, Jun 8, 2010.

  1. jariasca

    jariasca Member

    Hi All,

    I'm trying to limit the bandwitdh to one of my centos servers, using a traffic shaping script.

    Is working on the eth1 I have a limit of 60mbps, but now I have 2 more interfaces and I need to limit them eth1 to 15mbps and the eth2 45mbps

    The script that I'm using only support one eth.

    #  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.
    # The network interface we're planning on limiting bandwidth.
    IF=eth0             # Interface
    # Download limit (in mega bits)
    DNLD=60mbit          # DOWNLOAD Limit
    # Upload limit (in mega bits)
    UPLD=60mbit          # UPLOAD Limit
    # IP address of the machine we are controlling
    IP=xxx.xxx.xxx.xxx  # 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.
        sleep 1
    show() {
    # Display status of traffic control status.
        $TC -s qdisc ls dev $IF
    case "$1" in
        echo -n "Starting bandwidth shaping: "
        echo "done"
        echo -n "Stopping bandwidth shaping: "
        echo "done"
        echo -n "Restarting bandwidth shaping: "
        echo "done"
        echo "Bandwidth shaping status for $IF:"
        echo ""
        echo "Usage: tc.bash {start|stop|restart|show}"
    exit 0
    Please advise

Share This Page