[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH V2 6/7] net/colo-compare: Add passthrough list to CompareStat
From: |
Lukas Straub |
Subject: |
Re: [PATCH V2 6/7] net/colo-compare: Add passthrough list to CompareState |
Date: |
Wed, 17 Mar 2021 22:15:32 +0100 |
On Wed, 3 Mar 2021 12:15:38 +0800
Zhang Chen <chen.zhang@intel.com > wrote:
> From: Zhang Chen <chen.zhang@intel.com>
>
> Add passthrough list for each CompareState.
>
> Signed-off-by: Zhang Chen <chen.zhang@intel.com>
> ---
> net/colo-compare.c | 25 +++++++++++++++++++++++++
> net/colo-compare.h | 10 ++++++++++
> 2 files changed, 35 insertions(+)
>
> diff --git a/net/colo-compare.c b/net/colo-compare.c
> index a803f8b888..80cea32c20 100644
> --- a/net/colo-compare.c
> +++ b/net/colo-compare.c
> @@ -141,6 +141,7 @@ static int packet_enqueue(CompareState *s, int mode,
> Connection **con)
> ConnectionKey key;
> Packet *pkt = NULL;
> Connection *conn;
> + PassthroughEntry *bypass, *next;
> int ret;
>
> if (mode == PRIMARY_IN) {
> @@ -160,6 +161,29 @@ static int packet_enqueue(CompareState *s, int mode,
> Connection **con)
> }
> fill_connection_key(pkt, &key);
>
> + /* Check COLO passthrough connenction */
> + if (!QLIST_EMPTY(&s->passthroughlist)) {
> + QLIST_FOREACH_SAFE(bypass, &s->passthroughlist, node, next) {
> + if (((key.ip_proto == IPPROTO_TCP) && (bypass->l4_protocol ==
> 0)) ||
> + ((key.ip_proto == IPPROTO_UDP) && (bypass->l4_protocol ==
> 1))) {
> + if (bypass->src_port == 0 || bypass->src_port ==
> key.dst_port) {
> + if (bypass->src_ip.s_addr == 0 ||
> + bypass->src_ip.s_addr == key.src.s_addr) {
> + if (bypass->dst_port == 0 ||
> + bypass->dst_port == key.src_port) {
> + if (bypass->dst_ip.s_addr == 0 ||
> + bypass->dst_ip.s_addr == key.dst.s_addr) {
> + packet_destroy(pkt, NULL);
> + pkt = NULL;
> + return -1;
> + }
> + }
> + }
> + }
> + }
> + }
> + }
> +
Hi,
Access to s->passthroughlist still needs to be protected by a lock.
Regards,
Lukas Straub
> conn = connection_get(s->connection_track_table,
> &key,
> &s->conn_list);
> @@ -1224,6 +1248,7 @@ static void colo_compare_complete(UserCreatable *uc,
> Error **errp)
> }
>
> g_queue_init(&s->conn_list);
> + QLIST_INIT(&s->passthroughlist);
>
> s->connection_track_table = g_hash_table_new_full(connection_key_hash,
> connection_key_equal,
> diff --git a/net/colo-compare.h b/net/colo-compare.h
> index 2a9dcac0a7..31644f145b 100644
> --- a/net/colo-compare.h
> +++ b/net/colo-compare.h
> @@ -54,6 +54,15 @@ typedef struct SendEntry {
> uint8_t *buf;
> } SendEntry;
>
> +typedef struct PassthroughEntry {
> + int l4_protocol;
> + int src_port;
> + int dst_port;
> + struct in_addr src_ip;
> + struct in_addr dst_ip;
> + QLIST_ENTRY(PassthroughEntry) node;
> +} PassthroughEntry;
> +
> /*
> * + CompareState ++
> * | |
> @@ -110,6 +119,7 @@ struct CompareState {
>
> QEMUBH *event_bh;
> enum colo_event event;
> + QLIST_HEAD(, PassthroughEntry) passthroughlist;
>
> QTAILQ_ENTRY(CompareState) next;
> };
--
pgppZ1wu1s7Qc.pgp
Description: OpenPGP digital signature
- [PATCH V2 0/7] Bypass specific network traffic in COLO, Zhang Chen, 2021/03/02
- [PATCH V2 1/7] qapi/net.json: Add IP_PROTOCOL definition, Zhang Chen, 2021/03/02
- [PATCH V2 2/7] qapi/net.json: Add L4_Connection definition, Zhang Chen, 2021/03/02
- [PATCH V2 3/7] qapi/net: Add new QMP command for COLO passthrough, Zhang Chen, 2021/03/02
- [PATCH V2 4/7] hmp-commands: Add new HMP command for COLO passthrough, Zhang Chen, 2021/03/02
- [PATCH V2 5/7] net/colo-compare: Move data structure and define to .h file., Zhang Chen, 2021/03/02
- [PATCH V2 6/7] net/colo-compare: Add passthrough list to CompareState, Zhang Chen, 2021/03/02
- Re: [PATCH V2 6/7] net/colo-compare: Add passthrough list to CompareState,
Lukas Straub <=
- [PATCH V2 7/7] net/net.c: Add handler for COLO passthrough connection, Zhang Chen, 2021/03/02