Support packets in flight
[samplevnf.git] / VNFs / DPPD-PROX / genl4_stream_tcp.c
index d05455b..4d92546 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <rte_cycles.h>
 #include <rte_ether.h>
+#include <rte_ethdev.h> // required by rte_eth_ctrl.h in 19.05
 #include <rte_eth_ctrl.h>
 
 #include "log.h"
@@ -67,8 +68,8 @@ struct tcp_option {
 
 void stream_tcp_create_rst(struct rte_mbuf *mbuf, struct l4_meta *l4_meta, struct pkt_tuple *tuple)
 {
-       struct tcp_hdr *tcp = (struct tcp_hdr *)l4_meta->l4_hdr;
-       struct ipv4_hdr *ip = ((struct ipv4_hdr *)tcp) - 1;
+       prox_rte_tcp_hdr *tcp = (prox_rte_tcp_hdr *)l4_meta->l4_hdr;
+       prox_rte_ipv4_hdr *ip = ((prox_rte_ipv4_hdr *)tcp) - 1;
 
        ip->src_addr = tuple->dst_addr;
        ip->dst_addr = tuple->src_addr;
@@ -76,9 +77,9 @@ void stream_tcp_create_rst(struct rte_mbuf *mbuf, struct l4_meta *l4_meta, struc
        tcp->dst_port = tuple->src_port;
        tcp->src_port = tuple->dst_port;
 
-       ip->total_length = rte_bswap16(sizeof(struct ipv4_hdr) + sizeof(struct tcp_hdr));
-       tcp->tcp_flags = TCP_RST_FLAG;
-       tcp->data_off = ((sizeof(struct tcp_hdr) / 4) << 4);
+       ip->total_length = rte_bswap16(sizeof(prox_rte_ipv4_hdr) + sizeof(prox_rte_tcp_hdr));
+       tcp->tcp_flags = PROX_RTE_TCP_RST_FLAG;
+       tcp->data_off = ((sizeof(prox_rte_tcp_hdr) / 4) << 4);
        rte_pktmbuf_pkt_len(mbuf) = l4_meta->payload - rte_pktmbuf_mtod(mbuf, uint8_t *);
        rte_pktmbuf_data_len(mbuf) = l4_meta->payload - rte_pktmbuf_mtod(mbuf, uint8_t *);
 }
@@ -93,8 +94,8 @@ static void create_tcp_pkt(struct stream_ctx *ctx, struct rte_mbuf *mbuf, uint8_
        pkt = rte_pktmbuf_mtod(mbuf, uint8_t *);
        rte_memcpy(pkt, stream_cfg->data[act->peer].hdr, stream_cfg->data[act->peer].hdr_len);
 
-       struct ipv4_hdr *l3_hdr = (struct ipv4_hdr*)&pkt[stream_cfg->data[act->peer].hdr_len - sizeof(struct ipv4_hdr)];
-       struct tcp_hdr *l4_hdr = (struct tcp_hdr *)&pkt[stream_cfg->data[act->peer].hdr_len];
+       prox_rte_ipv4_hdr *l3_hdr = (prox_rte_ipv4_hdr*)&pkt[stream_cfg->data[act->peer].hdr_len - sizeof(prox_rte_ipv4_hdr)];
+       prox_rte_tcp_hdr *l4_hdr = (prox_rte_tcp_hdr *)&pkt[stream_cfg->data[act->peer].hdr_len];
 
        l3_hdr->src_addr = ctx->tuple->dst_addr;
        l3_hdr->dst_addr = ctx->tuple->src_addr;
@@ -103,17 +104,17 @@ static void create_tcp_pkt(struct stream_ctx *ctx, struct rte_mbuf *mbuf, uint8_
        l4_hdr->src_port = ctx->tuple->dst_port;
        l4_hdr->dst_port = ctx->tuple->src_port;
 
-       uint32_t tcp_len = sizeof(struct tcp_hdr);
+       uint32_t tcp_len = sizeof(prox_rte_tcp_hdr);
        uint32_t tcp_payload_len = 0;
        uint32_t seq_len = 0;
        struct tcp_option *tcp_op;
 
-       if (tcp_flags & TCP_RST_FLAG) {
-               tcp_flags |= TCP_RST_FLAG;
+       if (tcp_flags & PROX_RTE_TCP_RST_FLAG) {
+               tcp_flags |= PROX_RTE_TCP_RST_FLAG;
                seq_len = 1;
        }
-       else if (tcp_flags & TCP_SYN_FLAG) {
-               tcp_flags |= TCP_SYN_FLAG;
+       else if (tcp_flags & PROX_RTE_TCP_SYN_FLAG) {
+               tcp_flags |= PROX_RTE_TCP_SYN_FLAG;
                /* Window scaling */
 
                /* TODO: make options come from the stream. */
@@ -128,14 +129,14 @@ static void create_tcp_pkt(struct stream_ctx *ctx, struct rte_mbuf *mbuf, uint8_
 
                ctx->seq_first_byte = ctx->ackd_seq + 1;
        }
-       else if (tcp_flags & TCP_FIN_FLAG) {
-               tcp_flags |= TCP_FIN_FLAG;
+       else if (tcp_flags & PROX_RTE_TCP_FIN_FLAG) {
+               tcp_flags |= PROX_RTE_TCP_FIN_FLAG;
                seq_len = 1;
        }
 
-       if (tcp_flags & TCP_ACK_FLAG) {
+       if (tcp_flags & PROX_RTE_TCP_ACK_FLAG) {
                l4_hdr->recv_ack = rte_bswap32(ctx->recv_seq);
-               tcp_flags |= TCP_ACK_FLAG;
+               tcp_flags |= PROX_RTE_TCP_ACK_FLAG;
        }
        else
                l4_hdr->recv_ack = 0;
@@ -162,13 +163,13 @@ static void create_tcp_pkt(struct stream_ctx *ctx, struct rte_mbuf *mbuf, uint8_
        rte_pktmbuf_pkt_len(mbuf)  = l4_payload_offset + data_len;
        rte_pktmbuf_data_len(mbuf) = l4_payload_offset + data_len;
 
-       l3_hdr->total_length = rte_bswap16(sizeof(struct ipv4_hdr) + tcp_len + data_len);
+       l3_hdr->total_length = rte_bswap16(sizeof(prox_rte_ipv4_hdr) + tcp_len + data_len);
        plogdx_dbg(mbuf, NULL);
 
        plogx_dbg("put tcp packet with flags: %s%s%s, (len = %d, seq = %d, ack =%d)\n",
-                 tcp_flags & TCP_SYN_FLAG? "SYN ":"",
-                 tcp_flags & TCP_ACK_FLAG? "ACK ":"",
-                 tcp_flags & TCP_FIN_FLAG? "FIN ":"",
+                 tcp_flags & PROX_RTE_TCP_SYN_FLAG? "SYN ":"",
+                 tcp_flags & PROX_RTE_TCP_ACK_FLAG? "ACK ":"",
+                 tcp_flags & PROX_RTE_TCP_FIN_FLAG? "FIN ":"",
                  data_len, rte_bswap32(l4_hdr->sent_seq), rte_bswap32(l4_hdr->recv_ack));
 }
 
@@ -186,9 +187,9 @@ uint16_t stream_tcp_reply_len(struct stream_ctx *ctx)
                           the current implementation this packet
                           contains the TCP option field to set the
                           MSS. For this, add 4 bytes. */
-                       return ctx->stream_cfg->data[!ctx->peer].hdr_len + sizeof(struct tcp_hdr) + 4;
+                       return ctx->stream_cfg->data[!ctx->peer].hdr_len + sizeof(prox_rte_tcp_hdr) + 4;
                }
-               return ctx->stream_cfg->data[!ctx->peer].hdr_len + sizeof(struct tcp_hdr);
+               return ctx->stream_cfg->data[!ctx->peer].hdr_len + sizeof(prox_rte_tcp_hdr);
        }
        else if (ctx->stream_cfg->actions[ctx->cur_action].peer == ctx->peer) {
                /* The reply _could_ (due to races, still possibly
@@ -203,7 +204,7 @@ uint16_t stream_tcp_reply_len(struct stream_ctx *ctx)
                if (remaining_len == 0) {
                        if (ctx->cur_action + 1 != ctx->stream_cfg->n_actions) {
                                if (ctx->stream_cfg->actions[ctx->cur_action + 1].peer == ctx->peer)
-                                       return ctx->stream_cfg->data[ctx->peer].hdr_len + sizeof(struct tcp_hdr);
+                                       return ctx->stream_cfg->data[ctx->peer].hdr_len + sizeof(prox_rte_tcp_hdr);
                                else {
                                        uint32_t seq_beg = ctx->recv_seq - ctx->other_seq_first_byte;
                                        uint32_t end = ctx->stream_cfg->actions[ctx->cur_action + 1].beg +
@@ -211,15 +212,15 @@ uint16_t stream_tcp_reply_len(struct stream_ctx *ctx)
                                        uint32_t remaining = end - seq_beg;
                                        uint16_t data_len = remaining > 1460? 1460: remaining;
 
-                                       return ctx->stream_cfg->data[!ctx->peer].hdr_len + sizeof(struct tcp_hdr) + data_len;
+                                       return ctx->stream_cfg->data[!ctx->peer].hdr_len + sizeof(prox_rte_tcp_hdr) + data_len;
                                }
                        }
                        else {
-                               return ctx->stream_cfg->data[ctx->peer].hdr_len + sizeof(struct tcp_hdr);
+                               return ctx->stream_cfg->data[ctx->peer].hdr_len + sizeof(prox_rte_tcp_hdr);
                        }
                }
                else {
-                       return ctx->stream_cfg->data[ctx->peer].hdr_len + sizeof(struct tcp_hdr);
+                       return ctx->stream_cfg->data[ctx->peer].hdr_len + sizeof(prox_rte_tcp_hdr);
                }
        }
        else if (ctx->stream_cfg->actions[ctx->cur_action].peer != ctx->peer) {
@@ -229,10 +230,10 @@ uint16_t stream_tcp_reply_len(struct stream_ctx *ctx)
                uint32_t remaining = end - seq_beg;
                uint16_t data_len = remaining > 1460? 1460: remaining;
 
-               return ctx->stream_cfg->data[!ctx->peer].hdr_len + sizeof(struct tcp_hdr) + data_len;
+               return ctx->stream_cfg->data[!ctx->peer].hdr_len + sizeof(prox_rte_tcp_hdr) + data_len;
        }
        else
-               return ctx->stream_cfg->data[ctx->peer].hdr_len + sizeof(struct tcp_hdr);
+               return ctx->stream_cfg->data[ctx->peer].hdr_len + sizeof(prox_rte_tcp_hdr);
 }
 
 static void stream_tcp_proc_in_order_data(struct stream_ctx *ctx, struct l4_meta *l4_meta, int *progress_seq)
@@ -293,18 +294,18 @@ static void stream_tcp_proc_in_order_data(struct stream_ctx *ctx, struct l4_meta
 
 static int stream_tcp_proc_in(struct stream_ctx *ctx, struct l4_meta *l4_meta)
 {
-       struct tcp_hdr *tcp = NULL;
+       prox_rte_tcp_hdr *tcp = NULL;
        int got_syn = 0;
        int got_ack = 0;
        int got_fin = 0;
        int got_rst = 0;
 
-       tcp = (struct tcp_hdr *)l4_meta->l4_hdr;
+       tcp = (prox_rte_tcp_hdr *)l4_meta->l4_hdr;
 
-       got_syn = tcp->tcp_flags & TCP_SYN_FLAG;
-       got_ack = tcp->tcp_flags & TCP_ACK_FLAG;
-       got_fin = tcp->tcp_flags & TCP_FIN_FLAG;
-       got_rst = tcp->tcp_flags & TCP_RST_FLAG;
+       got_syn = tcp->tcp_flags & PROX_RTE_TCP_SYN_FLAG;
+       got_ack = tcp->tcp_flags & PROX_RTE_TCP_ACK_FLAG;
+       got_fin = tcp->tcp_flags & PROX_RTE_TCP_FIN_FLAG;
+       got_rst = tcp->tcp_flags & PROX_RTE_TCP_RST_FLAG;
        plogx_dbg("TCP, flags: %s%s%s, (len = %d, seq = %d, ack =%d)\n", got_syn? "SYN ":"", got_ack? "ACK ":"", got_fin? "FIN " : "", l4_meta->len, rte_bswap32(tcp->sent_seq), rte_bswap32(tcp->recv_ack));
 
        if (got_syn)
@@ -399,7 +400,7 @@ static int stream_tcp_proc_in(struct stream_ctx *ctx, struct l4_meta *l4_meta)
        }
 
        /* parse options */
-       if (((tcp->data_off >> 4)*4) > sizeof(struct tcp_hdr)) {
+       if (((tcp->data_off >> 4)*4) > sizeof(prox_rte_tcp_hdr)) {
                struct tcp_option *tcp_op = (struct tcp_option *)(tcp + 1);
                uint8_t *payload = (uint8_t *)tcp + ((tcp->data_off >> 4)*4);
 
@@ -439,7 +440,7 @@ static int stream_tcp_proc_out_closed(struct stream_ctx *ctx, struct rte_mbuf *m
        ctx->next_seq = 99;
        ctx->ackd_seq = 99;
 
-       create_tcp_pkt(ctx, mbuf, TCP_SYN_FLAG, 0, 0);
+       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_SYN_FLAG, 0, 0);
        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
        *next_tsc = tcp_retx_timeout(ctx);
        return 0;
@@ -460,7 +461,7 @@ static int stream_tcp_proc_out_listen(struct stream_ctx *ctx, struct rte_mbuf *m
                pkt_tuple_debug(ctx->tuple);
 
                ctx->flags |= STREAM_CTX_F_TCP_ENDED;
-               create_tcp_pkt(ctx, mbuf, TCP_RST_FLAG, 0, 0);
+               create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_RST_FLAG, 0, 0);
                token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                *next_tsc = tcp_retx_timeout(ctx);
                return 0;
@@ -474,7 +475,7 @@ static int stream_tcp_proc_out_listen(struct stream_ctx *ctx, struct rte_mbuf *m
 
        ctx->tcp_state = SYN_RECEIVED;
 
-       create_tcp_pkt(ctx, mbuf, TCP_SYN_FLAG | TCP_ACK_FLAG, 0, 0);
+       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_SYN_FLAG | PROX_RTE_TCP_ACK_FLAG, 0, 0);
        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
        *next_tsc = tcp_retx_timeout(ctx);
        return 0;
@@ -516,7 +517,7 @@ static int stream_tcp_proc_out_syn_sent(struct stream_ctx *ctx, struct rte_mbuf
                return -1;
        }
        else {
-               create_tcp_pkt(ctx, mbuf, TCP_ACK_FLAG, 0, 0);
+               create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_ACK_FLAG, 0, 0);
                token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                *next_tsc = tcp_retx_timeout(ctx);
        }
@@ -541,7 +542,7 @@ static int stream_tcp_proc_out_syn_recv(struct stream_ctx *ctx, struct rte_mbuf
                ctx->same_state = 0;
                ctx->tcp_state = ESTABLISHED;
                if (ctx->stream_cfg->actions[ctx->cur_action].peer != ctx->peer) {
-                       create_tcp_pkt(ctx, mbuf, TCP_ACK_FLAG, 0, 0);
+                       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_ACK_FLAG, 0, 0);
                        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                        *next_tsc = tcp_retx_timeout(ctx);
                        return 0;
@@ -561,7 +562,7 @@ static int stream_tcp_proc_out_syn_recv(struct stream_ctx *ctx, struct rte_mbuf
                           data.
                        */
 
-                       /* create_tcp_pkt(ctx, mbuf, TCP_ACK_FLAG, 0, 0); */
+                       /* create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_ACK_FLAG, 0, 0); */
                        /* token_time_take(&ctx->token_time, mbuf_wire_size(mbuf)); */
                        *next_tsc = tcp_resched_timeout(ctx);
                        return -1;
@@ -575,7 +576,7 @@ static int stream_tcp_proc_out_syn_recv(struct stream_ctx *ctx, struct rte_mbuf
                ++ctx->same_state;
                tcp_set_retransmit(ctx);
                ctx->next_seq = ctx->ackd_seq;
-               create_tcp_pkt(ctx, mbuf, TCP_SYN_FLAG | TCP_ACK_FLAG, 0, 0);
+               create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_SYN_FLAG | PROX_RTE_TCP_ACK_FLAG, 0, 0);
                token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                *next_tsc = tcp_retx_timeout(ctx);
                return 0;
@@ -602,7 +603,7 @@ static int stream_tcp_proc_out_estab_tx(struct stream_ctx *ctx, struct rte_mbuf
                plogx_dbg("Moving to FIN_WAIT\n");
                ctx->tcp_state = FIN_WAIT;
                ctx->same_state = 0;
-               create_tcp_pkt(ctx, mbuf, TCP_FIN_FLAG | TCP_ACK_FLAG, 0, 0);
+               create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_FIN_FLAG | PROX_RTE_TCP_ACK_FLAG, 0, 0);
                token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                *next_tsc = tcp_retx_timeout(ctx);
                return 0;
@@ -681,7 +682,7 @@ static int stream_tcp_proc_out_estab_tx(struct stream_ctx *ctx, struct rte_mbuf
        else
                ctx->flags &= ~STREAM_CTX_F_MORE_DATA;
 
-       create_tcp_pkt(ctx, mbuf, TCP_ACK_FLAG, data_beg, data_len);
+       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_ACK_FLAG, data_beg, data_len);
        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
        if (ctx->flags & STREAM_CTX_F_MORE_DATA)
                *next_tsc = tcp_resched_timeout(ctx);
@@ -704,14 +705,14 @@ static int stream_tcp_proc_out_estab_rx(struct stream_ctx *ctx, struct rte_mbuf
                plogx_dbg("Got fin!\n");
                if (1) {
                        ctx->tcp_state = LAST_ACK;
-                       create_tcp_pkt(ctx, mbuf, TCP_FIN_FLAG | TCP_ACK_FLAG, 0, 0);
+                       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_FIN_FLAG | PROX_RTE_TCP_ACK_FLAG, 0, 0);
                        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                        *next_tsc = tcp_retx_timeout(ctx);
                        return 0;
                }
                else {
                        ctx->tcp_state = CLOSE_WAIT;
-                       create_tcp_pkt(ctx, mbuf, TCP_FIN_FLAG, 0, 0);
+                       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_FIN_FLAG, 0, 0);
                        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                        *next_tsc = tcp_resched_timeout(ctx);
                        return 0;
@@ -726,7 +727,7 @@ static int stream_tcp_proc_out_estab_rx(struct stream_ctx *ctx, struct rte_mbuf
                plogx_dbg("state++ (ack = %d)\n", ctx->recv_seq);
        }
 
-       create_tcp_pkt(ctx, mbuf, TCP_ACK_FLAG, 0, 0);
+       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_ACK_FLAG, 0, 0);
        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
        *next_tsc = tcp_retx_timeout(ctx);
        return 0;
@@ -755,7 +756,7 @@ static int stream_tcp_proc_out_close_wait(struct stream_ctx *ctx, struct rte_mbu
           when the FIN is sent after ACK'ing the incoming FIN. In any
           case, it does not matter if there was a packet or not. */
        ctx->tcp_state = LAST_ACK;
-       create_tcp_pkt(ctx, mbuf, TCP_ACK_FLAG | TCP_FIN_FLAG, 0, 0);
+       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_ACK_FLAG | PROX_RTE_TCP_FIN_FLAG, 0, 0);
        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
        *next_tsc = tcp_retx_timeout(ctx);
        return 0;
@@ -785,7 +786,7 @@ static int stream_tcp_proc_out_last_ack(struct stream_ctx *ctx, struct rte_mbuf
                ctx->next_seq = ctx->ackd_seq;
                ctx->same_state++;
                tcp_set_retransmit(ctx);
-               create_tcp_pkt(ctx, mbuf, TCP_ACK_FLAG | TCP_FIN_FLAG, 0, 0);
+               create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_ACK_FLAG | PROX_RTE_TCP_FIN_FLAG, 0, 0);
                token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                *next_tsc = tcp_retx_timeout(ctx);
                return 0;
@@ -807,7 +808,7 @@ static int stream_tcp_proc_out_fin_wait(struct stream_ctx *ctx, struct rte_mbuf
                        ctx->tcp_state = TIME_WAIT;
                        ctx->sched_tsc = rte_rdtsc() + ctx->stream_cfg->tsc_timeout_time_wait;
                        plogx_dbg("from FIN_WAIT to TIME_WAIT\n");
-                       create_tcp_pkt(ctx, mbuf, TCP_ACK_FLAG, 0, 0);
+                       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_ACK_FLAG, 0, 0);
                        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                        *next_tsc = ctx->stream_cfg->tsc_timeout_time_wait;
                        return 0;
@@ -829,7 +830,7 @@ static int stream_tcp_proc_out_fin_wait(struct stream_ctx *ctx, struct rte_mbuf
                ctx->same_state++;
                tcp_set_retransmit(ctx);
                ctx->next_seq = ctx->ackd_seq;
-               create_tcp_pkt(ctx, mbuf, TCP_FIN_FLAG | TCP_ACK_FLAG, 0, 0);
+               create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_FIN_FLAG | PROX_RTE_TCP_ACK_FLAG, 0, 0);
                token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
                *next_tsc = tcp_retx_timeout(ctx);
                return 0;
@@ -852,7 +853,7 @@ static int stream_tcp_proc_out_time_wait(struct stream_ctx *ctx, struct rte_mbuf
 
        plogx_dbg("Got packet while in TIME_WAIT (pkt ACK reTX)\n");
        ctx->sched_tsc = rte_rdtsc() + ctx->stream_cfg->tsc_timeout_time_wait;
-       create_tcp_pkt(ctx, mbuf, TCP_ACK_FLAG, 0, 0);
+       create_tcp_pkt(ctx, mbuf, PROX_RTE_TCP_ACK_FLAG, 0, 0);
        token_time_take(&ctx->token_time, mbuf_wire_size(mbuf));
        *next_tsc = ctx->stream_cfg->tsc_timeout_time_wait;
        return 0;
@@ -916,7 +917,7 @@ int stream_tcp_is_ended(struct stream_ctx *ctx)
 
 static void add_pkt_bytes(uint32_t *n_pkts, uint32_t *n_bytes, uint32_t len)
 {
-       len = (len < 60? 60 : len) + 20 + ETHER_CRC_LEN;
+       len = (len < 60? 60 : len) + 20 + PROX_RTE_ETHER_CRC_LEN;
 
        (*n_pkts)++;
        *n_bytes += len;
@@ -931,9 +932,9 @@ void stream_tcp_calc_len(struct stream_cfg *cfg, uint32_t *n_pkts, uint32_t *n_b
        *n_bytes = 0;
 
        /* Connection setup */
-       add_pkt_bytes(n_pkts, n_bytes, client_hdr_len + sizeof(struct tcp_hdr) + 4); /* SYN */
-       add_pkt_bytes(n_pkts, n_bytes, server_hdr_len + sizeof(struct tcp_hdr) + 4); /* SYN/ACK */
-       add_pkt_bytes(n_pkts, n_bytes, client_hdr_len + sizeof(struct tcp_hdr)); /* ACK */
+       add_pkt_bytes(n_pkts, n_bytes, client_hdr_len + sizeof(prox_rte_tcp_hdr) + 4); /* SYN */
+       add_pkt_bytes(n_pkts, n_bytes, server_hdr_len + sizeof(prox_rte_tcp_hdr) + 4); /* SYN/ACK */
+       add_pkt_bytes(n_pkts, n_bytes, client_hdr_len + sizeof(prox_rte_tcp_hdr)); /* ACK */
 
        for (uint32_t i = 0; i < cfg->n_actions; ++i) {
                const uint32_t mss = 1440; /* TODO: should come from peer's own mss. */
@@ -946,11 +947,11 @@ void stream_tcp_calc_len(struct stream_cfg *cfg, uint32_t *n_pkts, uint32_t *n_b
 
                while (remaining) {
                        uint32_t seg = remaining > mss? mss: remaining;
-                       add_pkt_bytes(n_pkts, n_bytes, send_hdr_len + sizeof(struct tcp_hdr) + seg);
+                       add_pkt_bytes(n_pkts, n_bytes, send_hdr_len + sizeof(prox_rte_tcp_hdr) + seg);
                        remaining -= seg;
                }
 
-               add_pkt_bytes(n_pkts, n_bytes, reply_hdr_len + sizeof(struct tcp_hdr));
+               add_pkt_bytes(n_pkts, n_bytes, reply_hdr_len + sizeof(prox_rte_tcp_hdr));
        }
 
        /* Connection Tear-down */
@@ -959,7 +960,7 @@ void stream_tcp_calc_len(struct stream_cfg *cfg, uint32_t *n_pkts, uint32_t *n_b
        const uint32_t init_hdr_len = last_peer == PEER_CLIENT? client_hdr_len : server_hdr_len;
        const uint32_t resp_hdr_len = last_peer == PEER_CLIENT? server_hdr_len : client_hdr_len;
 
-       add_pkt_bytes(n_pkts, n_bytes, init_hdr_len + sizeof(struct tcp_hdr)); /* FIN */
-       add_pkt_bytes(n_pkts, n_bytes, resp_hdr_len + sizeof(struct tcp_hdr)); /* FIN/ACK */
-       add_pkt_bytes(n_pkts, n_bytes, init_hdr_len + sizeof(struct tcp_hdr)); /* ACK */
+       add_pkt_bytes(n_pkts, n_bytes, init_hdr_len + sizeof(prox_rte_tcp_hdr)); /* FIN */
+       add_pkt_bytes(n_pkts, n_bytes, resp_hdr_len + sizeof(prox_rte_tcp_hdr)); /* FIN/ACK */
+       add_pkt_bytes(n_pkts, n_bytes, init_hdr_len + sizeof(prox_rte_tcp_hdr)); /* ACK */
 }