net: Consistently use qemu_macaddr_default_if_unset
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 <armbru@redhat.com> CC: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
44e798d395
commit
6eed18568d
@ -898,7 +898,7 @@ void dp83932_init(NICInfo *nd, target_phys_addr_t base, int it_shift,
|
||||
s->watchdog = qemu_new_timer_ns(vm_clock, dp8393x_watchdog, s);
|
||||
s->regs[SONIC_SR] = 0x0004; /* only revision recognized by Linux */
|
||||
|
||||
memcpy(s->conf.macaddr.a, nd->macaddr, sizeof(s->conf.macaddr));
|
||||
s->conf.macaddr = nd->macaddr;
|
||||
s->conf.vlan = nd->vlan;
|
||||
s->conf.peer = nd->netdev;
|
||||
|
||||
|
@ -602,7 +602,7 @@ void *etraxfs_eth_init(NICInfo *nd, target_phys_addr_t base, int phyaddr)
|
||||
DEVICE_NATIVE_ENDIAN);
|
||||
cpu_register_physical_memory (base, 0x5c, eth->ethregs);
|
||||
|
||||
memcpy(eth->conf.macaddr.a, nd->macaddr, sizeof(nd->macaddr));
|
||||
eth->conf.macaddr = nd->macaddr;
|
||||
eth->conf.vlan = nd->vlan;
|
||||
eth->conf.peer = nd->netdev;
|
||||
|
||||
|
@ -471,7 +471,7 @@ void mcf_fec_init(NICInfo *nd, target_phys_addr_t base, qemu_irq *irq)
|
||||
DEVICE_NATIVE_ENDIAN);
|
||||
cpu_register_physical_memory(base, 0x400, s->mmio_index);
|
||||
|
||||
memcpy(s->conf.macaddr.a, nd->macaddr, sizeof(nd->macaddr));
|
||||
s->conf.macaddr = nd->macaddr;
|
||||
s->conf.vlan = nd->vlan;
|
||||
s->conf.peer = nd->netdev;
|
||||
|
||||
|
@ -258,7 +258,7 @@ void mipsnet_init (int base, qemu_irq irq, NICInfo *nd)
|
||||
s->irq = irq;
|
||||
|
||||
if (nd) {
|
||||
memcpy(s->conf.macaddr.a, nd->macaddr, sizeof(nd->macaddr));
|
||||
s->conf.macaddr = nd->macaddr;
|
||||
s->conf.vlan = nd->vlan;
|
||||
s->conf.peer = nd->netdev;
|
||||
|
||||
|
@ -459,7 +459,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->macaddr);
|
||||
qdev_prop_set_macaddr(dev, "mac", nd->macaddr.a);
|
||||
if (nd->vlan)
|
||||
qdev_prop_set_vlan(dev, "vlan", nd->vlan);
|
||||
if (nd->netdev)
|
||||
|
@ -1230,7 +1230,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 < 7; i++) {
|
||||
if (board->dc4 & (1 << i)) {
|
||||
|
@ -126,8 +126,8 @@ int xen_config_dev_nic(NICInfo *nic)
|
||||
char mac[20];
|
||||
|
||||
snprintf(mac, sizeof(mac), "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||
nic->macaddr[0], nic->macaddr[1], nic->macaddr[2],
|
||||
nic->macaddr[3], nic->macaddr[4], nic->macaddr[5]);
|
||||
nic->macaddr.a[0], nic->macaddr.a[1], nic->macaddr.a[2],
|
||||
nic->macaddr.a[3], nic->macaddr.a[4], nic->macaddr.a[5]);
|
||||
xen_be_printf(NULL, 1, "config nic %d: mac=\"%s\"\n", nic->vlan->id, mac);
|
||||
xen_config_dev_dirs("vif", "qnic", nic->vlan->id, fe, be, sizeof(fe));
|
||||
|
||||
|
10
net.c
10
net.c
@ -776,18 +776,12 @@ static int net_init_nic(QemuOpts *opts,
|
||||
nd->devaddr = qemu_strdup(qemu_opt_get(opts, "addr"));
|
||||
}
|
||||
|
||||
nd->macaddr[0] = 0x52;
|
||||
nd->macaddr[1] = 0x54;
|
||||
nd->macaddr[2] = 0x00;
|
||||
nd->macaddr[3] = 0x12;
|
||||
nd->macaddr[4] = 0x34;
|
||||
nd->macaddr[5] = 0x56 + idx;
|
||||
|
||||
if (qemu_opt_get(opts, "macaddr") &&
|
||||
net_parse_macaddr(nd->macaddr, qemu_opt_get(opts, "macaddr")) < 0) {
|
||||
net_parse_macaddr(nd->macaddr.a, qemu_opt_get(opts, "macaddr")) < 0) {
|
||||
error_report("invalid syntax for ethernet address");
|
||||
return -1;
|
||||
}
|
||||
qemu_macaddr_default_if_unset(&nd->macaddr);
|
||||
|
||||
nd->nvectors = qemu_opt_get_number(opts, "vectors",
|
||||
DEV_NVECTORS_UNSPECIFIED);
|
||||
|
Loading…
Reference in New Issue
Block a user