
2018-06-13 9:42 GMT+08:00 Rick Chen rickchen36@gmail.com:
2018-06-13 3:59 GMT+08:00 Joe Hershberger joe.hershberger@ni.com:
On Wed, Jun 6, 2018 at 8:54 PM, Rick Chen rickchen36@gmail.com wrote:
From: Alexander Graf [mailto:agraf@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:
- Always overwrite it with the DHCP server IP address (default)
- Ignore what the DHCP server says (CONFIG_BOOTP_SERVERIP)
This patch adds a 3rd option:
- 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@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
Hi Joe
I sync to the latest U-Boot and do the following experiments with ax25-ae350_defconfig
================== The latest U-Boot serverip is null dhcp command pass ==================
U-Boot 2018.07-rc1-00071-g7868909 (Jun 13 2018 - 09:12:38 +0800)
DRAM: 1 GiB No arch specific invalidate_icache_all available! Flash: 64 MiB MMC: mmc@f0e00000: 0 Loading Environment from SPI Flash... SF: Detected mx25u1635e with page size 256 Bytes, erase size 4 KiB, total 2 MiB OK In: serial@f0300000 Out: serial@f0300000 Err: serial@f0300000 Net: no alias for ethernet0
Warning: mac@e0100000 (eth0) using random MAC address - ca:96:e2:64:71:ac eth0: mac@e0100000 Hit any key to stop autoboot: 0 RISC-V # 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 ethact=mac@e0100000 fdtcontroladdr=3fee6290 fileaddr=600000 filesize=1bb7d34 serverip=10.0.4.97 stderr=serial@f0300000 stdin=serial@f0300000 stdout=serial@f0300000
Environment size: 303/8188 bytes RISC-V # setenv serverip RISC-V # 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 ethact=mac@e0100000 fdtcontroladdr=3fee6290 fileaddr=600000 filesize=1bb7d34 stderr=serial@f0300000 stdin=serial@f0300000 stdout=serial@f0300000
Environment size: 282/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.171 (4602 ms) Using mac@e0100000 device TFTP from server 10.0.4.97; our IP address is 10.0.4.171 Filename 'boomimage-310y-ag101p.bin'. Load address: 0x600000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ######################################## 197.3 KiB/s done Bytes transferred = 13938796 (d4b06c hex) RISC-V #
================================================== The latest U-Boot apply Alex's 2 patchs [PATCH 1/2] net: Add option to prefer bootp/dhcp serverip [PATCH 2/2] ax25: Switch to CONFIG_BOOTP_PREFER_SERVERIP
No matter serverip is null or have server ip address dhcp command fail ==================================================
U-Boot 2018.07-rc1-00072-ge8732dd-dirty (Jun 13 2018 - 09:26:15 +0800)
DRAM: 1 GiB No arch specific invalidate_icache_all available! Flash: 64 MiB MMC: mmc@f0e00000: 0 Loading Environment from SPI Flash... SF: Detected mx25u1635e with page size 256 Bytes, erase size 4 KiB, total 2 MiB OK In: serial@f0300000 Out: serial@f0300000 Err: serial@f0300000 Net: no alias for ethernet0
Warning: mac@e0100000 (eth0) using random MAC address - ea:97:27:2b:a0:7c eth0: mac@e0100000 Hit any key to stop autoboot: 0 RISC-V # 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 ethact=mac@e0100000 fdtcontroladdr=3fee6290 fileaddr=600000 filesize=1bb7d34 serverip=10.0.4.97 stderr=serial@f0300000 stdin=serial@f0300000 stdout=serial@f0300000
Environment size: 303/8188 bytes RISC-V # 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.172 (4626 ms) Using mac@e0100000 device TFTP from server 10.0.4.97; our IP address is 10.0.4.172 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 # setenv 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=3fee6290 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 BOOTP broadcast 1 BOOTP broadcast 2 BOOTP broadcast 3 BOOTP broadcast 4 DHCP client bound to address 10.0.4.172 (4604 ms) Using mac@e0100000 device TFTP from server 255.255.255.255; our IP address is 10.0.4.172; 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... RISC-V #
Rick
Hi Joe and Alex
After trace, I found that in store_net_params( ) if CONFIG_BOOTP_SERVERIP is not define, net_boot_file_name will be replaced by bp->bp_file
copy_filename(net_boot_file_name, bp->bp_file,sizeof(net_boot_file_name));
That is why the file name will become pxelinux.0, after remove CONFIG_BOOTP_SERVERIP.
But I try to find where pxelinux.0 came from. It seems come from packet payload in dhcp_handler( ).
Rick