Re: [LARTC] GRED queues in Diffserv

Linux Advanced Routing and Traffic Control

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

 



Hi Amit,

On Mon, 10 Jun 2002, Amit Kucheria wrote:

> sudo /usr/bin/tc qdisc add dev r1p4 parent 2:1 gred setup DPs 3 default 2 
> grio
> ---------------------------------------------------
> 
> This last line where I setup the gred qdisc shows a message in the logs as 
> "NO GRED Queues setup! ". Can anybody comment on what this could mean? I 
> am using 2.2.18 with a Diffserv patch.
> 
> TIA,
> Amit
> 
> PS.The remainin lines of the script include creating 3 gred qdiscs,
> setting their limits and creating another CBQ class (2:2) for un(ds)marked
> traffic.

Same thing here. I looked into sch_gred.c and it looks like gred complains 
about the lack of DP entries in the table as soon as you issue the gred 
setup command. I didn't succeed in defining the virtual queues before 
I issue the gred setup command, so I decided to live with the log message. 

Perhaps there is a better way to do it, but honestly I doubt it - and, 
hey, Almesberger uses the same approach in his tcng example script, so at 
least it can't be complete nonsense. :)


Kurt

P.S.: attached is my way of doing it - produces the log message, but 
works...


#!/bin/sh
#
# author: Kurt Wagner, kwagner@cosy.sbg.ac.at
# last changed: 25.04.02 
#
# Script to setup GRED
#
# Gred uses the 4 least sig. bits of skb->tc_index to map packets to
# virtual queues (DP, which stands for drop precedence). This script 
# setups 4 virtual queues, packets with tc_index = 0x01 are mapped 
# to DP1, 0x02 to DP2 and so on. 
# 
# The ECN bits (least sig. 2 bits of DS field) are masked out and
# most apps are only able to set a value for the whole DS field (if
# at all), so be carefull which DS field values you choose. 
# 
# e.g.: 
# 
# | DS field | tc_index | DP |
# +----------+----------+----+
# |   0x04   |   0x01   |  1 |
# |   0x08   |   0x02   |  2 |
# |   0x0C   |   0x03   |  3 |
# |   0x10   |   0x04   |  4 |
#

DEV="eth1"

function usage
{
 echo "Usage:" `basename $0` "COMMAND"
 echo "where  COMMAND := { start | stop | status }"
 exit 1 
}


if [ $# = 0 ]; then usage ; fi


case "$1" in
 start) 
  # add the dsmarker as root and copys DS field to skb->tc_index
  tc qdisc add dev $DEV handle 1:0 root dsmark indices 4 set_tc_index
  # mask out ECN bits and shift right by 2 to extract DSCP
  tc filter add dev $DEV parent 1:0 protocol ip prio 1 \ 
   tcindex mask 0xfc shift 2

  # general gred setup, 4 queues, nr 4 is the default queue, 'grio' says 
  # we use the RIO like multi-RED behavior to calculate the average queue
  # lengths
  tc qdisc add dev $DEV parent 1:0 handle 2:0 \ 
   gred setup DPs 4 default 4 grio


  # setup  virtuall queues, priority 1 is the highest

  tc qdisc change dev $DEV handle 2:0 gred limit 200KB min 15KB max 45KB \
   burst 20 avpkt 1000 bandwidth 10Mbit probability 0.02 DP 1 prio 1

  tc qdisc change dev $DEV handle 2:0 gred limit 200KB min 15KB max 45KB \
   burst 20 avpkt 1000 bandwidth 10Mbit probability 0.02 DP 2 prio 2

  tc qdisc change dev $DEV handle 2:0 gred limit 200KB min 15KB max 45KB \
   burst 20 avpkt 1000 bandwidth 10Mbit probability 0.02 DP 3 prio 3

  tc qdisc change dev $DEV handle 2:0 gred limit 200KB min 15KB max 45KB \
   burst 20 avpkt 1000 bandwidth 10Mbit probability 0.2 DP 4 prio 4

  echo -e "`basename $0` enabled \n"
  ;;     
  stop)  
  tc qdisc del dev $DEV root 

  echo -e "`basename $0` disabled \n"
  ;;     
  status)
  tc -s -s -s  qdisc ls dev $DEV 
  ;;
  *)
  usage
  ;;
esac


_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/

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