diff --git a/src/include/ipxe/dhcppkt.h b/src/include/ipxe/dhcppkt.h index 5709cc7d..b004800d 100644 --- a/src/include/ipxe/dhcppkt.h +++ b/src/include/ipxe/dhcppkt.h @@ -22,10 +22,6 @@ struct dhcp_packet { struct refcnt refcnt; /** The DHCP packet contents */ 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 */ struct dhcp_options options; /** Settings interface */ @@ -54,6 +50,16 @@ dhcppkt_put ( struct dhcp_packet *dhcppkt ) { 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, const void *data, size_t len ); extern int dhcppkt_fetch ( struct dhcp_packet *dhcppkt, unsigned int tag, diff --git a/src/net/dhcppkt.c b/src/net/dhcppkt.c index b68f4e08..e043bb5d 100644 --- a/src/net/dhcppkt.c +++ b/src/net/dhcppkt.c @@ -147,7 +147,6 @@ int dhcppkt_store ( struct dhcp_packet *dhcppkt, unsigned int tag, const void *data, size_t len ) { struct dhcp_packet_field *field; void *field_data; - int rc; /* If this is a special field, fill it in */ 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 */ - rc = dhcpopt_store ( &dhcppkt->options, tag, data, len ); - - /* Update our used-length field */ - dhcppkt->len = ( offsetof ( struct dhcphdr, options ) + - dhcppkt->options.len ); - - return rc; + return dhcpopt_store ( &dhcppkt->options, tag, data, len ); } /** @@ -273,11 +266,8 @@ void dhcppkt_init ( struct dhcp_packet *dhcppkt, struct dhcphdr *data, size_t len ) { ref_init ( &dhcppkt->refcnt, NULL ); dhcppkt->dhcphdr = data; - dhcppkt->max_len = len; dhcpopt_init ( &dhcppkt->options, &dhcppkt->dhcphdr->options, ( len - offsetof ( struct dhcphdr, options ) ) ); - dhcppkt->len = ( offsetof ( struct dhcphdr, options ) + - dhcppkt->options.len ); settings_init ( &dhcppkt->settings, &dhcppkt_settings_operations, &dhcppkt->refcnt, 0 ); } diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index 64c49cdd..e6d127ab 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -1122,7 +1122,7 @@ static int dhcp_tx ( struct dhcp_session *dhcp ) { } /* Transmit the packet */ - iob_put ( iobuf, dhcppkt.len ); + iob_put ( iobuf, dhcppkt_len ( &dhcppkt ) ); if ( ( rc = xfer_deliver ( &dhcp->xfer, iob_disown ( iobuf ), &meta ) ) != 0 ) { DBGC ( dhcp, "DHCP %p could not transmit UDP packet: %s\n",