#include <types/types.h>
#include <talloc/talloc.h>
#include <waiter/waiter.h>
-#include <pb-config/pb-config.h>
#include <process/process.h>
#include <system/system.h>
#include "file.h"
#include "network.h"
#include "sysinfo.h"
+#include "platform.h"
#include "device-handler.h"
#define HWADDR_SIZE 6
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,
"-R",
"-n",
"-O", "pxeconffile",
+ "-O", "pxepathprefix",
"-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;
if (network->waiter)
waiter_remove(network->waiter);
- list_for_each_entry(&network->interfaces, interface, list)
+ list_for_each_entry(&network->interfaces, interface, list) {
+ if (interface->state == IFSTATE_IGNORED)
+ continue;
+ if (!strcmp(interface->name, "lo"))
+ continue;
interface_down(interface);
+ }
close(network->netlink_sd);
talloc_free(network);