mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 17:41:50 +00:00
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
|
@ -662,8 +662,9 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb)
|
|||
int genhash;
|
||||
struct sock *sk1 = NULL;
|
||||
#endif
|
||||
struct net *net;
|
||||
u64 transmit_time = 0;
|
||||
struct sock *ctl_sk;
|
||||
struct net *net;
|
||||
|
||||
/* Never send a reset in response to a reset. */
|
||||
if (th->rst)
|
||||
|
@ -770,12 +771,13 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb)
|
|||
if (sk) {
|
||||
ctl_sk->sk_mark = (sk->sk_state == TCP_TIME_WAIT) ?
|
||||
inet_twsk(sk)->tw_mark : sk->sk_mark;
|
||||
tcp_set_tx_time(skb, sk);
|
||||
transmit_time = tcp_transmit_time(sk);
|
||||
}
|
||||
ip_send_unicast_reply(ctl_sk,
|
||||
skb, &TCP_SKB_CB(skb)->header.h4.opt,
|
||||
ip_hdr(skb)->saddr, ip_hdr(skb)->daddr,
|
||||
&arg, arg.iov[0].iov_len);
|
||||
&arg, arg.iov[0].iov_len,
|
||||
transmit_time);
|
||||
|
||||
ctl_sk->sk_mark = 0;
|
||||
__TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
|
||||
|
@ -810,6 +812,7 @@ static void tcp_v4_send_ack(const struct sock *sk,
|
|||
struct net *net = sock_net(sk);
|
||||
struct ip_reply_arg arg;
|
||||
struct sock *ctl_sk;
|
||||
u64 transmit_time;
|
||||
|
||||
memset(&rep.th, 0, sizeof(struct tcphdr));
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
|
@ -863,11 +866,12 @@ static void tcp_v4_send_ack(const struct sock *sk,
|
|||
ctl_sk = this_cpu_read(*net->ipv4.tcp_sk);
|
||||
ctl_sk->sk_mark = (sk->sk_state == TCP_TIME_WAIT) ?
|
||||
inet_twsk(sk)->tw_mark : sk->sk_mark;
|
||||
tcp_set_tx_time(skb, sk);
|
||||
transmit_time = tcp_transmit_time(sk);
|
||||
ip_send_unicast_reply(ctl_sk,
|
||||
skb, &TCP_SKB_CB(skb)->header.h4.opt,
|
||||
ip_hdr(skb)->saddr, ip_hdr(skb)->daddr,
|
||||
&arg, arg.iov[0].iov_len);
|
||||
&arg, arg.iov[0].iov_len,
|
||||
transmit_time);
|
||||
|
||||
ctl_sk->sk_mark = 0;
|
||||
__TCP_INC_STATS(net, TCP_MIB_OUTSEGS);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue