[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v2 09/10] net/colo-proxy: Compare pri pkt to sec
From: |
Zhang Chen |
Subject: |
[Qemu-devel] [RFC PATCH v2 09/10] net/colo-proxy: Compare pri pkt to sec pkt |
Date: |
Tue, 22 Dec 2015 18:42:57 +0800 |
From: zhangchen <address@hidden>
We will compare packet sent by primary guest
to secondary guest,if same,send primary packet.
else we will notify colo to do checkpoint to
make secondary guset running same as primary
Signed-off-by: zhangchen <address@hidden>
Signed-off-by: zhanghailiang <address@hidden>
---
net/colo-proxy.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+)
diff --git a/net/colo-proxy.c b/net/colo-proxy.c
index 06bab80..abb289f 100644
--- a/net/colo-proxy.c
+++ b/net/colo-proxy.c
@@ -602,6 +602,70 @@ static void colo_proxy_notify_checkpoint(void)
colo_do_checkpoint = true;
}
+/*
+ * The IP packets sent by primary and secondary
+ * will be comparison in here
+ * TODOļ¼ support ip fragment
+ * return: 0 means packet same
+ * > 0 || < 0 means packet different
+ */
+static int colo_packet_compare(Packet *ppkt, Packet *spkt)
+{
+ trace_colo_proxy("colo_packet_compare data ppkt");
+ trace_colo_proxy_packet_size(ppkt->size);
+ trace_colo_proxy_packet_src(inet_ntoa(ppkt->ip->ip_src));
+ trace_colo_proxy_packet_dst(inet_ntoa(ppkt->ip->ip_dst));
+ colo_proxy_dump_packet(ppkt);
+ trace_colo_proxy("colo_packet_compare data spkt");
+ trace_colo_proxy_packet_size(spkt->size);
+ trace_colo_proxy_packet_src(inet_ntoa(spkt->ip->ip_src));
+ trace_colo_proxy_packet_dst(inet_ntoa(spkt->ip->ip_dst));
+ colo_proxy_dump_packet(spkt);
+
+ if (ppkt->size == spkt->size) {
+ return memcmp(ppkt->data, spkt->data, spkt->size);
+ } else {
+ trace_colo_proxy("colo_packet_compare size not same");
+ return -1;
+ }
+}
+
+static void colo_compare_connection(void *opaque, void *user_data)
+{
+ Connection *conn = opaque;
+ Packet *pkt = NULL;
+ GList *result = NULL;
+
+ while (!g_queue_is_empty(&conn->primary_list) &&
+ !g_queue_is_empty(&conn->secondary_list)) {
+ pkt = g_queue_pop_head(&conn->primary_list);
+ result = g_queue_find_custom(&conn->secondary_list,
+ pkt, (GCompareFunc)colo_packet_compare);
+ if (result) {
+ colo_send_primary_packet(pkt, NULL);
+ trace_colo_proxy("packet same and release packet");
+ } else {
+ g_queue_push_tail(&conn->primary_list, pkt);
+ trace_colo_proxy("packet different");
+ colo_proxy_notify_checkpoint();
+ break;
+ }
+ }
+}
+
+static void *colo_proxy_compare_thread(void *opaque)
+{
+ COLOProxyState *s = opaque;
+
+ while (s->status == COLO_PROXY_RUNNING) {
+ qemu_event_wait(&s->need_compare_ev);
+ qemu_event_reset(&s->need_compare_ev);
+ g_queue_foreach(&s->conn_list, colo_compare_connection, NULL);
+ }
+
+ return NULL;
+}
+
static void colo_proxy_start_one(NetFilterState *nf,
void *opaque, Error **errp)
{
--
1.9.1
- [Qemu-devel] [RFC PATCH v2 00/10] Add colo-proxy based on netfilter, Zhang Chen, 2015/12/22
- [Qemu-devel] [RFC PATCH v2 02/10] Jhash: add linux kernel jhashtable in qemu, Zhang Chen, 2015/12/22
- [Qemu-devel] [RFC PATCH v2 04/10] Colo-proxy: add data structure and jhash func, Zhang Chen, 2015/12/22
- [Qemu-devel] [RFC PATCH v2 03/10] Colo-proxy: add colo-proxy framework, Zhang Chen, 2015/12/22
- [Qemu-devel] [RFC PATCH v2 01/10] Init colo-proxy object based on netfilter, Zhang Chen, 2015/12/22
- [Qemu-devel] [RFC PATCH v2 06/10] net/colo-proxy: add socket used by forward func, Zhang Chen, 2015/12/22
- [Qemu-devel] [RFC PATCH v2 10/10] net/colo-proxy: Colo-proxy do checkpoint and clear, Zhang Chen, 2015/12/22
- [Qemu-devel] [RFC PATCH v2 09/10] net/colo-proxy: Compare pri pkt to sec pkt,
Zhang Chen <=
- [Qemu-devel] [RFC PATCH v2 07/10] net/colo-proxy: Add packet enqueue & handle func, Zhang Chen, 2015/12/22
- [Qemu-devel] [RFC PATCH v2 05/10] net/colo-proxy: Add colo interface to use proxy, Zhang Chen, 2015/12/22
- [Qemu-devel] [RFC PATCH v2 08/10] net/colo-proxy: Handle packet and connection, Zhang Chen, 2015/12/22
- Re: [Qemu-devel] [RFC PATCH v2 00/10] Add colo-proxy based on netfilter, Zhang Chen, 2015/12/29
- Re: [Qemu-devel] [RFC PATCH v2 00/10] Add colo-proxy based on netfilter, Jason Wang, 2015/12/30