Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[dhcp] Send user class in DHCP requests
  • Loading branch information
Michael Brown committed Feb 1, 2009
1 parent 6711ce1 commit 4502c04
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 3 deletions.
3 changes: 3 additions & 0 deletions src/include/gpxe/dhcp.h
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion src/include/gpxe/settings.h
Expand Up @@ -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
Expand Down
27 changes: 25 additions & 2 deletions src/net/udp/dhcp.c
Expand Up @@ -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
*
Expand Down Expand Up @@ -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 */
Expand Down Expand Up @@ -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 ) {
Expand All @@ -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;
}

Expand Down

0 comments on commit 4502c04

Please sign in to comment.