[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v13 09/10] netfilter: add a netbuffer filter
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v13 09/10] netfilter: add a netbuffer filter |
Date: |
Wed, 07 Oct 2015 15:25:41 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Yang Hongyang <address@hidden> writes:
> This filter is to buffer/release packets. Can be used when using
> MicroCheckpointing or other Remus like VM FT solutions.
> You can also use it to simulate network delay.
Would be nice to mention this doesn't actually delay individual packets.
Perhaps
You can also use it to crudely simulate network delay. Doesn't
actually delay individual packets, but batches them together, which
is a delay of sorts.
Could be touched up on commit.
>
> Usage:
> -netdev tap,id=bn0
> -object filter-buffer,id=f0,netdev=bn0,queue=rx,interval=1000
>
> NOTE:
> Interval is in microseconds, it can't be omitted currently, and can't be 0.
>
> Signed-off-by: Yang Hongyang <address@hidden>
> Signed-off-by: Jason Wang <address@hidden>
> ---
> net/Makefile.objs | 1 +
> net/filter-buffer.c | 186
> ++++++++++++++++++++++++++++++++++++++++++++++++++++
> qemu-options.hx | 17 +++++
> vl.c | 6 +-
> 4 files changed, 209 insertions(+), 1 deletion(-)
> create mode 100644 net/filter-buffer.c
>
> diff --git a/net/Makefile.objs b/net/Makefile.objs
> index 914aec0..5fa2f97 100644
> --- a/net/Makefile.objs
> +++ b/net/Makefile.objs
> @@ -14,3 +14,4 @@ common-obj-$(CONFIG_SLIRP) += slirp.o
> common-obj-$(CONFIG_VDE) += vde.o
> common-obj-$(CONFIG_NETMAP) += netmap.o
> common-obj-y += filter.o
> +common-obj-y += filter-buffer.o
> diff --git a/net/filter-buffer.c b/net/filter-buffer.c
> new file mode 100644
> index 0000000..336bdcc
> --- /dev/null
> +++ b/net/filter-buffer.c
> @@ -0,0 +1,186 @@
> +/*
> + * Copyright (c) 2015 FUJITSU LIMITED
> + * Author: Yang Hongyang <address@hidden>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2 or
> + * later. See the COPYING file in the top-level directory.
> + */
> +
> +#include "net/filter.h"
> +#include "net/queue.h"
> +#include "qemu-common.h"
> +#include "qemu/timer.h"
> +#include "qemu/iov.h"
> +#include "qapi/qmp/qerror.h"
> +#include "qapi-visit.h"
> +#include "qom/object.h"
> +
> +#define TYPE_FILTER_BUFFER "filter-buffer"
> +
> +#define FILTER_BUFFER(obj) \
> + OBJECT_CHECK(FilterBufferState, (obj), TYPE_FILTER_BUFFER)
> +
> +typedef struct FilterBufferState {
> + NetFilterState parent_obj;
> +
> + NetQueue *incoming_queue;
> + uint32_t interval;
> + QEMUTimer release_timer;
> +} FilterBufferState;
> +
> +static void filter_buffer_flush(NetFilterState *nf)
> +{
> + FilterBufferState *s = FILTER_BUFFER(nf);
> +
> + if (!qemu_net_queue_flush(s->incoming_queue)) {
> + /* Unable to empty the queue, purge remaining packets */
> + qemu_net_queue_purge(s->incoming_queue, nf->netdev);
> + }
> +}
> +
> +static void filter_buffer_release_timer(void *opaque)
> +{
> + NetFilterState *nf = opaque;
> + FilterBufferState *s = FILTER_BUFFER(nf);
> +
> + /*
> + * Note: filter_buffer_flush() drops packets that can't be sent
> + * TODO: We should leave them queued. But currently there's no way
> + * for the next filter or recivier to notify us that it can receive
You faithfully pasted my typo: it's receiver, not recivier. Could be
touched up on commit.
> + * more packets.
> + */
> + filter_buffer_flush(nf);
> + /* Timer rearmed to fire again in s->interval microseconds. */
> + timer_mod(&s->release_timer,
> + qemu_clock_get_us(QEMU_CLOCK_VIRTUAL) + s->interval);
> +}
[...]
Preferably with these touch-ups:
Reviewed-by: Markus Armbruster <address@hidden>
- [Qemu-devel] [PATCH v13 00/10] Add a netfilter object and netbuffer filter, Yang Hongyang, 2015/10/08
- [Qemu-devel] [PATCH v13 01/10] vl.c: init delayed object after net_init_clients, Yang Hongyang, 2015/10/08
- [Qemu-devel] [PATCH v13 02/10] init/cleanup of netfilter object, Yang Hongyang, 2015/10/08
- [Qemu-devel] [PATCH v13 06/10] netfilter: add an API to pass the packet to next filter, Yang Hongyang, 2015/10/08
- [Qemu-devel] [PATCH v13 09/10] netfilter: add a netbuffer filter, Yang Hongyang, 2015/10/08
- Re: [Qemu-devel] [PATCH v13 09/10] netfilter: add a netbuffer filter,
Markus Armbruster <=
- [Qemu-devel] [PATCH v13 03/10] netfilter: hook packets before net queue send, Yang Hongyang, 2015/10/08
- [Qemu-devel] [PATCH v13 04/10] net: merge qemu_deliver_packet and qemu_deliver_packet_iov, Yang Hongyang, 2015/10/08
- [Qemu-devel] [PATCH v13 08/10] net/queue: export qemu_net_queue_append_iov, Yang Hongyang, 2015/10/08
- [Qemu-devel] [PATCH v13 07/10] netfilter: print filter info associate with the netdev, Yang Hongyang, 2015/10/08
- [Qemu-devel] [PATCH v13 05/10] net/queue: introduce NetQueueDeliverFunc, Yang Hongyang, 2015/10/08
- [Qemu-devel] [PATCH v13 10/10] tests: add test cases for netfilter object, Yang Hongyang, 2015/10/08