On Wed, Jun 6, 2018 at 8:54 PM, Rick Chen <rickche...@gmail.com> wrote: >> From: Alexander Graf [mailto:ag...@suse.de] >> Sent: Wednesday, June 06, 2018 8:32 PM >> To: u-boot@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 <ag...@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@e0100000 > fdtcontroladdr=3fedf290 > fileaddr=600000 > filesize=1bb7d34 > stderr=serial@f0300000 > stdin=serial@f0300000 > stdout=serial@f0300000 > > Environment size: 304/8188 bytes > RISC-V # dhcp 0x600000 10.0.4.97:boomimage-310y-ag101p.bin
You are explicitly setting the server IP in the DHCP command line, so why would you expect the DHCP server IP to be used? > 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@e0100000 device > TFTP from server 255.255.255.255; our IP address is 10.0.4.191; This broadcast address is clearly not right. It should have been what you had in the dhcp command. That should be assigned in net/tftp.c: 757... >> tftp_remote_ip = string_to_ip(net_boot_file_name); So something must be wrong with that somehow. > sending through gateway 10.0.4.254 > Filename 'pxelinux.0'. Why is this filename still set? That's from the environment and is set by a env callback handler. That should happen before netboot_common() which should be overwriting net_boot_file_name with the command line filename. > Load address: 0x600000 > Loading: * > TFTP error: 'File not found' (1) > Not retrying... > > TFTP error: 'File not found' (1) > Not retrying... Could you print out the env again? Did the server IP get set? Also, you not finding a file assumes your TFTP server has a pxelinux.0 file on it... I don't think we have any reason from what you've presented that it's the case. Especially since that's not the file you specified on the command line. > > 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@e0100000 device > TFTP from server 10.0.4.97; our IP address is 10.0.4.191 You are getting the correct IP used as the server, so it seems that this patch is working (though I don't know that your DHCP server isn't the same as the hard-coded address). > 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 # What version of U-Boot are you using? This behavior doesn't match what I'm seeing in the code. -Joe _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot