[LARTC] Please check the follow script for diffserv

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

* On Thu, Aug 07, 2003 at 04:29 PM (+0800), anzp wrote:

> My linux host has two 100M eth device, but I want to limit it's 
> bandwidth to 1M for experiments. Then allocate 150k to EF flow, 
> 500k to best effort flow.
>
> The script is fllowing:
> -------------------------------------
>  #/bin/sh
> 
> DEV="dev eth0"
> echo $DEV
> TC="/usr/src/redhat/SOURCES/iproute2-2.4.7src/iproute2/tc/tc"
> $TC qdisc add $DEV handle 1:0 root dsmark indices 64 set_tc_index
> $TC filter add $DEV parent 1:0 protocol ip prio 1 tcindex mask 0xfc shift 2
> $TC qdisc add $DEV parent 1:0 handle 2:0 cbq bandwidth 1Mbit cell 8 avpkt 1000 mpu 64

Here, you should specify the physical bandwidth of your underlaying
device (eth0), i.e. 100Mbit. You can't slow down the device at this
position.

> $TC class add $DEV parent 2:0 classid 2:1 cbq bandwidth 1Mbit rate 150Kbit avpkt 500 prio 1 bounded isolated allot 1514 weight 1 max
> burst 10 
> $TC qdisc add $DEV parent 2:1 pfifo limit 5
> $TC filter add $DEV parent 2:0 protocol ip prio 1 handle 0x2e tcindex classid 2:1 pass_on
> #BE class(2:2) 
> $TC class add $DEV parent 2:0 classid 2:2 cbq bandwidth 1Mbit rate 500Kbit avpkt 1000 prio 7 allot 1514 weight 1 maxburst 21 borrow 
> split 2:0 defmap 0xffff 
> $TC qdisc add $DEV parent 2:2 red limit 10KB min 1KB max 8KB burst 4 avpkt 1000 bandwidth 1Mbit probability 0.4
> $TC filter add $DEV parent 2:0 protocol ip prio 2 handle 0 tcindex mask 0 classid 2:2 pass_on
> --------------------------------------------------------------
> 
> But I can download file from it with 40M speed. Why the limit is invalid?

Altough you set a maximum rate of 500Kbit for the BE class, this class
borrowed additional bandwidth, of course, not from your EF class (which
is isolated), but from the parent qdisc, which offers 100Mbit (because 
the underlaying device offers that much).

But, if changing the keyword "borrow" to "bounded" within your BE class,
the BE class would only be using 500Kbit, even if the EF class is empty. 

So, I've added one more class to your script - so my resulting script is:

  ---8<------8<------8<------8<------8<------8<------8<------8<---

  # Deleting old root qdisc 
  #
  $TC qdisc del $DEV root

  # Setting up DSMARK qdisc to copy DSCP to "skb->tc_index"
  #
  $TC qdisc add $DEV handle 1:0 root dsmark indices 64 set_tc_index

  # Setting up filter to mask out ECN bits and to extract DSCP
  #
  $TC filter add $DEV parent 1:0 protocol ip prio 1 tcindex mask 0xfc shift 2

  # Setting up inner CBQ disc
  #
  $TC qdisc add $DEV parent 1:0 handle 2:0 cbq bandwidth 100Mbit cell 8 avpkt 1000 mpu 64

    # Setting up a new class to restrict over all bandwidth to 1Mbit
    #
    $TC class add $DEV parent 2:0 classid 2:1 cbq bandwidth 100Mbit rate 1Mbit avpkt 1000 \ 
    prio 1 bounded isolated allot 1514 weight 1 maxburst 21

       # EF class (2:2)
       #
       $TC class add $DEV parent 2:1 classid 2:2 cbq bandwidth 1Mbit rate 150Kbit avpkt 500 \ 
       prio 1 bounded isolated allot 1514 weight 1 maxburst 10

          # Packets within EF class are stored in a simple classless PFIFO qdisc
          #
          $TC qdisc add $DEV parent 2:2 pfifo limit 5

    # Adding filter
    #
    $TC filter add $DEV parent 2:0 protocol ip prio 1 handle 0x2e tcindex classid 2:2 pass_on

       # BE class (2:3)
       #
       $TC class add $DEV parent 2:1 classid 2:3 cbq bandwidth 1Mbit rate 500Kbit avpkt 1000 \
       prio 7 allot 1514 weight 1 maxburst 21 borrow split 2:1 defmap 0xffff

          # Packets within BE class are stored in a classless RED qdisc
          #
          $TC qdisc add $DEV parent 2:3 red limit 10KB min 1KB max 8KB burst 4 avpkt 1000 \ 
          bandwidth 1Mbit probability 0.4

    # Adding filter
    #
    $TC filter add $DEV parent 2:0 protocol ip prio 2 handle 0 tcindex mask 0 classid 2:3 pass_on

---8<------8<------8<------8<------8<------8<------8<------8<---


I don't know if this way is the smartest one. But, I think it may be
able to help you with your Diffserv configuration. I hope that one 
of the tc gurus will correct me if I am totally wrong. 

Best regards,
Steffen


[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux