From nobody Mon Feb 9 04:31:56 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=intel.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1623898606252261.90087064450245; Wed, 16 Jun 2021 19:56:46 -0700 (PDT) Received: from localhost ([::1]:37754 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ltiCz-00018w-7v for importer@patchew.org; Wed, 16 Jun 2021 22:56:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37534) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ltiAl-0003b2-CS for qemu-devel@nongnu.org; Wed, 16 Jun 2021 22:54:27 -0400 Received: from mga02.intel.com ([134.134.136.20]:12066) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ltiAg-0000Pu-2l for qemu-devel@nongnu.org; Wed, 16 Jun 2021 22:54:27 -0400 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Jun 2021 19:54:20 -0700 Received: from unknown (HELO localhost.localdomain.bj.intel.com) ([10.238.157.59]) by orsmga001.jf.intel.com with ESMTP; 16 Jun 2021 19:54:18 -0700 IronPort-SDR: TOhPJaXEAt4Ug5M3bfszuDBzELSgUaNud409i9qG1wkT36ugi5UsgmFHiFqqibPCXq8uiKOqFs 7Xb8lHq4t2LQ== X-IronPort-AV: E=McAfee;i="6200,9189,10017"; a="193414107" X-IronPort-AV: E=Sophos;i="5.83,278,1616482800"; d="scan'208";a="193414107" IronPort-SDR: IDvcIGLkx1skp1pYjbHntnJ4fQmmmADRggrUMosnv+QiTwA2vE7AES7KTqTsfKNmLEZHjJs8HQ jsPAzJENfpyg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,278,1616482800"; d="scan'208";a="485122013" From: Lei Rao To: chen.zhang@intel.com, lizhijian@cn.fujitsu.com, jasowang@redhat.com, zhang.zhanghailiang@huawei.com, quintela@redhat.com, dgilbert@redhat.com, lukasstraub2@web.de Subject: [PATCH 7/7] Optimized the function of fill_connection_key. Date: Thu, 17 Jun 2021 10:47:15 +0800 Message-Id: <1623898035-18533-8-git-send-email-lei.rao@intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1623898035-18533-1-git-send-email-lei.rao@intel.com> References: <1623898035-18533-1-git-send-email-lei.rao@intel.com> Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=134.134.136.20; envelope-from=lei.rao@intel.com; helo=mga02.intel.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: like.xu.linux@gmail.com, "Rao, Lei" , qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Rao, Lei" Remove some unnecessary code to improve the performance of the filter-rewriter module. Signed-off-by: Lei Rao Reviewed-by: Zhang Chen --- net/colo-compare.c | 2 +- net/colo.c | 31 ++++++++++++------------------- net/colo.h | 6 +++--- net/filter-rewriter.c | 10 +--------- 4 files changed, 17 insertions(+), 32 deletions(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index 4a64a5d..6a1354d 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -264,7 +264,7 @@ static int packet_enqueue(CompareState *s, int mode, Co= nnection **con) pkt =3D NULL; return -1; } - fill_connection_key(pkt, &key); + fill_connection_key(pkt, &key, 0); =20 conn =3D connection_get(s->connection_track_table, &key, diff --git a/net/colo.c b/net/colo.c index 3a3e6e8..5e7232c 100644 --- a/net/colo.c +++ b/net/colo.c @@ -83,19 +83,26 @@ int parse_packet_early(Packet *pkt) return 0; } =20 -void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, Packet *p= kt) +void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, + Packet *pkt, int reverse) { + if (reverse) { + key->src =3D pkt->ip->ip_dst; + key->dst =3D pkt->ip->ip_src; + key->src_port =3D ntohs(tmp_ports & 0xffff); + key->dst_port =3D ntohs(tmp_ports >> 16); + } else { key->src =3D pkt->ip->ip_src; key->dst =3D pkt->ip->ip_dst; key->src_port =3D ntohs(tmp_ports >> 16); key->dst_port =3D ntohs(tmp_ports & 0xffff); + } } =20 -void fill_connection_key(Packet *pkt, ConnectionKey *key) +void fill_connection_key(Packet *pkt, ConnectionKey *key, int reverse) { - uint32_t tmp_ports; + uint32_t tmp_ports =3D 0; =20 - memset(key, 0, sizeof(*key)); key->ip_proto =3D pkt->ip->ip_p; =20 switch (key->ip_proto) { @@ -106,29 +113,15 @@ void fill_connection_key(Packet *pkt, ConnectionKey *= key) case IPPROTO_SCTP: case IPPROTO_UDPLITE: tmp_ports =3D *(uint32_t *)(pkt->transport_header); - extract_ip_and_port(tmp_ports, key, pkt); break; case IPPROTO_AH: tmp_ports =3D *(uint32_t *)(pkt->transport_header + 4); - extract_ip_and_port(tmp_ports, key, pkt); break; default: break; } -} - -void reverse_connection_key(ConnectionKey *key) -{ - struct in_addr tmp_ip; - uint16_t tmp_port; - - tmp_ip =3D key->src; - key->src =3D key->dst; - key->dst =3D tmp_ip; =20 - tmp_port =3D key->src_port; - key->src_port =3D key->dst_port; - key->dst_port =3D tmp_port; + extract_ip_and_port(tmp_ports, key, pkt, reverse); } =20 Connection *connection_new(ConnectionKey *key) diff --git a/net/colo.h b/net/colo.h index d91cd24..5f4d502 100644 --- a/net/colo.h +++ b/net/colo.h @@ -89,9 +89,9 @@ typedef struct Connection { uint32_t connection_key_hash(const void *opaque); int connection_key_equal(const void *opaque1, const void *opaque2); int parse_packet_early(Packet *pkt); -void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, Packet *p= kt); -void fill_connection_key(Packet *pkt, ConnectionKey *key); -void reverse_connection_key(ConnectionKey *key); +void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, + Packet *pkt, int reverse); +void fill_connection_key(Packet *pkt, ConnectionKey *key, int reverse); Connection *connection_new(ConnectionKey *key); void connection_destroy(void *opaque); Connection *connection_get(GHashTable *connection_track_table, diff --git a/net/filter-rewriter.c b/net/filter-rewriter.c index cb3a96c..bf05023 100644 --- a/net/filter-rewriter.c +++ b/net/filter-rewriter.c @@ -279,15 +279,7 @@ static ssize_t colo_rewriter_receive_iov(NetFilterStat= e *nf, */ if (pkt && is_tcp_packet(pkt)) { =20 - fill_connection_key(pkt, &key); - - if (sender =3D=3D nf->netdev) { - /* - * We need make tcp TX and RX packet - * into one connection. - */ - reverse_connection_key(&key); - } + fill_connection_key(pkt, &key, sender =3D=3D nf->netdev); =20 /* After failover we needn't change new TCP packet */ if (s->failover_mode && --=20 1.8.3.1