tcp: record received TOS value in the request socket
A new field is added to the request sock to record the TOS value received on the listening socket during 3WHS: When not under syn flood, it is recording the TOS value sent in SYN. When under syn flood, it is recording the TOS value sent in the ACK. This is a preparation patch in order to do TOS reflection in the later commit. Signed-off-by: Wei Wang <weiwan@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3a8c4ad161
commit
e9b12edc13
|
@ -134,6 +134,7 @@ struct tcp_request_sock {
|
||||||
* FastOpen it's the seq#
|
* FastOpen it's the seq#
|
||||||
* after data-in-SYN.
|
* after data-in-SYN.
|
||||||
*/
|
*/
|
||||||
|
u8 syn_tos;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req)
|
static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req)
|
||||||
|
|
|
@ -286,11 +286,10 @@ struct request_sock *cookie_tcp_reqsk_alloc(const struct request_sock_ops *ops,
|
||||||
struct sock *sk,
|
struct sock *sk,
|
||||||
struct sk_buff *skb)
|
struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
|
struct tcp_request_sock *treq;
|
||||||
struct request_sock *req;
|
struct request_sock *req;
|
||||||
|
|
||||||
#ifdef CONFIG_MPTCP
|
#ifdef CONFIG_MPTCP
|
||||||
struct tcp_request_sock *treq;
|
|
||||||
|
|
||||||
if (sk_is_mptcp(sk))
|
if (sk_is_mptcp(sk))
|
||||||
ops = &mptcp_subflow_request_sock_ops;
|
ops = &mptcp_subflow_request_sock_ops;
|
||||||
#endif
|
#endif
|
||||||
|
@ -299,8 +298,9 @@ struct request_sock *cookie_tcp_reqsk_alloc(const struct request_sock_ops *ops,
|
||||||
if (!req)
|
if (!req)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_MPTCP)
|
|
||||||
treq = tcp_rsk(req);
|
treq = tcp_rsk(req);
|
||||||
|
treq->syn_tos = TCP_SKB_CB(skb)->ip_dsfield;
|
||||||
|
#if IS_ENABLED(CONFIG_MPTCP)
|
||||||
treq->is_mptcp = sk_is_mptcp(sk);
|
treq->is_mptcp = sk_is_mptcp(sk);
|
||||||
if (treq->is_mptcp) {
|
if (treq->is_mptcp) {
|
||||||
int err = mptcp_subflow_init_cookie_req(req, sk, skb);
|
int err = mptcp_subflow_init_cookie_req(req, sk, skb);
|
||||||
|
|
|
@ -6834,6 +6834,7 @@ int tcp_conn_request(struct request_sock_ops *rsk_ops,
|
||||||
|
|
||||||
tcp_rsk(req)->snt_isn = isn;
|
tcp_rsk(req)->snt_isn = isn;
|
||||||
tcp_rsk(req)->txhash = net_tx_rndhash();
|
tcp_rsk(req)->txhash = net_tx_rndhash();
|
||||||
|
tcp_rsk(req)->syn_tos = TCP_SKB_CB(skb)->ip_dsfield;
|
||||||
tcp_openreq_init_rwin(req, sk, dst);
|
tcp_openreq_init_rwin(req, sk, dst);
|
||||||
sk_rx_queue_set(req_to_sk(req), skb);
|
sk_rx_queue_set(req_to_sk(req), skb);
|
||||||
if (!want_cookie) {
|
if (!want_cookie) {
|
||||||
|
|
Loading…
Reference in New Issue