[PATCH 11/11] net: dhcp: introduce global serverip variable

Sascha Hauer s.hauer at pengutronix.de
Mon Sep 26 05:57:34 EDT 2011


On Sun, Sep 25, 2011 at 10:54:14PM +0200, Wolfram Sang wrote:
> Sometimes, the TFTP/NFS server is different from the DHCP server. To handle
> such situations, a global 'serverip' variable is introduced. If present and set
> with a valid IP address, it will be used instead of the address returned by the
> DHCP server.

Just had some offline discussion with Wolfram. We came to agree that
it's not a good idea to introduce a global 'serverip' variable in C
code. That said we have problems in this area. We currently use
eth0.serverip for several ips which should be really different ones.
In case of dhcp eth0.serverip is set to the ip the dhcp server
returns which is then used as tftp server and rootnfs server. This
does not match setups where you don't have control over the dhcp
server.

So we really should have tftp_serverip, rootfs_serverip and the ip
returned from the dhcp server. Throw multiple ethernet devices into
the mix and things even get more complicated. We need to do something
about it but I feel that we should do a more complete solution instead
of a quick hack to solve the problem. I have no good idea what to do
though :(

Sascha

> 
> Signed-off-by: Wolfram Sang <w.sang at pengutronix.de>
> ---
>  defaultenv/config |    3 ++-
>  net/dhcp.c        |    7 +++++--
>  2 files changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/defaultenv/config b/defaultenv/config
> index 0aaead5..235deca 100644
> --- a/defaultenv/config
> +++ b/defaultenv/config
> @@ -9,11 +9,12 @@ machine=FIXME
>  # use 'dhcp' to do dhcp in barebox and in kernel
>  # use 'none' if you want to skip kernel ip autoconfiguration
>  ip=dhcp
> +# IP of the TFTP/NFS-server. If empty (or invalid), DHCP server will be used
> +#serverip=a.b.c.d
>  
>  # or set your networking parameters here
>  #eth0.ipaddr=a.b.c.d
>  #eth0.netmask=a.b.c.d
> -#eth0.serverip=a.b.c.d
>  #eth0.gateway=a.b.c.d
>  
>  # can be either 'tftp', 'nfs', 'nand', 'nor' or 'disk'
> diff --git a/net/dhcp.c b/net/dhcp.c
> index d1781bc..899c873 100644
> --- a/net/dhcp.c
> +++ b/net/dhcp.c
> @@ -113,8 +113,11 @@ static void bootp_copy_net_params(struct bootp *bp)
>  	tmp_ip = net_read_ip(&bp->bp_yiaddr);
>  	net_set_ip(tmp_ip);
>  
> -	tmp_ip = net_read_ip(&bp->bp_siaddr);
> -	if (tmp_ip != 0)
> +	tmp_ip = getenv_ip("serverip");
> +	if (!tmp_ip)
> +		tmp_ip = net_read_ip(&bp->bp_siaddr);
> +
> +	if (tmp_ip)
>  		net_set_serverip(tmp_ip);
>  
>  	if (strlen(bp->bp_file) > 0)
> -- 
> 1.7.5.4
> 
> 
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list