Hello James, : Anyways I was curious if it would be possible to build my own linux : router for this purpose and what would I need to install - compile - or : patch. [ For the record, this is not the only way, but it is one of the easiest ways to get into traffic control with linux, and is very well supported on this list. ] - kernel with HTB (version 3) [ 2.4.20+, without patches ] - tc with HTB support: http://luxik.cdi.cz/~devik/qos/htb/ : I am planning on using Gentoo as the base system so I can put : everything I need in the Kernel as I install the system. Problem is I : am not sure what to add to the kernel to make this Idea possible. Or : even where to find a working example similar to what I want to do : with my router. See the QoS kernel options. (Search for "fair queueing" in your .config.) : Any pointers will be appreciated. As usual, there are two good places to start: http://lartc.org/ LARTC http://www.docum.org/ Stef Coene's site There are ample other resources if you have more specific questions. : The part 2 portion of the idea would be to have different iptables : rules for some of the ip ranges that don't have their bandwidth : limited... What exactly do you mean here? Do you wish to use fwmark as a selector for traffic control? If so, read some of Stef's docs: http://www.docum.org/ http://www.docum.org/stef.coene/qos/docs/filter.html Short answer: Yes, you can use ipchains/iptables to mark packets and then perform traffic control based on these marks. : What would I need to install/patch to build a bandwidth router? The : purpose of the router would be to limit sets of STATIC ip ranges to : various up/down speeds for testing purposes. : Your example, a possibility. Modified, with ASCII diagram: selected IPs bandwidth class ---------------------------------------- 192.168.2.4-9 28.8 1:2 192.168.2.10-15 56.6k 1:3 192.168.2.16-21 128k 1:4 192.168.2.22-25 256k 1:5 192.168.2.26-30 512k 1:6 RB=real bandwidth r = HTB class rate c = HTB class ceil Yes you can select ranges of IPs with classifiers (tc filter) and restrict them to classes with specified bandwidths. HTB-root-class (1:1) -- - - - - - -> RBkbit r RBkbit c | +--------+--------+--------+--------+-------+ 1:7 | 1:6 | 1:5 | 1:4 | 1:3 | 1:2 | | | | | | +--> 28kbit r 28kbit c | | | | +-- - - - -> 56kbit r 56kbit c | | | +- - - - - - - - - -> 128kbit r 128kbit c | | +-- - - - - - - - - - - - - -> 256kbit r 256kbit c | +- - - - - - - - - - - - - - - - - - -> 512kbit r 512kbit c +-- - - - - - - - - - - - - - - - - - - - - - -> ???kbit r RBkbit c Keep in mind, this is but one example of the way you could subdivide your bandwidth. The example above is a description of the classes and children classes which would allow you to enforce the guidelines you have set out above. : Again to futher torture the client side applications we test. But why would we want to be so vicious to the poor client? All it's trying to do is consume every iota of bandwidth....is that so wrong? The client isn't evil, it's just coded that way.... ;-) -Martin -- Martin A. Brown --- SecurePipe, Inc. --- mabrown@xxxxxxxxxxxxxx