> -----Original Message----- > From: Rao, Lei <lei....@intel.com> > Sent: Thursday, June 17, 2021 10:47 AM > To: Zhang, Chen <chen.zh...@intel.com>; lizhij...@cn.fujitsu.com; > jasow...@redhat.com; zhang.zhanghaili...@huawei.com; > quint...@redhat.com; dgilb...@redhat.com; lukasstra...@web.de > Cc: like.xu.li...@gmail.com; qemu-devel@nongnu.org; Rao, Lei > <lei....@intel.com> > Subject: [PATCH 7/7] Optimized the function of fill_connection_key. > > From: "Rao, Lei" <lei....@intel.com> > > Remove some unnecessary code to improve the performance of the filter- > rewriter module. > > Signed-off-by: Lei Rao <lei....@intel.com> Looks good to me. Reviewed-by: Zhang Chen <chen.zh...@intel.com> Thanks 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, Connection **con) > pkt = NULL; > return -1; > } > - fill_connection_key(pkt, &key); > + fill_connection_key(pkt, &key, 0); > > conn = 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; > } > > -void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, Packet > *pkt) > +void extract_ip_and_port(uint32_t tmp_ports, ConnectionKey *key, > + Packet *pkt, int reverse) > { > + if (reverse) { > + key->src = pkt->ip->ip_dst; > + key->dst = pkt->ip->ip_src; > + key->src_port = ntohs(tmp_ports & 0xffff); > + key->dst_port = ntohs(tmp_ports >> 16); > + } else { > key->src = pkt->ip->ip_src; > key->dst = pkt->ip->ip_dst; > key->src_port = ntohs(tmp_ports >> 16); > key->dst_port = ntohs(tmp_ports & 0xffff); > + } > } > > -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 = 0; > > - memset(key, 0, sizeof(*key)); > key->ip_proto = pkt->ip->ip_p; > > switch (key->ip_proto) { > @@ -106,29 +113,15 @@ void fill_connection_key(Packet *pkt, > ConnectionKey *key) > case IPPROTO_SCTP: > case IPPROTO_UDPLITE: > tmp_ports = *(uint32_t *)(pkt->transport_header); > - extract_ip_and_port(tmp_ports, key, pkt); > break; > case IPPROTO_AH: > tmp_ports = *(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 = key->src; > - key->src = key->dst; > - key->dst = tmp_ip; > > - tmp_port = key->src_port; > - key->src_port = key->dst_port; > - key->dst_port = tmp_port; > + extract_ip_and_port(tmp_ports, key, pkt, reverse); > } > > 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 *pkt); -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(NetFilterState *nf, > */ > if (pkt && is_tcp_packet(pkt)) { > > - fill_connection_key(pkt, &key); > - > - if (sender == nf->netdev) { > - /* > - * We need make tcp TX and RX packet > - * into one connection. > - */ > - reverse_connection_key(&key); > - } > + fill_connection_key(pkt, &key, sender == nf->netdev); > > /* After failover we needn't change new TCP packet */ > if (s->failover_mode && > -- > 1.8.3.1