[U-Boot] [PATCH] net: Use u32 instead of ulong for transaction ID in bootp

From: Siva Durga Prasad Paladugu siva.durga.paladugu@xilinx.com
Based on rfc951 transaction ID has 4 bytes which is not the case when ulong type is used on ARM64. Use u32 type which is well defined for all archs.
BOOTP_VENDOR_MAGIC is also 4 bytes.
Based on RFC1048 Time Offset (code 2) is also 4bytes long and IP Address Lease Time also.
The patch converts NetCopyLong to netcopy32 and NetReadLong to netread32 to follow u-boot coding style.
Signed-off-by: Siva Durga Prasad Paladugu sivadur@xilinx.com Signed-off-by: Michal Simek michal.simek@xilinx.com ---
include/net.h | 14 +++++++------- net/bootp.c | 18 +++++++++--------- net/bootp.h | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/include/net.h b/include/net.h index 237c932be334..9b5f8249ddbb 100644 --- a/include/net.h +++ b/include/net.h @@ -607,12 +607,12 @@ static inline IPaddr_t NetReadIP(void *from) return ip; }
-/* return ulong *in network byteorder* */ -static inline ulong NetReadLong(ulong *from) +/* return u32 *in network byteorder* */ +static inline u32 netread32(void *from) { - ulong l; + u32 l;
- memcpy((void *)&l, (void *)from, sizeof(l)); + memcpy((void *)&l, from, sizeof(u32)); return l; }
@@ -628,10 +628,10 @@ static inline void NetCopyIP(void *to, void *from) memcpy((void *)to, from, sizeof(IPaddr_t)); }
-/* copy ulong */ -static inline void NetCopyLong(ulong *to, ulong *from) +/* copy u32 */ +static inline void netcopy32(void *to, void *from) { - memcpy((void *)to, (void *)from, sizeof(ulong)); + memcpy(to, from, sizeof(u32)); }
/** diff --git a/net/bootp.c b/net/bootp.c index 81066015f1c2..de0d587228df 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -125,7 +125,7 @@ static int BootpCheckPkt(uchar *pkt, unsigned dest, unsigned src, unsigned len) retval = -4; else if (bp->bp_hlen != HWL_ETHER) retval = -5; - else if (!bootp_match_id(NetReadLong((ulong *)&bp->bp_id))) + else if (!bootp_match_id(netread32(&bp->bp_id))) retval = -6;
debug("Filtering pkt = %d\n", retval); @@ -350,7 +350,7 @@ BootpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, BootpCopyNetParams(bp); /* Store net parameters from reply */
/* Retrieve extended information (we must parse the vendor area) */ - if (NetReadLong((ulong *)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC)) + if (netread32(&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC)) BootpVendorProcess((uchar *)&bp->bp_vend[4], len);
NetSetTimeout(0, (thand_f *)0); @@ -732,7 +732,7 @@ BootpRequest(void) BootpID += get_timer(0); BootpID = htonl(BootpID); bootp_add_id(BootpID); - NetCopyLong(&bp->bp_id, &BootpID); + netcopy32(&bp->bp_id, &BootpID);
/* * Calculate proper packet lengths taking into account the @@ -770,7 +770,7 @@ static void DhcpOptionsProcess(uchar *popt, struct Bootp_t *bp) #if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_TIMEOFFSET) case 2: /* Time offset */ to_ptr = &NetTimeOffset; - NetCopyLong((ulong *)to_ptr, (ulong *)(popt + 2)); + netcopy32(to_ptr, popt + 2); NetTimeOffset = ntohl(NetTimeOffset); break; #endif @@ -806,7 +806,7 @@ static void DhcpOptionsProcess(uchar *popt, struct Bootp_t *bp) break; #endif case 51: - NetCopyLong(&dhcp_leasetime, (ulong *) (popt + 2)); + netcopy32(&dhcp_leasetime, popt + 2); break; case 53: /* Ignore Message Type Option */ break; @@ -860,7 +860,7 @@ static void DhcpOptionsProcess(uchar *popt, struct Bootp_t *bp)
static int DhcpMessageType(unsigned char *popt) { - if (NetReadLong((ulong *)popt) != htonl(BOOTP_VENDOR_MAGIC)) + if (netread32(popt) != htonl(BOOTP_VENDOR_MAGIC)) return -1;
popt += 4; @@ -911,7 +911,7 @@ static void DhcpSendRequestPkt(struct Bootp_t *bp_offer) * ID is the id of the OFFER packet */
- NetCopyLong(&bp->bp_id, &bp_offer->bp_id); + netcopy32(&bp->bp_id, &bp_offer->bp_id);
/* * Copy options from OFFER packet if present @@ -970,7 +970,7 @@ DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, debug("TRANSITIONING TO REQUESTING STATE\n"); dhcp_state = REQUESTING;
- if (NetReadLong((ulong *)&bp->bp_vend[0]) == + if (netread32(&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC)) DhcpOptionsProcess((u8 *)&bp->bp_vend[4], bp);
@@ -986,7 +986,7 @@ DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, debug("DHCP State: REQUESTING\n");
if (DhcpMessageType((u8 *)bp->bp_vend) == DHCP_ACK) { - if (NetReadLong((ulong *)&bp->bp_vend[0]) == + if (netread32(&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC)) DhcpOptionsProcess((u8 *)&bp->bp_vend[4], bp); /* Store net params from reply */ diff --git a/net/bootp.h b/net/bootp.h index 3b95a0a2ded8..cc71b2b56dec 100644 --- a/net/bootp.h +++ b/net/bootp.h @@ -38,7 +38,7 @@ struct Bootp_t { uchar bp_hlen; /* Hardware address length */ # define HWL_ETHER 6 uchar bp_hops; /* Hop count (gateway thing) */ - ulong bp_id; /* Transaction ID */ + u32 bp_id; /* Transaction ID */ ushort bp_secs; /* Seconds since boot */ ushort bp_spare1; /* Alignment */ IPaddr_t bp_ciaddr; /* Client IP address */

On Wed, Apr 15, 2015 at 12:50:59PM +0200, Michal Simek wrote:
From: Siva Durga Prasad Paladugu siva.durga.paladugu@xilinx.com
Based on rfc951 transaction ID has 4 bytes which is not the case when ulong type is used on ARM64. Use u32 type which is well defined for all archs.
BOOTP_VENDOR_MAGIC is also 4 bytes.
Based on RFC1048 Time Offset (code 2) is also 4bytes long and IP Address Lease Time also.
The patch converts NetCopyLong to netcopy32 and NetReadLong to netread32 to follow u-boot coding style.
Signed-off-by: Siva Durga Prasad Paladugu sivadur@xilinx.com Signed-off-by: Michal Simek michal.simek@xilinx.com
include/net.h | 14 +++++++------- net/bootp.c | 18 +++++++++--------- net/bootp.h | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-)
Looks reasonable to me:
Reviewed-by: Thierry Reding treding@nvidia.com

Hi Michal,
On Wed, Apr 15, 2015 at 5:50 AM, Michal Simek michal.simek@xilinx.com wrote:
From: Siva Durga Prasad Paladugu siva.durga.paladugu@xilinx.com
Based on rfc951 transaction ID has 4 bytes which is not the case when ulong type is used on ARM64. Use u32 type which is well defined for all archs.
BOOTP_VENDOR_MAGIC is also 4 bytes.
Based on RFC1048 Time Offset (code 2) is also 4bytes long and IP Address Lease Time also.
The patch converts NetCopyLong to netcopy32 and NetReadLong to netread32 to follow u-boot coding style.
Signed-off-by: Siva Durga Prasad Paladugu sivadur@xilinx.com Signed-off-by: Michal Simek michal.simek@xilinx.com
This is a dup of https://patchwork.ozlabs.org/patch/459122/ which is already included in a pull request here: https://patchwork.ozlabs.org/patch/461424/
Thanks anyway, -Joe

On 04/15/2015 03:45 PM, Joe Hershberger wrote:
Hi Michal,
On Wed, Apr 15, 2015 at 5:50 AM, Michal Simek michal.simek@xilinx.com wrote:
From: Siva Durga Prasad Paladugu siva.durga.paladugu@xilinx.com
Based on rfc951 transaction ID has 4 bytes which is not the case when ulong type is used on ARM64. Use u32 type which is well defined for all archs.
BOOTP_VENDOR_MAGIC is also 4 bytes.
Based on RFC1048 Time Offset (code 2) is also 4bytes long and IP Address Lease Time also.
The patch converts NetCopyLong to netcopy32 and NetReadLong to netread32 to follow u-boot coding style.
Signed-off-by: Siva Durga Prasad Paladugu sivadur@xilinx.com Signed-off-by: Michal Simek michal.simek@xilinx.com
This is a dup of https://patchwork.ozlabs.org/patch/459122/ which is already included in a pull request here: https://patchwork.ozlabs.org/patch/461424/
That's great.
Thanks, Michal
participants (3)
-
Joe Hershberger
-
Michal Simek
-
Thierry Reding