From c106abc619e1c6213c9646615f211499a46e45cb Mon Sep 17 00:00:00 2001 From: Jean-Christophe PLAGNIOL-VILLARD Date: Fri, 30 Mar 2012 11:06:41 +0800 Subject: 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 --- net/dhcp.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'net') 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 ", BAREBOX_CMD_HELP_OPT ("-c ", "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 ", +"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"); -- cgit v1.2.3