Previously the mac addresses of virtual netmap devices would clash if
multiple odp processes were run on the same host.

Signed-off-by: Matias Elo <[email protected]>
---
 platform/linux-generic/pktio/netmap.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/platform/linux-generic/pktio/netmap.c 
b/platform/linux-generic/pktio/netmap.c
index ae3db34..b9e983d 100644
--- a/platform/linux-generic/pktio/netmap.c
+++ b/platform/linux-generic/pktio/netmap.c
@@ -386,6 +386,7 @@ static int netmap_open(odp_pktio_t id ODP_UNUSED, 
pktio_entry_t *pktio_entry,
 
        if (pkt_nm->is_virtual) {
                static unsigned mac;
+               uint32_t pid = getpid();
 
                pkt_nm->capa.max_input_queues = 1;
                pkt_nm->capa.set_op.op.promisc_mode = 0;
@@ -393,6 +394,10 @@ static int netmap_open(odp_pktio_t id ODP_UNUSED, 
pktio_entry_t *pktio_entry,
                pktio_entry->s.stats_type = STATS_UNSUPPORTED;
                /* Set MAC address for virtual interface */
                pkt_nm->if_mac[0] = 0x2;
+               pkt_nm->if_mac[1] = (pid >> 24) & 0xff;
+               pkt_nm->if_mac[2] = (pid >> 16) & 0xff;
+               pkt_nm->if_mac[3] = (pid >> 8) & 0xff;
+               pkt_nm->if_mac[4] = pid & 0xff;
                pkt_nm->if_mac[5] = ++mac;
 
                return 0;
-- 
2.7.4

Reply via email to