mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
Allow tcp_parse_options to consult dst entry
We need tcp_parse_options to be aware of dst_entry to take into account per dst_entry TCP options settings Signed-off-by: Gilad Ben-Yossef <gilad@codefidence.com> Sigend-off-by: Ori Finkelman <ori@comsleep.com> Sigend-off-by: Yony Amit <yony@comsleep.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f55017a93f
commit
022c3f7d82
7 changed files with 56 additions and 42 deletions
|
@ -1257,11 +1257,21 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
|||
tcp_rsk(req)->af_specific = &tcp_request_sock_ipv4_ops;
|
||||
#endif
|
||||
|
||||
ireq = inet_rsk(req);
|
||||
ireq->loc_addr = daddr;
|
||||
ireq->rmt_addr = saddr;
|
||||
ireq->no_srccheck = inet_sk(sk)->transparent;
|
||||
ireq->opt = tcp_v4_save_options(sk, skb);
|
||||
|
||||
dst = inet_csk_route_req(sk, req);
|
||||
if(!dst)
|
||||
goto drop_and_free;
|
||||
|
||||
tcp_clear_options(&tmp_opt);
|
||||
tmp_opt.mss_clamp = 536;
|
||||
tmp_opt.user_mss = tcp_sk(sk)->rx_opt.user_mss;
|
||||
|
||||
tcp_parse_options(skb, &tmp_opt, 0);
|
||||
tcp_parse_options(skb, &tmp_opt, 0, dst);
|
||||
|
||||
if (want_cookie && !tmp_opt.saw_tstamp)
|
||||
tcp_clear_options(&tmp_opt);
|
||||
|
@ -1270,14 +1280,8 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
|||
|
||||
tcp_openreq_init(req, &tmp_opt, skb);
|
||||
|
||||
ireq = inet_rsk(req);
|
||||
ireq->loc_addr = daddr;
|
||||
ireq->rmt_addr = saddr;
|
||||
ireq->no_srccheck = inet_sk(sk)->transparent;
|
||||
ireq->opt = tcp_v4_save_options(sk, skb);
|
||||
|
||||
if (security_inet_conn_request(sk, skb, req))
|
||||
goto drop_and_free;
|
||||
goto drop_and_release;
|
||||
|
||||
if (!want_cookie)
|
||||
TCP_ECN_create_request(req, tcp_hdr(skb));
|
||||
|
@ -1302,7 +1306,6 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
|||
*/
|
||||
if (tmp_opt.saw_tstamp &&
|
||||
tcp_death_row.sysctl_tw_recycle &&
|
||||
(dst = inet_csk_route_req(sk, req)) != NULL &&
|
||||
(peer = rt_get_peer((struct rtable *)dst)) != NULL &&
|
||||
peer->v4daddr == saddr) {
|
||||
if (get_seconds() < peer->tcp_ts_stamp + TCP_PAWS_MSL &&
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue