03c80c12b8
Add yet another ugly hack to iscsiboot.c, this time to allow the user to inhibit the shutdown/removal of the iSCSI INT13 device (and the network devices, since they are required for the iSCSI device to function). On the plus side, the fact that shutdown() now takes flags to differentiate between shutdown-for-exit and shutdown-for-boot means that another ugly hack (to allow returning via the PXE stack on BIOSes that have broken INT 18 calls) will be easier. I feel dirty.
69 lines
1.7 KiB
C
69 lines
1.7 KiB
C
/**************************************************************************
|
|
gPXE - Network Bootstrap Program
|
|
|
|
Literature dealing with the network protocols:
|
|
ARP - RFC826
|
|
RARP - RFC903
|
|
UDP - RFC768
|
|
BOOTP - RFC951, RFC2132 (vendor extensions)
|
|
DHCP - RFC2131, RFC2132 (options)
|
|
TFTP - RFC1350, RFC2347 (options), RFC2348 (blocksize), RFC2349 (tsize)
|
|
RPC - RFC1831, RFC1832 (XDR), RFC1833 (rpcbind/portmapper)
|
|
NFS - RFC1094, RFC1813 (v3, useful for clarifications, not implemented)
|
|
IGMP - RFC1112
|
|
|
|
**************************************************************************/
|
|
|
|
#include <stdio.h>
|
|
#include <gpxe/init.h>
|
|
#include <gpxe/features.h>
|
|
#include <gpxe/shell.h>
|
|
#include <gpxe/shell_banner.h>
|
|
#include <usr/autoboot.h>
|
|
|
|
#define NORMAL "\033[0m"
|
|
#define BOLD "\033[1m"
|
|
#define CYAN "\033[36m"
|
|
|
|
static struct feature features[0] __table_start ( struct feature, features );
|
|
static struct feature features_end[0] __table_end ( struct feature, features );
|
|
|
|
/**
|
|
* Main entry point
|
|
*
|
|
* @ret rc Return status code
|
|
*/
|
|
__cdecl int main ( void ) {
|
|
struct feature *feature;
|
|
|
|
initialise();
|
|
startup();
|
|
|
|
/* Print welcome banner */
|
|
printf ( NORMAL "\n\n\n" BOLD "gPXE " VERSION
|
|
NORMAL " -- Open Source Boot Firmware -- "
|
|
CYAN "http://etherboot.org" NORMAL "\n"
|
|
"Features:" );
|
|
for ( feature = features ; feature < features_end ; feature++ )
|
|
printf ( " %s", feature->name );
|
|
printf ( "\n" );
|
|
|
|
/* Prompt for shell */
|
|
if ( shell_banner() ) {
|
|
/* User wants shell; just give them a shell */
|
|
shell();
|
|
} else {
|
|
/* User doesn't want shell; try booting. If booting
|
|
* fails, offer a second chance to enter the shell for
|
|
* diagnostics.
|
|
*/
|
|
autoboot();
|
|
if ( shell_banner() )
|
|
shell();
|
|
}
|
|
|
|
shutdown ( SHUTDOWN_EXIT | shutdown_exit_flags );
|
|
|
|
return 0;
|
|
}
|