[U-Boot-Users] [PATCH V2] net: add 'ethrotate' environment variable

Ben Warren biggerbadderben at gmail.com
Sat Jan 12 03:49:32 CET 2008


Hi Matthias,

Matthias Fuchs wrote:
> This patch replaces the buildtime configuration option
> CONFIG_NET_DO_NOT_TRY_ANOTHER through the 'ethrotate' runtime
> configuration variable. See README.
>
> Signed-off-by: Matthias Fuchs <matthias.fuchs at esd-electronics.com>
> ---
>  README    |    4 ++++
>  net/net.c |   13 ++++++++++---
>  2 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/README b/README
> index 9a8b3b9..9ca512d 100644
> --- a/README
> +++ b/README
> @@ -2687,6 +2687,10 @@ Some configuration options can be set using Environment Variables:
>  		  => setenv ethact SCC ETHERNET
>  		  => ping 10.0.0.1 # traffic sent on SCC ETHERNET
>  
> +  ethrotate	- When set to "no" U-Boot does not go through all
> +		  available network interfaces.
> +		  It just stays at the currently selected interface.
> +
>     netretry	- When set to "no" each network operation will
>  		  either succeed or fail without retrying.
>  		  When set to "once" the network operation will
> diff --git a/net/net.c b/net/net.c
> index 44feee2..e1b71a9 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -581,6 +581,7 @@ void NetStartAgain (void)
>  {
>  	char *nretry;
>  	int noretry = 0, once = 0;
> +	char *ethrotate;
>  
>  	if ((nretry = getenv ("netretry")) != NULL) {
>  		noretry = (strcmp (nretry, "no") == 0);
> @@ -596,9 +597,15 @@ void NetStartAgain (void)
>  	NetSetHandler (startAgainHandler);
>  #else	/* !CONFIG_NET_MULTI*/
>  	eth_halt ();
> -#if !defined(CONFIG_NET_DO_NOT_TRY_ANOTHER)
> -	eth_try_another (!NetRestarted);
> -#endif
> +
> +	/*
> +	 * Do not rotate between network interfaces when
> +	 * 'ethrotate' variable is set to 'no'.
> +	 */
> +	if (((ethrotate = getenv ("ethrotate")) == NULL) ||
> +	    (strcmp(ethrotate, "no") != 0))
> +		eth_try_another (!NetRestarted);
> +
>  	eth_init (gd->bd);
>  	if (NetRestartWrap) {
>  		NetRestartWrap = 0;
>   
I'm a little curious about what it is you're trying to do.  If you want 
to prevent Ethernet devices from ever rotating, this doesn't work.  For 
example, if you set 'ethact' to an interface that isn't connected, 
eth_init() will rotate the interfaces until it reaches a valid link or 
the end of the chain, never reaching your change.  If you really want to 
prevent rotation, I'd move your logic into the 'eth_try_another()' 
function itself, returning quickly if "ethrotate=no".

regards,
Ben




More information about the U-Boot mailing list