From 79691961bae9a0eaf261615aeff472b5d186dfc0 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 31 Jul 2007 03:32:22 +0100 Subject: Add identifier for the network device into the DHCP request. --- src/net/udp/dhcp.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/net') diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index b82db1a42..f8f59e2e4 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -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; } -- cgit v1.2.3-55-g7522