summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2009-06-28 21:50:23 +0200
committerMichael Brown2009-06-28 21:50:23 +0200
commit546cc62394e12aa04eb16da8a47edd7d93869023 (patch)
treee44baa3af9d1977f5d0646c57e6ffca05726c03b
parent[ifmgmt] Move ifmgmt_cmd.h to include/hci (diff)
downloadipxe-546cc62394e12aa04eb16da8a47edd7d93869023.tar.gz
ipxe-546cc62394e12aa04eb16da8a47edd7d93869023.tar.xz
ipxe-546cc62394e12aa04eb16da8a47edd7d93869023.zip
[pxe] Add startpxe and stoppxe commands
These commands can be used to activate or deactivate the PXE API (on a specifiable network interface). This is currently of limited use, since most image formats will call shutdown() before booting the image, meaning that the underlying net device gets shut down during remove_devices() anyway.
-rw-r--r--src/arch/i386/Makefile1
-rw-r--r--src/arch/i386/hci/commands/pxe_cmd.c33
-rw-r--r--src/config/general.h1
-rw-r--r--src/core/config.c3
4 files changed, 38 insertions, 0 deletions
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 <gpxe/netdevice.h>
+#include <gpxe/command.h>
+#include <hci/ifmgmt_cmd.h>
+#include <pxe_call.h>
+
+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