I have solved the WOL functionality for nearly all linux setups. Populart WRT54G(S) series are prime example. To make real WOL functional - do the following:
1) Make a port forward to your LAN ip 192.168.0.254 (no PC can use this IP in LAN) udp port 150 for example (it really can be any port as your WOL pc does not care what port the traffic arrives)
2) add this to your startup scripts:
ip neigh change 192.168.0.254 lladdr ff:ff:ff:ff:ff:ff nud permanent dev br0
ip neigh add 192.168.0.254 lladdr ff:ff:ff:ff:ff:ff nud permanent dev br0
* IP can be what ever you like - important is only that forwarding rule and arp entry IPs are the same and the IP has to lie in the same subnet as you WOL pc.
* device br0 is linksys wer54g(s) bridge device between Wireless and LAN. Generally it should be a device what is used for LAN routing.
WRT54G(S) users with DD-WRT and SveaSoft Alchemy firmware:
You can paste the lines to web admin "administration">"diagnostics" and save with "Save Startup"
3) now you have guaranteed permanent arp entry for your LAN after you restart the router and you can always route traffic to your LAN even if your WOL PC is in sleep.
4) use any WOL utility you like to wake your PC from anywhere you like. My sample script that i wrote in java is here: »scat.pri.ee/wakeonlan/
You can email me email@example.com
(DD-WRT prefinal 3.2 @ WRT54GS)