netfilter: nf_flow_table: clear skb tstamp before xmit
If 'fq' qdisc is used and a program has requested timestamps, skb->tstamp needs to be cleared, else fq will treat these as 'transmit time'. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
478553fd1b
commit
de20900fbe
|
@ -228,7 +228,6 @@ static unsigned int nf_flow_xmit_xfrm(struct sk_buff *skb,
|
||||||
{
|
{
|
||||||
skb_orphan(skb);
|
skb_orphan(skb);
|
||||||
skb_dst_set_noref(skb, dst);
|
skb_dst_set_noref(skb, dst);
|
||||||
skb->tstamp = 0;
|
|
||||||
dst_output(state->net, state->sk, skb);
|
dst_output(state->net, state->sk, skb);
|
||||||
return NF_STOLEN;
|
return NF_STOLEN;
|
||||||
}
|
}
|
||||||
|
@ -284,6 +283,7 @@ nf_flow_offload_ip_hook(void *priv, struct sk_buff *skb,
|
||||||
flow->timeout = (u32)jiffies + NF_FLOW_TIMEOUT;
|
flow->timeout = (u32)jiffies + NF_FLOW_TIMEOUT;
|
||||||
iph = ip_hdr(skb);
|
iph = ip_hdr(skb);
|
||||||
ip_decrease_ttl(iph);
|
ip_decrease_ttl(iph);
|
||||||
|
skb->tstamp = 0;
|
||||||
|
|
||||||
if (unlikely(dst_xfrm(&rt->dst))) {
|
if (unlikely(dst_xfrm(&rt->dst))) {
|
||||||
memset(skb->cb, 0, sizeof(struct inet_skb_parm));
|
memset(skb->cb, 0, sizeof(struct inet_skb_parm));
|
||||||
|
@ -512,6 +512,7 @@ nf_flow_offload_ipv6_hook(void *priv, struct sk_buff *skb,
|
||||||
flow->timeout = (u32)jiffies + NF_FLOW_TIMEOUT;
|
flow->timeout = (u32)jiffies + NF_FLOW_TIMEOUT;
|
||||||
ip6h = ipv6_hdr(skb);
|
ip6h = ipv6_hdr(skb);
|
||||||
ip6h->hop_limit--;
|
ip6h->hop_limit--;
|
||||||
|
skb->tstamp = 0;
|
||||||
|
|
||||||
if (unlikely(dst_xfrm(&rt->dst))) {
|
if (unlikely(dst_xfrm(&rt->dst))) {
|
||||||
memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
|
memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
|
||||||
|
|
Loading…
Reference in New Issue