mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
net/tcp: Wire TCP-AO to request sockets
Now when the new request socket is created from the listening socket, it's recorded what MKT was used by the peer. tcp_rsk_used_ao() is a new helper for checking if TCP-AO option was used to create the request socket. tcp_ao_copy_all_matching() will copy all keys that match the peer on the request socket, as well as preparing them for the usage (creating traffic keys). Co-developed-by: Francesco Ruggeri <fruggeri@arista.com> Signed-off-by: Francesco Ruggeri <fruggeri@arista.com> Co-developed-by: Salam Noureddine <noureddine@arista.com> Signed-off-by: Salam Noureddine <noureddine@arista.com> Signed-off-by: Dmitry Safonov <dima@arista.com> Acked-by: David Ahern <dsahern@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
decde2586b
commit
06b22ef295
@@ -2216,6 +2216,12 @@ struct tcp_request_sock_ops {
|
||||
const struct sock *sk,
|
||||
const struct sk_buff *skb);
|
||||
#endif
|
||||
#ifdef CONFIG_TCP_AO
|
||||
struct tcp_ao_key *(*ao_lookup)(const struct sock *sk,
|
||||
struct request_sock *req,
|
||||
int sndid, int rcvid);
|
||||
int (*ao_calc_key)(struct tcp_ao_key *mkt, u8 *key, struct request_sock *sk);
|
||||
#endif
|
||||
#ifdef CONFIG_SYN_COOKIES
|
||||
__u32 (*cookie_init_seq)(const struct sk_buff *skb,
|
||||
__u16 *mss);
|
||||
|
||||
@@ -123,6 +123,9 @@ int tcp_parse_ao(struct sock *sk, int cmd, unsigned short int family,
|
||||
sockptr_t optval, int optlen);
|
||||
struct tcp_ao_key *tcp_ao_established_key(struct tcp_ao_info *ao,
|
||||
int sndid, int rcvid);
|
||||
int tcp_ao_copy_all_matching(const struct sock *sk, struct sock *newsk,
|
||||
struct request_sock *req, struct sk_buff *skb,
|
||||
int family);
|
||||
int tcp_ao_calc_traffic_key(struct tcp_ao_key *mkt, u8 *key, void *ctx,
|
||||
unsigned int len, struct tcp_sigpool *hp);
|
||||
void tcp_ao_destroy_sock(struct sock *sk, bool twsk);
|
||||
@@ -147,6 +150,11 @@ struct tcp_ao_key *tcp_v4_ao_lookup(const struct sock *sk, struct sock *addr_sk,
|
||||
int tcp_v4_ao_calc_key_sk(struct tcp_ao_key *mkt, u8 *key,
|
||||
const struct sock *sk,
|
||||
__be32 sisn, __be32 disn, bool send);
|
||||
int tcp_v4_ao_calc_key_rsk(struct tcp_ao_key *mkt, u8 *key,
|
||||
struct request_sock *req);
|
||||
struct tcp_ao_key *tcp_v4_ao_lookup_rsk(const struct sock *sk,
|
||||
struct request_sock *req,
|
||||
int sndid, int rcvid);
|
||||
int tcp_v4_ao_hash_skb(char *ao_hash, struct tcp_ao_key *key,
|
||||
const struct sock *sk, const struct sk_buff *skb,
|
||||
const u8 *tkey, int hash_offset, u32 sne);
|
||||
@@ -154,11 +162,21 @@ int tcp_v4_ao_hash_skb(char *ao_hash, struct tcp_ao_key *key,
|
||||
int tcp_v6_ao_hash_pseudoheader(struct tcp_sigpool *hp,
|
||||
const struct in6_addr *daddr,
|
||||
const struct in6_addr *saddr, int nbytes);
|
||||
int tcp_v6_ao_calc_key_skb(struct tcp_ao_key *mkt, u8 *key,
|
||||
const struct sk_buff *skb, __be32 sisn, __be32 disn);
|
||||
int tcp_v6_ao_calc_key_sk(struct tcp_ao_key *mkt, u8 *key,
|
||||
const struct sock *sk, __be32 sisn,
|
||||
__be32 disn, bool send);
|
||||
int tcp_v6_ao_calc_key_rsk(struct tcp_ao_key *mkt, u8 *key,
|
||||
struct request_sock *req);
|
||||
struct tcp_ao_key *tcp_v6_ao_do_lookup(const struct sock *sk,
|
||||
const struct in6_addr *addr,
|
||||
int sndid, int rcvid);
|
||||
struct tcp_ao_key *tcp_v6_ao_lookup(const struct sock *sk,
|
||||
struct sock *addr_sk, int sndid, int rcvid);
|
||||
struct tcp_ao_key *tcp_v6_ao_lookup_rsk(const struct sock *sk,
|
||||
struct request_sock *req,
|
||||
int sndid, int rcvid);
|
||||
int tcp_v6_ao_hash_skb(char *ao_hash, struct tcp_ao_key *key,
|
||||
const struct sock *sk, const struct sk_buff *skb,
|
||||
const u8 *tkey, int hash_offset, u32 sne);
|
||||
@@ -178,6 +196,12 @@ static inline int tcp_ao_transmit_skb(struct sock *sk, struct sk_buff *skb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void tcp_ao_syncookie(struct sock *sk, const struct sk_buff *skb,
|
||||
struct tcp_request_sock *treq,
|
||||
unsigned short int family)
|
||||
{
|
||||
}
|
||||
|
||||
static inline struct tcp_ao_key *tcp_ao_do_lookup(const struct sock *sk,
|
||||
const union tcp_ao_addr *addr, int family, int sndid, int rcvid)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user