net: Refactor bootp packet length computations

Eliminate pointer subtraction that recovers values computed earlier

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Joe Hershberger 2012-05-23 07:59:10 +00:00
parent 00f33268ab
commit ae446f5622

View File

@ -581,7 +581,8 @@ BootpRequest(void)
{ {
uchar *pkt, *iphdr; uchar *pkt, *iphdr;
struct Bootp_t *bp; struct Bootp_t *bp;
int ext_len, pktlen, iplen; int extlen, pktlen, iplen;
int eth_hdr_size;
#ifdef CONFIG_BOOTP_RANDOM_DELAY #ifdef CONFIG_BOOTP_RANDOM_DELAY
ulong i, rand_ms; ulong i, rand_ms;
#endif #endif
@ -610,7 +611,8 @@ BootpRequest(void)
pkt = NetTxPacket; pkt = NetTxPacket;
memset((void *)pkt, 0, PKTSIZE); memset((void *)pkt, 0, PKTSIZE);
pkt += NetSetEther(pkt, NetBcastAddr, PROT_IP); eth_hdr_size = NetSetEther(pkt, NetBcastAddr, PROT_IP);
pkt += eth_hdr_size;
/* /*
* Next line results in incorrect packet size being transmitted, * Next line results in incorrect packet size being transmitted,
@ -639,9 +641,9 @@ BootpRequest(void)
/* Request additional information from the BOOTP/DHCP server */ /* Request additional information from the BOOTP/DHCP server */
#if defined(CONFIG_CMD_DHCP) #if defined(CONFIG_CMD_DHCP)
ext_len = DhcpExtended((u8 *)bp->bp_vend, DHCP_DISCOVER, 0, 0); extlen = DhcpExtended((u8 *)bp->bp_vend, DHCP_DISCOVER, 0, 0);
#else #else
ext_len = BootpExtended((u8 *)bp->bp_vend); extlen = BootpExtended((u8 *)bp->bp_vend);
#endif #endif
/* /*
@ -660,9 +662,8 @@ BootpRequest(void)
* Calculate proper packet lengths taking into account the * Calculate proper packet lengths taking into account the
* variable size of the options field * variable size of the options field
*/ */
pktlen = ((int)(pkt-NetTxPacket)) + BOOTP_HDR_SIZE - iplen = BOOTP_HDR_SIZE - OPT_FIELD_SIZE + extlen;
sizeof(bp->bp_vend) + ext_len; pktlen = eth_hdr_size + IP_UDP_HDR_SIZE + iplen;
iplen = BOOTP_HDR_SIZE - sizeof(bp->bp_vend) + ext_len;
net_set_udp_header(iphdr, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC, iplen); net_set_udp_header(iphdr, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC, iplen);
NetSetTimeout(SELECT_TIMEOUT, BootpTimeout); NetSetTimeout(SELECT_TIMEOUT, BootpTimeout);
@ -798,13 +799,15 @@ static void DhcpSendRequestPkt(struct Bootp_t *bp_offer)
uchar *pkt, *iphdr; uchar *pkt, *iphdr;
struct Bootp_t *bp; struct Bootp_t *bp;
int pktlen, iplen, extlen; int pktlen, iplen, extlen;
int eth_hdr_size;
IPaddr_t OfferedIP; IPaddr_t OfferedIP;
debug("DhcpSendRequestPkt: Sending DHCPREQUEST\n"); debug("DhcpSendRequestPkt: Sending DHCPREQUEST\n");
pkt = NetTxPacket; pkt = NetTxPacket;
memset((void *)pkt, 0, PKTSIZE); memset((void *)pkt, 0, PKTSIZE);
pkt += NetSetEther(pkt, NetBcastAddr, PROT_IP); eth_hdr_size = NetSetEther(pkt, NetBcastAddr, PROT_IP);
pkt += eth_hdr_size;
iphdr = pkt; /* We'll need this later to set proper pkt size */ iphdr = pkt; /* We'll need this later to set proper pkt size */
pkt += IP_UDP_HDR_SIZE; pkt += IP_UDP_HDR_SIZE;
@ -841,9 +844,8 @@ static void DhcpSendRequestPkt(struct Bootp_t *bp_offer)
extlen = DhcpExtended((u8 *)bp->bp_vend, DHCP_REQUEST, extlen = DhcpExtended((u8 *)bp->bp_vend, DHCP_REQUEST,
NetDHCPServerIP, OfferedIP); NetDHCPServerIP, OfferedIP);
pktlen = ((int)(pkt-NetTxPacket)) + BOOTP_HDR_SIZE - iplen = BOOTP_HDR_SIZE - OPT_FIELD_SIZE + extlen;
sizeof(bp->bp_vend) + extlen; pktlen = eth_hdr_size + IP_UDP_HDR_SIZE + iplen;
iplen = BOOTP_HDR_SIZE - sizeof(bp->bp_vend) + extlen;
net_set_udp_header(iphdr, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC, iplen); net_set_udp_header(iphdr, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC, iplen);
debug("Transmitting DHCPREQUEST packet: len = %d\n", pktlen); debug("Transmitting DHCPREQUEST packet: len = %d\n", pktlen);