I want to put my Debian NAS system in supend to RAM mode (ACPI S3) after a decent period of time idling in order to save some power. I thought about putting the NIC in a mode, where it waits for unicast SMB packets, and then wake up. This would be quite useful, for example when the TV wants to stream some content from the NAS. Maybe it would be possible with something like ethtool -s eth0 wol p where phy would equal some SMB unicast packet.

Is something like this possible? Shouldn't be that hard to accomplish I guess, but maybe I'm wrong.


Yes is it possible, one has to do the following:

aptitude install pm-utils
cd /usr/lib/pm-utils/sleep.d/
touch 70wol

Put the following into 70wol

ethtool -s eth0 wol pug

Get back on your shell, and make the script executable:

chmod +x 70wol

Now do a ACPI S3 suspend:


You should now be able to wake the system with a ICMP, SSH, SMB, etc. packet.

Don't forget the fact, that Windows and Linux both have a ARP cache timeout of 30 seconds. So after


other machines on the network only have about 30 seconds to wake the system, because after that period, they do no longer have the MAC address in order so send packets to the target system.

You can fix that with static ARP addresses. On each system you want to be able to wake the NAS system do the following on Windows

arp -s 00-10-54-CA-E1-40

and the following on Linux

arp -s 00:10:54:CA:E1:40

Pretty neat setup if you have a NAS home server, that should not run 24/7. One could now write a shell script as a cronjob and suspend the NAS server after say 5 minutes of inactivity.

I did that on a Debian Testing with Kernel 3.12 and the latest Intel e1000e drivers for my Intel I217-V NIC.

| improve this answer | |
  • Supposedly some newer NICs are able to reply to ARP and ND queries by themselves. Dunno how to configure it. – user1686 Nov 20 '13 at 12:49

It's possible, and Windows actually uses the wake-on-pattern feature of the network card by default:

One kind of special data packet contains a wake-up pattern. By default, Windows 7 and Windows Vista listen for the following packets when you enable WOL:

  • A directed packet to the MAC address of the network adapter
  • A NetBIOS name resolution broadcast for the local computer name
  • An Address Resolution Protocol (ARP) packet for the IPv4 address of the network adapter
  • An IPv6 Neighbor Discovery packet for the network adapter's solicited-node multicast address


However, note that its list does not contain unicast SMB packets. Why? Because SMB packets are not sent until a TCP connection is established, and before that happens, the client must find out th server's hardware address – using either ARP for IPv4, or Neighbour Discovery for IPv6. (Name resolution using NetBIOS is also in the list, but LLMNR is not, for some reason.) So you would need to create a very similar filter list – at minimum, one that contains ARP and Neighbour Discovery.

| improve this answer | |
  • I did test it with Windows 8.1 where it works perfectly, but what do I have to do with Linux. I found out that if I set ethtool -s eth0 wol pug I could wake the system within like 30 seconds after pm-suspend with a ping or ssh packet. But after that time period I couldn't wake it anymore. What do you mean with filters? – JohnnyFromBF Nov 20 '13 at 7:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.