]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
net: bootp: Fall back to BOOTP from DHCP when unit testing
authorSean Anderson <seanga2@gmail.com>
Sat, 14 Oct 2023 20:47:53 +0000 (16:47 -0400)
committerTom Rini <trini@konsulko.com>
Wed, 18 Oct 2023 00:50:52 +0000 (20:50 -0400)
If we sent a DHCP packet and get a BOOTP response from the server, we
shouldn't try to send a DHCPREQUEST packet, since it won't be DHCPACKed.
Transition straight to BIND. This is only enabled for UNIT_TEST to avoid
bloat, since I suspect the number of BOOTP servers in the wild is
vanishingly small.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
net/bootp.c

index 2053cce88c600b5e2b6a18c57431da8a010c30ec..7b0f45e18a9737880b5d2e63ef2d20ded22798e6 100644 (file)
@@ -1073,6 +1073,11 @@ static void dhcp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
                            CONFIG_SYS_BOOTFILE_PREFIX,
                            strlen(CONFIG_SYS_BOOTFILE_PREFIX)) == 0) {
 #endif /* CONFIG_SYS_BOOTFILE_PREFIX */
+                       if (CONFIG_IS_ENABLED(UNIT_TEST) &&
+                           dhcp_message_type((u8 *)bp->bp_vend) == -1) {
+                               debug("got BOOTP response; transitioning to BOUND\n");
+                               goto dhcp_got_bootp;
+                       }
                        dhcp_packet_process_options(bp);
                        if (CONFIG_IS_ENABLED(EFI_LOADER) &&
                            IS_ENABLED(CONFIG_NETDEVICES))
@@ -1099,6 +1104,7 @@ static void dhcp_handler(uchar *pkt, unsigned dest, struct in_addr sip,
                debug("DHCP State: REQUESTING\n");
 
                if (dhcp_message_type((u8 *)bp->bp_vend) == DHCP_ACK) {
+dhcp_got_bootp:
                        dhcp_packet_process_options(bp);
                        /* Store net params from reply */
                        store_net_params(bp);