Wake-on-Lan
Updated 10 August 2019
Wake-On-Lan is a technology that allows a computer to be turned on or awakened by a network message.
Slave computer requirements
- ATX power supply, Wake-On-Lan compatible motherboard
- Wake-On-Lan compatible network adapter
- known MAC address of the network adapter
Host computer requirements
- special software able to send Magic Packet
How it works
The slave computer is on stand by and supplies power to the network adapter. The AC adapter is in low-power mode, browsing all packets coming to its MAC address without answering them. If one of them turns out to be a Magic Packet, the network adapter gives a signal that will turn on the computer power.
How to make it work
First enable WoL support in the slave computer BIOS. It can be a point of the same name like Wake On Lan Enable, or Power On By PCIE. It is also possible that this mode is not changed in the BIOS, while the motherboard supports it by default.
To decide whether a WoL network card supports it, boot the slave computer and type:
Settings for eth0: Supported ports: [ MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised auto-negotiation: Yes Speed: 1000Mb/s Duplex: Full Port: MII PHYAD: 1 Transceiver: external Auto-negotiation: on Supports Wake-on: g Wake-on: d Link detected: yes
Look at the Supports Wake-on and Wake-on lines. The first displays the available wake modes of the network adapter (+g stands for wake via Magic Pocket), and the second the current mode (d+ stands for disabled WoL).
To put the NIC in WoL mode, type:
ethtool -s eth0 wol g
To enable WoL, run:
ethtool -s eth0 wol d
The network adapter can support saving its status, but it can also reset (usually to d+). Therefore, you should set the necessary mode every time you start WoL.
Add WoL activation to all network adapters that support this technology:
preup() { if ethtool $1 | grep "Supports Wake-on:" | grep g >/dev/null; then ethtool -s $1 wol g fi }
To obtain the network adapter MAC on the slave, run the following on it:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.225.0 broadcast 10.0.0.255
inet6 fde1:92f6:649a:0:724d:7bff:feb7:406e prefixlen 64 scopeid 0x0<global>
inet6 fe80::724d:7bff:feb7:406e prefixlen 64 scopeid 0x20<link>
ether 00:01:02:03:04:05 txqueuelen 1000 (Ethernet)
RX packets 4129968 bytes 1885750720 (1.7 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2068548 bytes 985677562 (940.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 16 memory 0xf7000000-f7020000
or either, to display the ARP cache on the host:
Address HWtype HWaddress Flags Mask Iface
10.0.0.1 ether 00:01:02:03:04:05 C eth0
10.0.0.2 ether 06:07:08:09:0a:0b C eth0
10.0.0.3 ether 0c:0d:0e:0f:10:11 C eth0
To ensure that all computers in the network are cached, you can use the nmap
tool, which pings the computers in the network and have their MAC addresses cached:
nmap -v -Sp 10.0.0.0/24
To wake a computer, run wol
on the host:
wol MAC
If you are working with an application, please note that not all computers are switched on immediately after being connected to the mains. This is because at first startup, there was no init when the NIC is powered (). Therefore, it is necessary to make one pre-start manually. If you need to avoid this (for example, if the server is locked or is located at a long distance), you should set the Wake After Power Fail+ parameter to ON in the BIOS.