Skip to content

Commit

Permalink
[netdevice] Add "hwaddr" setting
Browse files Browse the repository at this point in the history
Expose the underlying hardware address as a setting.  For IPoIB
devices, this provides scripts with access to the Infiniband GUID.

Requested-by: Allen, Benjamin S. <bsallen@alcf.anl.gov>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Sep 6, 2017
1 parent 7e673a6 commit 8047baf
Showing 1 changed file with 30 additions and 5 deletions.
35 changes: 30 additions & 5 deletions src/net/netdev_settings.c
Expand Up @@ -45,6 +45,11 @@ const struct setting mac_setting __setting ( SETTING_NETDEV, mac ) = {
.description = "MAC address",
.type = &setting_type_hex,
};
const struct setting hwaddr_setting __setting ( SETTING_NETDEV, hwaddr ) = {
.name = "hwaddr",
.description = "Hardware address",
.type = &setting_type_hex,
};
const struct setting bustype_setting __setting ( SETTING_NETDEV, bustype ) = {
.name = "bustype",
.description = "Bus type",
Expand Down Expand Up @@ -78,7 +83,7 @@ const struct setting mtu_setting __setting ( SETTING_NETDEV, mtu ) = {
};

/**
* Store MAC address setting
* Store link-layer address setting
*
* @v netdev Network device
* @v data Setting data, or NULL to clear setting
Expand All @@ -103,7 +108,7 @@ static int netdev_store_mac ( struct net_device *netdev,
}

/**
* Fetch MAC address setting
* Fetch link-layer address setting
*
* @v netdev Network device
* @v data Buffer to fill with setting data
Expand All @@ -112,11 +117,30 @@ static int netdev_store_mac ( struct net_device *netdev,
*/
static int netdev_fetch_mac ( struct net_device *netdev, void *data,
size_t len ) {
size_t max_len = netdev->ll_protocol->ll_addr_len;

if ( len > netdev->ll_protocol->ll_addr_len )
len = netdev->ll_protocol->ll_addr_len;
if ( len > max_len )
len = max_len;
memcpy ( data, netdev->ll_addr, len );
return netdev->ll_protocol->ll_addr_len;
return max_len;
}

/**
* Fetch hardware address setting
*
* @v netdev Network device
* @v data Buffer to fill with setting data
* @v len Length of buffer
* @ret len Length of setting data, or negative error
*/
static int netdev_fetch_hwaddr ( struct net_device *netdev, void *data,
size_t len ) {
size_t max_len = netdev->ll_protocol->hw_addr_len;

if ( len > max_len )
len = max_len;
memcpy ( data, netdev->hw_addr, len );
return max_len;
}

/**
Expand Down Expand Up @@ -253,6 +277,7 @@ struct netdev_setting_operation {
/** Network device settings */
static struct netdev_setting_operation netdev_setting_operations[] = {
{ &mac_setting, netdev_store_mac, netdev_fetch_mac },
{ &hwaddr_setting, NULL, netdev_fetch_hwaddr },
{ &bustype_setting, NULL, netdev_fetch_bustype },
{ &busloc_setting, NULL, netdev_fetch_busloc },
{ &busid_setting, NULL, netdev_fetch_busid },
Expand Down

0 comments on commit 8047baf

Please sign in to comment.