[U-Boot] [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@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);

The ax25-ae350 target currently uses CONFIG_BOOTP_SERVERIP which means we ignore the DHCP provided TFTP ip address. This breaks every case where we do now provide a serverip environment variable.
Instead, let's use the new CONFIG_BOOT_PREFER_SERVERIP option to fall back to the DHCP provided TFTP IP if no serverip environment variable is set.
Signed-off-by: Alexander Graf agraf@suse.de --- configs/ax25-ae350_defconfig | 1 + include/configs/ax25-ae350.h | 1 - 2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/configs/ax25-ae350_defconfig b/configs/ax25-ae350_defconfig index 5a69eb50c5..9e0ca3452d 100644 --- a/configs/ax25-ae350_defconfig +++ b/configs/ax25-ae350_defconfig @@ -45,3 +45,4 @@ CONFIG_TIMER=y CONFIG_ATCPIT100_TIMER=y CONFIG_DISTRO_DEFAULTS=y CONFIG_CPU_RISCV_64=y +CONFIG_BOOTP_PREFER_SERVERIP=y diff --git a/include/configs/ax25-ae350.h b/include/configs/ax25-ae350.h index b1ca5ac11a..b230896734 100644 --- a/include/configs/ax25-ae350.h +++ b/include/configs/ax25-ae350.h @@ -11,7 +11,6 @@ * CPU and Board Configuration Options */ #define CONFIG_BOOTP_SEND_HOSTNAME -#define CONFIG_BOOTP_SERVERIP
/* * Miscellaneous configurable options

On Wed, Jun 6, 2018 at 7:32 AM, Alexander Graf agraf@suse.de wrote:
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
I think you mean "previously set" here.
Also, I don't think we are putting descriptions in the README if the help is already in the Kconfig. Right, Tom?
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"
I think this would be clearer if it were "serverip variable in the environment takes precedent over DHCP server IP."
default n
depends on CMD_BOOTP
help
By default a BOOTP/DHCP reply will overwrite the tftp target ip
Use the actual variable name here... "serverip"
address. With this option enabled, it will leave it alone if
Too many "it"s.
"With this option enabled, the 'serverip' variable in the environment takes precedence over DHCP server IP and will only be set by the DHCP server if not already set in the environment."
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
U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot
participants (2)
-
Alexander Graf
-
Joe Hershberger