1

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.

2 Answers 2

2

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

#!/bin/bash
ethtool -s eth0 wol pug

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

chmod +x 70wol

Now do a ACPI S3 suspend:

pm-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

pm-suspend

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 10.0.0.200 00-10-54-CA-E1-40

and the following on Linux

arp -s 10.0.0.200 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.

1
  • Supposedly some newer NICs are able to reply to ARP and ND queries by themselves. Dunno how to configure it. Commented Nov 20, 2013 at 12:49
1

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

http://support.microsoft.com/kb/941145

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.

1
  • 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? Commented Nov 20, 2013 at 7:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .