forked from Minki/linux
tcp: add init_cookie_seq method to tcp_request_sock_ops
Move the specific IPv4/IPv6 cookie sequence initialization to a new method in tcp_request_sock_ops in preparation for unifying tcp_v4_conn_request and tcp_v6_conn_request. Signed-off-by: Octavian Purdila <octavian.purdila@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
16bea70aa7
commit
fb7b37a7f3
@ -495,13 +495,6 @@ u32 __cookie_v4_init_sequence(const struct iphdr *iph, const struct tcphdr *th,
|
||||
u16 *mssp);
|
||||
__u32 cookie_v4_init_sequence(struct sock *sk, const struct sk_buff *skb,
|
||||
__u16 *mss);
|
||||
#else
|
||||
static inline __u32 cookie_v4_init_sequence(struct sock *sk,
|
||||
const struct sk_buff *skb,
|
||||
__u16 *mss)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
__u32 cookie_init_timestamp(struct request_sock *req);
|
||||
@ -517,13 +510,6 @@ u32 __cookie_v6_init_sequence(const struct ipv6hdr *iph,
|
||||
const struct tcphdr *th, u16 *mssp);
|
||||
__u32 cookie_v6_init_sequence(struct sock *sk, const struct sk_buff *skb,
|
||||
__u16 *mss);
|
||||
#else
|
||||
static inline __u32 cookie_v6_init_sequence(struct sock *sk,
|
||||
struct sk_buff *skb,
|
||||
__u16 *mss)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
/* tcp_output.c */
|
||||
|
||||
@ -1615,8 +1601,28 @@ struct tcp_request_sock_ops {
|
||||
#endif
|
||||
void (*init_req)(struct request_sock *req, struct sock *sk,
|
||||
struct sk_buff *skb);
|
||||
#ifdef CONFIG_SYN_COOKIES
|
||||
__u32 (*cookie_init_seq)(struct sock *sk, const struct sk_buff *skb,
|
||||
__u16 *mss);
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifdef CONFIG_SYN_COOKIES
|
||||
static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops,
|
||||
struct sock *sk, struct sk_buff *skb,
|
||||
__u16 *mss)
|
||||
{
|
||||
return ops->cookie_init_seq(sk, skb, mss);
|
||||
}
|
||||
#else
|
||||
static inline __u32 cookie_init_sequence(const struct tcp_request_sock_ops *ops,
|
||||
struct sock *sk, struct sk_buff *skb,
|
||||
__u16 *mss)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int tcpv4_offload_init(void);
|
||||
|
||||
void tcp_v4_init(void);
|
||||
|
@ -1264,6 +1264,9 @@ static const struct tcp_request_sock_ops tcp_request_sock_ipv4_ops = {
|
||||
.calc_md5_hash = tcp_v4_md5_hash_skb,
|
||||
#endif
|
||||
.init_req = tcp_v4_init_req,
|
||||
#ifdef CONFIG_SYN_COOKIES
|
||||
.cookie_init_seq = cookie_v4_init_sequence,
|
||||
#endif
|
||||
};
|
||||
|
||||
int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
@ -1331,7 +1334,7 @@ int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
TCP_ECN_create_request(req, skb, sock_net(sk));
|
||||
|
||||
if (want_cookie) {
|
||||
isn = cookie_v4_init_sequence(sk, skb, &req->mss);
|
||||
isn = cookie_init_sequence(af_ops, sk, skb, &req->mss);
|
||||
req->cookie_ts = tmp_opt.tstamp_ok;
|
||||
} else if (!isn) {
|
||||
/* VJ's idea. We save last timestamp seen
|
||||
|
@ -761,6 +761,9 @@ static const struct tcp_request_sock_ops tcp_request_sock_ipv6_ops = {
|
||||
.calc_md5_hash = tcp_v6_md5_hash_skb,
|
||||
#endif
|
||||
.init_req = tcp_v6_init_req,
|
||||
#ifdef CONFIG_SYN_COOKIES
|
||||
.cookie_init_seq = cookie_v6_init_sequence,
|
||||
#endif
|
||||
};
|
||||
|
||||
static void tcp_v6_send_response(struct sk_buff *skb, u32 seq, u32 ack, u32 win,
|
||||
@ -1061,7 +1064,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
if (!isn) {
|
||||
if (want_cookie) {
|
||||
isn = cookie_v6_init_sequence(sk, skb, &req->mss);
|
||||
isn = cookie_init_sequence(af_ops, sk, skb, &req->mss);
|
||||
req->cookie_ts = tmp_opt.tstamp_ok;
|
||||
goto have_isn;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user