[LARTC] Plz comment on my ezshaper script

sufcrusher sufcrusher@zonnet.nl
Sat, 11 Oct 2003 23:51:22 +0200


This is a multi-part message in MIME format.

------=_NextPart_000_0036_01C39052.931E7270
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hi

I finally had some time to clean up (read: completely re-write) the shaper
script I've been using for over a year now. I was hoping it would be useful
to others, but before I "release" it, I would like some comments from you
guys. Please let me know about any bugs, annoyances or ideas.

The script (ezshaper) is a "simple" bash script (although pretty large) with
very few extra dependencies (I'm planning on running it on a IPCop box
soon). Basically all it really needs are iptables and tc (htb version).

At the moment ezshaper is intended for simple situations like this:
LAN   <-----> Linux Firewall/router   <------>    Internet
But I believe it could be used in (or adapted to) other situations as well.

Ezshaper reads a simple config file (ezshaper.cfg) that contains the
definitions for the tc classes (with prio, rates and ceils) and the rules to
mark packets for each class. Ezshaper generates iptables and tc commands
from that. I believe I have made the syntax in the cfg file as easy as
possible, but you can also include more complex iptables options (matches
etc) for more advanced rules. There are some resctrictions I might fix some
day.

The ezshaper script itself can be run with several options (e.g.: -h for
help; -d for debugmode) and then a command (start, stop, status, ...). In
the "status" command I added a nice easy-to-read table showing all classes
and the most important statistics.

Any comments are welcome!

Thanks,
Jannes Faber

------=_NextPart_000_0036_01C39052.931E7270
Content-Type: application/x-gzip;
	name="ezshaper-1.0rc.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="ezshaper-1.0rc.tar.gz"

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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

------=_NextPart_000_0036_01C39052.931E7270--