|
@@ -3727,7 +3727,7 @@ old_ack:
|
|
* the fast version below fails.
|
|
* the fast version below fails.
|
|
*/
|
|
*/
|
|
void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx,
|
|
void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx,
|
|
- u8 **hvpp, int estab, struct dst_entry *dst)
|
|
|
|
|
|
+ u8 **hvpp, int estab)
|
|
{
|
|
{
|
|
unsigned char *ptr;
|
|
unsigned char *ptr;
|
|
struct tcphdr *th = tcp_hdr(skb);
|
|
struct tcphdr *th = tcp_hdr(skb);
|
|
@@ -3766,8 +3766,7 @@ void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx,
|
|
break;
|
|
break;
|
|
case TCPOPT_WINDOW:
|
|
case TCPOPT_WINDOW:
|
|
if (opsize == TCPOLEN_WINDOW && th->syn &&
|
|
if (opsize == TCPOLEN_WINDOW && th->syn &&
|
|
- !estab && sysctl_tcp_window_scaling &&
|
|
|
|
- !dst_feature(dst, RTAX_FEATURE_NO_WSCALE)) {
|
|
|
|
|
|
+ !estab && sysctl_tcp_window_scaling) {
|
|
__u8 snd_wscale = *(__u8 *)ptr;
|
|
__u8 snd_wscale = *(__u8 *)ptr;
|
|
opt_rx->wscale_ok = 1;
|
|
opt_rx->wscale_ok = 1;
|
|
if (snd_wscale > 14) {
|
|
if (snd_wscale > 14) {
|
|
@@ -3783,8 +3782,7 @@ void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx,
|
|
case TCPOPT_TIMESTAMP:
|
|
case TCPOPT_TIMESTAMP:
|
|
if ((opsize == TCPOLEN_TIMESTAMP) &&
|
|
if ((opsize == TCPOLEN_TIMESTAMP) &&
|
|
((estab && opt_rx->tstamp_ok) ||
|
|
((estab && opt_rx->tstamp_ok) ||
|
|
- (!estab && sysctl_tcp_timestamps &&
|
|
|
|
- !dst_feature(dst, RTAX_FEATURE_NO_TSTAMP)))) {
|
|
|
|
|
|
+ (!estab && sysctl_tcp_timestamps))) {
|
|
opt_rx->saw_tstamp = 1;
|
|
opt_rx->saw_tstamp = 1;
|
|
opt_rx->rcv_tsval = get_unaligned_be32(ptr);
|
|
opt_rx->rcv_tsval = get_unaligned_be32(ptr);
|
|
opt_rx->rcv_tsecr = get_unaligned_be32(ptr + 4);
|
|
opt_rx->rcv_tsecr = get_unaligned_be32(ptr + 4);
|
|
@@ -3792,8 +3790,7 @@ void tcp_parse_options(struct sk_buff *skb, struct tcp_options_received *opt_rx,
|
|
break;
|
|
break;
|
|
case TCPOPT_SACK_PERM:
|
|
case TCPOPT_SACK_PERM:
|
|
if (opsize == TCPOLEN_SACK_PERM && th->syn &&
|
|
if (opsize == TCPOLEN_SACK_PERM && th->syn &&
|
|
- !estab && sysctl_tcp_sack &&
|
|
|
|
- !dst_feature(dst, RTAX_FEATURE_NO_SACK)) {
|
|
|
|
|
|
+ !estab && sysctl_tcp_sack) {
|
|
opt_rx->sack_ok = 1;
|
|
opt_rx->sack_ok = 1;
|
|
tcp_sack_reset(opt_rx);
|
|
tcp_sack_reset(opt_rx);
|
|
}
|
|
}
|
|
@@ -3878,7 +3875,7 @@ static int tcp_fast_parse_options(struct sk_buff *skb, struct tcphdr *th,
|
|
if (tcp_parse_aligned_timestamp(tp, th))
|
|
if (tcp_parse_aligned_timestamp(tp, th))
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
- tcp_parse_options(skb, &tp->rx_opt, hvpp, 1, NULL);
|
|
|
|
|
|
+ tcp_parse_options(skb, &tp->rx_opt, hvpp, 1);
|
|
return 1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -4133,10 +4130,8 @@ 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)
|
|
static void tcp_dsack_set(struct sock *sk, u32 seq, u32 end_seq)
|
|
{
|
|
{
|
|
struct tcp_sock *tp = tcp_sk(sk);
|
|
struct tcp_sock *tp = tcp_sk(sk);
|
|
- struct dst_entry *dst = __sk_dst_get(sk);
|
|
|
|
|
|
|
|
- if (tcp_is_sack(tp) && sysctl_tcp_dsack &&
|
|
|
|
- !dst_feature(dst, RTAX_FEATURE_NO_DSACK)) {
|
|
|
|
|
|
+ if (tcp_is_sack(tp) && sysctl_tcp_dsack) {
|
|
int mib_idx;
|
|
int mib_idx;
|
|
|
|
|
|
if (before(seq, tp->rcv_nxt))
|
|
if (before(seq, tp->rcv_nxt))
|
|
@@ -4165,15 +4160,13 @@ 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)
|
|
static void tcp_send_dupack(struct sock *sk, struct sk_buff *skb)
|
|
{
|
|
{
|
|
struct tcp_sock *tp = tcp_sk(sk);
|
|
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 &&
|
|
if (TCP_SKB_CB(skb)->end_seq != TCP_SKB_CB(skb)->seq &&
|
|
before(TCP_SKB_CB(skb)->seq, tp->rcv_nxt)) {
|
|
before(TCP_SKB_CB(skb)->seq, tp->rcv_nxt)) {
|
|
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_DELAYEDACKLOST);
|
|
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_DELAYEDACKLOST);
|
|
tcp_enter_quickack_mode(sk);
|
|
tcp_enter_quickack_mode(sk);
|
|
|
|
|
|
- if (tcp_is_sack(tp) && sysctl_tcp_dsack &&
|
|
|
|
- !dst_feature(dst, RTAX_FEATURE_NO_DSACK)) {
|
|
|
|
|
|
+ if (tcp_is_sack(tp) && sysctl_tcp_dsack) {
|
|
u32 end_seq = TCP_SKB_CB(skb)->end_seq;
|
|
u32 end_seq = TCP_SKB_CB(skb)->end_seq;
|
|
|
|
|
|
if (after(TCP_SKB_CB(skb)->end_seq, tp->rcv_nxt))
|
|
if (after(TCP_SKB_CB(skb)->end_seq, tp->rcv_nxt))
|
|
@@ -5428,11 +5421,10 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,
|
|
u8 *hash_location;
|
|
u8 *hash_location;
|
|
struct inet_connection_sock *icsk = inet_csk(sk);
|
|
struct inet_connection_sock *icsk = inet_csk(sk);
|
|
struct tcp_sock *tp = tcp_sk(sk);
|
|
struct tcp_sock *tp = tcp_sk(sk);
|
|
- struct dst_entry *dst = __sk_dst_get(sk);
|
|
|
|
struct tcp_cookie_values *cvp = tp->cookie_values;
|
|
struct tcp_cookie_values *cvp = tp->cookie_values;
|
|
int saved_clamp = tp->rx_opt.mss_clamp;
|
|
int saved_clamp = tp->rx_opt.mss_clamp;
|
|
|
|
|
|
- tcp_parse_options(skb, &tp->rx_opt, &hash_location, 0, dst);
|
|
|
|
|
|
+ tcp_parse_options(skb, &tp->rx_opt, &hash_location, 0);
|
|
|
|
|
|
if (th->ack) {
|
|
if (th->ack) {
|
|
/* rfc793:
|
|
/* rfc793:
|