qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 0/2] Introduce 'status' property for netfilter
@ 2016-02-29  1:46 zhanghailiang
  2016-02-29  1:46 ` [Qemu-devel] [PATCH v2 1/2] filter: Add 'status' property for filter object zhanghailiang
  2016-02-29  1:46 ` [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing zhanghailiang
  0 siblings, 2 replies; 9+ messages in thread
From: zhanghailiang @ 2016-02-29  1:46 UTC (permalink / raw)
  To: qemu-devel; +Cc: jasowang, zhanghailiang, hongyang.yang

This is picked from COLO series, which is to realize the new 'status'
property for filter.

With this property, users can control if the filter is enabled or
disabled.

zhanghailiang (2):
  filter: Add 'status' property for filter object
  filter-buffer: Add status_changed callback processing

 include/net/filter.h |  4 ++++
 net/filter-buffer.c  | 19 +++++++++++++++++++
 net/filter.c         | 42 ++++++++++++++++++++++++++++++++++++++++++
 qemu-options.hx      |  4 +++-
 4 files changed, 68 insertions(+), 1 deletion(-)

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v2 1/2] filter: Add 'status' property for filter object
  2016-02-29  1:46 [Qemu-devel] [PATCH v2 0/2] Introduce 'status' property for netfilter zhanghailiang
@ 2016-02-29  1:46 ` zhanghailiang
  2016-02-29  7:26   ` Jason Wang
  2016-02-29  1:46 ` [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing zhanghailiang
  1 sibling, 1 reply; 9+ messages in thread
From: zhanghailiang @ 2016-02-29  1:46 UTC (permalink / raw)
  To: qemu-devel; +Cc: jasowang, zhanghailiang, hongyang.yang

With this property, users can control if this filter is 'on'
or 'off'. The default behavior for filter is 'on'.

For some types of filters, they may need to react to status changing,
So here, we introduced status changing callback/notifier for filter class.

We will skip the disabled ('off') filter when delivering packets in net layer.

Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Cc: Jason Wang <jasowang@redhat.com>
Cc: Yang Hongyang <hongyang.yang@easystack.cn>
---
v2:
- Split the processing of buffer-filter into a new patch (Jason)
- Use 'status' instead of 'enabled' to store the filter state (Jason)
- Rename FilterDisable() callback to FilterStatusChanged(Jason)
---
 include/net/filter.h |  4 ++++
 net/filter.c         | 42 ++++++++++++++++++++++++++++++++++++++++++
 qemu-options.hx      |  4 +++-
 3 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/include/net/filter.h b/include/net/filter.h
index 5639976..ebef0dc 100644
--- a/include/net/filter.h
+++ b/include/net/filter.h
@@ -36,12 +36,15 @@ typedef ssize_t (FilterReceiveIOV)(NetFilterState *nc,
                                    int iovcnt,
                                    NetPacketSent *sent_cb);
 
+typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp);
+
 typedef struct NetFilterClass {
     ObjectClass parent_class;
 
     /* optional */
     FilterSetup *setup;
     FilterCleanup *cleanup;
+    FilterStatusChanged *status_changed;
     /* mandatory */
     FilterReceiveIOV *receive_iov;
 } NetFilterClass;
@@ -55,6 +58,7 @@ struct NetFilterState {
     char *netdev_id;
     NetClientState *netdev;
     NetFilterDirection direction;
+    char *status;
     QTAILQ_ENTRY(NetFilterState) next;
 };
 
diff --git a/net/filter.c b/net/filter.c
index d2a514e..68b7bba 100644
--- a/net/filter.c
+++ b/net/filter.c
@@ -17,6 +17,11 @@
 #include "qom/object_interfaces.h"
 #include "qemu/iov.h"
 
+static inline bool qemu_can_skip_netfilter(NetFilterState *nf)
+{
+    return !!strcmp(nf->status, "on");
+}
+
 ssize_t qemu_netfilter_receive(NetFilterState *nf,
                                NetFilterDirection direction,
                                NetClientState *sender,
@@ -25,6 +30,9 @@ ssize_t qemu_netfilter_receive(NetFilterState *nf,
                                int iovcnt,
                                NetPacketSent *sent_cb)
 {
+    if (qemu_can_skip_netfilter(nf)) {
+        return 0;
+    }
     if (nf->direction == direction ||
         nf->direction == NET_FILTER_DIRECTION_ALL) {
         return NETFILTER_GET_CLASS(OBJECT(nf))->receive_iov(
@@ -134,8 +142,39 @@ static void netfilter_set_direction(Object *obj, int direction, Error **errp)
     nf->direction = direction;
 }
 
+static char *netfilter_get_status(Object *obj, Error **errp)
+{
+    NetFilterState *nf = NETFILTER(obj);
+
+    return g_strdup(nf->status);
+}
+
+static void netfilter_set_status(Object *obj, const char *str, Error **errp)
+{
+    NetFilterState *nf = NETFILTER(obj);
+    NetFilterClass *nfc = NETFILTER_GET_CLASS(obj);
+
+    if (!strcmp(nf->status, str)) {
+        return;
+    }
+    if (strcmp(str, "on") && strcmp(str, "off")) {
+        error_setg(errp, "Invalid value for netfilter status, "
+                         "should be 'on' or 'off'");
+        return;
+    }
+    g_free(nf->status);
+    nf->status = g_strdup(str);
+    if (nfc->status_changed) {
+        nfc->status_changed(nf, errp);
+    }
+}
+
 static void netfilter_init(Object *obj)
 {
+    NetFilterState *nf = NETFILTER(obj);
+
+    nf->status = g_strdup("on");
+
     object_property_add_str(obj, "netdev",
                             netfilter_get_netdev_id, netfilter_set_netdev_id,
                             NULL);
@@ -143,6 +182,9 @@ static void netfilter_init(Object *obj)
                              NetFilterDirection_lookup,
                              netfilter_get_direction, netfilter_set_direction,
                              NULL);
+    object_property_add_str(obj, "status",
+                            netfilter_get_status, netfilter_set_status,
+                            NULL);
 }
 
 static void netfilter_complete(UserCreatable *uc, Error **errp)
diff --git a/qemu-options.hx b/qemu-options.hx
index 599db94..5291347 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -3787,11 +3787,13 @@ version by providing the @var{passwordid} parameter. This provides
 the ID of a previously created @code{secret} object containing the
 password for decryption.
 
-@item -object filter-buffer,id=@var{id},netdev=@var{netdevid},interval=@var{t}[,queue=@var{all|rx|tx}]
+@item -object filter-buffer,id=@var{id},netdev=@var{netdevid},interval=@var{t}[,queue=@var{all|rx|tx}][,status=@var{on|off}]
 
 Interval @var{t} can't be 0, this filter batches the packet delivery: all
 packets arriving in a given interval on netdev @var{netdevid} are delayed
 until the end of the interval. Interval is in microseconds.
+@option{status} is optional that indicate whether the netfilter is
+on (enabled) or off (disabled), the default status for netfilter will be 'on'.
 
 queue @var{all|rx|tx} is an option that can be applied to any netfilter.
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing
  2016-02-29  1:46 [Qemu-devel] [PATCH v2 0/2] Introduce 'status' property for netfilter zhanghailiang
  2016-02-29  1:46 ` [Qemu-devel] [PATCH v2 1/2] filter: Add 'status' property for filter object zhanghailiang
@ 2016-02-29  1:46 ` zhanghailiang
  2016-02-29  7:27   ` Jason Wang
  1 sibling, 1 reply; 9+ messages in thread
From: zhanghailiang @ 2016-02-29  1:46 UTC (permalink / raw)
  To: qemu-devel; +Cc: jasowang, zhanghailiang, hongyang.yang

While the status of filter-buffer changing from 'on' to 'off',
it need to release all the buffered packets, and delete the related
timer, while switch from 'off' to 'on', it need to resume the release
packets timer.

Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Cc: Jason Wang <jasowang@redhat.com>
Cc: Yang Hongyang <hongyang.yang@easystack.cn>
---
v2:
- New patch
---
 net/filter-buffer.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/net/filter-buffer.c b/net/filter-buffer.c
index 12ad2e3..ed3f19e 100644
--- a/net/filter-buffer.c
+++ b/net/filter-buffer.c
@@ -124,6 +124,24 @@ static void filter_buffer_setup(NetFilterState *nf, Error **errp)
     }
 }
 
+static void filter_buffer_status_changed(NetFilterState *nf, Error **errp)
+{
+    FilterBufferState *s = FILTER_BUFFER(nf);
+
+    if (!strcmp(nf->status, "off")) {
+        if (s->interval) {
+            timer_del(&s->release_timer);
+        }
+        filter_buffer_flush(nf);
+    } else {
+        if (s->interval) {
+            timer_init_us(&s->release_timer, QEMU_CLOCK_VIRTUAL,
+                filter_buffer_release_timer, nf);
+            timer_mod(&s->release_timer,
+                qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + s->interval);
+        }
+    }
+}
 static void filter_buffer_class_init(ObjectClass *oc, void *data)
 {
     NetFilterClass *nfc = NETFILTER_CLASS(oc);
@@ -131,6 +149,7 @@ static void filter_buffer_class_init(ObjectClass *oc, void *data)
     nfc->setup = filter_buffer_setup;
     nfc->cleanup = filter_buffer_cleanup;
     nfc->receive_iov = filter_buffer_receive_iov;
+    nfc->status_changed = filter_buffer_status_changed;
 }
 
 static void filter_buffer_get_interval(Object *obj, Visitor *v,
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v2 1/2] filter: Add 'status' property for filter object
  2016-02-29  1:46 ` [Qemu-devel] [PATCH v2 1/2] filter: Add 'status' property for filter object zhanghailiang
@ 2016-02-29  7:26   ` Jason Wang
  2016-02-29  7:34     ` Hailiang Zhang
  0 siblings, 1 reply; 9+ messages in thread
From: Jason Wang @ 2016-02-29  7:26 UTC (permalink / raw)
  To: zhanghailiang, qemu-devel; +Cc: hongyang.yang



On 02/29/2016 09:46 AM, zhanghailiang wrote:
> With this property, users can control if this filter is 'on'
> or 'off'. The default behavior for filter is 'on'.
>
> For some types of filters, they may need to react to status changing,
> So here, we introduced status changing callback/notifier for filter class.
>
> We will skip the disabled ('off') filter when delivering packets in net layer.
>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> Cc: Jason Wang <jasowang@redhat.com>
> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
> ---
> v2:
> - Split the processing of buffer-filter into a new patch (Jason)
> - Use 'status' instead of 'enabled' to store the filter state (Jason)
> - Rename FilterDisable() callback to FilterStatusChanged(Jason)
> ---

Thanks, looks good, just few nits.

>  include/net/filter.h |  4 ++++
>  net/filter.c         | 42 ++++++++++++++++++++++++++++++++++++++++++
>  qemu-options.hx      |  4 +++-
>  3 files changed, 49 insertions(+), 1 deletion(-)
>
> diff --git a/include/net/filter.h b/include/net/filter.h
> index 5639976..ebef0dc 100644
> --- a/include/net/filter.h
> +++ b/include/net/filter.h
> @@ -36,12 +36,15 @@ typedef ssize_t (FilterReceiveIOV)(NetFilterState *nc,
>                                     int iovcnt,
>                                     NetPacketSent *sent_cb);
>  
> +typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp);
> +
>  typedef struct NetFilterClass {
>      ObjectClass parent_class;
>  
>      /* optional */
>      FilterSetup *setup;
>      FilterCleanup *cleanup;
> +    FilterStatusChanged *status_changed;
>      /* mandatory */
>      FilterReceiveIOV *receive_iov;
>  } NetFilterClass;
> @@ -55,6 +58,7 @@ struct NetFilterState {
>      char *netdev_id;
>      NetClientState *netdev;
>      NetFilterDirection direction;
> +    char *status;

Let's use bool instead.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing
  2016-02-29  1:46 ` [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing zhanghailiang
@ 2016-02-29  7:27   ` Jason Wang
  2016-02-29  7:36     ` Hailiang Zhang
  0 siblings, 1 reply; 9+ messages in thread
From: Jason Wang @ 2016-02-29  7:27 UTC (permalink / raw)
  To: zhanghailiang, qemu-devel; +Cc: hongyang.yang



On 02/29/2016 09:46 AM, zhanghailiang wrote:
> While the status of filter-buffer changing from 'on' to 'off',
> it need to release all the buffered packets, and delete the related
> timer, while switch from 'off' to 'on', it need to resume the release
> packets timer.
>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> Cc: Jason Wang <jasowang@redhat.com>
> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
> ---
> v2:
> - New patch
> ---
>  net/filter-buffer.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
>
> diff --git a/net/filter-buffer.c b/net/filter-buffer.c
> index 12ad2e3..ed3f19e 100644
> --- a/net/filter-buffer.c
> +++ b/net/filter-buffer.c
> @@ -124,6 +124,24 @@ static void filter_buffer_setup(NetFilterState *nf, Error **errp)
>      }
>  }
>  
> +static void filter_buffer_status_changed(NetFilterState *nf, Error **errp)
> +{
> +    FilterBufferState *s = FILTER_BUFFER(nf);
> +
> +    if (!strcmp(nf->status, "off")) {
> +        if (s->interval) {
> +            timer_del(&s->release_timer);
> +        }
> +        filter_buffer_flush(nf);
> +    } else {
> +        if (s->interval) {
> +            timer_init_us(&s->release_timer, QEMU_CLOCK_VIRTUAL,
> +                filter_buffer_release_timer, nf);
> +            timer_mod(&s->release_timer,
> +                qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + s->interval);
> +        }

The code looks duplicated with filter_buffer_setup().

> +    }
> +}
>  static void filter_buffer_class_init(ObjectClass *oc, void *data)
>  {
>      NetFilterClass *nfc = NETFILTER_CLASS(oc);
> @@ -131,6 +149,7 @@ static void filter_buffer_class_init(ObjectClass *oc, void *data)
>      nfc->setup = filter_buffer_setup;
>      nfc->cleanup = filter_buffer_cleanup;
>      nfc->receive_iov = filter_buffer_receive_iov;
> +    nfc->status_changed = filter_buffer_status_changed;
>  }
>  
>  static void filter_buffer_get_interval(Object *obj, Visitor *v,

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v2 1/2] filter: Add 'status' property for filter object
  2016-02-29  7:26   ` Jason Wang
@ 2016-02-29  7:34     ` Hailiang Zhang
  2016-03-01  2:37       ` Jason Wang
  0 siblings, 1 reply; 9+ messages in thread
From: Hailiang Zhang @ 2016-02-29  7:34 UTC (permalink / raw)
  To: Jason Wang, qemu-devel; +Cc: peter.huangpeng, hongyang.yang

On 2016/2/29 15:26, Jason Wang wrote:
>
>
> On 02/29/2016 09:46 AM, zhanghailiang wrote:
>> With this property, users can control if this filter is 'on'
>> or 'off'. The default behavior for filter is 'on'.
>>
>> For some types of filters, they may need to react to status changing,
>> So here, we introduced status changing callback/notifier for filter class.
>>
>> We will skip the disabled ('off') filter when delivering packets in net layer.
>>
>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>> Cc: Jason Wang <jasowang@redhat.com>
>> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
>> ---
>> v2:
>> - Split the processing of buffer-filter into a new patch (Jason)
>> - Use 'status' instead of 'enabled' to store the filter state (Jason)
>> - Rename FilterDisable() callback to FilterStatusChanged(Jason)
>> ---
>
> Thanks, looks good, just few nits.
>
>>   include/net/filter.h |  4 ++++
>>   net/filter.c         | 42 ++++++++++++++++++++++++++++++++++++++++++
>>   qemu-options.hx      |  4 +++-
>>   3 files changed, 49 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/net/filter.h b/include/net/filter.h
>> index 5639976..ebef0dc 100644
>> --- a/include/net/filter.h
>> +++ b/include/net/filter.h
>> @@ -36,12 +36,15 @@ typedef ssize_t (FilterReceiveIOV)(NetFilterState *nc,
>>                                      int iovcnt,
>>                                      NetPacketSent *sent_cb);
>>
>> +typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp);
>> +
>>   typedef struct NetFilterClass {
>>       ObjectClass parent_class;
>>
>>       /* optional */
>>       FilterSetup *setup;
>>       FilterCleanup *cleanup;
>> +    FilterStatusChanged *status_changed;
>>       /* mandatory */
>>       FilterReceiveIOV *receive_iov;
>>   } NetFilterClass;
>> @@ -55,6 +58,7 @@ struct NetFilterState {
>>       char *netdev_id;
>>       NetClientState *netdev;
>>       NetFilterDirection direction;
>> +    char *status;
>
> Let's use bool instead.
>

Er, then status=true means 'on' ? false means 'off' ?
That looks odd.  What about using 'bool status_on' ?

>
> .
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing
  2016-02-29  7:27   ` Jason Wang
@ 2016-02-29  7:36     ` Hailiang Zhang
  2016-03-01  2:40       ` Jason Wang
  0 siblings, 1 reply; 9+ messages in thread
From: Hailiang Zhang @ 2016-02-29  7:36 UTC (permalink / raw)
  To: Jason Wang, qemu-devel; +Cc: peter.huangpeng, hongyang.yang

On 2016/2/29 15:27, Jason Wang wrote:
>
>
> On 02/29/2016 09:46 AM, zhanghailiang wrote:
>> While the status of filter-buffer changing from 'on' to 'off',
>> it need to release all the buffered packets, and delete the related
>> timer, while switch from 'off' to 'on', it need to resume the release
>> packets timer.
>>
>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>> Cc: Jason Wang <jasowang@redhat.com>
>> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
>> ---
>> v2:
>> - New patch
>> ---
>>   net/filter-buffer.c | 19 +++++++++++++++++++
>>   1 file changed, 19 insertions(+)
>>
>> diff --git a/net/filter-buffer.c b/net/filter-buffer.c
>> index 12ad2e3..ed3f19e 100644
>> --- a/net/filter-buffer.c
>> +++ b/net/filter-buffer.c
>> @@ -124,6 +124,24 @@ static void filter_buffer_setup(NetFilterState *nf, Error **errp)
>>       }
>>   }
>>
>> +static void filter_buffer_status_changed(NetFilterState *nf, Error **errp)
>> +{
>> +    FilterBufferState *s = FILTER_BUFFER(nf);
>> +
>> +    if (!strcmp(nf->status, "off")) {
>> +        if (s->interval) {
>> +            timer_del(&s->release_timer);
>> +        }
>> +        filter_buffer_flush(nf);
>> +    } else {
>> +        if (s->interval) {
>> +            timer_init_us(&s->release_timer, QEMU_CLOCK_VIRTUAL,
>> +                filter_buffer_release_timer, nf);
>> +            timer_mod(&s->release_timer,
>> +                qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + s->interval);
>> +        }
>
> The code looks duplicated with filter_buffer_setup().
>

Yea, extract them into a new helper ? filter_buffer_setup_timer() ?

>> +    }
>> +}
>>   static void filter_buffer_class_init(ObjectClass *oc, void *data)
>>   {
>>       NetFilterClass *nfc = NETFILTER_CLASS(oc);
>> @@ -131,6 +149,7 @@ static void filter_buffer_class_init(ObjectClass *oc, void *data)
>>       nfc->setup = filter_buffer_setup;
>>       nfc->cleanup = filter_buffer_cleanup;
>>       nfc->receive_iov = filter_buffer_receive_iov;
>> +    nfc->status_changed = filter_buffer_status_changed;
>>   }
>>
>>   static void filter_buffer_get_interval(Object *obj, Visitor *v,
>
>
> .
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v2 1/2] filter: Add 'status' property for filter object
  2016-02-29  7:34     ` Hailiang Zhang
@ 2016-03-01  2:37       ` Jason Wang
  0 siblings, 0 replies; 9+ messages in thread
From: Jason Wang @ 2016-03-01  2:37 UTC (permalink / raw)
  To: Hailiang Zhang, qemu-devel; +Cc: peter.huangpeng, hongyang.yang



On 02/29/2016 03:34 PM, Hailiang Zhang wrote:
> On 2016/2/29 15:26, Jason Wang wrote:
>>
>>
>> On 02/29/2016 09:46 AM, zhanghailiang wrote:
>>> With this property, users can control if this filter is 'on'
>>> or 'off'. The default behavior for filter is 'on'.
>>>
>>> For some types of filters, they may need to react to status changing,
>>> So here, we introduced status changing callback/notifier for filter
>>> class.
>>>
>>> We will skip the disabled ('off') filter when delivering packets in
>>> net layer.
>>>
>>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>>> Cc: Jason Wang <jasowang@redhat.com>
>>> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
>>> ---
>>> v2:
>>> - Split the processing of buffer-filter into a new patch (Jason)
>>> - Use 'status' instead of 'enabled' to store the filter state (Jason)
>>> - Rename FilterDisable() callback to FilterStatusChanged(Jason)
>>> ---
>>
>> Thanks, looks good, just few nits.
>>
>>>   include/net/filter.h |  4 ++++
>>>   net/filter.c         | 42 ++++++++++++++++++++++++++++++++++++++++++
>>>   qemu-options.hx      |  4 +++-
>>>   3 files changed, 49 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/include/net/filter.h b/include/net/filter.h
>>> index 5639976..ebef0dc 100644
>>> --- a/include/net/filter.h
>>> +++ b/include/net/filter.h
>>> @@ -36,12 +36,15 @@ typedef ssize_t
>>> (FilterReceiveIOV)(NetFilterState *nc,
>>>                                      int iovcnt,
>>>                                      NetPacketSent *sent_cb);
>>>
>>> +typedef void (FilterStatusChanged) (NetFilterState *nf, Error **errp);
>>> +
>>>   typedef struct NetFilterClass {
>>>       ObjectClass parent_class;
>>>
>>>       /* optional */
>>>       FilterSetup *setup;
>>>       FilterCleanup *cleanup;
>>> +    FilterStatusChanged *status_changed;
>>>       /* mandatory */
>>>       FilterReceiveIOV *receive_iov;
>>>   } NetFilterClass;
>>> @@ -55,6 +58,7 @@ struct NetFilterState {
>>>       char *netdev_id;
>>>       NetClientState *netdev;
>>>       NetFilterDirection direction;
>>> +    char *status;
>>
>> Let's use bool instead.
>>
>
> Er, then status=true means 'on' ? false means 'off' ?
> That looks odd.  What about using 'bool status_on' ?

Or just "bool on" :)

>
>>
>> .
>>
>
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing
  2016-02-29  7:36     ` Hailiang Zhang
@ 2016-03-01  2:40       ` Jason Wang
  0 siblings, 0 replies; 9+ messages in thread
From: Jason Wang @ 2016-03-01  2:40 UTC (permalink / raw)
  To: Hailiang Zhang, qemu-devel; +Cc: peter.huangpeng, hongyang.yang



On 02/29/2016 03:36 PM, Hailiang Zhang wrote:
> On 2016/2/29 15:27, Jason Wang wrote:
>>
>>
>> On 02/29/2016 09:46 AM, zhanghailiang wrote:
>>> While the status of filter-buffer changing from 'on' to 'off',
>>> it need to release all the buffered packets, and delete the related
>>> timer, while switch from 'off' to 'on', it need to resume the release
>>> packets timer.
>>>
>>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>>> Cc: Jason Wang <jasowang@redhat.com>
>>> Cc: Yang Hongyang <hongyang.yang@easystack.cn>
>>> ---
>>> v2:
>>> - New patch
>>> ---
>>>   net/filter-buffer.c | 19 +++++++++++++++++++
>>>   1 file changed, 19 insertions(+)
>>>
>>> diff --git a/net/filter-buffer.c b/net/filter-buffer.c
>>> index 12ad2e3..ed3f19e 100644
>>> --- a/net/filter-buffer.c
>>> +++ b/net/filter-buffer.c
>>> @@ -124,6 +124,24 @@ static void filter_buffer_setup(NetFilterState
>>> *nf, Error **errp)
>>>       }
>>>   }
>>>
>>> +static void filter_buffer_status_changed(NetFilterState *nf, Error
>>> **errp)
>>> +{
>>> +    FilterBufferState *s = FILTER_BUFFER(nf);
>>> +
>>> +    if (!strcmp(nf->status, "off")) {
>>> +        if (s->interval) {
>>> +            timer_del(&s->release_timer);
>>> +        }
>>> +        filter_buffer_flush(nf);
>>> +    } else {
>>> +        if (s->interval) {
>>> +            timer_init_us(&s->release_timer, QEMU_CLOCK_VIRTUAL,
>>> +                filter_buffer_release_timer, nf);
>>> +            timer_mod(&s->release_timer,
>>> +                qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + s->interval);
>>> +        }
>>
>> The code looks duplicated with filter_buffer_setup().
>>
>
> Yea, extract them into a new helper ? filter_buffer_setup_timer() ?

Right.

>
>>> +    }
>>> +}
>>>   static void filter_buffer_class_init(ObjectClass *oc, void *data)
>>>   {
>>>       NetFilterClass *nfc = NETFILTER_CLASS(oc);
>>> @@ -131,6 +149,7 @@ static void filter_buffer_class_init(ObjectClass
>>> *oc, void *data)
>>>       nfc->setup = filter_buffer_setup;
>>>       nfc->cleanup = filter_buffer_cleanup;
>>>       nfc->receive_iov = filter_buffer_receive_iov;
>>> +    nfc->status_changed = filter_buffer_status_changed;
>>>   }
>>>
>>>   static void filter_buffer_get_interval(Object *obj, Visitor *v,
>>
>>
>> .
>>
>
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-03-01  2:40 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-29  1:46 [Qemu-devel] [PATCH v2 0/2] Introduce 'status' property for netfilter zhanghailiang
2016-02-29  1:46 ` [Qemu-devel] [PATCH v2 1/2] filter: Add 'status' property for filter object zhanghailiang
2016-02-29  7:26   ` Jason Wang
2016-02-29  7:34     ` Hailiang Zhang
2016-03-01  2:37       ` Jason Wang
2016-02-29  1:46 ` [Qemu-devel] [PATCH v2 2/2] filter-buffer: Add status_changed callback processing zhanghailiang
2016-02-29  7:27   ` Jason Wang
2016-02-29  7:36     ` Hailiang Zhang
2016-03-01  2:40       ` Jason Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).