1111#include <zephyr/drivers/virtio/virtqueue.h>
1212#include <zephyr/sys/util.h>
1313#include <zephyr/sys/atomic.h>
14- #include <zephyr/random/random.h>
1514#include "eth.h"
1615
1716#define DT_DRV_COMPAT virtio_net
@@ -95,7 +94,7 @@ enum _virtio_net_hdr_gso_types {
9594
9695struct virtnet_config {
9796 const struct device * vdev ;
98- bool random_mac ;
97+ struct net_eth_mac_config mcfg ;
9998 unsigned int inst ;
10099};
101100
@@ -215,13 +214,7 @@ static int virtnet_dev_init(const struct device *dev)
215214 const struct virtnet_config * config = dev -> config ;
216215 struct virtnet_data * data = dev -> data ;
217216
218- if (config -> random_mac ) {
219- sys_rand_get (data -> mac , sizeof (data -> mac ));
220- /* make it a locally administered, unicast address */
221- /* (2nd hex digit of 1st byte is 2) */
222- data -> mac [0 ] &= ~(BIT (0 ) | BIT (2 ) | BIT (3 ));
223- data -> mac [0 ] |= BIT (1 );
224- }
217+ (void )net_eth_mac_load (& config -> mcfg , data -> mac );
225218
226219 data -> virtio_devcfg = virtio_get_device_specific_config (config -> vdev );
227220 if (data -> virtio_devcfg == NULL ) {
@@ -248,11 +241,10 @@ static struct ethernet_api virtnet_api = {
248241#define VIRTIO_NET_DEFINE (inst ) \
249242 static struct virtnet_data virtnet_data_##inst = { \
250243 .dev = DEVICE_DT_INST_GET(inst), \
251- .mac = DT_INST_PROP_OR(inst, local_mac_address, {0}), \
252244 }; \
253245 static const struct virtnet_config virtnet_config_##inst = { \
254246 .vdev = DEVICE_DT_GET(DT_INST_PARENT(inst)), \
255- .random_mac = DT_INST_PROP (inst, zephyr_random_mac_address), \
247+ .mcfg = NET_ETH_MAC_DT_INST_CONFIG_INIT (inst), \
256248 }; \
257249 ETH_NET_DEVICE_DT_INST_DEFINE(inst, virtnet_dev_init, NULL, &virtnet_data_##inst, \
258250 &virtnet_config_##inst, CONFIG_ETH_INIT_PRIORITY, \
0 commit comments