9
0
Fork 0

net: dhcp: allow to set transmitted user class

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 vendor id 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";
 |         }
 |         if substring (option user-class,0,4) = "toto" {
 |                 filename "/tftpboot/atmel/at91sam9x5/sam9x5ek/zImage-toto";
 |         }
 |         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>
This commit is contained in:
Jean-Christophe PLAGNIOL-VILLARD 2012-03-30 11:20:31 +08:00
parent c106abc619
commit f76899fa98
1 changed files with 14 additions and 1 deletions

View File

@ -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_USER_CLASS 77
#define DHCP_CLIENT_UUID 97
struct dhcp_param dhcp_params[] = {
@ -246,6 +247,10 @@ struct dhcp_param dhcp_params[] = {
.option = DHCP_CLIENT_ID,
.handle = dhcp_set_string_options,
.barebox_var_name = "dhcp_client_id",
}, {
.option = DHCP_USER_CLASS,
.handle = dhcp_set_string_options,
.barebox_var_name = "dhcp_user_class",
}, {
.option = DHCP_CLIENT_UUID,
.handle = dhcp_set_string_options,
@ -605,7 +610,7 @@ static int do_dhcp(int argc, char *argv[])
dhcp_reset_env();
while((opt = getopt(argc, argv, "v:c:u:")) > 0) {
while((opt = getopt(argc, argv, "v:c:u:U:")) > 0) {
switch(opt) {
case 'v':
dhcp_set_param_data(DHCP_VENDOR_ID, optarg);
@ -616,6 +621,9 @@ static int do_dhcp(int argc, char *argv[])
case 'u':
dhcp_set_param_data(DHCP_CLIENT_UUID, optarg);
break;
case 'U':
dhcp_set_param_data(DHCP_USER_CLASS, optarg);
break;
}
}
@ -671,6 +679,10 @@ BAREBOX_CMD_HELP_OPT ("-c <client_id>",
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_OPT ("-U <user_class>",
"DHCP User class (code 77) 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
@ -688,4 +700,5 @@ 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_user_class, "user class to send to the DHCP server");
BAREBOX_MAGICVAR(dhcp_tftp_server_name, "TFTP server Name returned from DHCP request");