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