From efe81263728d1756b21cf08279c5eb96ab1ec646 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Thu, 26 Feb 2026 13:11:57 +0000 Subject: [PATCH] [cachedhcp] Automatically open network device matching cached DHCPACK It is unintuitive to have to include an "ifopen" at the start of an autoexec.ipxe script. Provide a mechanism for upper-layer drivers to mark a network device to be opened automatically upon registration, and do so for the device to which the cached DHCPACK is applied. Signed-off-by: Michael Brown --- src/core/cachedhcp.c | 3 +++ src/include/ipxe/netdevice.h | 3 +++ src/net/netdevice.c | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/core/cachedhcp.c b/src/core/cachedhcp.c index 3f6564efd..21cb382ad 100644 --- a/src/core/cachedhcp.c +++ b/src/core/cachedhcp.c @@ -171,6 +171,9 @@ static int cachedhcp_apply ( struct cached_dhcp_packet *cache, settings = netdev_settings ( netdev ); DBGC ( colour, "CACHEDHCP %s is for %s\n", cache->name, netdev->name ); + + /* Mark network device to be opened automatically */ + netdev->state |= NETDEV_AUTO_OPEN; } /* Register settings */ diff --git a/src/include/ipxe/netdevice.h b/src/include/ipxe/netdevice.h index 62f0dd1f7..ebd54658b 100644 --- a/src/include/ipxe/netdevice.h +++ b/src/include/ipxe/netdevice.h @@ -461,6 +461,9 @@ struct net_device { /** Network device must be polled even when closed */ #define NETDEV_INSOMNIAC 0x0040 +/** Network device should be opened automatically */ +#define NETDEV_AUTO_OPEN 0x0080 + /** Link-layer protocol table */ #define LL_PROTOCOLS __table ( struct ll_protocol, "ll_protocols" ) diff --git a/src/net/netdevice.c b/src/net/netdevice.c index 0af916ff5..af0debd5a 100644 --- a/src/net/netdevice.c +++ b/src/net/netdevice.c @@ -836,6 +836,10 @@ int register_netdev ( struct net_device *netdev ) { } } + /* Attempt to open device automatically, if applicable */ + if ( netdev->state & NETDEV_AUTO_OPEN ) + netdev_open ( netdev ); + return 0; err_probe: -- 2.47.3