qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH COLO-Frame v17 31/34] net: Add notifier/callback for


From: zhanghailiang
Subject: [Qemu-devel] [PATCH COLO-Frame v17 31/34] net: Add notifier/callback for netdev init
Date: Fri, 3 Jun 2016 15:52:43 +0800

We can register some callback for this notifier,
this will be used by COLO to register a callback which
will add each netdev a buffer filter.

Signed-off-by: zhanghailiang <address@hidden>
Cc: Jason Wang <address@hidden>
Cc: Yang Hongyang <address@hidden>
---
v17:
- Rename netdev_init_add_notifier() to netdev_register_init_notifier()
v16:
- Simplify the codes by using some helpers in QEMU
v14:
- New patch
---
 include/net/net.h |  3 +++
 net/net.c         | 12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/include/net/net.h b/include/net/net.h
index a69e382..c5ebab3 100644
--- a/include/net/net.h
+++ b/include/net/net.h
@@ -8,6 +8,7 @@
 #include "net/queue.h"
 #include "migration/vmstate.h"
 #include "qapi-types.h"
+#include "qemu/notify.h"
 
 #define MAC_FMT "%02X:%02X:%02X:%02X:%02X:%02X"
 #define MAC_ARG(x) ((uint8_t *)(x))[0], ((uint8_t *)(x))[1], \
@@ -194,6 +195,8 @@ struct NICInfo {
     int nvectors;
 };
 
+void netdev_register_init_notifier(Notifier *notify);
+
 extern int nb_nics;
 extern NICInfo nd_table[MAX_NICS];
 extern const char *host_net_devices[];
diff --git a/net/net.c b/net/net.c
index 5f3e5a9..b19f107 100644
--- a/net/net.c
+++ b/net/net.c
@@ -56,6 +56,9 @@
 static VMChangeStateEntry *net_change_state_entry;
 static QTAILQ_HEAD(, NetClientState) net_clients;
 
+static NotifierList netdev_init_notifiers =
+    NOTIFIER_LIST_INITIALIZER(netdev_init_notifiers);
+
 const char *host_net_devices[] = {
     "tap",
     "socket",
@@ -929,6 +932,10 @@ static int net_init_nic(const NetClientOptions *opts, 
const char *name,
     return idx;
 }
 
+void netdev_register_init_notifier(Notifier *notify)
+{
+    notifier_list_add(&netdev_init_notifiers, notify);
+}
 
 static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND__MAX])(
     const NetClientOptions *opts,
@@ -1015,6 +1022,11 @@ static int net_client_init1(const void *object, int 
is_netdev, Error **errp)
         }
         return -1;
     }
+    if (is_netdev) {
+        const Netdev *netdev = object;
+
+        notifier_list_notify(&netdev_init_notifiers, netdev->id);
+    }
     return 0;
 }
 
-- 
1.8.3.1





reply via email to

[Prev in Thread] Current Thread [Next in Thread]