[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V7 11/12] net/filter-rewriter.c: Make filter-rewrite
From: |
Zhang Chen |
Subject: |
[Qemu-devel] [PATCH V7 11/12] net/filter-rewriter.c: Make filter-rewriter support vnet_hdr_len |
Date: |
Tue, 4 Jul 2017 14:53:55 +0800 |
We add the vnet_hdr_support option for filter-rewriter, default is disabled.
If you use virtio-net-pci or other driver needs vnet_hdr, please enable it.
You can use it for example:
-object filter-rewriter,id=rew0,netdev=hn0,queue=all,vnet_hdr_support
We get the vnet_hdr_len from NetClientState that make us
parse net packet correctly.
Signed-off-by: Zhang Chen <address@hidden>
---
net/filter-rewriter.c | 37 ++++++++++++++++++++++++++++++++++++-
qemu-options.hx | 4 ++--
2 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c
index 63256c7..55a6cf5 100644
--- a/net/filter-rewriter.c
+++ b/net/filter-rewriter.c
@@ -17,6 +17,7 @@
#include "qemu-common.h"
#include "qapi/error.h"
#include "qapi/qmp/qerror.h"
+#include "qemu/error-report.h"
#include "qapi-visit.h"
#include "qom/object.h"
#include "qemu/main-loop.h"
@@ -33,6 +34,7 @@ typedef struct RewriterState {
NetQueue *incoming_queue;
/* hashtable to save connection */
GHashTable *connection_track_table;
+ bool vnet_hdr;
} RewriterState;
static void filter_rewriter_flush(NetFilterState *nf)
@@ -155,10 +157,16 @@ static ssize_t colo_rewriter_receive_iov(NetFilterState
*nf,
ConnectionKey key;
Packet *pkt;
ssize_t size = iov_size(iov, iovcnt);
+ ssize_t vnet_hdr_len = 0;
char *buf = g_malloc0(size);
iov_to_buf(iov, iovcnt, 0, buf, size);
- pkt = packet_new(buf, size, 0);
+
+ if (s->vnet_hdr) {
+ vnet_hdr_len = nf->netdev->vnet_hdr_len;
+ }
+
+ pkt = packet_new(buf, size, vnet_hdr_len);
g_free(buf);
/*
@@ -237,6 +245,32 @@ static void colo_rewriter_setup(NetFilterState *nf, Error
**errp)
s->incoming_queue = qemu_new_net_queue(qemu_netfilter_pass_to_next, nf);
}
+static bool filter_rewriter_get_vnet_hdr(Object *obj, Error **errp)
+{
+ RewriterState *s = FILTER_COLO_REWRITER(obj);
+
+ return s->vnet_hdr;
+}
+
+static void filter_rewriter_set_vnet_hdr(Object *obj,
+ bool value,
+ Error **errp)
+{
+ RewriterState *s = FILTER_COLO_REWRITER(obj);
+
+ s->vnet_hdr = value;
+}
+
+static void filter_rewriter_init(Object *obj)
+{
+ RewriterState *s = FILTER_COLO_REWRITER(obj);
+
+ s->vnet_hdr = false;
+ object_property_add_bool(obj, "vnet_hdr_support",
+ filter_rewriter_get_vnet_hdr,
+ filter_rewriter_set_vnet_hdr, NULL);
+}
+
static void colo_rewriter_class_init(ObjectClass *oc, void *data)
{
NetFilterClass *nfc = NETFILTER_CLASS(oc);
@@ -250,6 +284,7 @@ static const TypeInfo colo_rewriter_info = {
.name = TYPE_FILTER_REWRITER,
.parent = TYPE_NETFILTER,
.class_init = colo_rewriter_class_init,
+ .instance_init = filter_rewriter_init,
.instance_size = sizeof(RewriterState),
};
diff --git a/qemu-options.hx b/qemu-options.hx
index 1107896..96b6377 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -4251,12 +4251,12 @@ Create a filter-redirector we need to differ outdev id
from indev id, id can not
be the same. we can just use indev or outdev, but at least one of indev or
outdev
need to be specified.
address@hidden -object
filter-rewriter,address@hidden,address@hidden,address@hidden|rx|tx}]
address@hidden -object
filter-rewriter,address@hidden,address@hidden,address@hidden|rx|tx},[vnet_hdr_support]
Filter-rewriter is a part of COLO project.It will rewrite tcp packet to
secondary from primary to keep secondary tcp connection,and rewrite
tcp packet to primary from secondary make tcp packet can be handled by
-client.
+client.if it has the vnet_hdr_support flag, we can parse packet with vnet
header.
usage:
colo secondary:
--
2.7.4
- [Qemu-devel] [PATCH V7 06/12] net/colo.c: Make vnet_hdr_len as packet property, (continued)
- [Qemu-devel] [PATCH V7 06/12] net/colo.c: Make vnet_hdr_len as packet property, Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 05/12] net/filter-mirror.c: Add new option to enable vnet support for filter-redirector, Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 09/12] net/colo.c: Add vnet packet parse feature in colo-proxy, Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 12/12] docs/colo-proxy.txt: Update colo-proxy usage of net driver with vnet_header, Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 10/12] net/colo-compare.c: Add vnet packet's tcp/udp/icmp compare, Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 03/12] net/filter-mirror.c: Introduce parameter for filter_send(), Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 04/12] net/filter-mirror.c: Make filter mirror support vnet support., Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 02/12] net/net.c: Add vnet_hdr support in SocketReadState, Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 07/12] net/colo-compare.c: Introduce parameter for compare_chr_send(), Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 08/12] net/colo-compare.c: Make colo-compare support vnet_hdr_len, Zhang Chen, 2017/07/04
- [Qemu-devel] [PATCH V7 11/12] net/filter-rewriter.c: Make filter-rewriter support vnet_hdr_len,
Zhang Chen <=
- Re: [Qemu-devel] [PATCH V7 00/12] Add COLO-proxy virtio-net support, Jason Wang, 2017/07/13