frottle: Packet Scheduling and QoS for Wireless Networks

*** Summary ***

frottle is an open source GNU project to control traffic on wireless networks. 
Such control eliminates the common hidden-node effect even on large scale 
wireless networks. frottle is currently only available for Linux wireless 
gateways using iptables firewalls queue functionality, with plans to develop a 
windows client in the future. 

frottle works by scheduling the traffic of each client so that one client does 
not swamp the Access Point to the extent where it loses sight of other clients.
The scheduling of packets also prevents clients with stronger signals from 
receiving bandwidth bias. The unbiased allocation of traffic is dependant on all
traffic passing through the frottle master. 

Frottle has been developed and tested on the large community wireless network 
of WaFreeNet.  We have found running frottle has given us a significant 
improvment in the network usability. 

Testing results and further documentation can be found at:

	http://www.wafreenet.org/?page=frottle


*** Operation ***

frottle operates at the IP layer, simulating a token ring network of sorts.  
Access to the network is controlled by the frottle master, sending each
client a control packet (token) which contains information about how much 
data can be sent at this time.

Each client recieves its token and sends any required data, one at a time.
This eliminates collisions, and with a reasonable signal packetloss is 
virtually zero.  Also, since each client gets a limited slice of the 
bandwidth, everyone can get fair access regardless of their signal strength.

Whilst this mechanism does result in increased latency, overall network 
performance and utilisation can significantly increase.


*** Additional Features ***

Traffic queues built in to frottle assign different, dynamic priorities to 
different traffic. Most traffic has a default priority. Traffic to/from 
specified ports (and ICMP packets) are made high priority. Traffic for 
connections that have done more than 2 MB of data and have a rate of more 
than 5 KB/s are made low priority. When a client is polled, high priority 
traffic is send first, then default, then low until the poll quota is used. 

Realtime info on each clients performance is available from the master in a html
file and optionally at each client in a similar html file. (The names and 
locations of these files is set in /etc/frottle.conf.) 


*** Independent user testemonial by SteveH ***

	"I have a poor connection to the access point. I have a low snr (varies 
	from 7 to 11 dB) and rarely achieve better than a 2 Mb/s connection. 
	When we were running without any form of QOS I was often struggling to 
	achieve transfer rates of 3 kB/s. During testing of the current frottle 
	I am able to get my share of bandwidth. My transfer rates now average 
	80 kB/s download and 35 kB/s upload. Peaks for these are about double 
	this. The end result is a network which is usable and reliable." 


*** WiCCP ***

We have also run WiCCP (http://patraswireless.net/software.html) for a test 
period of several weeks on our network, with a developer participating in 
testing and providing updates. WiCCP is the only other project we could find 
that has similar goals to Frottle. We wanted to compare WiCCP to Frottle so 
that we could use the better performing technology on our network. 

Here is an extract from an email from Marcus that is a summary of the sort of 
results we saw:

	"Now - in terms of performance comparison, Ive been monitoring my 
	latency and packetloss to Hills Hub. Over the past few weeks (testing 
	both WiCCP and frottle), my SNR has been terrible - between 4 to 6. 
	This is a pretty extreme circumstance, but it has highlighted some 
	differences:

	WiCCP: avg packetloss ~ 15%, avg latency ~ 300ms
	frottle: avg packetloss ~ 6%, avg latency ~ 150ms

	I have not tested throughput with frottle in these poor conditions, 
	though throughput with WiCCP was reasonable. I can however see that 
	total Hills Hub bandwidth usage was much higer with frottle:

	WiCCP: peak (2 hour avg) downloads ~ 100kB/sec, uploads ~ 50kB/sec
	frottle: peak (2 hour avg) downloads ~ 250kB/sec, uploads ~ 180kB/sec

	... 

	My 6% packetloss with frottle is due to VERY poor SNR ... it's an RF 
	error.  Without frottle/WiCCP, the packetloss in my poor conditions 
	would be more like 90%.  


Based on our observations, we will continue developing and using frottle on 
HillsHub, however keeping an eye on WiCCP and continuing to support their 
development/testing in any way we can. The above comments only relate to our 
environment, WiCCP may well be a better solution than frottle in other 
environments. 


*** Contributions ***

Credit is due to:
	
	Marcus (http://planetaxis-web.sytes.net/wireless/) for the concept 
	and proof of concept Perl program

	ChrisK (http://www.narx.net/~chrisk/WaFreeNet/) for developing the 
	current C version of frottle

	All the HillsHub connectees for their support in testing during 
	development.


Feedback, questions, praise and gifts can be sent to the developer
(frottle@wafreenet.org)


