I'm not sure if this patch fits with the philosophy of grub design,
so I'm separating it from the rest of my PXE patch.

My PXE patch creates a "pxegrub" binary that is basically a grub
stage2 that expects to be loaded at 7C00.  There is one other minor
difference, though: Anything loaded by PXE is loaded over the network,
so the concept of "boot drive" really doesn't apply in the normal way.
Therefore, pxegrub's boot_drive is initialized to NETWORK_DRIVE.

However, just setting boot_drive isn't enough.  You also need a
working network address, or you can't even load a config file.

Therefore, this patch makes pxegrub (or stage2) notice when boot_drive
is NETWORK_DRIVE; and when it is, automatically call bootp() and print
the results.  This allows a PXE-booted grub to load a config file via
tftp.

This patch is safe, I think: No current usage of grub sets boot_drive
to NETWORK_DRIVE, so this patch cannot break any existing behavior.
The main question, IMO, is whether it's wise always to use bootp/dhcp
rather than some other network config method.  I think it's OK, but
then, I wrote it.  :-)


2000-05-19  Chip Salzenberg  <[EMAIL PROTECTED]>

        * stage2/stage2.c (cmain): If network drive is boot drive,
        perhaps due to PXE boot, autoconfig with bootp/dhcp.
        * stage2/cmdline.c (enter_cmdline): If network drive is boot
        drive, print network config at startup.


Index: stage2/stage2.c
diff -u -2 -r1.14 stage2.c
--- stage2/stage2.c     2000/04/22 23:29:23     1.14
+++ stage2/stage2.c     2000/05/20 05:05:46
@@ -21,4 +21,8 @@
 #include "shared.h"
 
+#ifdef SUPPORT_NETBOOT
+# include <etherboot.h>
+#endif
+
 grub_jmp_buf restart_env;
 
@@ -604,4 +608,9 @@
   char *config_entries, *menu_entries;
   char *kill = (char *) KILL_BUF;
+
+#ifdef SUPPORT_NETBOOT
+  if (boot_drive == NETWORK_DRIVE)
+    bootp ();
+#endif
 
   /* Initialize the environment for restarting Stage 2.  */
Index: stage2/cmdline.c
diff -u -2 -r1.15 cmdline.c
--- stage2/cmdline.c    2000/02/03 18:04:20     1.15
+++ stage2/cmdline.c    2000/05/20 05:05:46
@@ -114,7 +114,15 @@
 enter_cmdline (char *heap, int forever)
 {
-  /* Initialize the data and print a message.  */
   init_cmdline ();
+
+  /* Print a welcome message.  */
   init_page ();
+#ifdef SUPPORT_NETBOOT
+  if (boot_drive == NETWORK_DRIVE)
+    {
+      print_network_configuration ();
+      printf ("\n");
+    }
+#endif
   print_cmdline_message (forever);
 


-- 
Chip Salzenberg              - a.k.a. -              <[EMAIL PROTECTED]>
"I wanted to play hopscotch with the impenetrable mystery of existence,
    but he stepped in a wormhole and had to go in early."  // MST3K

Reply via email to