Asus WL-500g Deluxe Router
Important: Brevity disclaimer.
This page contains some information related to Asus WL-500g Deluxe router and my experience on running OpenWrt firmware on this router, as well as my work related to bcm43xx WiFi driver modification to support Master Mode (= Access Point mode).
General information
I believe there are two key preconditions that implied creation of this particular router and also other routers with similar characteristics:
Constant advances in hardware design make it possible now to construct sub-$100 devices which have quite a lot of CPU power and memory.
On the other hand, constant increase of software complexity and tasks the device such as router should solve made it impractical to design from scratch the firmware for every device.
Therefore, quite a lot of manufactures started to produce devices which are powered by operating systems such as Linux, as it appeared to be cheaper to install appropriate hardware that is capable of running Linux and take advantage of existing software rather than designing firmware from scratch.
The key advantage for end users here is that in the case existing firmware for device does not suit users needs, it’s more or less easy to modify or even replace it, as manufactures provide sources of their firmware (this is required by GPL that Linux kernel uses).
There are available now even separate Linux distributions that were designed as replacements for existing firmwares in a lot of different routers, OpenWrt being one of them (and, to the best of my knowledge, the most advanced one).
Limitations
It should be understood that no embedded low-cost hardware can (and will - in the nearest future) match desktops or servers - therefore, you should carefully check whether using your router, for example, is indeed adequate for the tasks you’re trying to solve.
Currently, typical CPU speed for these kinds of routers is between 200MHz - 300MHz. To give you an idea on what does it mean: routing speeds from LAN to WAN using small set of firewall rules and NAT will be approximately in range 2.0 - 3.0 MB/s. (so, these CPUs are not capable of utilizing full 100Mb/s Ethernet, if you have that luxury on WAN interface )
Also RAM is typically limited to 32 MB, thus you hardly can run anything really big there.
Size of flash memory is typically 4 - 8 MB, that is enough for basic set of software only. Typically there are ways to extend storage, though - I used external HDD connected to router via USB port.
Example of usage
On the other hand, for home or small office use, this hardware can perform quite well. Here’s just partial list of things I was able to run simultaneously on my router for home use (1-2 users):
Basic set (provided by firmware):
- SSH for remote access
- DHCP server
- DNS caching server
- VTUN daemon for tunneling
Extended set (complied separately and placed on external HDD):
- Lighttpd web server with PHP 5
- IlohaMail for web mail purposes
- Samba for sharing files over local network (transfer speed was quite slow, slightly above 1 MB/s)
- BTG BitTorrent server for downloading and sharing files (peak transfer speeds were about 0.5 MB/s)
- Simple print server for printer sharing over network
- SVN server for keeping small projects
- Dovecot IMAP server for keeping e-mails
- DSPAM spam filtering server (I considered SpamAssassin, but it had too many dependencies)
- fetchmail was periodically executed to fetch my e-mails and feed them to Dovecot through DSPAM filter.
- NUT (network UPS toolkit) has controlled UPS
- rrdtool for statistics gathering
Of course, to make these things run simultaneously I had also to add swap partition on external HDD, but it wasn’t used that much.
In the end, however, I’ve abandoned usage of router for all these extended tasks, as CPU limitations were too strict for me, and also porting & cross-compiling all packages I needed took quite a lot of time, so I’ve just set up separate server PC for all these extended tasks.
bcm43xx WiFi driver modifications
There is one very serious issue with drivers for the hardware that is present on Asus router: namely, Broadcomm does not provide sources or specifications for its WiFi chip used by this router. Therefore, when constructing althernative firmware you either have to use binary driver (which works only with 2.4.x Linux kernels) or use bcm43xx WiFi driver that was written by enthusiasts by reverse-engineering Broadcomm binary driver.
bcm43xx driver is useable for quite some time already for scenarios when router should work as WiFi client, but support for acting as Access Point was missing.
Therefore I had to spend quite some time adding this support in bcm43xx driver in order to use it in Access Point mode. Results of my modifications were included in the bcm43xx mainstream driver, and are also available as patch on OpenWrt forum.
This support is not full, however, as power-saving mode is not supported, and it is required by many modern devices, such as PDAs or notebooks to work correctly.
If there’s anyone who’d like to continue working on this topic - just contact me and I’ll try to explain the things from the place where I left them so that it can be easier to continue this work.