All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: peter.maydell@linaro.org, qemu-devel@nongnu.org
Cc: Jason Wang <jasowang@redhat.com>,
	zhanghailiang <zhang.zhanghailiang@huawei.com>,
	Yang Hongyang <hongyang.yang@easystack.cn>
Subject: [Qemu-devel] [PULL 13/14] filter-buffer: Add status_changed callback processing
Date: Mon,  7 Mar 2016 11:12:59 +0800	[thread overview]
Message-ID: <1457320380-5111-14-git-send-email-jasowang@redhat.com> (raw)
In-Reply-To: <1457320380-5111-1-git-send-email-jasowang@redhat.com>

From: zhanghailiang <zhang.zhanghailiang@huawei.com>

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.

Here, we extract the process of setup timer into a new helper,
which will be used in the new status_changed callback.

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

diff --git a/net/filter-buffer.c b/net/filter-buffer.c
index 12ad2e3..972177b 100644
--- a/net/filter-buffer.c
+++ b/net/filter-buffer.c
@@ -100,6 +100,19 @@ static void filter_buffer_cleanup(NetFilterState *nf)
     }
 }
 
+static void filter_buffer_setup_timer(NetFilterState *nf)
+{
+    FilterBufferState *s = FILTER_BUFFER(nf);
+
+    if (s->interval) {
+        timer_init_us(&s->release_timer, QEMU_CLOCK_VIRTUAL,
+                      filter_buffer_release_timer, nf);
+        /* Timer armed to fire in s->interval microseconds. */
+        timer_mod(&s->release_timer,
+                  qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + s->interval);
+    }
+}
+
 static void filter_buffer_setup(NetFilterState *nf, Error **errp)
 {
     FilterBufferState *s = FILTER_BUFFER(nf);
@@ -115,12 +128,20 @@ static void filter_buffer_setup(NetFilterState *nf, Error **errp)
     }
 
     s->incoming_queue = qemu_new_net_queue(qemu_netfilter_pass_to_next, nf);
-    if (s->interval) {
-        timer_init_us(&s->release_timer, QEMU_CLOCK_VIRTUAL,
-                      filter_buffer_release_timer, nf);
-        /* Timer armed to fire in s->interval microseconds. */
-        timer_mod(&s->release_timer,
-                  qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + s->interval);
+    filter_buffer_setup_timer(nf);
+}
+
+static void filter_buffer_status_changed(NetFilterState *nf, Error **errp)
+{
+    FilterBufferState *s = FILTER_BUFFER(nf);
+
+    if (!nf->on) {
+        if (s->interval) {
+            timer_del(&s->release_timer);
+        }
+        filter_buffer_flush(nf);
+    } else {
+        filter_buffer_setup_timer(nf);
     }
 }
 
@@ -131,6 +152,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,
-- 
2.5.0

  parent reply	other threads:[~2016-03-07  3:14 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-07  3:12 [Qemu-devel] [PULL 00/14] Net patches Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 01/14] net: ne2000: check ring buffer control registers Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 02/14] net: filter: correctly remove filter from the list during finalization Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 03/14] MAINTAINERS: Add entries for include/net/ files Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 04/14] net: simplify net_init_tap_one logic Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 05/14] net/filter-mirror:Add filter-mirror Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 06/14] tests/test-filter-mirror:add filter-mirror unit test Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 07/14] net: netmap: probe netmap interface for virtio-net header Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 08/14] rocker: forbid to change world type Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 09/14] rocker: return -ENOMEM in case of some world alloc fails Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 10/14] rocker: add name field into WorldOps ale let world specify its name Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 11/14] rocker: allow user to specify rocker world by property Jason Wang
2016-03-07  3:12 ` [Qemu-devel] [PULL 12/14] filter: Add 'status' property for filter object Jason Wang
2016-03-07  3:12 ` Jason Wang [this message]
2016-03-07  3:13 ` [Qemu-devel] [PULL 14/14] net: check packet payload length Jason Wang
2016-03-08  4:51 ` [Qemu-devel] [PULL 00/14] Net patches Peter Maydell
2016-03-08  7:33   ` Jason Wang
2016-03-08  7:50     ` Wen Congyang
2016-03-08  7:56       ` Jason Wang
2016-03-08  9:06         ` Zhang Chen
2016-03-08  9:13           ` Wen Congyang
2016-03-08  9:54           ` Peter Maydell
2016-03-09  1:36             ` Wen Congyang
2016-03-09  4:26               ` Li Zhijian
2016-03-09  5:24                 ` Wen Congyang
2016-03-15  3:15                 ` Jason Wang
2016-03-10  2:28             ` Jason Wang
2016-03-10  3:51               ` Li Zhijian
2016-03-15  3:07                 ` Jason Wang
2016-03-15  3:25                   ` Li Zhijian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1457320380-5111-14-git-send-email-jasowang@redhat.com \
    --to=jasowang@redhat.com \
    --cc=hongyang.yang@easystack.cn \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=zhang.zhanghailiang@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.