Commit db0a762e authored by zhanghailiang's avatar zhanghailiang Committed by Jason Wang
Browse files

filter-rewriter: skip net_checksum_calculate() while offset = 0



While the offset of packets's sequence for primary side and
secondary side is zero, it is unnecessary to call net_checksum_calculate()
to recalculate the checksume value of packets.

Signed-off-by: default avatarzhanghailiang <zhang.zhanghailiang@huawei.com>
Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
parent 0e79668e
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -93,11 +93,13 @@ static int handle_primary_tcp_pkt(NetFilterState *nf,
            conn->offset -= (ntohl(tcp_pkt->th_ack) - 1);
            conn->syn_flag = 0;
        }
        if (conn->offset) {
            /* handle packets to the secondary from the primary */
            tcp_pkt->th_ack = htonl(ntohl(tcp_pkt->th_ack) + conn->offset);

            net_checksum_calculate((uint8_t *)pkt->data, pkt->size);
        }
    }

    return 0;
}
@@ -129,11 +131,14 @@ static int handle_secondary_tcp_pkt(NetFilterState *nf,
    }

    if ((tcp_pkt->th_flags & (TH_ACK | TH_SYN)) == TH_ACK) {
        /* Only need to adjust seq while offset is Non-zero */
        if (conn->offset) {
            /* handle packets to the primary from the secondary*/
            tcp_pkt->th_seq = htonl(ntohl(tcp_pkt->th_seq) - conn->offset);

            net_checksum_calculate((uint8_t *)pkt->data, pkt->size);
        }
    }

    return 0;
}