I was having trouble using ether-wake (or etherwake) to wake up my machines. However, I noticed that using wakeonlan (which is a Perl script!) seemed to always work. As an aside, I preferred wakeonlan because it is simpler and doesn't require the extra step of becoming root. Anyways, I wanted to use something that was program and not just a perl script, so I tried figuring out what was different.
A quick wireshark session revealed the packets to be different. And analyzing the packets made me understand what was already written in the manuals for both programs a little better: wakeonlan was using UDP packets (type 0x800), where was ether-wake was generating the "true" magic packet: a raw ethernet packet of type 0x802.
So essentially, the NICs on all my machines seem to not support the ether-wake generated magic packet. That also probably explains why my DDWRT router can't wake my connected machines (this is different from WOWL packets over the wireless link. DDWRT has a known issue about dropping WOL packets when acting as a wireless bridge, but I digress).
The solution to my problem was wakelan. More details at found at http://gsd.di.uminho.pt/jpo/software/wakeonlan/mini-howto/wol-mini-howto-3.html
source: ftp://metalab.unc.edu/pub/Linux/system/network/misc/
This is a simple one c-file program that spits out a UDP WOL packet on the specified port. The good thing is that it doesn't need super-user privilege and the great thing is that it works just as well as the wakeonlan script with my machines!
No comments:
Post a Comment