aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2010-11-30 00:22:49 +0000
committerMichael Brown <mcb30@ipxe.org>2011-01-10 03:39:26 +0000
commit6cee8904d1d26cd3503018e9514b8671a9b0a860 (patch)
treec7aa6a5cc3b6ba870d6a54fe92ebe99ee4c046a7
parentdc462e8b3b424fd0bf90c428da79f6fffe1a0d68 (diff)
downloadipxe-6cee8904d1d26cd3503018e9514b8671a9b0a860.tar.gz
[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>
-rw-r--r--src/include/ipxe/dhcppkt.h14
-rw-r--r--src/net/dhcppkt.c12
-rw-r--r--src/net/udp/dhcp.c2
3 files changed, 12 insertions, 16 deletions
diff --git a/src/include/ipxe/dhcppkt.h b/src/include/ipxe/dhcppkt.h
index 5709cc7d1..b004800d8 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 b68f4e08d..e043bb5d4 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 64c49cdd9..e6d127ab7 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",