Hi , i have made a little patch for etherboot 4.4.5 to support sending WOL packets from the bootrom at start time. If anybody can use it ... By, Joachim -- mailto:joachim.wolff@gmx.net Windows 9x kann dank 32 Bit alles ... Wenn ich 32 Bitīs getrunken habe, glaube ich auch, dass ich alles kann ...
--- /tmp/etherboot-4.4.5/src/main.c Sat Feb 19 10:13:13 2000
+++ main.c Thu Apr 13 21:52:57 2000
@@ -101,6 +101,32 @@
#endif /* NO_DHCP_SUPPORT */
char broadcast[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
+
+/*******************************************************
+build wol packet
+*******************************************************/
+void send_wol(wol_addr)
+unsigned char wol_addr[6];
+{
+ unsigned char *ptr;
+ unsigned char buf [140];
+ int i, j;
+
+ /* stolen from ../contrib/wakeonlan/wol.c */
+ /* Build the message to send - 6 x 0xff then 16 x MAC address */
+ ptr = buf;
+ for (i = 0; i < 28; i++) /* space for the packet header */
+ *ptr++ = 0xff; /* will be overwrited later */
+ for (i = 0; i < 6; i++)
+ *ptr++ = 0xff;
+ for (j = 0; j < 16; j++)
+ for (i = 0; i < 6; i++)
+ *ptr++ = wol_addr [i];
+
+ udp_transmit ( IP_BROADCAST, 0, 60000, 130, buf );
+}
+
+
/**************************************************************************
MAIN - Kick off routine
**************************************************************************/
@@ -110,6 +136,12 @@
static int card_retries = 0;
int i;
+ /****************************/
+ unsigned char wol_addr_1[] = { 0x00 , 0xE0 , 0x7D , 0x01 , 0x02 , 0x03 };
+ unsigned char wol_addr_2[] = { 0x00 , 0xE0 , 0x7D , 0x04 , 0x05 , 0x06 };
+ /****************************/
+
+
#ifdef SERIAL_CONSOLE
serial_init();
#endif
@@ -131,6 +163,30 @@
#endif
printf("ROM segment 0x%x length 0x%x\n", rom.rom_segment,
rom.rom_length << 1);
+
+
+
+ /*******************************************
+ first prepare the card
+ *******************************************/
+
+ gateA20();
+ print_config();
+
+ while (!eth_probe()) {
+ printf("No adapter found");
+ if (!setjmp(jmp_bootmenu))
+ rfc951_sleep(++card_retries);
+ }
+
+ /********************************************
+ send wol packets
+ ********************************************/
+ send_wol (wol_addr_1);
+ send_wol (wol_addr_2);
+ /*******************************************/
+
+
#ifdef ASK_BOOT
while (1) {
int c;
@@ -155,19 +211,19 @@
break;
}
#endif
- gateA20();
- print_config();
+ // gateA20();
+ // print_config();
#ifdef EMERGENCYDISKBOOT
if (!eth_probe()) {
printf("No adapter found\n");
exit(0);
}
#else
- while (!eth_probe()) {
- printf("No adapter found");
- if (!setjmp(jmp_bootmenu))
- rfc951_sleep(++card_retries);
- }
+ // while (!eth_probe()) {
+ // printf("No adapter found");
+ // if (!setjmp(jmp_bootmenu))
+ // rfc951_sleep(++card_retries);
+ //}
#endif
kernel = DEFAULT_BOOTFILE;
while (1) {
For requests or suggestions regarding this mailing list archive please write to netboot@gkminix.han.de.