mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-12 02:06:59 +02:00
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:
parent
e6bca3305b
commit
2111bd7e93
@ -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
|
||||||
|
31
net/bootp.c
31
net/bootp.c
@ -834,22 +834,25 @@ 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)) {
|
||||||
* Bootp ID is the lower 4 bytes of our ethernet address
|
srand(get_ticks() + rand());
|
||||||
* plus the current time in ms.
|
bootp_id = rand();
|
||||||
*/
|
} else {
|
||||||
bootp_id = ((u32)net_ethaddr[2] << 24)
|
/*
|
||||||
| ((u32)net_ethaddr[3] << 16)
|
* Bootp ID is the lower 4 bytes of our ethernet address
|
||||||
| ((u32)net_ethaddr[4] << 8)
|
* plus the current time in ms.
|
||||||
| (u32)net_ethaddr[5];
|
*/
|
||||||
bootp_id += get_timer(0);
|
bootp_id = ((u32)net_ethaddr[2] << 24)
|
||||||
bootp_id = htonl(bootp_id);
|
| ((u32)net_ethaddr[3] << 16)
|
||||||
bootp_add_id(bootp_id);
|
| ((u32)net_ethaddr[4] << 8)
|
||||||
net_copy_u32(&bp->bp_id, &bootp_id);
|
| (u32)net_ethaddr[5];
|
||||||
} else {
|
bootp_id += get_timer(0);
|
||||||
net_copy_u32(&bp->bp_id, &bootp_id);
|
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
|
* Calculate proper packet lengths taking into account the
|
||||||
* variable size of the options field
|
* variable size of the options field
|
||||||
|
Loading…
Reference in New Issue
Block a user