diff options
author | Michael Brown | 2007-07-31 04:32:22 +0200 |
---|---|---|
committer | Michael Brown | 2007-07-31 04:32:22 +0200 |
commit | 79691961bae9a0eaf261615aeff472b5d186dfc0 (patch) | |
tree | 3f6c6a68144b837b668d1af2b5625828316f6ee1 /src/net/udp | |
parent | Centralise construction of the DHCP request and response packets. (diff) | |
download | ipxe-79691961bae9a0eaf261615aeff472b5d186dfc0.tar.gz ipxe-79691961bae9a0eaf261615aeff472b5d186dfc0.tar.xz ipxe-79691961bae9a0eaf261615aeff472b5d186dfc0.zip |
Add identifier for the network device into the DHCP request.
Diffstat (limited to 'src/net/udp')
-rw-r--r-- | src/net/udp/dhcp.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index b82db1a4..f8f59e2e 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -24,6 +24,7 @@ #include <byteswap.h> #include <gpxe/if_ether.h> #include <gpxe/netdevice.h> +#include <gpxe/device.h> #include <gpxe/xfer.h> #include <gpxe/open.h> #include <gpxe/job.h> @@ -480,6 +481,16 @@ static struct dhcp_option_block * dhcp_parse ( const struct dhcphdr *dhcphdr, * */ +/** DHCP network device descriptor */ +struct dhcp_netdev_desc { + /** Bus type ID */ + uint8_t type; + /** Vendor ID */ + uint16_t vendor; + /** Device ID */ + uint16_t device; +} __attribute__ (( packed )); + /** * Create DHCP request * @@ -495,6 +506,8 @@ int create_dhcp_request ( struct net_device *netdev, int msgtype, struct dhcp_option_block *options, void *data, size_t max_len, struct dhcp_packet *dhcppkt ) { + struct device_description *desc = &netdev->dev->desc; + struct dhcp_netdev_desc dhcp_desc; int rc; /* Create DHCP packet */ @@ -531,6 +544,18 @@ int create_dhcp_request ( struct net_device *netdev, int msgtype, } } + /* Add options to identify the network device */ + dhcp_desc.type = desc->bus_type; + dhcp_desc.vendor = htons ( desc->vendor ); + dhcp_desc.device = htons ( desc->device ); + if ( ( rc = set_dhcp_packet_option ( dhcppkt, DHCP_EB_BUS_ID, + &dhcp_desc, + sizeof ( dhcp_desc ) ) ) != 0 ) { + DBG ( "DHCP could not set bus ID option: %s\n", + strerror ( rc ) ); + return rc; + } + return 0; } |