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<E9|i[+z20G?CO=E=-IWv;bL"=Y`+`q,ML6
 ,!Me?==j&In1
Mime-Version: 1.0
Content-Type: multipart/mixed ;
	boundary="==_Exmh_-19971541890"
From: Tilmann Bubeck <bubeck@think-at-work.de>
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: <mailto:etherboot-developers-request@lists.sourceforge.net?subject=help>
List-Post: <mailto:etherboot-developers@lists.sourceforge.net>
List-Subscribe: <http://lists.sourceforge.net/lists/listinfo/etherboot-developers>,
	<mailto:etherboot-developers-request@lists.sourceforge.net?subject=subscribe>
List-Id: Discussion list for Etherboot developers <etherboot-developers.lists.sourceforge.net>
List-Unsubscribe: <http://lists.sourceforge.net/lists/listinfo/etherboot-developers>,
	<mailto:etherboot-developers-request@lists.sourceforge.net?subject=unsubscribe>
List-Archive: <http://lists.sourceforge.net/archives//etherboot-developers/>
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