ipv4: tcp: fix ACK/RST sent with a transmit delay
If we want to set a EDT time for the skb we want to send
via ip_send_unicast_reply(), we have to pass a new parameter
and initialize ipc.sockc.transmit_time with it.
This fixes the EDT time for ACK/RST packets sent on behalf of
a TIME_WAIT socket.
Fixes: a842fe1425 ("tcp: add optional per socket transmit delay")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3e18943333
commit
d6fb396cfa
5 changed files with 19 additions and 11 deletions
|
|
@ -279,7 +279,7 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb,
|
|||
const struct ip_options *sopt,
|
||||
__be32 daddr, __be32 saddr,
|
||||
const struct ip_reply_arg *arg,
|
||||
unsigned int len);
|
||||
unsigned int len, u64 transmit_time);
|
||||
|
||||
#define IP_INC_STATS(net, field) SNMP_INC_STATS64((net)->mib.ip_statistics, field)
|
||||
#define __IP_INC_STATS(net, field) __SNMP_INC_STATS64((net)->mib.ip_statistics, field)
|
||||
|
|
|
|||
|
|
@ -2240,15 +2240,18 @@ static inline void tcp_add_tx_delay(struct sk_buff *skb,
|
|||
skb->skb_mstamp_ns += (u64)tp->tcp_tx_delay * NSEC_PER_USEC;
|
||||
}
|
||||
|
||||
static inline void tcp_set_tx_time(struct sk_buff *skb,
|
||||
const struct sock *sk)
|
||||
/* Compute Earliest Departure Time for some control packets
|
||||
* like ACK or RST for TIME_WAIT or non ESTABLISHED sockets.
|
||||
*/
|
||||
static inline u64 tcp_transmit_time(const struct sock *sk)
|
||||
{
|
||||
if (static_branch_unlikely(&tcp_tx_delay_enabled)) {
|
||||
u32 delay = (sk->sk_state == TCP_TIME_WAIT) ?
|
||||
tcp_twsk(sk)->tw_tx_delay : tcp_sk(sk)->tcp_tx_delay;
|
||||
|
||||
skb->skb_mstamp_ns = tcp_clock_ns() + (u64)delay * NSEC_PER_USEC;
|
||||
return tcp_clock_ns() + (u64)delay * NSEC_PER_USEC;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* _TCP_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue