diff mbox

[COLO-Frame,v16,32/35] net: Add notifier/callback for netdev init

Message ID 1460096797-14916-33-git-send-email-zhang.zhanghailiang@huawei.com
State New
Headers show

Commit Message

Zhanghailiang April 8, 2016, 6:26 a.m. UTC
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 <zhang.zhanghailiang@huawei.com>
Cc: Jason Wang <jasowang@redhat.com>
Cc: Yang Hongyang <hongyang.yang@easystack.cn>
---
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(+)

Comments

Zhanghailiang April 21, 2016, 12:30 a.m. UTC | #1
ping ... ?

Hi Jason,

Any comments on the net parts ?

Thanks,
Hailiang

On 2016/4/8 14:26, zhanghailiang wrote:
> 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 <zhang.zhanghailiang@huawei.com>
> Cc: Jason Wang <jasowang@redhat.com>
> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
> ---
> 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 73e4c46..d8abe7a 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 MAX_QUEUE_NUM 1024
>
> @@ -176,6 +177,8 @@ struct NICInfo {
>       int nvectors;
>   };
>
> +void netdev_init_add_notifier(Notifier *notify);
> +
>   extern int nb_nics;
>   extern NICInfo nd_table[MAX_NICS];
>   extern int default_net;
> diff --git a/net/net.c b/net/net.c
> index 0ad6217..6d846f4 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",
> @@ -931,6 +934,10 @@ static int net_init_nic(const NetClientOptions *opts, const char *name,
>       return idx;
>   }
>
> +void netdev_init_add_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,
> @@ -1017,6 +1024,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;
>   }
>
>
Jason Wang April 26, 2016, 6:48 a.m. UTC | #2
On 04/08/2016 02:26 PM, zhanghailiang wrote:
> 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 <zhang.zhanghailiang@huawei.com>
> Cc: Jason Wang <jasowang@redhat.com>
> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
> ---
> 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 73e4c46..d8abe7a 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 MAX_QUEUE_NUM 1024
>  
> @@ -176,6 +177,8 @@ struct NICInfo {
>      int nvectors;
>  };
>  
> +void netdev_init_add_notifier(Notifier *notify);
> +
>  extern int nb_nics;
>  extern NICInfo nd_table[MAX_NICS];
>  extern int default_net;
> diff --git a/net/net.c b/net/net.c
> index 0ad6217..6d846f4 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",
> @@ -931,6 +934,10 @@ static int net_init_nic(const NetClientOptions *opts, const char *name,
>      return idx;
>  }
>  
> +void netdev_init_add_notifier(Notifier *notify)
> +{
> +    notifier_list_add(&netdev_init_notifiers, notify);
> +}

Nitpick, like other notifier, we'd better have 'register' in the name of
this function, (e.g something like netdev_register_init_notifier()).

>  
>  static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND__MAX])(
>      const NetClientOptions *opts,
> @@ -1017,6 +1024,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;
>  }
>
Jason Wang April 26, 2016, 6:59 a.m. UTC | #3
On 04/21/2016 08:30 AM, Hailiang Zhang wrote:
> ping ... ?
>
> Hi Jason,
>
> Any comments on the net parts ?

Looks good overall, just few nits.

Thanks

>
> Thanks,
> Hailiang
>
> On 2016/4/8 14:26, zhanghailiang wrote:
>> 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 <zhang.zhanghailiang@huawei.com>
>> Cc: Jason Wang <jasowang@redhat.com>
>> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
>> ---
>> 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 73e4c46..d8abe7a 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 MAX_QUEUE_NUM 1024
>>
>> @@ -176,6 +177,8 @@ struct NICInfo {
>>       int nvectors;
>>   };
>>
>> +void netdev_init_add_notifier(Notifier *notify);
>> +
>>   extern int nb_nics;
>>   extern NICInfo nd_table[MAX_NICS];
>>   extern int default_net;
>> diff --git a/net/net.c b/net/net.c
>> index 0ad6217..6d846f4 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",
>> @@ -931,6 +934,10 @@ static int net_init_nic(const NetClientOptions
>> *opts, const char *name,
>>       return idx;
>>   }
>>
>> +void netdev_init_add_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,
>> @@ -1017,6 +1024,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;
>>   }
>>
>>
>
>
Zhanghailiang May 4, 2016, 8:18 a.m. UTC | #4
On 2016/4/26 14:48, Jason Wang wrote:
>
>
> On 04/08/2016 02:26 PM, zhanghailiang wrote:
>> 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 <zhang.zhanghailiang@huawei.com>
>> Cc: Jason Wang <jasowang@redhat.com>
>> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
>> ---
>> 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 73e4c46..d8abe7a 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 MAX_QUEUE_NUM 1024
>>
>> @@ -176,6 +177,8 @@ struct NICInfo {
>>       int nvectors;
>>   };
>>
>> +void netdev_init_add_notifier(Notifier *notify);
>> +
>>   extern int nb_nics;
>>   extern NICInfo nd_table[MAX_NICS];
>>   extern int default_net;
>> diff --git a/net/net.c b/net/net.c
>> index 0ad6217..6d846f4 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",
>> @@ -931,6 +934,10 @@ static int net_init_nic(const NetClientOptions *opts, const char *name,
>>       return idx;
>>   }
>>
>> +void netdev_init_add_notifier(Notifier *notify)
>> +{
>> +    notifier_list_add(&netdev_init_notifiers, notify);
>> +}
>
> Nitpick, like other notifier, we'd better have 'register' in the name of
> this function, (e.g something like netdev_register_init_notifier()).
>

OK, I'll fix it in next version, thanks :)

>>
>>   static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND__MAX])(
>>       const NetClientOptions *opts,
>> @@ -1017,6 +1024,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;
>>   }
>>
>
>
> .
>
diff mbox

Patch

diff --git a/include/net/net.h b/include/net/net.h
index 73e4c46..d8abe7a 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 MAX_QUEUE_NUM 1024
 
@@ -176,6 +177,8 @@  struct NICInfo {
     int nvectors;
 };
 
+void netdev_init_add_notifier(Notifier *notify);
+
 extern int nb_nics;
 extern NICInfo nd_table[MAX_NICS];
 extern int default_net;
diff --git a/net/net.c b/net/net.c
index 0ad6217..6d846f4 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",
@@ -931,6 +934,10 @@  static int net_init_nic(const NetClientOptions *opts, const char *name,
     return idx;
 }
 
+void netdev_init_add_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,
@@ -1017,6 +1024,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;
 }