diff --git a/src/arch/i386/Makefile b/src/arch/i386/Makefile index 1ca77347..8f6c97e6 100644 --- a/src/arch/i386/Makefile +++ b/src/arch/i386/Makefile @@ -81,6 +81,7 @@ SRCDIRS += arch/i386/drivers/net SRCDIRS += arch/i386/interface/pcbios SRCDIRS += arch/i386/interface/pxe SRCDIRS += arch/i386/interface/syslinux +SRCDIRS += arch/i386/hci/commands # The various xxx_loader.c files are #included into core/loader.c and # should not be compiled directly. diff --git a/src/arch/i386/hci/commands/pxe_cmd.c b/src/arch/i386/hci/commands/pxe_cmd.c new file mode 100644 index 00000000..b5df2d1b --- /dev/null +++ b/src/arch/i386/hci/commands/pxe_cmd.c @@ -0,0 +1,33 @@ +#include +#include +#include +#include + +FILE_LICENCE ( GPL2_OR_LATER ); + +static int startpxe_payload ( struct net_device *netdev ) { + if ( netdev->state & NETDEV_OPEN ) + pxe_activate ( netdev ); + return 0; +} + +static int startpxe_exec ( int argc, char **argv ) { + return ifcommon_exec ( argc, argv, startpxe_payload, + "Activate PXE on" ); +} + +static int stoppxe_exec ( int argc __unused, char **argv __unused ) { + pxe_deactivate(); + return 0; +} + +struct command pxe_commands[] __command = { + { + .name = "startpxe", + .exec = startpxe_exec, + }, + { + .name = "stoppxe", + .exec = stoppxe_exec, + }, +}; diff --git a/src/config/general.h b/src/config/general.h index dfc87007..170ad33a 100644 --- a/src/config/general.h +++ b/src/config/general.h @@ -105,6 +105,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #define LOGIN_CMD /* Login command */ #undef TIME_CMD /* Time commands */ #undef DIGEST_CMD /* Image crypto digest commands */ +#define PXE_CMD /* PXE commands */ /* * Obscure configuration options diff --git a/src/core/config.c b/src/core/config.c index ecaf781f..4562e3a4 100644 --- a/src/core/config.c +++ b/src/core/config.c @@ -204,6 +204,9 @@ REQUIRE_OBJECT ( time_cmd ); #ifdef DIGEST_CMD REQUIRE_OBJECT ( digest_cmd ); #endif +#ifdef PXE_CMD +REQUIRE_OBJECT ( pxe_cmd ); +#endif /* * Drag in miscellaneous objects