PDA

View Full Version : Limiting bandwidth of machines on a network




haravikk
Jul 25, 2008, 06:28 PM
Hi there,

My situation is this; I have a simple network of four Macs, all running OS X, sharing a 4mbps internet connection between them using a simple router (it routes traffic, little else).

Now, usually things are fine, but sometimes I want one machine to have priority over the others. This occurs my main machine is wirelessly connected to the router via a wireless bridge, and seems to be automatically pushed to one side if one of the wired machines starts using higher traffic.

Anyway, my thinking is that since OS X has ipfw (with dummynet) built in, then the machines can easily throttle themselves by putting all traffic through a bandwidth limited pipe. However, I don't want them to do this all the time, only if machines with higher priority need more traffic.

My thinking is that I could probably do this myself using Java (which I'm familiar with) to act as a bridge between the machines and use ipfw to throttle things. I'm iffy on getting Java applications to run on system startup as root, but could probably get round it, otherwise I'd need to translate the idea into C or something.

However, I'm wondering if any such solution exists already? To me an application managing calls to ipfw seems fairly trivial, but then there probably isn't much demand for it, as a serious network would just buy a router that does throttling automatically.

So, does such a solution exist? If not; anyone have any idea how to get a Java application to begin on system startup (not user log-in) with root permissions? [edit] Occurs to me as well, a way of measure current network usage may be necessary. Are there any command-line tools that can do this, allowing you to simple grab a value like '524,288' for 512kbits/sec current usage?

Thanks!



Poeben
Jul 25, 2008, 06:37 PM
I don't know if anything changed in leopard, but in my tiger experience...

Check out the man pages for launchd and launchctl. These are the processes that control things like starting programs at login, startup(including root), and essentially replaces cron. Basic way this works is you create a .plist and load it using launchctl. There's a GUI for this as well called Lingon (http://lingon.sourceforge.net/).

wlh99
Jul 28, 2008, 03:12 PM
Hi there,

My situation is this; I have a simple network of four Macs, all running OS X, sharing a 4mbps internet connection between them using a simple router (it routes traffic, little else).

Now, usually things are fine, but sometimes I want one machine to have priority over the others. This occurs my main machine is wirelessly connected to the router via a wireless bridge, and seems to be automatically pushed to one side if one of the wired machines starts using higher traffic.

Anyway, my thinking is that since OS X has ipfw (with dummynet) built in, then the machines can easily throttle themselves by putting all traffic through a bandwidth limited pipe. However, I don't want them to do this all the time, only if machines with higher priority need more traffic.

My thinking is that I could probably do this myself using Java (which I'm familiar with) to act as a bridge between the machines and use ipfw to throttle things. I'm iffy on getting Java applications to run on system startup as root, but could probably get round it, otherwise I'd need to translate the idea into C or something.

However, I'm wondering if any such solution exists already? To me an application managing calls to ipfw seems fairly trivial, but then there probably isn't much demand for it, as a serious network would just buy a router that does throttling automatically.

So, does such a solution exist? If not; anyone have any idea how to get a Java application to begin on system startup (not user log-in) with root permissions? [edit] Occurs to me as well, a way of measure current network usage may be necessary. Are there any command-line tools that can do this, allowing you to simple grab a value like '524,288' for 512kbits/sec current usage?

Thanks!

Might be tougher than you think, also even if you get something working the implementation might slow things down more than what you gain. An Idea might be alternate firmware for a Linksys WRT54G/GL/GS. You should be able to get one of those pretty cheap, and http://www.polarcloud.com/tomato has firmware that seems to do what you want. I may try this with my linksys if I find a need.

haravikk
Jul 28, 2008, 07:28 PM
Might be tougher than you think, also even if you get something working the implementation might slow things down more than what you gain.
Hmm, processing the speeds and calculating the speed limit to assign to ipfw is fairly simple actually, and ipfw itself seems quite efficient. Sure there's likely a small processing overhead on the machines but not much is required. However this is assuming it's easy enough to measure the bandwidth use of the machine, so it can be determined if it should request more or can cut-back or not. If that's difficult then it would present a problem, I've not found any way to do it thus far. I assume there's some way as Activity Monitor can tell you packets in/out which is only a small step away from measuring it if you know the sizes. And there are some products (GUIs) out that can measure it in the background.

An Idea might be alternate firmware for a Linksys WRT54G/GL/GS. You should be able to get one of those pretty cheap, and http://www.polarcloud.com/tomato has firmware that seems to do what you want. I may try this with my linksys if I find a need.
Hmm, it's a possibility, but I did only get my current router (A Sitecom DC-202) fairly recently, sure it's not particularly expensive but I'm expecting to have to part with some money to get my recently deceased G3 iMac fixed (power supply went, I don't want to throw it away over a relatively small part, if the monitor went sure). Don't suppose you know if there's anywhere to get custom firmware for the DC-202? It's got a load of features I don't use so there's room to spare, but I dunno how common the routers are.

ChrisA
Jul 29, 2008, 12:00 AM
However, I'm wondering if any such solution exists already? To me an application managing calls to ipfw seems fairly trivial, but then there probably isn't much demand for it, as a serious network would just buy a router that does throttling automatically.

You don't want to limit bandwidth you want to manage it with a priority assigned to each computer. It's a form of traffic shaping. SOme times people use it so HTTP goes ahead of mail and ftp. But you could set it so one compuer goes ahead of the others

You were right: Get a router that has this feature. But you don't have to buy one. Unix/Linux machines make great routers and Mac OS X is a Unix system. Set up one machine with two or more network interaces to be the router and then set up some IPFW rules to limit bandwidth. Prioritization has to be done inside one place (the router)

Once I set up a Linux system to act as a router. I needed some features I could not get in an afordable router but them I computed the cost of the power to run a PC 24x7.

northerngit
Jul 29, 2008, 03:40 AM
http://en.wikipedia.org/wiki/Quality_of_service

theyellowdart
Jul 29, 2008, 10:23 AM
Seems to me you're trying to re-invent the wheel to do something that, in all reality, the router should be doing... not the clients.

Now, i know you said it's just a simple router, however depending on which one you have... there very well could be QoS feature on the router, or with a third part Firmware. Personally I would go that route, since it really is the proper way to do this, rather than the elaborate ipfw route.