* [PATCH v6 1/3] net: Enhancements for dhcp option 209
2023-11-22 23:27 [PATCH v6 0/3] BOOTP/DHCPv4 enhancements Sean Edmond
@ 2023-11-22 23:27 ` Sean Edmond
0 siblings, 0 replies; 6+ messages in thread
From: Sean Edmond @ 2023-11-22 23:27 UTC (permalink / raw)
To: u-boot
Cc: trini, Sean Edmond, Abdellatif El Khlifi, Bin Meng,
Heinrich Schuchardt, Joe Hershberger, Marek Vasut, Michal Simek,
Ramon Fried, Roger Knecht, Simon Glass, Tobias Waldekranz
- Enable option 209 by default
- Set pxelinux_configfile to NULL to avoid potential double free
- change hardcoced 209 to a define
Signed-off-by: Sean Edmond <seanedmond@microsoft.com>
---
Changes in v6:
- Reword this commit
Changes in v4:
- rebase master and resolve conflicts
- default y for BOOTP_PXE_DHCP_OPTION (feedback from review)
- change commit description for this patch (this is now
an enhancement patch)
Changes in v3:
- add define for option 209 and rfc5071 reference
cmd/Kconfig | 1 +
cmd/pxe.c | 2 ++
net/bootp.c | 4 ++--
net/bootp.h | 2 ++
4 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/cmd/Kconfig b/cmd/Kconfig
index df6d71c103f..ae846b204dc 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1842,6 +1842,7 @@ config BOOTP_PXE_CLIENTARCH
config BOOTP_PXE_DHCP_OPTION
bool "Request & store 'pxe_configfile' from BOOTP/DHCP server"
+ default y
depends on BOOTP_PXE
config BOOTP_VCI_STRING
diff --git a/cmd/pxe.c b/cmd/pxe.c
index 21134eb7a30..9404f445187 100644
--- a/cmd/pxe.c
+++ b/cmd/pxe.c
@@ -65,6 +65,8 @@ static int pxe_dhcp_option_path(struct pxe_context *ctx, unsigned long pxefile_a
int ret = get_pxe_file(ctx, pxelinux_configfile, pxefile_addr_r);
free(pxelinux_configfile);
+ /* set to NULL to avoid double-free if DHCP is tried again */
+ pxelinux_configfile = NULL;
return ret;
}
diff --git a/net/bootp.c b/net/bootp.c
index 68002909634..24547cf7bfd 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -603,7 +603,7 @@ static int dhcp_extended(u8 *e, int message_type, struct in_addr server_ip,
*cnt += 1;
#endif
if (IS_ENABLED(CONFIG_BOOTP_PXE_DHCP_OPTION)) {
- *e++ = 209; /* PXELINUX Config File */
+ *e++ = DHCP_OPTION_PXE_CONFIG_FILE; /* PXELINUX Config File */
*cnt += 1;
}
/* no options, so back up to avoid sending an empty request list */
@@ -914,7 +914,7 @@ static void dhcp_process_options(uchar *popt, uchar *end)
net_boot_file_name[size] = 0;
}
break;
- case 209: /* PXELINUX Config File */
+ case DHCP_OPTION_PXE_CONFIG_FILE: /* PXELINUX Config File */
if (IS_ENABLED(CONFIG_BOOTP_PXE_DHCP_OPTION)) {
/* In case it has already been allocated when get DHCP Offer packet,
* free first to avoid memory leak.
diff --git a/net/bootp.h b/net/bootp.h
index 4e32b19d424..24b32c73f62 100644
--- a/net/bootp.h
+++ b/net/bootp.h
@@ -91,6 +91,8 @@ typedef enum { INIT,
#define DHCP_NAK 6
#define DHCP_RELEASE 7
+#define DHCP_OPTION_PXE_CONFIG_FILE 209 /* "ConfigFile" option according to rfc5071 */
+
/**********************************************************************/
#endif /* __BOOTP_H__ */
--
2.42.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v6 0/3] BOOTP/DHCPv4 enhancements
@ 2024-04-29 18:33 Sean Edmond
2024-04-29 18:33 ` [PATCH v6 1/3] net: Enhancements for dhcp option 209 Sean Edmond
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Sean Edmond @ 2024-04-29 18:33 UTC (permalink / raw)
To: u-boot
Cc: trini, Sean Edmond, AKASHI Takahiro, Bin Meng, Bin Meng,
Charles Hardin, Francis Laniel, Heinrich Schuchardt,
Ilias Apalodimas, Joe Hershberger, Marek Vasut,
Mattijs Korpershoek, Michal Simek, Oleksandr Suvorov,
Peter Robinson, Ramon Fried, Sean Anderson, Sean Anderson,
Simon Glass, Vincent Stehlé
In our datacenter application, a single DHCP server is servicing 36000+ clients.
Improvements are required to the DHCPv4 retransmission behavior to align with
RFC and ensure less pressure is exerted on the server:
- retransmission backoff interval maximum is configurable
(environment variable bootpretransmitperiodmax)
- initial retransmission backoff interval is configurable
(environment variable bootpretransmitperiodinit)
- transaction ID is kept the same for each BOOTP/DHCPv4 request
(not recreated on each retry)
For our application we'll use:
- bootpretransmitperiodmax=16000
- bootpretransmitperiodinit=2000
A new configuration BOOTP_RANDOM_XID has been added to enable a randomized
BOOTP/DHCPv4 transaction ID.
Enhance DHCPv4 sending/parsing option 209 (PXE config file). A previous
patch was accepted. A new patch fixes a possible double free() and
addresses latest review comments.
Changes in v7:
- Remove "depends on LIB_RAND || LIB_HW_RAND" from CMD_BOOTP
- Add CMD_BOOTP/CMD_DHCP/CMD_DHCP6 to LIB_RAND menu choice
- Add space after "config CMD_DHCP"
Changes in v6:
- CMD_BOOTP should "depends on LIB_RAND || LIB_HW_RAND"
Changes in v5:
- add change log to individual patches
- fix depends for BOOTP_RANDOM_XID:
"depends on CMD_BOOTP && (LIB_RAND || LIB_HW_RAND)"
Changes in v4:
- rebase master and resolve conflicts
- default y for BOOTP_PXE_DHCP_OPTION (feedback from review)
- Add "select LIB_RAND" for "config CMD_BOOTP" (retransmission
improvements require rand())
Changes in v3:
- add define for option 209 and rfc5071 reference
- Set RETRANSMIT_PERIOD_MAX_MS=60000
- Add randomization factor to retransmission timeout
- Add depends for BOOTP_RANDOM_XID
Changes in v2:
- use env_get_ulong() to get environment variables
Sean Edmond (3):
net: Enhancements for dhcp option 209
net: bootp: BOOTP/DHCPv4 retransmission improvements
net: bootp: add config option BOOTP_RANDOM_XID
cmd/Kconfig | 8 ++++++
cmd/pxe.c | 2 ++
lib/Kconfig | 3 ++-
net/bootp.c | 76 +++++++++++++++++++++++++++++++++++++++++------------
net/bootp.h | 2 ++
5 files changed, 73 insertions(+), 18 deletions(-)
--
2.42.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v6 1/3] net: Enhancements for dhcp option 209
2024-04-29 18:33 [PATCH v6 0/3] BOOTP/DHCPv4 enhancements Sean Edmond
@ 2024-04-29 18:33 ` Sean Edmond
2024-04-29 18:33 ` [PATCH v6 2/3] net: bootp: BOOTP/DHCPv4 retransmission improvements Sean Edmond
2024-04-29 18:33 ` [PATCH v6 3/3] net: bootp: add config option BOOTP_RANDOM_XID Sean Edmond
2 siblings, 0 replies; 6+ messages in thread
From: Sean Edmond @ 2024-04-29 18:33 UTC (permalink / raw)
To: u-boot
Cc: trini, Sean Edmond, AKASHI Takahiro, Bin Meng, Charles Hardin,
Francis Laniel, Heinrich Schuchardt, Joe Hershberger, Marek Vasut,
Mattijs Korpershoek, Peter Robinson, Ramon Fried, Sean Anderson,
Simon Glass
- Enable option 209 by default
- Set pxelinux_configfile to NULL to avoid potential double free
- change hardcoded 209 to a define
Signed-off-by: Sean Edmond <seanedmond@microsoft.com>
---
Changes in v7:
- Reword this commit
Changes in v6:
- Reword this commit
Changes in v4:
- rebase master and resolve conflicts
- default y for BOOTP_PXE_DHCP_OPTION (feedback from review)
- change commit description for this patch (this is now
an enhancement patch)
Changes in v3:
- add define for option 209 and rfc5071 reference
cmd/Kconfig | 1 +
cmd/pxe.c | 2 ++
net/bootp.c | 4 ++--
net/bootp.h | 2 ++
4 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/cmd/Kconfig b/cmd/Kconfig
index c182d73ddbd..54c4ab8570c 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1898,6 +1898,7 @@ config BOOTP_PXE_CLIENTARCH
config BOOTP_PXE_DHCP_OPTION
bool "Request & store 'pxe_configfile' from BOOTP/DHCP server"
+ default y
depends on BOOTP_PXE
config BOOTP_VCI_STRING
diff --git a/cmd/pxe.c b/cmd/pxe.c
index 21134eb7a30..9404f445187 100644
--- a/cmd/pxe.c
+++ b/cmd/pxe.c
@@ -65,6 +65,8 @@ static int pxe_dhcp_option_path(struct pxe_context *ctx, unsigned long pxefile_a
int ret = get_pxe_file(ctx, pxelinux_configfile, pxefile_addr_r);
free(pxelinux_configfile);
+ /* set to NULL to avoid double-free if DHCP is tried again */
+ pxelinux_configfile = NULL;
return ret;
}
diff --git a/net/bootp.c b/net/bootp.c
index c15472f5d37..b9e3cccb4f9 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -603,7 +603,7 @@ static int dhcp_extended(u8 *e, int message_type, struct in_addr server_ip,
*cnt += 1;
#endif
if (IS_ENABLED(CONFIG_BOOTP_PXE_DHCP_OPTION)) {
- *e++ = 209; /* PXELINUX Config File */
+ *e++ = DHCP_OPTION_PXE_CONFIG_FILE; /* PXELINUX Config File */
*cnt += 1;
}
/* no options, so back up to avoid sending an empty request list */
@@ -922,7 +922,7 @@ static void dhcp_process_options(uchar *popt, uchar *end)
net_boot_file_name[size] = 0;
}
break;
- case 209: /* PXELINUX Config File */
+ case DHCP_OPTION_PXE_CONFIG_FILE: /* PXELINUX Config File */
if (IS_ENABLED(CONFIG_BOOTP_PXE_DHCP_OPTION)) {
/* In case it has already been allocated when get DHCP Offer packet,
* free first to avoid memory leak.
diff --git a/net/bootp.h b/net/bootp.h
index 4e32b19d424..24b32c73f62 100644
--- a/net/bootp.h
+++ b/net/bootp.h
@@ -91,6 +91,8 @@ typedef enum { INIT,
#define DHCP_NAK 6
#define DHCP_RELEASE 7
+#define DHCP_OPTION_PXE_CONFIG_FILE 209 /* "ConfigFile" option according to rfc5071 */
+
/**********************************************************************/
#endif /* __BOOTP_H__ */
--
2.42.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v6 2/3] net: bootp: BOOTP/DHCPv4 retransmission improvements
2024-04-29 18:33 [PATCH v6 0/3] BOOTP/DHCPv4 enhancements Sean Edmond
2024-04-29 18:33 ` [PATCH v6 1/3] net: Enhancements for dhcp option 209 Sean Edmond
@ 2024-04-29 18:33 ` Sean Edmond
2024-05-08 15:32 ` Tom Rini
2024-04-29 18:33 ` [PATCH v6 3/3] net: bootp: add config option BOOTP_RANDOM_XID Sean Edmond
2 siblings, 1 reply; 6+ messages in thread
From: Sean Edmond @ 2024-04-29 18:33 UTC (permalink / raw)
To: u-boot
Cc: trini, Sean Edmond, AKASHI Takahiro, Bin Meng, Charles Hardin,
Heinrich Schuchardt, Ilias Apalodimas, Joe Hershberger,
Michal Simek, Oleksandr Suvorov, Ramon Fried, Sean Anderson,
Simon Glass, Vincent Stehlé
This patch introduces 3 improvements to align with RFC 951:
- retransmission backoff interval maximum is configurable
- initial retranmission backoff interval is configurable
- transaction ID is kept the same for each BOOTP/DHCPv4 request
In applications where thousands of nodes are serviced by a single DHCP
server, maximizing the retransmission backoff interval at 2 seconds (the
current u-boot default) exerts high pressure on the DHCP server and
network layer.
RFC 951 “7.2. Client Retransmission Strategy” states that the
retransmission backoff interval should be limited to 60 seconds. This
patch allows the interval to be configurable using the environment
variable "bootpretransmitperiodmax"
The initial retranmission backoff period defaults to 250ms, which is
also too small for these scenarios with many clients. This patch makes
the initial retransmission interval to be configurable using the
environment variable "bootpretransmitperiodinit".
Also, on a retransmission it is not expected for the transaction ID to
change (only the 'secs' field should be updated). Let's save the
transaction ID and use the same transaction ID for each BOOTP/DHCPv4
exchange.
Signed-off-by: Sean Edmond <seanedmond@microsoft.com>
---
Changes in v7:
- Remove "depends on LIB_RAND || LIB_HW_RAND" from CMD_BOOTP
- Add CMD_BOOTP/CMD_DHCP/CMD_DHCP6 to LIB_RAND menu choice
- Add space after "config CMD_DHCP"
Changes in v6:
- CMD_BOOTP should "depends on LIB_RAND || LIB_HW_RAND"
Changes in v4:
- Add "select LIB_RAND" for "config CMD_BOOTP" (retransmission
improvements require rand())
Changes in v3:
- Set RETRANSMIT_PERIOD_MAX_MS=60000
- Add randomization factor to retransmission timeout
Changes in v2:
- use env_get_ulong() to get environment variables
lib/Kconfig | 3 ++-
net/bootp.c | 71 +++++++++++++++++++++++++++++++++++++++++------------
2 files changed, 57 insertions(+), 17 deletions(-)
diff --git a/lib/Kconfig b/lib/Kconfig
index 189e6eb31aa..9b62b3bbea7 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -265,7 +265,8 @@ config REGEX
choice
prompt "Pseudo-random library support type"
depends on NET_RANDOM_ETHADDR || RANDOM_UUID || CMD_UUID || \
- RNG_SANDBOX || UT_LIB && AES || FAT_WRITE
+ RNG_SANDBOX || UT_LIB && AES || FAT_WRITE || CMD_BOOTP || \
+ CMD_DHCP || CMD_DHCP6
default LIB_RAND
help
Select the library to provide pseudo-random number generator
diff --git a/net/bootp.c b/net/bootp.c
index b9e3cccb4f9..0109446dd6f 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -42,6 +42,22 @@
*/
#define TIMEOUT_MS ((3 + (CONFIG_NET_RETRY_COUNT * 5)) * 1000)
+/*
+ * According to rfc951 : 7.2. Client Retransmission Strategy
+ * "After the 'average' backoff reaches about 60 seconds, it should be
+ * increased no further, but still randomized."
+ *
+ * U-Boot has saturated this backoff at 2 seconds for a long time.
+ * To modify, set the environment variable "bootpretransmitperiodmax"
+ */
+#define RETRANSMIT_PERIOD_MAX_MS 60000
+
+/* Retransmission timeout for the initial packet (in milliseconds).
+ * This timeout will double on each retry. To modify, set the
+ * environment variable bootpretransmitperiodinit.
+ */
+#define RETRANSMIT_PERIOD_INIT_MS 250
+
#ifndef CFG_DHCP_MIN_EXT_LEN /* minimal length of extension list */
#define CFG_DHCP_MIN_EXT_LEN 64
#endif
@@ -53,6 +69,7 @@
u32 bootp_ids[CFG_BOOTP_ID_CACHE_SIZE];
unsigned int bootp_num_ids;
int bootp_try;
+u32 bootp_id;
ulong bootp_start;
ulong bootp_timeout;
char net_nis_domain[32] = {0,}; /* Our NIS domain */
@@ -60,6 +77,7 @@ char net_hostname[32] = {0,}; /* Our hostname */
char net_root_path[CONFIG_BOOTP_MAX_ROOT_PATH_LEN] = {0,}; /* Our bootpath */
static ulong time_taken_max;
+static u32 retransmit_period_max_ms;
#if defined(CONFIG_CMD_DHCP)
static dhcp_state_t dhcp_state = INIT;
@@ -396,6 +414,7 @@ static void bootp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
static void bootp_timeout_handler(void)
{
ulong time_taken = get_timer(bootp_start);
+ int rand_minus_plus_100;
if (time_taken >= time_taken_max) {
#ifdef CONFIG_BOOTP_MAY_FAIL
@@ -414,8 +433,17 @@ static void bootp_timeout_handler(void)
}
} else {
bootp_timeout *= 2;
- if (bootp_timeout > 2000)
- bootp_timeout = 2000;
+ if (bootp_timeout > retransmit_period_max_ms)
+ bootp_timeout = retransmit_period_max_ms;
+
+ /* Randomize by adding bootp_timeout*RAND, where RAND
+ * is a randomization factor between -0.1..+0.1
+ */
+ srand(get_ticks() + rand());
+ rand_minus_plus_100 = ((rand() % 200) - 100);
+ bootp_timeout = bootp_timeout +
+ (((int)bootp_timeout * rand_minus_plus_100) / 1000);
+
net_set_timeout_handler(bootp_timeout, bootp_timeout_handler);
bootp_request();
}
@@ -711,10 +739,14 @@ static int bootp_extended(u8 *e)
void bootp_reset(void)
{
+ char *ep; /* Environment pointer */
+
bootp_num_ids = 0;
bootp_try = 0;
bootp_start = get_timer(0);
- bootp_timeout = 250;
+
+ bootp_timeout = env_get_ulong("bootpretransmitperiodinit", 10, RETRANSMIT_PERIOD_INIT_MS);
+
}
void bootp_request(void)
@@ -726,7 +758,6 @@ void bootp_request(void)
#ifdef CONFIG_BOOTP_RANDOM_DELAY
ulong rand_ms;
#endif
- u32 bootp_id;
struct in_addr zero_ip;
struct in_addr bcast_ip;
char *ep; /* Environment pointer */
@@ -742,6 +773,9 @@ void bootp_request(void)
else
time_taken_max = TIMEOUT_MS;
+ retransmit_period_max_ms = env_get_ulong("bootpretransmitperiodmax", 10,
+ RETRANSMIT_PERIOD_MAX_MS);
+
#ifdef CONFIG_BOOTP_RANDOM_DELAY /* Random BOOTP delay */
if (bootp_try == 0)
srand_mac();
@@ -801,18 +835,23 @@ void bootp_request(void)
extlen = bootp_extended((u8 *)bp->bp_vend);
#endif
- /*
- * Bootp ID is the lower 4 bytes of our ethernet address
- * plus the current time in ms.
- */
- bootp_id = ((u32)net_ethaddr[2] << 24)
- | ((u32)net_ethaddr[3] << 16)
- | ((u32)net_ethaddr[4] << 8)
- | (u32)net_ethaddr[5];
- bootp_id += get_timer(0);
- bootp_id = htonl(bootp_id);
- bootp_add_id(bootp_id);
- net_copy_u32(&bp->bp_id, &bootp_id);
+ /* Only generate a new transaction ID for each new BOOTP request */
+ if (bootp_try == 1) {
+ /*
+ * Bootp ID is the lower 4 bytes of our ethernet address
+ * plus the current time in ms.
+ */
+ bootp_id = ((u32)net_ethaddr[2] << 24)
+ | ((u32)net_ethaddr[3] << 16)
+ | ((u32)net_ethaddr[4] << 8)
+ | (u32)net_ethaddr[5];
+ bootp_id += get_timer(0);
+ bootp_id = htonl(bootp_id);
+ bootp_add_id(bootp_id);
+ net_copy_u32(&bp->bp_id, &bootp_id);
+ } else {
+ net_copy_u32(&bp->bp_id, &bootp_id);
+ }
/*
* Calculate proper packet lengths taking into account the
--
2.42.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v6 3/3] net: bootp: add config option BOOTP_RANDOM_XID
2024-04-29 18:33 [PATCH v6 0/3] BOOTP/DHCPv4 enhancements Sean Edmond
2024-04-29 18:33 ` [PATCH v6 1/3] net: Enhancements for dhcp option 209 Sean Edmond
2024-04-29 18:33 ` [PATCH v6 2/3] net: bootp: BOOTP/DHCPv4 retransmission improvements Sean Edmond
@ 2024-04-29 18:33 ` Sean Edmond
2 siblings, 0 replies; 6+ messages in thread
From: Sean Edmond @ 2024-04-29 18:33 UTC (permalink / raw)
To: u-boot
Cc: trini, Sean Edmond, AKASHI Takahiro, Charles Hardin,
Francis Laniel, Heinrich Schuchardt, Joe Hershberger,
Mattijs Korpershoek, Michal Simek, Peter Robinson, Ramon Fried,
Sean Anderson, Simon Glass
The new config option BOOTP_RANDOM_XID will randomize the transaction ID
for each new BOOT/DHCPv4 exchange.
Signed-off-by: Sean Edmond <seanedmond@microsoft.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
---
(no changes since v5)
Changes in v5:
- fix depends for BOOTP_RANDOM_XID:
"depends on CMD_BOOTP && (LIB_RAND || LIB_HW_RAND)"
Changes in v3:
- Add depends for BOOTP_RANDOM_XID
cmd/Kconfig | 7 +++++++
net/bootp.c | 31 +++++++++++++++++--------------
2 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/cmd/Kconfig b/cmd/Kconfig
index 54c4ab8570c..82f6a089586 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1909,6 +1909,13 @@ config BOOTP_VCI_STRING
default "U-Boot.arm" if ARM
default "U-Boot"
+config BOOTP_RANDOM_XID
+ bool "Send random transaction ID to BOOTP/DHCP server"
+ depends on CMD_BOOTP && (LIB_RAND || LIB_HW_RAND)
+ help
+ Selecting this will allow for a random transaction ID to get
+ selected for each BOOTP/DHCPv4 exchange.
+
if CMD_DHCP6
config DHCP6_PXE_CLIENTARCH
diff --git a/net/bootp.c b/net/bootp.c
index 0109446dd6f..e336282cb8f 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -837,22 +837,25 @@ void bootp_request(void)
/* Only generate a new transaction ID for each new BOOTP request */
if (bootp_try == 1) {
- /*
- * Bootp ID is the lower 4 bytes of our ethernet address
- * plus the current time in ms.
- */
- bootp_id = ((u32)net_ethaddr[2] << 24)
- | ((u32)net_ethaddr[3] << 16)
- | ((u32)net_ethaddr[4] << 8)
- | (u32)net_ethaddr[5];
- bootp_id += get_timer(0);
- bootp_id = htonl(bootp_id);
- bootp_add_id(bootp_id);
- net_copy_u32(&bp->bp_id, &bootp_id);
- } else {
- net_copy_u32(&bp->bp_id, &bootp_id);
+ if (IS_ENABLED(CONFIG_BOOTP_RANDOM_XID)) {
+ srand(get_ticks() + rand());
+ bootp_id = rand();
+ } else {
+ /*
+ * Bootp ID is the lower 4 bytes of our ethernet address
+ * plus the current time in ms.
+ */
+ bootp_id = ((u32)net_ethaddr[2] << 24)
+ | ((u32)net_ethaddr[3] << 16)
+ | ((u32)net_ethaddr[4] << 8)
+ | (u32)net_ethaddr[5];
+ bootp_id += get_timer(0);
+ bootp_id = htonl(bootp_id);
+ }
}
+ bootp_add_id(bootp_id);
+ net_copy_u32(&bp->bp_id, &bootp_id);
/*
* Calculate proper packet lengths taking into account the
* variable size of the options field
--
2.42.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v6 2/3] net: bootp: BOOTP/DHCPv4 retransmission improvements
2024-04-29 18:33 ` [PATCH v6 2/3] net: bootp: BOOTP/DHCPv4 retransmission improvements Sean Edmond
@ 2024-05-08 15:32 ` Tom Rini
0 siblings, 0 replies; 6+ messages in thread
From: Tom Rini @ 2024-05-08 15:32 UTC (permalink / raw)
To: Sean Edmond
Cc: u-boot, AKASHI Takahiro, Bin Meng, Charles Hardin,
Heinrich Schuchardt, Ilias Apalodimas, Joe Hershberger,
Michal Simek, Oleksandr Suvorov, Ramon Fried, Sean Anderson,
Simon Glass, Vincent Stehlé
[-- Attachment #1: Type: text/plain, Size: 2079 bytes --]
On Mon, Apr 29, 2024 at 11:33:57AM -0700, Sean Edmond wrote:
> This patch introduces 3 improvements to align with RFC 951:
> - retransmission backoff interval maximum is configurable
> - initial retranmission backoff interval is configurable
> - transaction ID is kept the same for each BOOTP/DHCPv4 request
>
> In applications where thousands of nodes are serviced by a single DHCP
> server, maximizing the retransmission backoff interval at 2 seconds (the
> current u-boot default) exerts high pressure on the DHCP server and
> network layer.
>
> RFC 951 “7.2. Client Retransmission Strategy” states that the
> retransmission backoff interval should be limited to 60 seconds. This
> patch allows the interval to be configurable using the environment
> variable "bootpretransmitperiodmax"
>
> The initial retranmission backoff period defaults to 250ms, which is
> also too small for these scenarios with many clients. This patch makes
> the initial retransmission interval to be configurable using the
> environment variable "bootpretransmitperiodinit".
>
> Also, on a retransmission it is not expected for the transaction ID to
> change (only the 'secs' field should be updated). Let's save the
> transaction ID and use the same transaction ID for each BOOTP/DHCPv4
> exchange.
>
> Signed-off-by: Sean Edmond <seanedmond@microsoft.com>
On numerous platforms we now get:
+(imx8qm_dmsse20a1) WARNING 'mx8qm-ahab-container.img' not found, resulting binary is not-functional
+(imx8qm_dmsse20a1) net/bootp.c: In function 'bootp_reset':
+(imx8qm_dmsse20a1) net/bootp.c:741:15: error: unused variable 'ep' [-Werror=unused-variable]
+(imx8qm_dmsse20a1) 741 | char *ep; /* Environment pointer */
+(imx8qm_dmsse20a1) | ^~
+(imx8qm_dmsse20a1) cc1: all warnings being treated as errors
+(imx8qm_dmsse20a1) make[2]: *** [scripts/Makefile.build:257: net/bootp.o] Error 1
+(imx8qm_dmsse20a1) make[1]: *** [Makefile:1892: net] Error 2
+(imx8qm_dmsse20a1) make: *** [Makefile:177: sub-make] Error 2
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-05-08 15:32 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-29 18:33 [PATCH v6 0/3] BOOTP/DHCPv4 enhancements Sean Edmond
2024-04-29 18:33 ` [PATCH v6 1/3] net: Enhancements for dhcp option 209 Sean Edmond
2024-04-29 18:33 ` [PATCH v6 2/3] net: bootp: BOOTP/DHCPv4 retransmission improvements Sean Edmond
2024-05-08 15:32 ` Tom Rini
2024-04-29 18:33 ` [PATCH v6 3/3] net: bootp: add config option BOOTP_RANDOM_XID Sean Edmond
-- strict thread matches above, loose matches on Subject: below --
2023-11-22 23:27 [PATCH v6 0/3] BOOTP/DHCPv4 enhancements Sean Edmond
2023-11-22 23:27 ` [PATCH v6 1/3] net: Enhancements for dhcp option 209 Sean Edmond
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox