On Wed, Jan 16, 2013 at 11:22:23AM +0200, Michael S. Tsirkin wrote: > On Wed, Jan 16, 2013 at 10:13:28AM +0100, Stefan Hajnoczi wrote: > > On Wed, Jan 16, 2013 at 03:33:24PM +0800, akong@xxxxxxxxxx wrote: > > > +\change_inserted -1930653948 1358320004 > > > +The command VIRTIO_NET_CTRL_MAC_ADDR_SET is used to set > > > +\begin_inset Quotes eld > > > +\end_inset > > > + > > > +physical > > > +\begin_inset Quotes erd > > > +\end_inset > > > + > > > + address of the network card. > > > > The "physical" address of the network card? That term is not defined > > anywhere in the specification. I will replace it with 'the default MAC address' > > Perhaps it's best to explain that the config space "mac" field and > > VIRTIO_NET_CTRL_MAC_ADDR_SET both set the default MAC address which rx > > filtering accepts. (The MAC table is an additional set of MAC addresses > > which rx filtering accepts.) > > > > It would also be worth explaining that VIRTIO_NET_CTRL_MAC_ADDR_SET is > > atomic whereas the config space "mac" field is not. Therefore, > > VIRTIO_NET_CTRL_MAC_ADDR_SET is preferred, especially while the NIC is > > up. Ok, will send a v2, thanks. > > Stefan > It's probably best to simply make the config space field > read-only if the feature bit is acked. It's reasonable. diff --git a/hw/virtio-net.c b/hw/virtio-net.c index c18e276..54c5eae 100644 --- a/hw/virtio-net.c +++ b/hw/virtio-net.c @@ -93,7 +93,8 @@ static void virtio_net_set_config(VirtIODevice *vdev, const uint8_t *config) memcpy(&netcfg, config, sizeof(netcfg)); - if (memcmp(netcfg.mac, n->mac, ETH_ALEN)) { + if (!(n->vdev.guest_features >> VIRTIO_NET_F_CTRL_MAC_ADDR & 1) && + memcmp(netcfg.mac, n->mac, ETH_ALEN)) { memcpy(n->mac, netcfg.mac, ETH_ALEN); qemu_format_nic_info_str(&n->nic->nc, n->mac); } -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html