[U-Boot] [PATCH 1/1] net:Fix potential empty DHCP Parameter Request List

Mike Frysinger vapier at gentoo.org
Fri Oct 22 22:06:44 CEST 2010


On Friday, October 22, 2010 04:36:25 Jason Liu wrote:
> From: Gray Remlin <g_remlin at rocketmail.com>
> 
> Can't get IP address with dhcp due to the dhcp server not
> allow the empty param list request under some network env
> 
> --- a/net/bootp.c
> +++ b/net/bootp.c
> @@ -417,9 +417,19 @@ static int DhcpExtended (u8 * e, int message_type,
> IPaddr_t ServerID, IPaddr_t R return x - start;
>  #endif
> 
> +#if defined(CONFIG_BOOTP_SUBNETMASK) || \
> +    defined(CONFIG_BOOTP_TIMEOFFSET) || \
> +    defined(CONFIG_BOOTP_GATEWAY) || \
> +    defined(CONFIG_BOOTP_DNS) || \
> +    defined(CONFIG_BOOTP_HOSTNAME) || \
> +    defined(CONFIG_BOOTP_BOOTFILESIZE) || \
> +    defined(CONFIG_BOOTP_BOOTPATH) || \
> +    defined(CONFIG_BOOTP_NISDOMAIN) || \
> +    defined(CONFIG_BOOTP_NTPSERVER)
>  	*e++ = 55;		/* Parameter Request List */
>  	 cnt = e++;		/* Pointer to count of requested items */
>  	*cnt = 0;
> +#endif

this list is pretty ugly and prone to breakage.  how about having the code 
back itself up and let gcc optimize things away ?  two ways of doing this ...

(1) after the current ifdef list and before the "*e++ = 255;", add like:
	/* no options, so back up to avoid sending an empty request list */
	if (*cnt == 0)
		e -= 2;

(2) add a "bool empty_list" to this func.  where we set "*cnt = 0", do:
	empty_list = true;
then in every ifdef currently, add:
	empty_list = false;
and at the end, do:
	/* no options, so back up to avoid sending an empty request list */
	if (empty_list)
		e -= 2;
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20101022/fa87c00b/attachment.pgp 


More information about the U-Boot mailing list