summaryrefslogtreecommitdiffstats
path: root/discover/pxe-parser.c
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>2014-12-03 15:08:23 +1100
committerJeremy Kerr <jk@ozlabs.org>2014-12-03 12:12:47 +0800
commit9c33c54f7b431074a7d0daddce34140044aaadf6 (patch)
treef726dca93146b8218f4c5711a49b4eb1fe49c12a /discover/pxe-parser.c
parentba1633025d93d7b41bda9bd32fa1d2337c7c4365 (diff)
downloadtalos-petitboot-9c33c54f7b431074a7d0daddce34140044aaadf6.tar.gz
talos-petitboot-9c33c54f7b431074a7d0daddce34140044aaadf6.zip
discover/pxe: Format IPAPPEND mac addresses correctly
The SYSAPPEND/IPAPPEND option 2 in PXE configs requires the MAC address of the booting interface to be appended to the boot options. Previously we formatted this as "BOOTIF=01:02:03:04:05:06", but syslinux/pxelinux implementation use this format: "BOOTIF=01-01-02-03-04-05-06", where the leading '01' represents the hardware type. The relevant part of the pxelinux doc is at: http://www.syslinux.org/wiki/index.php/SYSLINUX#SYSAPPEND_bitmask Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com> Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Diffstat (limited to 'discover/pxe-parser.c')
-rw-r--r--discover/pxe-parser.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/discover/pxe-parser.c b/discover/pxe-parser.c
index 0456f5b..95547c3 100644
--- a/discover/pxe-parser.c
+++ b/discover/pxe-parser.c
@@ -16,6 +16,7 @@
#include "paths.h"
#include "event.h"
#include "user-event.h"
+#include "network.h"
static const char *pxelinux_prefix = "pxelinux.cfg/";
@@ -79,6 +80,16 @@ static void pxe_append_string(struct discover_boot_option *opt,
opt->option->boot_args = talloc_strdup(opt->option, str);
}
+static char *pxe_sysappend_mac(void *ctx, uint8_t *mac)
+{
+ if (!mac)
+ return NULL;
+
+ return talloc_asprintf(ctx,
+ "BOOTIF=01-%02x-%02x-%02x-%02x-%02x-%02x",
+ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+}
+
static void pxe_process_sysappend(struct discover_context *ctx,
struct discover_boot_option *opt,
unsigned long val)
@@ -90,9 +101,10 @@ static void pxe_process_sysappend(struct discover_context *ctx,
return;
if (val & 0x2) {
- const char *mac = event_get_param(event, "mac");
- if (mac) {
- str = talloc_asprintf(ctx, "BOOTIF=%s", mac);
+ uint8_t *mac = find_mac_by_name(ctx, ctx->network,
+ event->device);
+ str = pxe_sysappend_mac(ctx, mac);
+ if (str) {
pxe_append_string(opt, str);
talloc_free(str);
}
OpenPOWER on IntegriCloud