[U-Boot] [PATCH 1/2] net: Add option to prefer bootp/dhcp serverip

Rick Chen rickchen36 at gmail.com
Thu Jun 7 01:54:44 UTC 2018


> From: Alexander Graf [mailto:agraf at suse.de]
> Sent: Wednesday, June 06, 2018 8:32 PM
> To: u-boot at lists.denx.de
> Cc: Rick Jian-Zhi Chen(陳建志); Joe Hershberger; Simon Glass
> Subject: [PATCH 1/2] net: Add option to prefer bootp/dhcp serverip
>
> Currently we can choose between 2 different types of behavior for the serverip
> variable:
>
>   1) Always overwrite it with the DHCP server IP address (default)
>   2) Ignore what the DHCP server says (CONFIG_BOOTP_SERVERIP)
>
> This patch adds a 3rd option:
>
>   3) Use serverip from DHCP if no serverip is given
>      (CONFIG_BOOTP_PREFER_SERVERIP)
>
> With this new option, we can have the default case that a boot file gets loaded
> from the DHCP provided TFTP server work while allowing users to specify their
> own serverip variable to explicitly use a different tftp server.
>
> Signed-off-by: Alexander Graf <agraf at suse.de>
> ---
>  README      | 5 +++++
>  cmd/Kconfig | 9 +++++++++
>  net/bootp.c | 7 ++++++-
>  3 files changed, 20 insertions(+), 1 deletion(-)
>
> diff --git a/README b/README
> index fb331f910d..d8a99281ca 100644
> --- a/README
> +++ b/README
> @@ -1511,10 +1511,15 @@ The following options need to be configured:
>               CONFIG_BOOTP_TIMEOFFSET
>               CONFIG_BOOTP_VENDOREX
>               CONFIG_BOOTP_MAY_FAIL
> +             CONFIG_BOOTP_PREFER_SERVERIP
>
>               CONFIG_BOOTP_SERVERIP - TFTP server will be the serverip
>               environment variable, not the BOOTP server.
>
> +             CONFIG_BOOTP_PREFER_SERVERIP - TFTP server will be the
> +             serverip environment variable if previously unset, otherwise
> +             the DHCP provided serverip is used.
> +
>               CONFIG_BOOTP_MAY_FAIL - If the DHCP server is not found
>               after the configured retry count, the call will fail
>               instead of starting over.  This can be used to fail over diff --git
> a/cmd/Kconfig b/cmd/Kconfig index e283cb9a8a..e77a4131b3 100644
> --- a/cmd/Kconfig
> +++ b/cmd/Kconfig
> @@ -1121,6 +1121,15 @@ config BOOTP_HOSTNAME
>       help
>         The name may or may not be qualified with the local domain name.
>
> +config BOOTP_PREFER_SERVERIP
> +     bool "Leave serverip variable in place if existing"
> +     default n
> +     depends on CMD_BOOTP
> +     help
> +       By default a BOOTP/DHCP reply will overwrite the tftp target ip
> +       address. With this option enabled, it will leave it alone if
> +       already specified, but populate it if no serverip is specified.
> +
>  config BOOTP_SUBNETMASK
>       bool "Request & store 'netmask' from BOOTP/DHCP server"
>       default y
> diff --git a/net/bootp.c b/net/bootp.c
> index 9d7cb5d30c..91de4cd426 100644
> --- a/net/bootp.c
> +++ b/net/bootp.c
> @@ -147,9 +147,14 @@ static void store_net_params(struct bootp_hdr *bp)
> {  #if !defined(CONFIG_BOOTP_SERVERIP)
>       struct in_addr tmp_ip;
> +     bool overwrite_serverip = true;
> +
> +#if defined(CONFIG_BOOTP_PREFER_SERVERIP)
> +     overwrite_serverip = false;
> +#endif
>
>       net_copy_ip(&tmp_ip, &bp->bp_siaddr);
> -     if (tmp_ip.s_addr != 0)
> +     if (tmp_ip.s_addr != 0 && (overwrite_serverip ||
> +!net_server_ip.s_addr))
>               net_copy_ip(&net_server_ip, &bp->bp_siaddr);
>       memcpy(net_server_ethaddr,
>              ((struct ethernet_hdr *)net_rx_packet)->et_src, 6);
> --
> 2.12.3

Hi Alex

I have apply those two patchs and verify
U-Boot-1-2-net-Add-option-to-prefer-bootp-dhcp-serverip.patch
U-Boot-2-2-ax25-Switch-to-CONFIG_BOOTP_PREFER_SERVERIP.patch

But it still fail in dhcp command as below

case 1
serverip is null

RISC-V # set serverip
RISC-V # env print
baudrate=38400
bootcmd=fatload mmc 0:1 0x20000000 ae350_64.dtb;fatload mmc 0:1 0x0
bbl-ae350.bin;go 0x0
bootdelay=3
bootfile=pxelinux.0
ethact=mac at e0100000
fdtcontroladdr=3fedf290
fileaddr=600000
filesize=1bb7d34
stderr=serial at f0300000
stdin=serial at f0300000
stdout=serial at f0300000

Environment size: 304/8188 bytes
RISC-V # dhcp 0x600000 10.0.4.97:boomimage-310y-ag101p.bin
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 10.0.4.191 (4603 ms)
Using mac at e0100000 device
TFTP from server 255.255.255.255; our IP address is 10.0.4.191;
sending through gateway 10.0.4.254
Filename 'pxelinux.0'.
Load address: 0x600000
Loading: *
TFTP error: 'File not found' (1)
Not retrying...

TFTP error: 'File not found' (1)
Not retrying...

case 2
serverip has value

RISC-V # setenv serverip 10.0.4.97 ;

RISC-V # dhcp 0x600000 boomimage-310y-ag101p.bin
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 10.0.4.191 (4592 ms)
Using mac at e0100000 device
TFTP from server 10.0.4.97; our IP address is 10.0.4.191
Filename 'pxelinux.0'.
Load address: 0x600000
Loading: *
TFTP error: 'File not found' (1)
Not retrying...

TFTP error: 'File not found' (1)
Not retrying...
RISC-V #



Rick


More information about the U-Boot mailing list