|
@@ -45,6 +45,11 @@ const struct setting mac_setting __setting ( SETTING_NETDEV, mac ) = {
|
45
|
45
|
.description = "MAC address",
|
46
|
46
|
.type = &setting_type_hex,
|
47
|
47
|
};
|
|
48
|
+const struct setting hwaddr_setting __setting ( SETTING_NETDEV, hwaddr ) = {
|
|
49
|
+ .name = "hwaddr",
|
|
50
|
+ .description = "Hardware address",
|
|
51
|
+ .type = &setting_type_hex,
|
|
52
|
+};
|
48
|
53
|
const struct setting bustype_setting __setting ( SETTING_NETDEV, bustype ) = {
|
49
|
54
|
.name = "bustype",
|
50
|
55
|
.description = "Bus type",
|
|
@@ -78,7 +83,7 @@ const struct setting mtu_setting __setting ( SETTING_NETDEV, mtu ) = {
|
78
|
83
|
};
|
79
|
84
|
|
80
|
85
|
/**
|
81
|
|
- * Store MAC address setting
|
|
86
|
+ * Store link-layer address setting
|
82
|
87
|
*
|
83
|
88
|
* @v netdev Network device
|
84
|
89
|
* @v data Setting data, or NULL to clear setting
|
|
@@ -103,7 +108,7 @@ static int netdev_store_mac ( struct net_device *netdev,
|
103
|
108
|
}
|
104
|
109
|
|
105
|
110
|
/**
|
106
|
|
- * Fetch MAC address setting
|
|
111
|
+ * Fetch link-layer address setting
|
107
|
112
|
*
|
108
|
113
|
* @v netdev Network device
|
109
|
114
|
* @v data Buffer to fill with setting data
|
|
@@ -112,11 +117,30 @@ static int netdev_store_mac ( struct net_device *netdev,
|
112
|
117
|
*/
|
113
|
118
|
static int netdev_fetch_mac ( struct net_device *netdev, void *data,
|
114
|
119
|
size_t len ) {
|
|
120
|
+ size_t max_len = netdev->ll_protocol->ll_addr_len;
|
115
|
121
|
|
116
|
|
- if ( len > netdev->ll_protocol->ll_addr_len )
|
117
|
|
- len = netdev->ll_protocol->ll_addr_len;
|
|
122
|
+ if ( len > max_len )
|
|
123
|
+ len = max_len;
|
118
|
124
|
memcpy ( data, netdev->ll_addr, len );
|
119
|
|
- return netdev->ll_protocol->ll_addr_len;
|
|
125
|
+ return max_len;
|
|
126
|
+}
|
|
127
|
+
|
|
128
|
+/**
|
|
129
|
+ * Fetch hardware address setting
|
|
130
|
+ *
|
|
131
|
+ * @v netdev Network device
|
|
132
|
+ * @v data Buffer to fill with setting data
|
|
133
|
+ * @v len Length of buffer
|
|
134
|
+ * @ret len Length of setting data, or negative error
|
|
135
|
+ */
|
|
136
|
+static int netdev_fetch_hwaddr ( struct net_device *netdev, void *data,
|
|
137
|
+ size_t len ) {
|
|
138
|
+ size_t max_len = netdev->ll_protocol->hw_addr_len;
|
|
139
|
+
|
|
140
|
+ if ( len > max_len )
|
|
141
|
+ len = max_len;
|
|
142
|
+ memcpy ( data, netdev->hw_addr, len );
|
|
143
|
+ return max_len;
|
120
|
144
|
}
|
121
|
145
|
|
122
|
146
|
/**
|
|
@@ -253,6 +277,7 @@ struct netdev_setting_operation {
|
253
|
277
|
/** Network device settings */
|
254
|
278
|
static struct netdev_setting_operation netdev_setting_operations[] = {
|
255
|
279
|
{ &mac_setting, netdev_store_mac, netdev_fetch_mac },
|
|
280
|
+ { &hwaddr_setting, NULL, netdev_fetch_hwaddr },
|
256
|
281
|
{ &bustype_setting, NULL, netdev_fetch_bustype },
|
257
|
282
|
{ &busloc_setting, NULL, netdev_fetch_busloc },
|
258
|
283
|
{ &busid_setting, NULL, netdev_fetch_busid },
|