david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[dhcp] Send user class in DHCP requests

This commit is contained in:
Michael Brown 2009-02-01 20:06:09 +00:00
parent 6711ce18a7
commit 4502c04360
3 changed files with 29 additions and 3 deletions

View File

@ -203,6 +203,9 @@ struct dhcp_client_id {
*/
#define DHCP_BOOTFILE_NAME 67
/** User class identifier */
#define DHCP_USER_CLASS_ID 77
/** Client system architecture */
#define DHCP_CLIENT_ARCHITECTURE 93

View File

@ -225,10 +225,10 @@ extern struct setting root_path_setting __setting;
extern struct setting username_setting __setting;
extern struct setting password_setting __setting;
extern struct setting priority_setting __setting;
extern struct setting bios_drive_setting __setting;
extern struct setting uuid_setting __setting;
extern struct setting next_server_setting __setting;
extern struct setting mac_setting __setting;
extern struct setting user_class_setting __setting;
/**
* Initialise a settings block

View File

@ -101,6 +101,14 @@ struct setting dhcp_server_setting __setting = {
.type = &setting_type_ipv4,
};
/** DHCP user class setting */
struct setting user_class_setting __setting = {
.name = "user-class",
.description = "User class identifier",
.tag = DHCP_USER_CLASS_ID,
.type = &setting_type_string,
};
/**
* Name a DHCP packet type
*
@ -834,6 +842,7 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
struct dhcp_client_uuid client_uuid;
size_t dhcp_features_len;
size_t ll_addr_len;
ssize_t len;
int rc;
/* Create DHCP packet */
@ -885,8 +894,8 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
/* Add client UUID, if we have one. Required for PXE. */
client_uuid.type = DHCP_CLIENT_UUID_TYPE;
if ( ( rc = fetch_uuid_setting ( NULL, &uuid_setting,
&client_uuid.uuid ) ) >= 0 ) {
if ( ( len = fetch_uuid_setting ( NULL, &uuid_setting,
&client_uuid.uuid ) ) >= 0 ) {
if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_CLIENT_UUID,
&client_uuid,
sizeof ( client_uuid ) ) ) != 0 ) {
@ -896,6 +905,20 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
}
}
/* Add user class, if we have one. */
if ( ( len = fetch_setting_len ( NULL, &user_class_setting ) ) >= 0 ) {
char user_class[len];
fetch_setting ( NULL, &user_class_setting, user_class,
sizeof ( user_class ) );
if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_USER_CLASS_ID,
&user_class,
sizeof ( user_class ) ) ) != 0 ) {
DBG ( "DHCP could not set user class: %s\n",
strerror ( rc ) );
return rc;
}
}
return 0;
}