Flexi bandwidth sharing needed. Unknown / changing total bandwidth!!!

• I have a problem that takes a bit of explaining, below is the exact details of my problem. The question which you may glean is How do I traffic shape to an unknown bandwidth? Is there a way that a traffic shaper can do a sum total to see if the bandwidth is higher than it's allowing? and if so can it adjust the bandwidth allocation accordingly?

I'm not an IT guy by trade but I find myself running the IT department for 2 NGO's (for this example I'll call them NGO i and NGO ii) in the heart of Uganda, Africa. There are about 200 computers on the networks of NGO i and ii. NGO i has a satellite link with a 1mb (mb not MB) connection, oversubscribed 10:1. Therefore our minimum is 100kbps, we have done the research of ISP's that use this satellite and found the one that offers the best in terms of bandwidth allocation to all the 10:1 customers, meaning that our bandwidth is very flexible. I have seen sustained traffic (over 1hr) of speeds hitting the full 1mb. I have also seen sustained traffic of speeds at 100kbps. There are no defined times of day where traffic is better or worse. NGO ii pays half the cost of the satellite to NGO i, so they share a 50% bandwidth, worsening the problem. The cost of the satellite link is \$thousands.

So my problem is, there is no way using all the traffic shaping tools available to me of setting limits based on a highly flexible total bandwidth. So I have yet to find a flexible way of allocating 96% of an unknown bandwidth 100% of the time.

What I was thinking was something that for example saw that 1 computer (computer a) was on so didn't limit it, it recognises that computer a is able to download and transmit on the satellite with a speed of 200kbps, computer b comes online and so the shapers says total traffic = 200kbps therefore split fairly should be 100kbps. Fine. However it needs to be able to correct to changing bandwidth, if the satellite gets choaked it says computer a is pulling 80kbps and b is pulling 60kbps totals now = 140kbps so each computer should only get 70kbps. Every minute or so it gives a temporary step up to both computers = 10-20% increase in bandwidth allocation (was 140kbps last time) so up to 154kbps and see if they are able to maintain that speed, checks again in 1 minute or slows down because it wasn't able to maintain that speed.

The problem I face is that I set relatively arbitary rules with schedules in place to take into account potential times of underuse of the satellite on the other 9 subscriptions it'll either work well depending on what the bandwidth, or just push too much to the satllite link and it do pfifo or whatever to cope with the overload or worse still if I over choak with excessively tight limits, preciously expensive bandwidth will be wasted.

The problem is we are dealing with a situation where there may well be just one user online, say a missionary gets up at 3am to skype their family in USA (which is a very likely senario) that takes up at least 400kbps most likely 600kbps. So if I over choak I'll be limiting services to some of the missionaries. Under choak and people will unintentionally be stealing bandwidth from those lower down on the queues.

Additionaly I need to be able to stipulate that one certain IP address (the router for NGO ii) gets a 50% share of whatever the bandwidth is, the rest of the users share the other 50%, but only when NGO ii is active / attempting to use the satellite.

Hopefully

Josh Oliver. (AKA JJOliver on #pf #pfsense)