[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL V2 11/12] filter-buffer: Add status_changed callback
From: |
Jason Wang |
Subject: |
[Qemu-devel] [PULL V2 11/12] filter-buffer: Add status_changed callback processing |
Date: |
Tue, 8 Mar 2016 15:52:43 +0800 |
From: zhanghailiang <address@hidden>
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 <address@hidden>
Cc: Jason Wang <address@hidden>
Cc: Yang Hongyang <address@hidden>
Signed-off-by: Jason Wang <address@hidden>
---
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
- [Qemu-devel] [PULL V2 01/12] net: ne2000: check ring buffer control registers, (continued)
- [Qemu-devel] [PULL V2 01/12] net: ne2000: check ring buffer control registers, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 02/12] net: filter: correctly remove filter from the list during finalization, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 03/12] MAINTAINERS: Add entries for include/net/ files, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 04/12] net: simplify net_init_tap_one logic, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 05/12] net: netmap: probe netmap interface for virtio-net header, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 06/12] rocker: forbid to change world type, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 07/12] rocker: return -ENOMEM in case of some world alloc fails, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 08/12] rocker: add name field into WorldOps ale let world specify its name, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 09/12] rocker: allow user to specify rocker world by property, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 10/12] filter: Add 'status' property for filter object, Jason Wang, 2016/03/08
- [Qemu-devel] [PULL V2 11/12] filter-buffer: Add status_changed callback processing,
Jason Wang <=
- [Qemu-devel] [PULL V2 12/12] net: check packet payload length, Jason Wang, 2016/03/08
- Re: [Qemu-devel] [PULL V2 00/12] Net patches, Peter Maydell, 2016/03/08