Blame view
include/net/mptcp.h
5.14 KB
3ee17bc78 mptcp: Add MPTCP ... |
1 2 3 4 5 6 7 8 9 |
/* SPDX-License-Identifier: GPL-2.0 */ /* * Multipath TCP * * Copyright (c) 2017 - 2019, Intel Corporation. */ #ifndef __NET_MPTCP_H #define __NET_MPTCP_H |
857124841 tcp: coalesce/col... |
10 |
#include <linux/skbuff.h> |
eda7acddf mptcp: Handle MPT... |
11 |
#include <linux/tcp.h> |
3ee17bc78 mptcp: Add MPTCP ... |
12 |
#include <linux/types.h> |
fc518953b mptcp: add and us... |
13 |
struct seq_file; |
3ee17bc78 mptcp: Add MPTCP ... |
14 15 |
/* MPTCP sk_buff extension data */ struct mptcp_ext { |
a0c1d0eaf mptcp: Use 32-bit... |
16 17 18 19 |
union { u64 data_ack; u32 data_ack32; }; |
3ee17bc78 mptcp: Add MPTCP ... |
20 21 22 23 24 25 26 27 |
u64 data_seq; u32 subflow_seq; u16 data_len; u8 use_map:1, dsn64:1, data_fin:1, use_ack:1, ack64:1, |
cc7972ea1 mptcp: parse and ... |
28 29 |
mpc_map:1, __unused:2; |
3ee17bc78 mptcp: Add MPTCP ... |
30 31 |
/* one byte hole */ }; |
eda7acddf mptcp: Handle MPT... |
32 33 34 35 36 |
struct mptcp_out_options { #if IS_ENABLED(CONFIG_MPTCP) u16 suboptions; u64 sndr_key; u64 rcvr_key; |
3df523ab5 mptcp: Add ADD_AD... |
37 38 39 40 41 42 43 44 45 |
union { struct in_addr addr; #if IS_ENABLED(CONFIG_MPTCP_IPV6) struct in6_addr addr6; #endif }; u8 addr_id; u64 ahmac; u8 rm_id; |
f296234c9 mptcp: Add handli... |
46 47 48 49 |
u8 join_id; u8 backup; u32 nonce; u64 thmac; |
ec3edaa7c mptcp: Add handli... |
50 51 |
u32 token; u8 hmac[20]; |
6d0060f60 mptcp: Write MPTC... |
52 |
struct mptcp_ext ext_copy; |
eda7acddf mptcp: Handle MPT... |
53 54 |
#endif }; |
857124841 tcp: coalesce/col... |
55 |
#ifdef CONFIG_MPTCP |
08b8d0809 mptcp: rename and... |
56 |
extern struct request_sock_ops mptcp_subflow_request_sock_ops; |
857124841 tcp: coalesce/col... |
57 |
|
f870fa0b5 mptcp: Add MPTCP ... |
58 |
void mptcp_init(void); |
cec37a6e4 mptcp: Handle MP_... |
59 60 61 62 63 64 65 66 67 |
static inline bool sk_is_mptcp(const struct sock *sk) { return tcp_sk(sk)->is_mptcp; } static inline bool rsk_is_mptcp(const struct request_sock *req) { return tcp_rsk(req)->is_mptcp; } |
90bf45134 mptcp: add new so... |
68 69 70 71 |
static inline bool rsk_drop_req(const struct request_sock *req) { return tcp_rsk(req)->is_mptcp && tcp_rsk(req)->drop_req; } |
071c8ed6e tcp: mptcp: use m... |
72 |
void mptcp_space(const struct sock *ssk, int *space, int *full_space); |
cc7972ea1 mptcp: parse and ... |
73 74 |
bool mptcp_syn_options(struct sock *sk, const struct sk_buff *skb, unsigned int *size, struct mptcp_out_options *opts); |
cec37a6e4 mptcp: Handle MP_... |
75 76 77 78 79 |
bool mptcp_synack_options(const struct request_sock *req, unsigned int *size, struct mptcp_out_options *opts); bool mptcp_established_options(struct sock *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, struct mptcp_out_options *opts); |
77d0cab93 net: tcp: drop un... |
80 |
void mptcp_incoming_options(struct sock *sk, struct sk_buff *skb); |
cec37a6e4 mptcp: Handle MP_... |
81 |
|
eda7acddf mptcp: Handle MPT... |
82 |
void mptcp_write_options(__be32 *ptr, struct mptcp_out_options *opts); |
857124841 tcp: coalesce/col... |
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
/* move the skb extension owership, with the assumption that 'to' is * newly allocated */ static inline void mptcp_skb_ext_move(struct sk_buff *to, struct sk_buff *from) { if (!skb_ext_exist(from, SKB_EXT_MPTCP)) return; if (WARN_ON_ONCE(to->active_extensions)) skb_ext_put(to); to->active_extensions = from->active_extensions; to->extensions = from->extensions; from->active_extensions = 0; } static inline bool mptcp_ext_matches(const struct mptcp_ext *to_ext, const struct mptcp_ext *from_ext) { /* MPTCP always clears the ext when adding it to the skb, so * holes do not bother us here */ return !from_ext || (to_ext && from_ext && !memcmp(from_ext, to_ext, sizeof(struct mptcp_ext))); } /* check if skbs can be collapsed. * MPTCP collapse is allowed if neither @to or @from carry an mptcp data * mapping, or if the extension of @to is the same as @from. * Collapsing is not possible if @to lacks an extension, but @from carries one. */ static inline bool mptcp_skb_can_collapse(const struct sk_buff *to, const struct sk_buff *from) { return mptcp_ext_matches(skb_ext_find(to, SKB_EXT_MPTCP), skb_ext_find(from, SKB_EXT_MPTCP)); } |
fc518953b mptcp: add and us... |
122 |
void mptcp_seq_show(struct seq_file *seq); |
c83a47e50 mptcp: subflow: a... |
123 124 125 |
int mptcp_subflow_init_cookie_req(struct request_sock *req, const struct sock *sk_listener, struct sk_buff *skb); |
857124841 tcp: coalesce/col... |
126 |
#else |
f870fa0b5 mptcp: Add MPTCP ... |
127 128 129 |
static inline void mptcp_init(void) { } |
cec37a6e4 mptcp: Handle MP_... |
130 131 132 133 134 135 136 137 138 |
static inline bool sk_is_mptcp(const struct sock *sk) { return false; } static inline bool rsk_is_mptcp(const struct request_sock *req) { return false; } |
90bf45134 mptcp: add new so... |
139 140 141 142 |
static inline bool rsk_drop_req(const struct request_sock *req) { return false; } |
cc7972ea1 mptcp: parse and ... |
143 144 |
static inline void mptcp_parse_option(const struct sk_buff *skb, const unsigned char *ptr, int opsize, |
eda7acddf mptcp: Handle MPT... |
145 146 147 |
struct tcp_options_received *opt_rx) { } |
cc7972ea1 mptcp: parse and ... |
148 149 |
static inline bool mptcp_syn_options(struct sock *sk, const struct sk_buff *skb, unsigned int *size, |
cec37a6e4 mptcp: Handle MP_... |
150 151 152 153 |
struct mptcp_out_options *opts) { return false; } |
cec37a6e4 mptcp: Handle MP_... |
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
static inline bool mptcp_synack_options(const struct request_sock *req, unsigned int *size, struct mptcp_out_options *opts) { return false; } static inline bool mptcp_established_options(struct sock *sk, struct sk_buff *skb, unsigned int *size, unsigned int remaining, struct mptcp_out_options *opts) { return false; } |
648ef4b88 mptcp: Implement ... |
169 |
static inline void mptcp_incoming_options(struct sock *sk, |
77d0cab93 net: tcp: drop un... |
170 |
struct sk_buff *skb) |
648ef4b88 mptcp: Implement ... |
171 172 |
{ } |
857124841 tcp: coalesce/col... |
173 174 175 176 177 178 179 180 181 182 |
static inline void mptcp_skb_ext_move(struct sk_buff *to, const struct sk_buff *from) { } static inline bool mptcp_skb_can_collapse(const struct sk_buff *to, const struct sk_buff *from) { return true; } |
071c8ed6e tcp: mptcp: use m... |
183 |
static inline void mptcp_space(const struct sock *ssk, int *s, int *fs) { } |
fc518953b mptcp: add and us... |
184 |
static inline void mptcp_seq_show(struct seq_file *seq) { } |
c83a47e50 mptcp: subflow: a... |
185 186 187 188 189 190 191 |
static inline int mptcp_subflow_init_cookie_req(struct request_sock *req, const struct sock *sk_listener, struct sk_buff *skb) { return 0; /* TCP fallback */ } |
857124841 tcp: coalesce/col... |
192 |
#endif /* CONFIG_MPTCP */ |
f870fa0b5 mptcp: Add MPTCP ... |
193 194 195 |
#if IS_ENABLED(CONFIG_MPTCP_IPV6) int mptcpv6_init(void); |
31484d56c mptcp: Fix undefi... |
196 |
void mptcpv6_handle_mapped(struct sock *sk, bool mapped); |
f870fa0b5 mptcp: Add MPTCP ... |
197 |
#elif IS_ENABLED(CONFIG_IPV6) |
31484d56c mptcp: Fix undefi... |
198 199 |
static inline int mptcpv6_init(void) { return 0; } static inline void mptcpv6_handle_mapped(struct sock *sk, bool mapped) { } |
f870fa0b5 mptcp: Add MPTCP ... |
200 |
#endif |
3ee17bc78 mptcp: Add MPTCP ... |
201 |
#endif /* __NET_MPTCP_H */ |