From d15bd7b63c7b08104142f5b48f0331c87688c207 Mon Sep 17 00:00:00 2001
From: Libor Peltan <libor.peltan@nic.cz>
Date: Tue, 21 Sep 2021 08:50:52 +0200
Subject: [PATCH] xdp-tcp: tiny code improvement

---
 src/libknot/xdp/tcp.c | 57 ++++++++++++++++++++++++++-----------------
 1 file changed, 34 insertions(+), 23 deletions(-)

diff --git a/src/libknot/xdp/tcp.c b/src/libknot/xdp/tcp.c
index 1bf31106ac..fae6c2efeb 100644
--- a/src/libknot/xdp/tcp.c
+++ b/src/libknot/xdp/tcp.c
@@ -147,6 +147,25 @@ static void tcp_table_del(knot_tcp_conn_t **todel, knot_tcp_table_t *table)
 	table->usage--;
 }
 
+static void conn_init_from_msg(knot_tcp_conn_t *conn, knot_xdp_msg_t *msg)
+{
+	memcpy(&conn->ip_rem, &msg->ip_from, sizeof(conn->ip_rem));
+	memcpy(&conn->ip_loc, &msg->ip_to,   sizeof(conn->ip_loc));
+
+	memcpy(&conn->last_eth_rem, &msg->eth_from, sizeof(conn->last_eth_rem));
+	memcpy(&conn->last_eth_loc, &msg->eth_to,   sizeof(conn->last_eth_loc));
+
+	conn->seqno = msg->seqno;
+	conn->ackno = msg->ackno;
+	conn->acked = msg->ackno;
+
+	conn->last_active = get_timestamp();
+	conn->state = XDP_TCP_NORMAL;
+
+	memset(&conn->inbuf, 0, sizeof(conn->inbuf));
+	memset(&conn->outbufs, 0, sizeof(conn->outbufs));
+}
+
 // WARNING you shall ensure that it's not in the table already!
 static int tcp_table_add(knot_xdp_msg_t *msg, uint64_t hash, knot_tcp_table_t *table,
                          knot_tcp_conn_t **res)
@@ -157,23 +176,10 @@ static int tcp_table_add(knot_xdp_msg_t *msg, uint64_t hash, knot_tcp_table_t *t
 	}
 	knot_tcp_conn_t **addto = table->conns + (hash % table->size);
 
-	memcpy(&c->ip_rem, &msg->ip_from, sizeof(c->ip_rem));
-	memcpy(&c->ip_loc, &msg->ip_to,   sizeof(c->ip_loc));
-
-	memcpy(&c->last_eth_rem, &msg->eth_from, sizeof(c->last_eth_rem));
-	memcpy(&c->last_eth_loc, &msg->eth_to,   sizeof(c->last_eth_loc));
+	conn_init_from_msg(c, msg);
 
-	c->seqno = msg->seqno;
-	c->ackno = msg->ackno;
-	c->acked = msg->ackno;
-
-	c->last_active = get_timestamp();
 	add_tail(tcp_table_timeout(table), tcp_conn_node(c));
 
-	c->state = XDP_TCP_NORMAL;
-	memset(&c->inbuf, 0, sizeof(c->inbuf));
-	memset(&c->outbufs, 0, sizeof(c->outbufs));
-
 	c->next = *addto;
 	*addto = c;
 
@@ -374,6 +380,19 @@ static int send_msgs(knot_xdp_msg_t *msgs, uint32_t n_msgs, knot_xdp_socket_t *s
 	return KNOT_EOK; // ignore errcode from send
 }
 
+static void msg_init_from_conn(knot_xdp_msg_t *msg, knot_tcp_conn_t *conn)
+{
+	memcpy( msg->eth_from, conn->last_eth_loc, sizeof(msg->eth_from));
+	memcpy( msg->eth_to,   conn->last_eth_rem, sizeof(msg->eth_to));
+	memcpy(&msg->ip_from, &conn->ip_loc,  sizeof(msg->ip_from));
+	memcpy(&msg->ip_to,   &conn->ip_rem,  sizeof(msg->ip_to));
+
+	msg->ackno = conn->seqno;
+	msg->seqno = conn->ackno;
+
+	msg->payload.iov_len = 0;
+}
+
 static int next_msg(knot_xdp_msg_t *msgs, uint32_t n_msgs, knot_xdp_msg_t **cur,
                      knot_xdp_socket_t *socket, knot_tcp_relay_t *rl)
 {
@@ -396,15 +415,7 @@ static int next_msg(knot_xdp_msg_t *msgs, uint32_t n_msgs, knot_xdp_msg_t **cur,
 		return ret;
 	}
 
-	memcpy( msg->eth_from, rl->conn->last_eth_loc, sizeof(msg->eth_from));
-	memcpy( msg->eth_to,   rl->conn->last_eth_rem, sizeof(msg->eth_to));
-	memcpy(&msg->ip_from, &rl->conn->ip_loc,  sizeof(msg->ip_from));
-	memcpy(&msg->ip_to,   &rl->conn->ip_rem,  sizeof(msg->ip_to));
-
-	msg->ackno = rl->conn->seqno;
-	msg->seqno = rl->conn->ackno;
-
-	msg->payload.iov_len = 0;
+	msg_init_from_conn(msg, rl->conn);
 
 	return ret;
 }
-- 
GitLab