diff options
Diffstat (limited to 'contrib/syslinux/latest/gpxe/src/core/main.c')
-rw-r--r-- | contrib/syslinux/latest/gpxe/src/core/main.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/contrib/syslinux/latest/gpxe/src/core/main.c b/contrib/syslinux/latest/gpxe/src/core/main.c new file mode 100644 index 0000000..d07d24c --- /dev/null +++ b/contrib/syslinux/latest/gpxe/src/core/main.c @@ -0,0 +1,91 @@ +/************************************************************************** +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) + +**************************************************************************/ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include <stdio.h> +#include <gpxe/init.h> +#include <gpxe/features.h> +#include <gpxe/shell.h> +#include <gpxe/shell_banner.h> +#include <gpxe/image.h> +#include <usr/autoboot.h> +#include <config/general.h> + +#define NORMAL "\033[0m" +#define BOLD "\033[1m" +#define CYAN "\033[36m" + +/** + * Main entry point + * + * @ret rc Return status code + */ +__asmcall int main ( void ) { + struct feature *feature; + struct image *image; + + /* Some devices take an unreasonably long time to initialise */ + printf ( PRODUCT_SHORT_NAME " initialising devices...\n" ); + + initialise(); + startup(); + + /* + * Print welcome banner + * + * + * If you wish to brand this build of gPXE, please do so by + * defining the string PRODUCT_NAME in config/general.h. + * + * While nothing in the GPL prevents you from removing all + * references to gPXE or http://etherboot.org, we prefer you + * not to do so. + * + */ + printf ( NORMAL "\n\n" PRODUCT_NAME "\n" BOLD "gPXE " VERSION + NORMAL " -- Open Source Boot Firmware -- " + CYAN "http://etherboot.org" NORMAL "\n" + "Features:" ); + for_each_table_entry ( feature, FEATURES ) + 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; load and execute the first + * image, or autoboot() if we have no images. If + * booting fails for any reason, offer a second chance + * to enter the shell for diagnostics. + */ + if ( have_images() ) { + for_each_image ( image ) { + image_exec ( image ); + break; + } + } else { + autoboot(); + } + + if ( shell_banner() ) + shell(); + } + + shutdown ( SHUTDOWN_EXIT | shutdown_exit_flags ); + + return 0; +} |