summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/block/ibft.c7
-rw-r--r--src/include/ipxe/ibft.h8
2 files changed, 15 insertions, 0 deletions
diff --git a/src/drivers/block/ibft.c b/src/drivers/block/ibft.c
index f61add321..6aabd766a 100644
--- a/src/drivers/block/ibft.c
+++ b/src/drivers/block/ibft.c
@@ -236,6 +236,7 @@ static int ibft_fill_nic ( struct ibft_nic *nic,
struct in_addr netmask_addr = { 0 };
unsigned int netmask_count = 0;
struct settings *parent = netdev_settings ( netdev );
+ struct settings *origin;
int rc;
/* Fill in common header */
@@ -245,6 +246,12 @@ static int ibft_fill_nic ( struct ibft_nic *nic,
nic->header.flags = ( IBFT_FL_NIC_BLOCK_VALID |
IBFT_FL_NIC_FIRMWARE_BOOT_SELECTED );
+ /* Determine origin of IP address */
+ fetch_setting ( parent, &ip_setting, &origin, NULL, NULL, 0 );
+ nic->origin = ( ( origin == parent ) ?
+ IBFT_NIC_ORIGIN_MANUAL : IBFT_NIC_ORIGIN_DHCP );
+ DBG ( "iBFT NIC origin = %d\n", nic->origin );
+
/* Extract values from configuration settings */
ibft_set_ipaddr_setting ( parent, &nic->ip_address, &ip_setting, 1 );
DBG ( "iBFT NIC IP = %s\n", ibft_ipaddr ( &nic->ip_address ) );
diff --git a/src/include/ipxe/ibft.h b/src/include/ipxe/ibft.h
index 73372122d..35f15105c 100644
--- a/src/include/ipxe/ibft.h
+++ b/src/include/ipxe/ibft.h
@@ -197,6 +197,14 @@ struct ibft_nic {
/** NIC global / link local */
#define IBFT_FL_NIC_GLOBAL 0x04
+/** NIC IP address origin */
+#define IBFT_NIC_ORIGIN_OTHER 0x00
+#define IBFT_NIC_ORIGIN_MANUAL 0x01
+#define IBFT_NIC_ORIGIN_WELLKNOWN 0x02
+#define IBFT_NIC_ORIGIN_DHCP 0x03
+#define IBFT_NIC_ORIGIN_RA 0x04
+#define IBFT_NIC_ORIGIN_UNCHANGED 0x0f
+
/**
* iBFT Target structure
*