Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc343475 authored by Gilad Ben-Yossef's avatar Gilad Ben-Yossef Committed by David S. Miller
Browse files

Allow disabling of DSACK TCP option per route



Add and use no DSCAK bit in the features field.

Signed-off-by: default avatarGilad Ben-Yossef <gilad@codefidence.com>
Sigend-off-by: default avatarOri Finkelman <ori@comsleep.com>
Sigend-off-by: default avatarYony Amit <yony@comsleep.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 345cda2f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -381,6 +381,7 @@ enum
#define RTAX_FEATURE_NO_TSTAMP	0x00000004
#define RTAX_FEATURE_ALLFRAG	0x00000008
#define RTAX_FEATURE_NO_WSCALE	0x00000010
#define RTAX_FEATURE_NO_DSACK	0x00000020

struct rta_session
{
+6 −2
Original line number Diff line number Diff line
@@ -4080,8 +4080,10 @@ static inline int tcp_sack_extend(struct tcp_sack_block *sp, u32 seq,
static void tcp_dsack_set(struct sock *sk, u32 seq, u32 end_seq)
{
	struct tcp_sock *tp = tcp_sk(sk);
	struct dst_entry *dst = __sk_dst_get(sk);

	if (tcp_is_sack(tp) && sysctl_tcp_dsack) {
	if (tcp_is_sack(tp) && sysctl_tcp_dsack &&
	    !dst_feature(dst, RTAX_FEATURE_NO_DSACK)) {
		int mib_idx;

		if (before(seq, tp->rcv_nxt))
@@ -4110,13 +4112,15 @@ static void tcp_dsack_extend(struct sock *sk, u32 seq, u32 end_seq)
static void tcp_send_dupack(struct sock *sk, struct sk_buff *skb)
{
	struct tcp_sock *tp = tcp_sk(sk);
	struct dst_entry *dst = __sk_dst_get(sk);

	if (TCP_SKB_CB(skb)->end_seq != TCP_SKB_CB(skb)->seq &&
	    before(TCP_SKB_CB(skb)->seq, tp->rcv_nxt)) {
		NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_DELAYEDACKLOST);
		tcp_enter_quickack_mode(sk);

		if (tcp_is_sack(tp) && sysctl_tcp_dsack) {
		if (tcp_is_sack(tp) && sysctl_tcp_dsack &&
		    !dst_feature(dst, RTAX_FEATURE_NO_DSACK)) {
			u32 end_seq = TCP_SKB_CB(skb)->end_seq;

			if (after(TCP_SKB_CB(skb)->end_seq, tp->rcv_nxt))