net: bootp: add config option BOOTP_RANDOM_XID

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>
This commit is contained in:
Sean Edmond 2024-05-08 19:39:03 -07:00 committed by Tom Rini
parent e6bca3305b
commit 2111bd7e93
2 changed files with 24 additions and 14 deletions

View File

@ -1909,6 +1909,13 @@ config BOOTP_VCI_STRING
default "U-Boot.arm" if ARM default "U-Boot.arm" if ARM
default "U-Boot" 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 if CMD_DHCP6
config DHCP6_PXE_CLIENTARCH config DHCP6_PXE_CLIENTARCH

View File

@ -834,6 +834,10 @@ void bootp_request(void)
/* Only generate a new transaction ID for each new BOOTP request */ /* Only generate a new transaction ID for each new BOOTP request */
if (bootp_try == 1) { if (bootp_try == 1) {
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 * Bootp ID is the lower 4 bytes of our ethernet address
* plus the current time in ms. * plus the current time in ms.
@ -844,12 +848,11 @@ void bootp_request(void)
| (u32)net_ethaddr[5]; | (u32)net_ethaddr[5];
bootp_id += get_timer(0); bootp_id += get_timer(0);
bootp_id = htonl(bootp_id); 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);
} }
bootp_add_id(bootp_id);
net_copy_u32(&bp->bp_id, &bootp_id);
/* /*
* Calculate proper packet lengths taking into account the * Calculate proper packet lengths taking into account the
* variable size of the options field * variable size of the options field