From a984595cfb4910ba6f464c69c316f1613f10f894 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Fri, 17 Jan 2014 16:12:42 +0800 Subject: [PATCH 1/1] discover/network: Use platform definition for DHCP architecture ID Allow a platform to specify a DHCP architecture ID, as this is platform-specific. Signed-off-by: Jeremy Kerr --- discover/network.c | 12 ++++++++++-- discover/platform-powerpc.c | 1 + discover/platform.c | 5 +++++ discover/platform.h | 2 ++ 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/discover/network.c b/discover/network.c index 9da0f7a..c300f3d 100644 --- a/discover/network.c +++ b/discover/network.c @@ -212,8 +212,9 @@ static void udhcpc_process_exit(struct process *process) static void configure_interface_dhcp(struct interface *interface) { + const struct platform *platform; + char pidfile[256], id[10]; struct process *process; - char pidfile[256]; int rc; const char *argv[] = { pb_system_apps.udhcpc, @@ -221,14 +222,21 @@ static void configure_interface_dhcp(struct interface *interface) "-n", "-O", "pxeconffile", "-O", "pxepathprefix", - "-x", "0x5d:000a", "-p", pidfile, "-i", interface->name, + "-x", id, /* [11,12] - dhcp client identifier */ NULL, }; + snprintf(pidfile, sizeof(pidfile), "%s/udhcpc-%s.pid", PIDFILE_BASE, interface->name); + platform = platform_get(); + if (platform && platform->dhcp_arch_id != 0xffff) + snprintf(id, sizeof(id), "0x5d:%04x", platform->dhcp_arch_id); + else + argv[11] = NULL; + process = process_create(interface); process->path = pb_system_apps.udhcpc; diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c index 7761769..b0a35a7 100644 --- a/discover/platform-powerpc.c +++ b/discover/platform-powerpc.c @@ -560,6 +560,7 @@ static bool probe(struct platform *p, void *ctx) static struct platform platform_powerpc = { .name = "powerpc", + .dhcp_arch_id = 0x000e, .probe = probe, .load_config = load_config, .save_config = save_config, diff --git a/discover/platform.c b/discover/platform.c index 66e776e..d52c9f6 100644 --- a/discover/platform.c +++ b/discover/platform.c @@ -102,6 +102,11 @@ int platform_init(void *ctx) return 0; } +const struct platform *platform_get(void) +{ + return platform; +} + int config_set(struct config *newconfig) { int rc; diff --git a/discover/platform.h b/discover/platform.h index 44315fa..a01ac71 100644 --- a/discover/platform.h +++ b/discover/platform.h @@ -8,11 +8,13 @@ struct platform { bool (*probe)(struct platform *, void *); int (*load_config)(struct platform *, struct config *); int (*save_config)(struct platform *, struct config *); + uint16_t dhcp_arch_id; void *platform_data; }; int platform_init(void *ctx); int platform_fini(void); +const struct platform *platform_get(void); /* configuration interface */ const struct config *config_get(void); -- 2.39.2