1*d8970daeSLothar Felten /* SPDX-License-Identifier: GPL-2.0+ */ 2*d8970daeSLothar Felten /* 3*d8970daeSLothar Felten * wol - Wake-on-LAN 4*d8970daeSLothar Felten * 5*d8970daeSLothar Felten * Supports both Wake-on-LAN packet types: 6*d8970daeSLothar Felten * - EtherType 0x0842 packets 7*d8970daeSLothar Felten * - UDP packets on ports 0, 7 and 9. 8*d8970daeSLothar Felten * 9*d8970daeSLothar Felten * Copyright 2018 Lothar Felten, lothar.felten@gmail.com 10*d8970daeSLothar Felten */ 11*d8970daeSLothar Felten 12*d8970daeSLothar Felten #if defined(CONFIG_CMD_WOL) 13*d8970daeSLothar Felten 14*d8970daeSLothar Felten #ifndef __WOL_H__ 15*d8970daeSLothar Felten #define __WOL_H__ 16*d8970daeSLothar Felten 17*d8970daeSLothar Felten #include <net.h> 18*d8970daeSLothar Felten 19*d8970daeSLothar Felten /**********************************************************************/ 20*d8970daeSLothar Felten 21*d8970daeSLothar Felten #define WOL_SYNC_BYTE 0xFF 22*d8970daeSLothar Felten #define WOL_SYNC_COUNT 6 23*d8970daeSLothar Felten #define WOL_MAC_REPETITIONS 16 24*d8970daeSLothar Felten #define WOL_DEFAULT_TIMEOUT 5000 25*d8970daeSLothar Felten #define WOL_PASSWORD_4B 4 26*d8970daeSLothar Felten #define WOL_PASSWORD_6B 6 27*d8970daeSLothar Felten 28*d8970daeSLothar Felten /* 29*d8970daeSLothar Felten * Wake-on-LAN header 30*d8970daeSLothar Felten */ 31*d8970daeSLothar Felten struct wol_hdr { 32*d8970daeSLothar Felten u8 wol_sync[WOL_SYNC_COUNT]; /* sync bytes */ 33*d8970daeSLothar Felten u8 wol_dest[WOL_MAC_REPETITIONS * ARP_HLEN]; /* 16x MAC */ 34*d8970daeSLothar Felten u8 wol_passwd[0]; /* optional */ 35*d8970daeSLothar Felten }; 36*d8970daeSLothar Felten 37*d8970daeSLothar Felten /* 38*d8970daeSLothar Felten * Initialize wol (beginning of netloop) 39*d8970daeSLothar Felten */ 40*d8970daeSLothar Felten void wol_start(void); 41*d8970daeSLothar Felten 42*d8970daeSLothar Felten /* 43*d8970daeSLothar Felten * Check incoming Wake-on-LAN packet for: 44*d8970daeSLothar Felten * - sync bytes 45*d8970daeSLothar Felten * - sixteen copies of the target MAC address 46*d8970daeSLothar Felten * 47*d8970daeSLothar Felten * Optionally store the four or six byte password in the environment 48*d8970daeSLothar Felten * variable "wolpassword" 49*d8970daeSLothar Felten * 50*d8970daeSLothar Felten * @param ip IP header in the packet 51*d8970daeSLothar Felten * @param len Packet length 52*d8970daeSLothar Felten */ 53*d8970daeSLothar Felten void wol_receive(struct ip_udp_hdr *ip, unsigned int len); 54*d8970daeSLothar Felten 55*d8970daeSLothar Felten /* 56*d8970daeSLothar Felten * Set the timeout for the reception of a Wake-on-LAN packet 57*d8970daeSLothar Felten * 58*d8970daeSLothar Felten * @param timeout in milliseconds 59*d8970daeSLothar Felten */ 60*d8970daeSLothar Felten void wol_set_timeout(ulong timeout); 61*d8970daeSLothar Felten 62*d8970daeSLothar Felten /**********************************************************************/ 63*d8970daeSLothar Felten 64*d8970daeSLothar Felten #endif /* __WOL_H__ */ 65*d8970daeSLothar Felten #endif 66