<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">From 317bad54b85ddb68da048d39f89f5ad3021fe6b3 Mon Sep 17 00:00:00 2001
From: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
Date: Fri, 29 Jul 2011 16:48:17 -0300
Subject: [RHEL6 qemu-kvm PATCH 1/3] net: Consistently use qemu_macaddr_default_if_unset

RH-Author: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
Message-id: &lt;20110729164817.GA20646@amt.cnet&gt;
Patchwork-id: 30611
O-Subject: [RHEL6.2 qemu-kvm PATCH] net: Consistently use qemu_macaddr_default_if_unset
Bugzilla: 712046
RH-Acked-by: Markus Armbruster &lt;armbru@redhat.com&gt;
RH-Acked-by: Avi Kivity &lt;avi@redhat.com&gt;
RH-Acked-by: Jes Sorensen &lt;Jes.Sorensen@redhat.com&gt;

BZ: https://bugzilla.redhat.com/show_bug.cgi?id=712046
upstream commit 6eed18568d985f5e091e96205f5ebf50fb823f4e

net: Consistently use qemu_macaddr_default_if_unset

From: Jan Kiszka &lt;jan.kiszka@siemens.com&gt;

Drop the open-coded MAC assignment from net_init_nic and replace it with
standard qemu_macaddr_default_if_unset which is also used by qdev. That
avoid creating colliding MACs when instantiating NICs via different
mechanisms.

This change requires to store the MAC as MACAddr in NICInfo, and the
remaining nd_table users need to be updated.

Based on suggestion by Peter Maydell.

CC: Markus Armbruster &lt;armbru@redhat.com&gt;
CC: Peter Maydell &lt;peter.maydell@linaro.org&gt;
Signed-off-by: Jan Kiszka &lt;jan.kiszka@siemens.com&gt;
Signed-off-by: Anthony Liguori &lt;aliguori@us.ibm.com&gt;
Signed-off-by: Marcelo Tosatti &lt;mtosatti@redhat.com&gt;
Signed-off-by: Eduardo Habkost &lt;ehabkost@redhat.com&gt;
---
 hw/dp8393x.c       |    2 +-
 hw/etraxfs_eth.c   |    2 +-
 hw/mcf_fec.c       |    2 +-
 hw/mipsnet.c       |    2 +-
 hw/qdev.c          |    2 +-
 hw/stellaris.c     |    2 +-
 hw/xen_devconfig.c |    4 ++--
 net.c              |   10 ++--------
 net.h              |    2 +-
 9 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/hw/dp8393x.c b/hw/dp8393x.c
index e65e4d1..3a01310 100644
--- a/hw/dp8393x.c
+++ b/hw/dp8393x.c
@@ -898,7 +898,7 @@ void dp83932_init(NICInfo *nd, target_phys_addr_t base, int it_shift,
     s-&gt;watchdog = qemu_new_timer(vm_clock, dp8393x_watchdog, s);
     s-&gt;regs[SONIC_SR] = 0x0004; /* only revision recognized by Linux */
 
-    memcpy(s-&gt;conf.macaddr.a, nd-&gt;macaddr, sizeof(s-&gt;conf.macaddr));
+    s-&gt;conf.macaddr = nd-&gt;macaddr;
     s-&gt;conf.vlan = nd-&gt;vlan;
     s-&gt;conf.peer = nd-&gt;netdev;
 
diff --git a/hw/etraxfs_eth.c b/hw/etraxfs_eth.c
index dedd107..4bbbc23 100644
--- a/hw/etraxfs_eth.c
+++ b/hw/etraxfs_eth.c
@@ -600,7 +600,7 @@ void *etraxfs_eth_init(NICInfo *nd, target_phys_addr_t base, int phyaddr)
 	eth-&gt;ethregs = cpu_register_io_memory(eth_read, eth_write, eth);
 	cpu_register_physical_memory (base, 0x5c, eth-&gt;ethregs);
 
-	memcpy(eth-&gt;conf.macaddr.a, nd-&gt;macaddr, sizeof(nd-&gt;macaddr));
+	eth-&gt;conf.macaddr = nd-&gt;macaddr;
 	eth-&gt;conf.vlan = nd-&gt;vlan;
 	eth-&gt;conf.peer = nd-&gt;netdev;
 
diff --git a/hw/mcf_fec.c b/hw/mcf_fec.c
index 4e7fbed..22765d7 100644
--- a/hw/mcf_fec.c
+++ b/hw/mcf_fec.c
@@ -470,7 +470,7 @@ void mcf_fec_init(NICInfo *nd, target_phys_addr_t base, qemu_irq *irq)
                                            mcf_fec_writefn, s);
     cpu_register_physical_memory(base, 0x400, s-&gt;mmio_index);
 
-    memcpy(s-&gt;conf.macaddr.a, nd-&gt;macaddr, sizeof(nd-&gt;macaddr));
+    s-&gt;conf.macaddr = nd-&gt;macaddr;
     s-&gt;conf.vlan = nd-&gt;vlan;
     s-&gt;conf.peer = nd-&gt;netdev;
 
diff --git a/hw/mipsnet.c b/hw/mipsnet.c
index a95b3ce..07b6b37 100644
--- a/hw/mipsnet.c
+++ b/hw/mipsnet.c
@@ -273,7 +273,7 @@ void mipsnet_init (int base, qemu_irq irq, NICInfo *nd)
     s-&gt;irq = irq;
 
     if (nd) {
-        memcpy(s-&gt;conf.macaddr.a, nd-&gt;macaddr, sizeof(nd-&gt;macaddr));
+        s-&gt;conf.macaddr = nd-&gt;macaddr;
         s-&gt;conf.vlan = nd-&gt;vlan;
         s-&gt;conf.peer = nd-&gt;netdev;
 
diff --git a/hw/qdev.c b/hw/qdev.c
index 0b0c6a2..41c06d0 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -410,7 +410,7 @@ void qdev_connect_gpio_out(DeviceState * dev, int n, qemu_irq pin)
 
 void qdev_set_nic_properties(DeviceState *dev, NICInfo *nd)
 {
-    qdev_prop_set_macaddr(dev, "mac", nd-&gt;macaddr);
+    qdev_prop_set_macaddr(dev, "mac", nd-&gt;macaddr.a);
     if (nd-&gt;vlan)
         qdev_prop_set_vlan(dev, "vlan", nd-&gt;vlan);
     if (nd-&gt;netdev)
diff --git a/hw/stellaris.c b/hw/stellaris.c
index 5fbcc07..ea50cb1 100644
--- a/hw/stellaris.c
+++ b/hw/stellaris.c
@@ -1330,7 +1330,7 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model,
         }
     }
 
-    stellaris_sys_init(0x400fe000, pic[28], board, nd_table[0].macaddr);
+    stellaris_sys_init(0x400fe000, pic[28], board, nd_table[0].macaddr.a);
 
     for (i = 0; i &lt; 7; i++) {
         if (board-&gt;dc4 &amp; (1 &lt;&lt; i)) {
diff --git a/hw/xen_devconfig.c b/hw/xen_devconfig.c
index ea8f8c4..e3a1e41 100644
--- a/hw/xen_devconfig.c
+++ b/hw/xen_devconfig.c
@@ -124,8 +124,8 @@ int xen_config_dev_nic(NICInfo *nic)
     char mac[20];
 
     snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x",
-	     nic-&gt;macaddr[0], nic-&gt;macaddr[1], nic-&gt;macaddr[2],
-	     nic-&gt;macaddr[3], nic-&gt;macaddr[4], nic-&gt;macaddr[5]);
+             nic-&gt;macaddr.a[0], nic-&gt;macaddr.a[1], nic-&gt;macaddr.a[2],
+             nic-&gt;macaddr.a[3], nic-&gt;macaddr.a[4], nic-&gt;macaddr.a[5]);
     xen_be_printf(NULL, 1, "config nic %d: mac=\"%s\"\n", nic-&gt;vlan-&gt;id, mac);
     xen_config_dev_dirs("vif", "qnic", nic-&gt;vlan-&gt;id, fe, be, sizeof(fe));
 
diff --git a/net.c b/net.c
index 2f498ae..27584e7 100644
--- a/net.c
+++ b/net.c
@@ -834,18 +834,12 @@ static int net_init_nic(QemuOpts *opts,
         nd-&gt;devaddr = qemu_strdup(qemu_opt_get(opts, "addr"));
     }
 
-    nd-&gt;macaddr[0] = 0x52;
-    nd-&gt;macaddr[1] = 0x54;
-    nd-&gt;macaddr[2] = 0x00;
-    nd-&gt;macaddr[3] = 0x12;
-    nd-&gt;macaddr[4] = 0x34;
-    nd-&gt;macaddr[5] = 0x56 + idx;
-
     if (qemu_opt_get(opts, "macaddr") &amp;&amp;
-        net_parse_macaddr(nd-&gt;macaddr, qemu_opt_get(opts, "macaddr")) &lt; 0) {
+        net_parse_macaddr(nd-&gt;macaddr.a, qemu_opt_get(opts, "macaddr")) &lt; 0) {
         error_report("invalid syntax for ethernet address");
         return -1;
     }
+    qemu_macaddr_default_if_unset(&amp;nd-&gt;macaddr);
 
     nd-&gt;nvectors = qemu_opt_get_number(opts, "vectors",
                                        DEV_NVECTORS_UNSPECIFIED);
diff --git a/net.h b/net.h
index 6ceca50..540a3d1 100644
--- a/net.h
+++ b/net.h
@@ -127,7 +127,7 @@ int do_set_link(Monitor *mon, const QDict *qdict, QObject **ret_data);
 #define MAX_NICS 8
 
 struct NICInfo {
-    uint8_t macaddr[6];
+    MACAddr macaddr;
     char *model;
     char *name;
     char *devaddr;
-- 
1.7.3.2

</pre></body></html>