diff --git a/nfq/desync.c b/nfq/desync.c index 5b18b38d..15a0bfff 100644 --- a/nfq/desync.c +++ b/nfq/desync.c @@ -1018,7 +1018,7 @@ static bool tcp_orig_send(uint8_t verdict, uint32_t fwmark, const char *ifout, c uint8_t ttl_orig, ttl_dup, scale_factor; uint16_t flags_dup; uint32_t *timestamps; - bool sack, DF; + bool sack, DF, bTF; extract_endpoints(dis->ip, dis->ip6, dis->tcp, NULL, &src, &dst); ttl_orig = dis->ip ? dis->ip->ip_ttl : dis->ip6->ip6_ctlun.ip6_un1.ip6_un1_hlim; @@ -1029,11 +1029,10 @@ static bool tcp_orig_send(uint8_t verdict, uint32_t fwmark, const char *ifout, c { ttl_dup = (ctrack && ctrack->dup_autottl) ? ctrack->dup_autottl : (dis->ip6 ? (dp->dup_ttl6 ? dp->dup_ttl6 : ttl_orig) : (dp->dup_ttl ? dp->dup_ttl : ttl_orig)); - if (dp->dup_fooling_mode || dp->dup_tcp_flags_set || dp->dup_tcp_flags_unset || (dis->ip && dp->dup_ip_id_mode!=IPID_SAME)) + flags_dup = dis->tcp->th_flags; + bTF = rewrite_tcp_flags(&flags_dup, dp->dup_tcp_flags_unset, dp->dup_tcp_flags_set, "dup"); + if (bTF || dp->dup_fooling_mode || (dis->ip && dp->dup_ip_id_mode!=IPID_SAME)) { - flags_dup = dis->tcp->th_flags; - rewrite_tcp_flags(&flags_dup, dp->dup_tcp_flags_unset, dp->dup_tcp_flags_set, "dup"); - scale_factor = tcp_find_scale_factor(dis->tcp); timestamps = tcp_find_timestamps(dis->tcp); sack = tcp_has_sack(dis->tcp);