mirror of https://github.com/ipxe/ipxe.git
[dhcp] Remove redundant length fields in struct dhcp_packet
The max_len field is never used, and the len field is used only by dhcp_tx(). Remove these two fields, and perform the necessary trivial calculation in dhcp_tx() instead. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/1/head
parent
dc462e8b3b
commit
6cee8904d1
|
@ -22,10 +22,6 @@ struct dhcp_packet {
|
||||||
struct refcnt refcnt;
|
struct refcnt refcnt;
|
||||||
/** The DHCP packet contents */
|
/** The DHCP packet contents */
|
||||||
struct dhcphdr *dhcphdr;
|
struct dhcphdr *dhcphdr;
|
||||||
/** Maximum length of the DHCP packet buffer */
|
|
||||||
size_t max_len;
|
|
||||||
/** Used length of the DHCP packet buffer */
|
|
||||||
size_t len;
|
|
||||||
/** DHCP options */
|
/** DHCP options */
|
||||||
struct dhcp_options options;
|
struct dhcp_options options;
|
||||||
/** Settings interface */
|
/** Settings interface */
|
||||||
|
@ -54,6 +50,16 @@ dhcppkt_put ( struct dhcp_packet *dhcppkt ) {
|
||||||
ref_put ( &dhcppkt->refcnt );
|
ref_put ( &dhcppkt->refcnt );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get used length of DHCP packet
|
||||||
|
*
|
||||||
|
* @v dhcppkt DHCP packet
|
||||||
|
* @ret len Used length
|
||||||
|
*/
|
||||||
|
static inline int dhcppkt_len ( struct dhcp_packet *dhcppkt ) {
|
||||||
|
return ( offsetof ( struct dhcphdr, options ) + dhcppkt->options.len );
|
||||||
|
}
|
||||||
|
|
||||||
extern int dhcppkt_store ( struct dhcp_packet *dhcppkt, unsigned int tag,
|
extern int dhcppkt_store ( struct dhcp_packet *dhcppkt, unsigned int tag,
|
||||||
const void *data, size_t len );
|
const void *data, size_t len );
|
||||||
extern int dhcppkt_fetch ( struct dhcp_packet *dhcppkt, unsigned int tag,
|
extern int dhcppkt_fetch ( struct dhcp_packet *dhcppkt, unsigned int tag,
|
||||||
|
|
|
@ -147,7 +147,6 @@ int dhcppkt_store ( struct dhcp_packet *dhcppkt, unsigned int tag,
|
||||||
const void *data, size_t len ) {
|
const void *data, size_t len ) {
|
||||||
struct dhcp_packet_field *field;
|
struct dhcp_packet_field *field;
|
||||||
void *field_data;
|
void *field_data;
|
||||||
int rc;
|
|
||||||
|
|
||||||
/* If this is a special field, fill it in */
|
/* If this is a special field, fill it in */
|
||||||
if ( ( field = find_dhcp_packet_field ( tag ) ) != NULL ) {
|
if ( ( field = find_dhcp_packet_field ( tag ) ) != NULL ) {
|
||||||
|
@ -163,13 +162,7 @@ int dhcppkt_store ( struct dhcp_packet *dhcppkt, unsigned int tag,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Otherwise, use the generic options block */
|
/* Otherwise, use the generic options block */
|
||||||
rc = dhcpopt_store ( &dhcppkt->options, tag, data, len );
|
return dhcpopt_store ( &dhcppkt->options, tag, data, len );
|
||||||
|
|
||||||
/* Update our used-length field */
|
|
||||||
dhcppkt->len = ( offsetof ( struct dhcphdr, options ) +
|
|
||||||
dhcppkt->options.len );
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -273,11 +266,8 @@ void dhcppkt_init ( struct dhcp_packet *dhcppkt, struct dhcphdr *data,
|
||||||
size_t len ) {
|
size_t len ) {
|
||||||
ref_init ( &dhcppkt->refcnt, NULL );
|
ref_init ( &dhcppkt->refcnt, NULL );
|
||||||
dhcppkt->dhcphdr = data;
|
dhcppkt->dhcphdr = data;
|
||||||
dhcppkt->max_len = len;
|
|
||||||
dhcpopt_init ( &dhcppkt->options, &dhcppkt->dhcphdr->options,
|
dhcpopt_init ( &dhcppkt->options, &dhcppkt->dhcphdr->options,
|
||||||
( len - offsetof ( struct dhcphdr, options ) ) );
|
( len - offsetof ( struct dhcphdr, options ) ) );
|
||||||
dhcppkt->len = ( offsetof ( struct dhcphdr, options ) +
|
|
||||||
dhcppkt->options.len );
|
|
||||||
settings_init ( &dhcppkt->settings,
|
settings_init ( &dhcppkt->settings,
|
||||||
&dhcppkt_settings_operations, &dhcppkt->refcnt, 0 );
|
&dhcppkt_settings_operations, &dhcppkt->refcnt, 0 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -1122,7 +1122,7 @@ static int dhcp_tx ( struct dhcp_session *dhcp ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Transmit the packet */
|
/* Transmit the packet */
|
||||||
iob_put ( iobuf, dhcppkt.len );
|
iob_put ( iobuf, dhcppkt_len ( &dhcppkt ) );
|
||||||
if ( ( rc = xfer_deliver ( &dhcp->xfer, iob_disown ( iobuf ),
|
if ( ( rc = xfer_deliver ( &dhcp->xfer, iob_disown ( iobuf ),
|
||||||
&meta ) ) != 0 ) {
|
&meta ) ) != 0 ) {
|
||||||
DBGC ( dhcp, "DHCP %p could not transmit UDP packet: %s\n",
|
DBGC ( dhcp, "DHCP %p could not transmit UDP packet: %s\n",
|
||||||
|
|
Loading…
Reference in New Issue