I''m trying to do some very simple rate-shaping on an interface. I want
to
limit my 100baseT interface to 7 megs both ingress and egress of the
interface. I''ve been hacking my way through the documentation and some
examples and I''ve come up with the following configuration for tcng
that
seems to do what I want.
I''m curious if some of the other experts out there wouldn''t
have a "better"
way to do what I''m doing. I''d like to do HTB ingress as well,
but it
complains that the the ingress qdisc doesn''t allow inside classes or
something like that. I think this will work for me, I just want to make
sure this is the best way to do things.
----------------------------
dev INTERFACE {
egress {
class ( <$all> ) if 1;
htb () {
class ( rate 100Mbps, ceil 100Mbps ) ;
$all = class ( rate 7Mbps, ceil 7Mbps ) ;
}
$o = bucket(rate 7Mbps, burst 200kB, mpu 200B);
class (2) if (conform $o && count $o) || drop;
}
}
/* tcng syntax English equivalent tc syntax
----------- -------------------- ---------
bps bits per second bit
Bps bytes per second bps (!)
kbps kilobits per second kbit
kBps kilobytes per second kbps
Mbps megabits per second ???
*/
Scott Baker - Network Engineer - RHCE
bakers @ web-ster . com - 503.266.8253
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
I think I got a little send happy with the last message and forgot to
include the "right" configuration. Here is REALLY what we''re
using. It''s
working in the lab right now, I want to move it into production later.
Basically ignore that last message.
----------------------------
I''m trying to do some very simple rate-shaping on an interface. I want
to
limit my 100baseT interface to 7 megs both ingress and egress of the
interface. I''ve been hacking my way through the documentation and some
examples and I''ve come up with the following configuration for tcng
that
seems to do what I want.
I''m curious if some of the other experts out there wouldn''t
have a "better"
way to do what I''m doing. I''d like to do HTB ingress as well,
but it
complains that the the ingress qdisc doesn''t allow inside classes or
something like that. I think this will work for me, I just want to make
sure this is the best way to do things.
----------------------------
dev INTERFACE {
egress {
class ( <$all> ) if 1;
htb () {
class ( rate 100Mbps, ceil 100Mbps ) ;
$all = class ( rate 7Mbps, ceil 7Mbps ) ;
}
}
ingress {
$p = bucket(rate 7Mbps, burst 100kB, mpu 200B);
class (1) if (conform $p && count $p) || drop;
}
}
Scott Baker - Network Engineer - RHCE
bakers @ web-ster . com - 503.266.8253
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
On Tue, 27 Jan 2004, Scott Baker wrote:> I''m curious if some of the other experts out there wouldn''t have a "better" > way to do what I''m doing. I''d like to do HTB ingress as well, but it > complains that the the ingress qdisc doesn''t allow inside classes or > something like that. I think this will work for me, I just want to make > sure this is the best way to do things.You don''t need classes if you just want to shape traffic to a specific rate. Use a classless qdisc like tbf: tbf (mtu 1.5kB,limit 10kB,rate 1kBps,burst 2kB) { fifo; } Rubens _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
Scott,
: Basically ignore that last message.
Earlier message ignored.
: I''m trying to do some very simple rate-shaping on an interface. I
want
: to limit my 100baseT interface to 7 megs both ingress and egress of the
: interface.
You''ll notice that Rubens suggested you use a TBF. This would be
perfectly adequate solution for your transmitted traffic. Note that an
HTB class and a TBF qdisc are essentially performing the same function.
Shaping!
Note there is a difference in the traffic control structures created by
your tcng configuration. Your egress section will actually be two HTB
classes inside an HTB qdisc attached to the INTERFACE in question. In
your situation, you do not need both classes (created as siblings), since
you are classifying everything into class $all.
: I''m curious if some of the other experts out there wouldn''t
have a
: "better" way to do what I''m doing. I''d like to
do HTB ingress as well,
: but it complains that the the ingress qdisc doesn''t allow inside
: classes or something like that. I think this will work for me, I just
: want to make sure this is the best way to do things.
This is a limitation of traffic control under Linux. You can only shape
what you transmit [ see IMQ if you want to know how to break this rule ].
So, unless you are going to use IMQ, you''ll not be able to shape your
local input traffic (if you are a router, you should be able to slow down
conversations by "artificially" delaying the packets on the internal
interface).
However, you don''t need to care that you are not shaping on your
inbound
traffic. You can police the traffic. For the difference between shaping
and policing, try here [0].
[ snip ]
: htb () {
: class ( rate 100Mbps, ceil 100Mbps ) ; /* remove this */
: $all = class ( rate 7Mbps, ceil 7Mbps ) ;
: }
: ingress {
: $p = bucket(rate 7Mbps, burst 100kB, mpu 200B);
: class (1) if (conform $p && count $p) || drop;
: }
After you run your tcng config file through tcc ("tcc < $FILE |
less"),
you should see (lines broken for readability) the following for the
ingress traffic control. I left INTERFACE in the config file--obviously
you have #defined it someplace else.
tc qdisc add dev INTERFACE ingress
tc filter add dev INTERFACE parent ffff:0 protocol all prio 1 \
u32 match u32 0x0 0x0 at 0 classid ffff:1 \
police index 2 rate 875000bps burst 102400 mpu 200 action drop/pass
^^^^^^
Note that the policer will (somewhat harshly) accommodate your desires to
limit the traffic accepted inbound on an interface.
Best of luck,
-Martin
[0] http://tldp.org/HOWTO/Traffic-Control-HOWTO/elements.html#e-shaping
http://tldp.org/HOWTO/Traffic-Control-HOWTO/elements.html#e-policing
--
Martin A. Brown --- SecurePipe, Inc. --- mabrown@securepipe.com
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/