aboutsummaryrefslogtreecommitdiff
path: root/net/colo.h
diff options
context:
space:
mode:
authorZhang Chen <zhangckid@gmail.com>2018-09-14 01:47:53 +0000
committerJason Wang <jasowang@redhat.com>2018-10-19 11:15:03 +0800
commit6214231abde01119d3084a67262d35e909bd9414 (patch)
tree2669fc7a3a5d9d71667a56d5905648caf3218693 /net/colo.h
parent77f7c747193662edfadeeb3118d63eed0eac51a6 (diff)
downloadqemu-6214231abde01119d3084a67262d35e909bd9414.zip
qemu-6214231abde01119d3084a67262d35e909bd9414.tar.gz
qemu-6214231abde01119d3084a67262d35e909bd9414.tar.bz2
filter-rewriter: Add TCP state machine and fix memory leak in connection_track_table
We add almost full TCP state machine in filter-rewriter, except TCPS_LISTEN and some simplify in VM active close FIN states. The reason for this simplify job is because guest kernel will track the TCP status and wait 2MSL time too, if client resend the FIN packet, guest will resend the last ACK, so we needn't wait 2MSL time in filter-rewriter. After a net connection is closed, we didn't clear its related resources in connection_track_table, which will lead to memory leak. Let's track the state of net connection, if it is closed, its related resources will be cleared up. Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com> Signed-off-by: Zhang Chen <zhangckid@gmail.com> Signed-off-by: Zhang Chen <chen.zhang@intel.com> Signed-off-by: Jason Wang <jasowang@redhat.com>
Diffstat (limited to 'net/colo.h')
-rw-r--r--net/colo.h9
1 files changed, 4 insertions, 5 deletions
diff --git a/net/colo.h b/net/colo.h
index da6c36d..0277e0e 100644
--- a/net/colo.h
+++ b/net/colo.h
@@ -18,6 +18,7 @@
#include "slirp/slirp.h"
#include "qemu/jhash.h"
#include "qemu/timer.h"
+#include "slirp/tcp.h"
#define HASHTABLE_MAX_SIZE 16384
@@ -81,11 +82,9 @@ typedef struct Connection {
uint32_t sack;
/* offset = secondary_seq - primary_seq */
tcp_seq offset;
- /*
- * we use this flag update offset func
- * run once in independent tcp connection
- */
- int syn_flag;
+
+ int tcp_state; /* TCP FSM state */
+ tcp_seq fin_ack_seq; /* the seq of 'fin=1,ack=1' */
} Connection;
uint32_t connection_key_hash(const void *opaque);