]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
net: Add a network device specific self-announcement ability
authorDr. David Alan Gilbert <dgilbert@redhat.com>
Wed, 27 Feb 2019 13:24:09 +0000 (13:24 +0000)
committerJason Wang <jasowang@redhat.com>
Tue, 5 Mar 2019 03:27:41 +0000 (11:27 +0800)
Some network devices have a capability to do self announcements
(ex: virtio-net).  Add infrastructure that would allow devices
to expose this ability.

Signed-off-by: Vladislav Yasevich <vyasevic@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
include/net/net.h
net/announce.c

index 075cc0126719790864b322067ed65740989386bd..acf0451fc4fd20f49b8972ae2dcc75baee9ffa02 100644 (file)
@@ -60,6 +60,7 @@ typedef int (SetVnetLE)(NetClientState *, bool);
 typedef int (SetVnetBE)(NetClientState *, bool);
 typedef struct SocketReadState SocketReadState;
 typedef void (SocketReadStateFinalize)(SocketReadState *rs);
+typedef void (NetAnnounce)(NetClientState *);
 
 typedef struct NetClientInfo {
     NetClientDriver type;
@@ -80,6 +81,7 @@ typedef struct NetClientInfo {
     SetVnetHdrLen *set_vnet_hdr_len;
     SetVnetLE *set_vnet_le;
     SetVnetBE *set_vnet_be;
+    NetAnnounce *announce;
 } NetClientInfo;
 
 struct NetClientState {
index 13ad9c2ba82f063c8af56f07041c23215c53d98b..070f37a7fa569aa9b49bd8faf76194255c6d1b1f 100644 (file)
@@ -102,6 +102,11 @@ static void qemu_announce_self_iter(NICState *nic, void *opaque)
     len = announce_self_create(buf, nic->conf->macaddr.a);
 
     qemu_send_packet_raw(qemu_get_queue(nic), buf, len);
+
+    /* if the NIC provides it's own announcement support, use it as well */
+    if (nic->ncs->info->announce) {
+        nic->ncs->info->announce(nic->ncs);
+    }
 }
 static void qemu_announce_self_once(void *opaque)
 {