summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2012-03-30 11:06:41 +0800
committerJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2012-04-03 11:39:29 +0800
commitc106abc619e1c6213c9646615f211499a46e45cb (patch)
treec29b1b66324224166da0000b277a0f134f28e8a1 /net
parentb0660bd84f9cace354383eb7b8fce7ba19fd4992 (diff)
downloadbarebox-c106abc619e1c6213c9646615f211499a46e45cb.tar.gz
barebox-c106abc619e1c6213c9646615f211499a46e45cb.tar.xz
net: dhcp: allow to set transmitted client uuid
For net boot setups it is useful to submit boot params like server or bootfile over dhcp. To distinguish diffrent type of OS running on the same hardware, a custom client uuid can be sent in dhcp discover/request messages. E.g. the ISC dhcp server can be configured with | option client-uuid code 97 = { unsigned integer 8, string }; | class "at91sam9x5ek" { | match if substring (option vendor-class-identifier,0,20) = "barebox-at91sam9x5ek"; | | filename "/tftpboot/atmel/at91sam9x5/sam9x5ek/zImage"; | if substring (option dhcp-client-identifier,0,7) = "ser2net" { | filename "/tftpboot/atmel/at91sam9x5/sam9x5ek/zImage-ser2net"; | } | if substring (option client-uuid,0,7) = "test" { | filename "/tftpboot/atmel/at91sam9x5/sam9x5ek/zImage-ser2net"; | } | option tftp-server-name "192.168.200.98"; | option option-150 192.168.200.98; | next-server 192.168.200.98; | option root-path "192.168.200.98:/opt/work/buildroot/build/sam9x5/target"; | } Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Diffstat (limited to 'net')
-rw-r--r--net/dhcp.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/net/dhcp.c b/net/dhcp.c
index cf3e70a9f4..c7c62716b1 100644
--- a/net/dhcp.c
+++ b/net/dhcp.c
@@ -235,6 +235,7 @@ static int dhcp_set_string_options(struct dhcp_param *param, u8 *e)
#define DHCP_VENDOR_ID 60
#define DHCP_CLIENT_ID 61
+#define DHCP_CLIENT_UUID 97
struct dhcp_param dhcp_params[] = {
{
@@ -245,6 +246,10 @@ struct dhcp_param dhcp_params[] = {
.option = DHCP_CLIENT_ID,
.handle = dhcp_set_string_options,
.barebox_var_name = "dhcp_client_id",
+ }, {
+ .option = DHCP_CLIENT_UUID,
+ .handle = dhcp_set_string_options,
+ .barebox_var_name = "dhcp_client_uuid",
}
};
@@ -600,7 +605,7 @@ static int do_dhcp(int argc, char *argv[])
dhcp_reset_env();
- while((opt = getopt(argc, argv, "v:c:")) > 0) {
+ while((opt = getopt(argc, argv, "v:c:u:")) > 0) {
switch(opt) {
case 'v':
dhcp_set_param_data(DHCP_VENDOR_ID, optarg);
@@ -608,6 +613,9 @@ static int do_dhcp(int argc, char *argv[])
case 'c':
dhcp_set_param_data(DHCP_CLIENT_ID, optarg);
break;
+ case 'u':
+ dhcp_set_param_data(DHCP_CLIENT_UUID, optarg);
+ break;
}
}
@@ -659,6 +667,10 @@ BAREBOX_CMD_HELP_OPT ("-v <vendor_id>",
BAREBOX_CMD_HELP_OPT ("-c <client_id>",
"DHCP Client ID (code 61) submitted in DHCP requests. It can\n"
"be used in the DHCP server's configuration to select options\n"
+"(e.g. bootfile or server) which are valid for barebox clients only.\n")
+BAREBOX_CMD_HELP_OPT ("-u <client_uuid>",
+"DHCP Client UUID (code 97) submitted in DHCP requests. It can\n"
+"be used in the DHCP server's configuration to select options\n"
"(e.g. bootfile or server) which are valid for barebox clients only.\n");
BAREBOX_CMD_HELP_END
@@ -674,5 +686,6 @@ BAREBOX_MAGICVAR(hostname, "hostname returned from DHCP request");
BAREBOX_MAGICVAR(domainname, "domainname returned from DHCP request");
BAREBOX_MAGICVAR(rootpath, "rootpath returned from DHCP request");
BAREBOX_MAGICVAR(dhcp_vendor_id, "vendor id to send to the DHCP server");
+BAREBOX_MAGICVAR(dhcp_client_uuid, "cliend uuid to send to the DHCP server");
BAREBOX_MAGICVAR(dhcp_client_id, "cliend id to send to the DHCP server");
BAREBOX_MAGICVAR(dhcp_tftp_server_name, "TFTP server Name returned from DHCP request");