To: etherboot-developers@lists.sourceforge.net X-face: #Qvg5o3u!)WoVDDi4-bFy`fl@""4^pm68%_,`puon{0Q6lQ-O,)3D.J.":A&^,#4O2vc8`? 3^1lhBh=EQH,"Qq*e1vY":she&t^8:!&Fb32Ed:nM2Y Message-Id: <20010219195622.C97A84ABD8@chaos.think-at-work.de> Subject: [Etherboot-developers] Wake-on-LAN patch Sender: etherboot-developers-admin@lists.sourceforge.net Errors-To: etherboot-developers-admin@lists.sourceforge.net X-BeenThere: etherboot-developers@lists.sourceforge.net X-Mailman-Version: 2.0 Precedence: bulk List-Help: List-Post: List-Subscribe: , List-Id: Discussion list for Etherboot developers List-Unsubscribe: , List-Archive: Date: Mon, 19 Feb 2001 20:56:22 +0100 Status: RO Content-Length: 5351 Lines: 152 This is a multipart MIME message. --==_Exmh_-19971541890 Content-Type: text/plain; charset=us-ascii Hello! please find enclosed a patch to optionally enable etherboot to start the server it is booting from by sending a magic wake-on-lan packet to the sleeping server first. This is very important for an etherboot-server, which is not running all the time and is not easily accessible from the etherboot machine (e.g. because it is installed in the basement of the house and one must climb several stairs to switch the server on...) Are the authors of etherboot willing to accept this patch for inclusion? Please note, that the wake-on-lan code is only compiled in, when setting appropriate flags in src/Config. If you don't want to include the patch, should I change anything of the implementation or do you dislike the idea at all? Thanks! Till +-------+--------------------------------------------------------------+ | | dr. tilmann bubeck think@work it consulting | | | professional services | | think | cell.: +49 172 8842972 widmaierstrasse 58 | | @work | fax : +49 711 7227734 70567 stuttgart | | | email: bubeck@think-at-work.de http://www.think-at-work.de | +-------+ -------------------------------------------------------------+ --==_Exmh_-19971541890 Content-Type: application/x-patch ; name="etherboot-4.7.17-wol.patch" Content-Description: etherboot-4.7.17-wol.patch Content-Disposition: attachment; filename="etherboot-4.7.17-wol.patch" diff -r -u etherboot-4.7.17/src/Config etherboot-4.7.17-wol/src/Config --- etherboot-4.7.17/src/Config Sat Jan 6 16:25:23 2001 +++ etherboot-4.7.17-wol/src/Config Mon Feb 19 20:28:00 2001 @@ -113,6 +113,16 @@ # -DINTERNAL_BOOTP_DATA # - define if the area 0x93C00-0x93FFF is not available # for use for bootpd_data by the loader for some reason +# -DWAKEUP_SERVER +# - define this for sending a Wake-On-LAN (WOL) +# "Magic Packet" to a sleeping server, before trying +# a etherboot. Useful if your server is soft-off all +# the time and must be switched on when booting a +# client. Define SERVER_MAC with the MAC address of the +# server to wakeup. CAUTION! This MAC address is +# stored in the rom image. The rom is therefore not +# generic anymore but tailored for a specific +# server! # These default settings compile Etherboot with a small number of options. # You may wish to enable more of the features if the size of your ROM allows. @@ -142,6 +152,10 @@ # These flags affect the loader that is prepended to the Etherboot image LCONFIG+= -DMOVEROM + +# Include code for sending a Wake-On-LAN (WOL) "Magic Packet" to a sleeping +# server, before trying a etherboot. +CFLAGS32+= -DWAKEUP_SERVER -DSERVER_MAC=0x00,0x01,0x02,0xDA,0xDF,0x77 # you should normally not need to change these RM= rm -f diff -r -u etherboot-4.7.17/src/main.c etherboot-4.7.17-wol/src/main.c --- etherboot-4.7.17/src/main.c Fri Jan 5 12:45:29 2001 +++ etherboot-4.7.17-wol/src/main.c Thu Feb 8 20:46:59 2001 @@ -137,6 +137,7 @@ * declarations, but in this case I like to see main() as the first * routine. */ +static void wakeup_server(void) ; static int bootp(void); static int rarp(void); static void load(void); @@ -217,6 +218,11 @@ rfc951_sleep(++card_retries); } #endif + +#ifdef WAKEUP_SERVER + wakeup_server(); +#endif + while (1) { /* -1: timeout or ESC -2: error return from loader @@ -650,6 +656,46 @@ return (0); } #endif /* DOWNLOAD_PROTO_TFTP */ + +#ifdef WAKEUP_SERVER +#ifndef SERVER_MAC +#error "Please define SERVER_MAC to the MAC address of the sleeping server" +#endif + +/************************************************************************** +WOL - Wake up a sleeping server by transmitting a Wake-On-LAN (WOL) "Magic + Packet", used for restarting machines that have been soft-powered-down + (ACPI D3-warm state). It currently generates the standard AMD Magic + Packet format. +**************************************************************************/ +static void wakeup_server(void) +{ + unsigned char data[100]; + int i, len, retry; + char server_adr[] = { SERVER_MAC }; + unsigned long time; + + /* build "Magic Packet" */ + len = 0; + data[len++] = 0xff; + data[len++] = 0xff; + data[len++] = 0xff; + data[len++] = 0xff; + data[len++] = 0xff; + data[len++] = 0xff; + for ( i = 0; i < 16; i++ ) { + memcpy(&data[len], server_adr, 6); + len += 6; + } + + printf("Sending Wake-On-LAN (WOL) \"Magic Packet\" to server %b:%b:%b:%b:%b:%b...", + server_adr[0], server_adr[1], server_adr[2], + server_adr[3], server_adr[4], server_adr[5]); + + eth_transmit(broadcast, 0x0842, len, data); + printf("done\n"); +} +#endif #ifdef RARP_NOT_BOOTP /************************************************************************** --==_Exmh_-19971541890-- _______________________________________________ Etherboot-developers mailing list Etherboot-developers@lists.sourceforge.net http://lists.sourceforge.net/lists/listinfo/etherboot-developers