mirror of https://github.com/ipxe/ipxe.git
[dhcp] Send user class in DHCP requests
parent
6711ce18a7
commit
4502c04360
|
@ -203,6 +203,9 @@ struct dhcp_client_id {
|
||||||
*/
|
*/
|
||||||
#define DHCP_BOOTFILE_NAME 67
|
#define DHCP_BOOTFILE_NAME 67
|
||||||
|
|
||||||
|
/** User class identifier */
|
||||||
|
#define DHCP_USER_CLASS_ID 77
|
||||||
|
|
||||||
/** Client system architecture */
|
/** Client system architecture */
|
||||||
#define DHCP_CLIENT_ARCHITECTURE 93
|
#define DHCP_CLIENT_ARCHITECTURE 93
|
||||||
|
|
||||||
|
|
|
@ -225,10 +225,10 @@ extern struct setting root_path_setting __setting;
|
||||||
extern struct setting username_setting __setting;
|
extern struct setting username_setting __setting;
|
||||||
extern struct setting password_setting __setting;
|
extern struct setting password_setting __setting;
|
||||||
extern struct setting priority_setting __setting;
|
extern struct setting priority_setting __setting;
|
||||||
extern struct setting bios_drive_setting __setting;
|
|
||||||
extern struct setting uuid_setting __setting;
|
extern struct setting uuid_setting __setting;
|
||||||
extern struct setting next_server_setting __setting;
|
extern struct setting next_server_setting __setting;
|
||||||
extern struct setting mac_setting __setting;
|
extern struct setting mac_setting __setting;
|
||||||
|
extern struct setting user_class_setting __setting;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise a settings block
|
* Initialise a settings block
|
||||||
|
|
|
@ -101,6 +101,14 @@ struct setting dhcp_server_setting __setting = {
|
||||||
.type = &setting_type_ipv4,
|
.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
|
* Name a DHCP packet type
|
||||||
*
|
*
|
||||||
|
@ -834,6 +842,7 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
|
||||||
struct dhcp_client_uuid client_uuid;
|
struct dhcp_client_uuid client_uuid;
|
||||||
size_t dhcp_features_len;
|
size_t dhcp_features_len;
|
||||||
size_t ll_addr_len;
|
size_t ll_addr_len;
|
||||||
|
ssize_t len;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* Create DHCP packet */
|
/* Create DHCP packet */
|
||||||
|
@ -885,7 +894,7 @@ int dhcp_create_request ( struct dhcp_packet *dhcppkt,
|
||||||
|
|
||||||
/* Add client UUID, if we have one. Required for PXE. */
|
/* Add client UUID, if we have one. Required for PXE. */
|
||||||
client_uuid.type = DHCP_CLIENT_UUID_TYPE;
|
client_uuid.type = DHCP_CLIENT_UUID_TYPE;
|
||||||
if ( ( rc = fetch_uuid_setting ( NULL, &uuid_setting,
|
if ( ( len = fetch_uuid_setting ( NULL, &uuid_setting,
|
||||||
&client_uuid.uuid ) ) >= 0 ) {
|
&client_uuid.uuid ) ) >= 0 ) {
|
||||||
if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_CLIENT_UUID,
|
if ( ( rc = dhcppkt_store ( dhcppkt, DHCP_CLIENT_UUID,
|
||||||
&client_uuid,
|
&client_uuid,
|
||||||
|
@ -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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue