Commit 3f684b4b authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

tcp: cookie_init_sequence() cleanups

Some common IPv4/IPv6 code can be factorized.
Also constify cookie_init_sequence() socket argument.
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0c27171e
...@@ -491,8 +491,9 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb); ...@@ -491,8 +491,9 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb);
/* syncookies: remember time of last synqueue overflow /* syncookies: remember time of last synqueue overflow
* But do not dirty this field too often (once per second is enough) * But do not dirty this field too often (once per second is enough)
* It is racy as we do not hold a lock, but race is very minor.
*/ */
static inline void tcp_synq_overflow(struct sock *sk) static inline void tcp_synq_overflow(const struct sock *sk)
{ {
unsigned long last_overflow = tcp_sk(sk)->rx_opt.ts_recent_stamp; unsigned long last_overflow = tcp_sk(sk)->rx_opt.ts_recent_stamp;
unsigned long now = jiffies; unsigned long now = jiffies;
...@@ -519,8 +520,7 @@ static inline u32 tcp_cookie_time(void) ...@@ -519,8 +520,7 @@ static inline u32 tcp_cookie_time(void)
u32 __cookie_v4_init_sequence(const struct iphdr *iph, const struct tcphdr *th, u32 __cookie_v4_init_sequence(const struct iphdr *iph, const struct tcphdr *th,
u16 *mssp); u16 *mssp);
__u32 cookie_v4_init_sequence(struct sock *sk, const struct sk_buff *skb, __u32 cookie_v4_init_sequence(const struct sk_buff *skb, __u16 *mss);
__u16 *mss);
__u32 cookie_init_timestamp(struct request_sock *req); __u32 cookie_init_timestamp(struct request_sock *req);
bool cookie_timestamp_decode(struct tcp_options_received *opt); bool cookie_timestamp_decode(struct tcp_options_received *opt);
bool cookie_ecn_ok(const struct tcp_options_received *opt, bool cookie_ecn_ok(const struct tcp_options_received *opt,
...@@ -533,8 +533,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb); ...@@ -533,8 +533,7 @@ struct sock *cookie_v6_check(struct sock *sk, struct sk_buff *skb);
u32 __cookie_v6_init_sequence(const struct ipv6hdr *iph, u32 __cookie_v6_init_sequence(const struct ipv6hdr *iph,
const struct tcphdr *th, u16 *mssp); const struct tcphdr *th, u16 *mssp);
__u32 cookie_v6_init_sequence(struct sock *sk, const struct sk_buff *skb, __u32 cookie_v6_init_sequence(const struct sk_buff *skb, __u16 *mss);
__u16 *mss);
#endif #endif
/* tcp_output.c */ /* tcp_output.c */
...@@ -1709,7 +1708,7 @@ struct tcp_request_sock_ops { ...@@ -1709,7 +1708,7 @@ struct tcp_request_sock_ops {
const struct sock *sk_listener, const struct sock *sk_listener,
struct sk_buff *skb); struct sk_buff *skb);
#ifdef CONFIG_SYN_COOKIES #ifdef CONFIG_SYN_COOKIES
__u32 (*cookie_init_seq)(struct sock *sk, const struct sk_buff *skb, __u32 (*cookie_init_seq)(const struct sk_buff *skb,
__u16 *mss); __u16 *mss);
#endif #endif
struct dst_entry *(*route_req)(struct sock *sk, struct flowi *fl, struct dst_entry *(*route_req)(struct sock *sk, struct flowi *fl,
...@@ -1725,14 +1724,16 @@ struct tcp_request_sock_ops { ...@@ -1725,14 +1724,16 @@ struct tcp_request_sock_ops {
#ifdef CONFIG_SYN_COOKIES #ifdef CONFIG_SYN_COOKIES
static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops, static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops,
struct sock *sk, struct sk_buff *skb, const struct sock *sk, struct sk_buff *skb,
__u16 *mss) __u16 *mss)
{ {
return ops->cookie_init_seq(sk, skb, mss); tcp_synq_overflow(sk);
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESSENT);
return ops->cookie_init_seq(skb, mss);
} }
#else #else
static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops, static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops,
struct sock *sk, struct sk_buff *skb, const struct sock *sk, struct sk_buff *skb,
__u16 *mss) __u16 *mss)
{ {
return 0; return 0;
......
...@@ -192,15 +192,11 @@ u32 __cookie_v4_init_sequence(const struct iphdr *iph, const struct tcphdr *th, ...@@ -192,15 +192,11 @@ u32 __cookie_v4_init_sequence(const struct iphdr *iph, const struct tcphdr *th,
} }
EXPORT_SYMBOL_GPL(__cookie_v4_init_sequence); EXPORT_SYMBOL_GPL(__cookie_v4_init_sequence);
__u32 cookie_v4_init_sequence(struct sock *sk, const struct sk_buff *skb, __u32 cookie_v4_init_sequence(const struct sk_buff *skb, __u16 *mssp)
__u16 *mssp)
{ {
const struct iphdr *iph = ip_hdr(skb); const struct iphdr *iph = ip_hdr(skb);
const struct tcphdr *th = tcp_hdr(skb); const struct tcphdr *th = tcp_hdr(skb);
tcp_synq_overflow(sk);
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESSENT);
return __cookie_v4_init_sequence(iph, th, mssp); return __cookie_v4_init_sequence(iph, th, mssp);
} }
......
...@@ -114,14 +114,11 @@ u32 __cookie_v6_init_sequence(const struct ipv6hdr *iph, ...@@ -114,14 +114,11 @@ u32 __cookie_v6_init_sequence(const struct ipv6hdr *iph,
} }
EXPORT_SYMBOL_GPL(__cookie_v6_init_sequence); EXPORT_SYMBOL_GPL(__cookie_v6_init_sequence);
__u32 cookie_v6_init_sequence(struct sock *sk, const struct sk_buff *skb, __u16 *mssp) __u32 cookie_v6_init_sequence(const struct sk_buff *skb, __u16 *mssp)
{ {
const struct ipv6hdr *iph = ipv6_hdr(skb); const struct ipv6hdr *iph = ipv6_hdr(skb);
const struct tcphdr *th = tcp_hdr(skb); const struct tcphdr *th = tcp_hdr(skb);
tcp_synq_overflow(sk);
NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_SYNCOOKIESSENT);
return __cookie_v6_init_sequence(iph, th, mssp); return __cookie_v6_init_sequence(iph, th, mssp);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment