Merge branch 'mptcp-so_sndtimeo-and-misc-cleanup'
Mat Martineau says: ==================== mptcp: SO_SNDTIMEO and misc. cleanup Patch 1 adds support for the SO_SNDTIMEO socket option on MPTCP sockets. The remaining patches are various small cleanups: Patch 2 removes an obsolete declaration. Patches 3 and 5 remove unnecessary function parameters. Patch 4 removes an extra cast. Patches 6 and 7 add some const and ro_after_init modifiers. Patch 8 removes extra storage of TCP helpers. ==================== Link: https://lore.kernel.org/r/20220216021130.171786-1-mathew.j.martineau@linux.intel.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
4d078475bd
|
@ -217,12 +217,6 @@ static inline bool rsk_drop_req(const struct request_sock *req)
|
|||
return false;
|
||||
}
|
||||
|
||||
static inline void mptcp_parse_option(const struct sk_buff *skb,
|
||||
const unsigned char *ptr, int opsize,
|
||||
struct tcp_options_received *opt_rx)
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool mptcp_syn_options(struct sock *sk, const struct sk_buff *skb,
|
||||
unsigned int *size,
|
||||
struct mptcp_out_options *opts)
|
||||
|
|
|
@ -355,8 +355,7 @@ static void mptcp_parse_option(const struct sk_buff *skb,
|
|||
}
|
||||
}
|
||||
|
||||
void mptcp_get_options(const struct sock *sk,
|
||||
const struct sk_buff *skb,
|
||||
void mptcp_get_options(const struct sk_buff *skb,
|
||||
struct mptcp_options_received *mp_opt)
|
||||
{
|
||||
const struct tcphdr *th = tcp_hdr(skb);
|
||||
|
@ -653,7 +652,6 @@ static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *
|
|||
bool drop_other_suboptions = false;
|
||||
unsigned int opt_size = *size;
|
||||
bool echo;
|
||||
bool port;
|
||||
int len;
|
||||
|
||||
/* add addr will strip the existing options, be sure to avoid breaking
|
||||
|
@ -662,12 +660,12 @@ static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *
|
|||
if (!mptcp_pm_should_add_signal(msk) ||
|
||||
(opts->suboptions & (OPTION_MPTCP_MPJ_ACK | OPTION_MPTCP_MPC_ACK)) ||
|
||||
!mptcp_pm_add_addr_signal(msk, skb, opt_size, remaining, &opts->addr,
|
||||
&echo, &port, &drop_other_suboptions))
|
||||
&echo, &drop_other_suboptions))
|
||||
return false;
|
||||
|
||||
if (drop_other_suboptions)
|
||||
remaining += opt_size;
|
||||
len = mptcp_add_addr_len(opts->addr.family, echo, port);
|
||||
len = mptcp_add_addr_len(opts->addr.family, echo, !!opts->addr.port);
|
||||
if (remaining < len)
|
||||
return false;
|
||||
|
||||
|
@ -1086,8 +1084,7 @@ static bool add_addr_hmac_valid(struct mptcp_sock *msk,
|
|||
&mp_opt->addr);
|
||||
|
||||
pr_debug("msk=%p, ahmac=%llu, mp_opt->ahmac=%llu\n",
|
||||
msk, (unsigned long long)hmac,
|
||||
(unsigned long long)mp_opt->ahmac);
|
||||
msk, hmac, mp_opt->ahmac);
|
||||
|
||||
return hmac == mp_opt->ahmac;
|
||||
}
|
||||
|
@ -1114,7 +1111,7 @@ bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
|
|||
return true;
|
||||
}
|
||||
|
||||
mptcp_get_options(sk, skb, &mp_opt);
|
||||
mptcp_get_options(skb, &mp_opt);
|
||||
|
||||
/* The subflow can be in close state only if check_fully_established()
|
||||
* just sent a reset. If so, tell the caller to ignore the current packet.
|
||||
|
|
|
@ -219,7 +219,7 @@ void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
|
|||
}
|
||||
|
||||
void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
|
||||
struct mptcp_addr_info *addr)
|
||||
const struct mptcp_addr_info *addr)
|
||||
{
|
||||
struct mptcp_pm_data *pm = &msk->pm;
|
||||
|
||||
|
@ -275,14 +275,15 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 fail_seq)
|
|||
|
||||
/* path manager helpers */
|
||||
|
||||
bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, struct sk_buff *skb,
|
||||
bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff *skb,
|
||||
unsigned int opt_size, unsigned int remaining,
|
||||
struct mptcp_addr_info *addr, bool *echo,
|
||||
bool *port, bool *drop_other_suboptions)
|
||||
bool *drop_other_suboptions)
|
||||
{
|
||||
int ret = false;
|
||||
u8 add_addr;
|
||||
u8 family;
|
||||
bool port;
|
||||
|
||||
spin_lock_bh(&msk->pm.lock);
|
||||
|
||||
|
@ -300,10 +301,10 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, struct sk_buff *skb,
|
|||
}
|
||||
|
||||
*echo = mptcp_pm_should_add_signal_echo(msk);
|
||||
*port = !!(*echo ? msk->pm.remote.port : msk->pm.local.port);
|
||||
port = !!(*echo ? msk->pm.remote.port : msk->pm.local.port);
|
||||
|
||||
family = *echo ? msk->pm.remote.family : msk->pm.local.family;
|
||||
if (remaining < mptcp_add_addr_len(family, *echo, *port))
|
||||
if (remaining < mptcp_add_addr_len(family, *echo, port))
|
||||
goto out_unlock;
|
||||
|
||||
if (*echo) {
|
||||
|
|
|
@ -120,7 +120,7 @@ static void remote_address(const struct sock_common *skc,
|
|||
}
|
||||
|
||||
static bool lookup_subflow_by_saddr(const struct list_head *list,
|
||||
struct mptcp_addr_info *saddr)
|
||||
const struct mptcp_addr_info *saddr)
|
||||
{
|
||||
struct mptcp_subflow_context *subflow;
|
||||
struct mptcp_addr_info cur;
|
||||
|
@ -138,7 +138,7 @@ static bool lookup_subflow_by_saddr(const struct list_head *list,
|
|||
}
|
||||
|
||||
static bool lookup_subflow_by_daddr(const struct list_head *list,
|
||||
struct mptcp_addr_info *daddr)
|
||||
const struct mptcp_addr_info *daddr)
|
||||
{
|
||||
struct mptcp_subflow_context *subflow;
|
||||
struct mptcp_addr_info cur;
|
||||
|
@ -157,10 +157,10 @@ static bool lookup_subflow_by_daddr(const struct list_head *list,
|
|||
|
||||
static struct mptcp_pm_addr_entry *
|
||||
select_local_address(const struct pm_nl_pernet *pernet,
|
||||
struct mptcp_sock *msk)
|
||||
const struct mptcp_sock *msk)
|
||||
{
|
||||
const struct sock *sk = (const struct sock *)msk;
|
||||
struct mptcp_pm_addr_entry *entry, *ret = NULL;
|
||||
struct sock *sk = (struct sock *)msk;
|
||||
|
||||
msk_owned_by_me(msk);
|
||||
|
||||
|
@ -190,7 +190,7 @@ select_local_address(const struct pm_nl_pernet *pernet,
|
|||
}
|
||||
|
||||
static struct mptcp_pm_addr_entry *
|
||||
select_signal_address(struct pm_nl_pernet *pernet, struct mptcp_sock *msk)
|
||||
select_signal_address(struct pm_nl_pernet *pernet, const struct mptcp_sock *msk)
|
||||
{
|
||||
struct mptcp_pm_addr_entry *entry, *ret = NULL;
|
||||
|
||||
|
@ -214,16 +214,16 @@ select_signal_address(struct pm_nl_pernet *pernet, struct mptcp_sock *msk)
|
|||
return ret;
|
||||
}
|
||||
|
||||
unsigned int mptcp_pm_get_add_addr_signal_max(struct mptcp_sock *msk)
|
||||
unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk)
|
||||
{
|
||||
struct pm_nl_pernet *pernet;
|
||||
const struct pm_nl_pernet *pernet;
|
||||
|
||||
pernet = net_generic(sock_net((struct sock *)msk), pm_nl_pernet_id);
|
||||
pernet = net_generic(sock_net((const struct sock *)msk), pm_nl_pernet_id);
|
||||
return READ_ONCE(pernet->add_addr_signal_max);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mptcp_pm_get_add_addr_signal_max);
|
||||
|
||||
unsigned int mptcp_pm_get_add_addr_accept_max(struct mptcp_sock *msk)
|
||||
unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk)
|
||||
{
|
||||
struct pm_nl_pernet *pernet;
|
||||
|
||||
|
@ -232,7 +232,7 @@ unsigned int mptcp_pm_get_add_addr_accept_max(struct mptcp_sock *msk)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mptcp_pm_get_add_addr_accept_max);
|
||||
|
||||
unsigned int mptcp_pm_get_subflows_max(struct mptcp_sock *msk)
|
||||
unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk)
|
||||
{
|
||||
struct pm_nl_pernet *pernet;
|
||||
|
||||
|
@ -241,7 +241,7 @@ unsigned int mptcp_pm_get_subflows_max(struct mptcp_sock *msk)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mptcp_pm_get_subflows_max);
|
||||
|
||||
unsigned int mptcp_pm_get_local_addr_max(struct mptcp_sock *msk)
|
||||
unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk)
|
||||
{
|
||||
struct pm_nl_pernet *pernet;
|
||||
|
||||
|
@ -264,8 +264,8 @@ bool mptcp_pm_nl_check_work_pending(struct mptcp_sock *msk)
|
|||
}
|
||||
|
||||
struct mptcp_pm_add_entry *
|
||||
mptcp_lookup_anno_list_by_saddr(struct mptcp_sock *msk,
|
||||
struct mptcp_addr_info *addr)
|
||||
mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
|
||||
const struct mptcp_addr_info *addr)
|
||||
{
|
||||
struct mptcp_pm_add_entry *entry;
|
||||
|
||||
|
@ -346,7 +346,7 @@ out:
|
|||
|
||||
struct mptcp_pm_add_entry *
|
||||
mptcp_pm_del_add_timer(struct mptcp_sock *msk,
|
||||
struct mptcp_addr_info *addr, bool check_id)
|
||||
const struct mptcp_addr_info *addr, bool check_id)
|
||||
{
|
||||
struct mptcp_pm_add_entry *entry;
|
||||
struct sock *sk = (struct sock *)msk;
|
||||
|
@ -364,7 +364,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
|
|||
}
|
||||
|
||||
static bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
|
||||
struct mptcp_pm_addr_entry *entry)
|
||||
const struct mptcp_pm_addr_entry *entry)
|
||||
{
|
||||
struct mptcp_pm_add_entry *add_entry = NULL;
|
||||
struct sock *sk = (struct sock *)msk;
|
||||
|
@ -410,8 +410,8 @@ void mptcp_pm_free_anno_list(struct mptcp_sock *msk)
|
|||
}
|
||||
}
|
||||
|
||||
static bool lookup_address_in_vec(struct mptcp_addr_info *addrs, unsigned int nr,
|
||||
struct mptcp_addr_info *addr)
|
||||
static bool lookup_address_in_vec(const struct mptcp_addr_info *addrs, unsigned int nr,
|
||||
const struct mptcp_addr_info *addr)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -493,9 +493,9 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info,
|
|||
}
|
||||
|
||||
static int
|
||||
lookup_id_by_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *addr)
|
||||
lookup_id_by_addr(const struct pm_nl_pernet *pernet, const struct mptcp_addr_info *addr)
|
||||
{
|
||||
struct mptcp_pm_addr_entry *entry;
|
||||
const struct mptcp_pm_addr_entry *entry;
|
||||
int ret = -1;
|
||||
|
||||
rcu_read_lock();
|
||||
|
@ -1281,7 +1281,7 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct net *net, unsigned int id,
|
|||
}
|
||||
|
||||
static bool remove_anno_list_by_saddr(struct mptcp_sock *msk,
|
||||
struct mptcp_addr_info *addr)
|
||||
const struct mptcp_addr_info *addr)
|
||||
{
|
||||
struct mptcp_pm_add_entry *entry;
|
||||
|
||||
|
@ -1296,7 +1296,7 @@ static bool remove_anno_list_by_saddr(struct mptcp_sock *msk,
|
|||
}
|
||||
|
||||
static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
|
||||
struct mptcp_addr_info *addr,
|
||||
const struct mptcp_addr_info *addr,
|
||||
bool force)
|
||||
{
|
||||
struct mptcp_rm_list list = { .nr = 0 };
|
||||
|
|
|
@ -468,9 +468,7 @@ struct mptcp_subflow_context {
|
|||
struct sock *tcp_sock; /* tcp sk backpointer */
|
||||
struct sock *conn; /* parent mptcp_sock */
|
||||
const struct inet_connection_sock_af_ops *icsk_af_ops;
|
||||
void (*tcp_data_ready)(struct sock *sk);
|
||||
void (*tcp_state_change)(struct sock *sk);
|
||||
void (*tcp_write_space)(struct sock *sk);
|
||||
void (*tcp_error_report)(struct sock *sk);
|
||||
|
||||
struct rcu_head rcu;
|
||||
|
@ -614,9 +612,9 @@ bool mptcp_subflow_active(struct mptcp_subflow_context *subflow);
|
|||
static inline void mptcp_subflow_tcp_fallback(struct sock *sk,
|
||||
struct mptcp_subflow_context *ctx)
|
||||
{
|
||||
sk->sk_data_ready = ctx->tcp_data_ready;
|
||||
sk->sk_data_ready = sock_def_readable;
|
||||
sk->sk_state_change = ctx->tcp_state_change;
|
||||
sk->sk_write_space = ctx->tcp_write_space;
|
||||
sk->sk_write_space = sk_stream_write_space;
|
||||
sk->sk_error_report = ctx->tcp_error_report;
|
||||
|
||||
inet_csk(sk)->icsk_af_ops = ctx->icsk_af_ops;
|
||||
|
@ -643,8 +641,7 @@ int __init mptcp_proto_v6_init(void);
|
|||
struct sock *mptcp_sk_clone(const struct sock *sk,
|
||||
const struct mptcp_options_received *mp_opt,
|
||||
struct request_sock *req);
|
||||
void mptcp_get_options(const struct sock *sk,
|
||||
const struct sk_buff *skb,
|
||||
void mptcp_get_options(const struct sk_buff *skb,
|
||||
struct mptcp_options_received *mp_opt);
|
||||
|
||||
void mptcp_finish_connect(struct sock *sk);
|
||||
|
@ -743,7 +740,7 @@ void mptcp_pm_subflow_check_next(struct mptcp_sock *msk, const struct sock *ssk,
|
|||
void mptcp_pm_add_addr_received(struct mptcp_sock *msk,
|
||||
const struct mptcp_addr_info *addr);
|
||||
void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
|
||||
struct mptcp_addr_info *addr);
|
||||
const struct mptcp_addr_info *addr);
|
||||
void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk);
|
||||
void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk);
|
||||
void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
|
||||
|
@ -754,10 +751,10 @@ void mptcp_pm_free_anno_list(struct mptcp_sock *msk);
|
|||
bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock *sk);
|
||||
struct mptcp_pm_add_entry *
|
||||
mptcp_pm_del_add_timer(struct mptcp_sock *msk,
|
||||
struct mptcp_addr_info *addr, bool check_id);
|
||||
const struct mptcp_addr_info *addr, bool check_id);
|
||||
struct mptcp_pm_add_entry *
|
||||
mptcp_lookup_anno_list_by_saddr(struct mptcp_sock *msk,
|
||||
struct mptcp_addr_info *addr);
|
||||
mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
|
||||
const struct mptcp_addr_info *addr);
|
||||
int mptcp_pm_get_flags_and_ifindex_by_id(struct net *net, unsigned int id,
|
||||
u8 *flags, int *ifindex);
|
||||
|
||||
|
@ -816,10 +813,10 @@ static inline int mptcp_rm_addr_len(const struct mptcp_rm_list *rm_list)
|
|||
return TCPOLEN_MPTCP_RM_ADDR_BASE + roundup(rm_list->nr - 1, 4) + 1;
|
||||
}
|
||||
|
||||
bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, struct sk_buff *skb,
|
||||
bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff *skb,
|
||||
unsigned int opt_size, unsigned int remaining,
|
||||
struct mptcp_addr_info *addr, bool *echo,
|
||||
bool *port, bool *drop_other_suboptions);
|
||||
bool *drop_other_suboptions);
|
||||
bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
|
||||
struct mptcp_rm_list *rm_list);
|
||||
int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
|
||||
|
@ -830,10 +827,10 @@ void mptcp_pm_nl_work(struct mptcp_sock *msk);
|
|||
void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk,
|
||||
const struct mptcp_rm_list *rm_list);
|
||||
int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
|
||||
unsigned int mptcp_pm_get_add_addr_signal_max(struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_add_addr_accept_max(struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_subflows_max(struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_local_addr_max(struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk);
|
||||
|
||||
void mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk);
|
||||
void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk);
|
||||
|
|
|
@ -343,6 +343,8 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname,
|
|||
case SO_RCVLOWAT:
|
||||
case SO_RCVTIMEO_OLD:
|
||||
case SO_RCVTIMEO_NEW:
|
||||
case SO_SNDTIMEO_OLD:
|
||||
case SO_SNDTIMEO_NEW:
|
||||
case SO_BUSY_POLL:
|
||||
case SO_PREFER_BUSY_POLL:
|
||||
case SO_BUSY_POLL_BUDGET:
|
||||
|
|
|
@ -153,7 +153,7 @@ static int subflow_check_req(struct request_sock *req,
|
|||
return -EINVAL;
|
||||
#endif
|
||||
|
||||
mptcp_get_options(sk_listener, skb, &mp_opt);
|
||||
mptcp_get_options(skb, &mp_opt);
|
||||
|
||||
opt_mp_capable = !!(mp_opt.suboptions & OPTIONS_MPTCP_MPC);
|
||||
opt_mp_join = !!(mp_opt.suboptions & OPTIONS_MPTCP_MPJ);
|
||||
|
@ -250,7 +250,7 @@ int mptcp_subflow_init_cookie_req(struct request_sock *req,
|
|||
int err;
|
||||
|
||||
subflow_init_req(req, sk_listener);
|
||||
mptcp_get_options(sk_listener, skb, &mp_opt);
|
||||
mptcp_get_options(skb, &mp_opt);
|
||||
|
||||
opt_mp_capable = !!(mp_opt.suboptions & OPTIONS_MPTCP_MPC);
|
||||
opt_mp_join = !!(mp_opt.suboptions & OPTIONS_MPTCP_MPJ);
|
||||
|
@ -344,9 +344,7 @@ static bool subflow_thmac_valid(struct mptcp_subflow_context *subflow)
|
|||
|
||||
thmac = get_unaligned_be64(hmac);
|
||||
pr_debug("subflow=%p, token=%u, thmac=%llu, subflow->thmac=%llu\n",
|
||||
subflow, subflow->token,
|
||||
(unsigned long long)thmac,
|
||||
(unsigned long long)subflow->thmac);
|
||||
subflow, subflow->token, thmac, subflow->thmac);
|
||||
|
||||
return thmac == subflow->thmac;
|
||||
}
|
||||
|
@ -410,7 +408,7 @@ static void subflow_finish_connect(struct sock *sk, const struct sk_buff *skb)
|
|||
subflow->ssn_offset = TCP_SKB_CB(skb)->seq;
|
||||
pr_debug("subflow=%p synack seq=%x", subflow, subflow->ssn_offset);
|
||||
|
||||
mptcp_get_options(sk, skb, &mp_opt);
|
||||
mptcp_get_options(skb, &mp_opt);
|
||||
if (subflow->request_mptcp) {
|
||||
if (!(mp_opt.suboptions & OPTIONS_MPTCP_MPC)) {
|
||||
MPTCP_INC_STATS(sock_net(sk),
|
||||
|
@ -484,8 +482,7 @@ do_reset:
|
|||
}
|
||||
|
||||
struct request_sock_ops mptcp_subflow_request_sock_ops;
|
||||
EXPORT_SYMBOL_GPL(mptcp_subflow_request_sock_ops);
|
||||
static struct tcp_request_sock_ops subflow_request_sock_ipv4_ops;
|
||||
static struct tcp_request_sock_ops subflow_request_sock_ipv4_ops __ro_after_init;
|
||||
|
||||
static int subflow_v4_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
|
@ -506,9 +503,9 @@ drop:
|
|||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
|
||||
static struct tcp_request_sock_ops subflow_request_sock_ipv6_ops;
|
||||
static struct inet_connection_sock_af_ops subflow_v6_specific;
|
||||
static struct inet_connection_sock_af_ops subflow_v6m_specific;
|
||||
static struct tcp_request_sock_ops subflow_request_sock_ipv6_ops __ro_after_init;
|
||||
static struct inet_connection_sock_af_ops subflow_v6_specific __ro_after_init;
|
||||
static struct inet_connection_sock_af_ops subflow_v6m_specific __ro_after_init;
|
||||
static struct proto tcpv6_prot_override;
|
||||
|
||||
static int subflow_v6_conn_request(struct sock *sk, struct sk_buff *skb)
|
||||
|
@ -663,7 +660,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk,
|
|||
* reordered MPC will cause fallback, but we don't have other
|
||||
* options.
|
||||
*/
|
||||
mptcp_get_options(sk, skb, &mp_opt);
|
||||
mptcp_get_options(skb, &mp_opt);
|
||||
if (!(mp_opt.suboptions & OPTIONS_MPTCP_MPC)) {
|
||||
fallback = true;
|
||||
goto create_child;
|
||||
|
@ -673,7 +670,7 @@ static struct sock *subflow_syn_recv_sock(const struct sock *sk,
|
|||
if (!new_msk)
|
||||
fallback = true;
|
||||
} else if (subflow_req->mp_join) {
|
||||
mptcp_get_options(sk, skb, &mp_opt);
|
||||
mptcp_get_options(skb, &mp_opt);
|
||||
if (!(mp_opt.suboptions & OPTIONS_MPTCP_MPJ) ||
|
||||
!subflow_hmac_valid(req, &mp_opt) ||
|
||||
!mptcp_can_accept_new_subflow(subflow_req->msk)) {
|
||||
|
@ -790,7 +787,7 @@ dispose_child:
|
|||
return child;
|
||||
}
|
||||
|
||||
static struct inet_connection_sock_af_ops subflow_specific;
|
||||
static struct inet_connection_sock_af_ops subflow_specific __ro_after_init;
|
||||
static struct proto tcp_prot_override;
|
||||
|
||||
enum mapping_status {
|
||||
|
@ -1311,7 +1308,7 @@ static void subflow_write_space(struct sock *ssk)
|
|||
mptcp_write_space(sk);
|
||||
}
|
||||
|
||||
static struct inet_connection_sock_af_ops *
|
||||
static const struct inet_connection_sock_af_ops *
|
||||
subflow_default_af_ops(struct sock *sk)
|
||||
{
|
||||
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
|
||||
|
@ -1326,7 +1323,7 @@ void mptcpv6_handle_mapped(struct sock *sk, bool mapped)
|
|||
{
|
||||
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
|
||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
struct inet_connection_sock_af_ops *target;
|
||||
const struct inet_connection_sock_af_ops *target;
|
||||
|
||||
target = mapped ? &subflow_v6m_specific : subflow_default_af_ops(sk);
|
||||
|
||||
|
@ -1657,10 +1654,12 @@ static int subflow_ulp_init(struct sock *sk)
|
|||
tp->is_mptcp = 1;
|
||||
ctx->icsk_af_ops = icsk->icsk_af_ops;
|
||||
icsk->icsk_af_ops = subflow_default_af_ops(sk);
|
||||
ctx->tcp_data_ready = sk->sk_data_ready;
|
||||
ctx->tcp_state_change = sk->sk_state_change;
|
||||
ctx->tcp_write_space = sk->sk_write_space;
|
||||
ctx->tcp_error_report = sk->sk_error_report;
|
||||
|
||||
WARN_ON_ONCE(sk->sk_data_ready != sock_def_readable);
|
||||
WARN_ON_ONCE(sk->sk_write_space != sk_stream_write_space);
|
||||
|
||||
sk->sk_data_ready = subflow_data_ready;
|
||||
sk->sk_write_space = subflow_write_space;
|
||||
sk->sk_state_change = subflow_state_change;
|
||||
|
@ -1715,9 +1714,7 @@ static void subflow_ulp_clone(const struct request_sock *req,
|
|||
|
||||
new_ctx->conn_finished = 1;
|
||||
new_ctx->icsk_af_ops = old_ctx->icsk_af_ops;
|
||||
new_ctx->tcp_data_ready = old_ctx->tcp_data_ready;
|
||||
new_ctx->tcp_state_change = old_ctx->tcp_state_change;
|
||||
new_ctx->tcp_write_space = old_ctx->tcp_write_space;
|
||||
new_ctx->tcp_error_report = old_ctx->tcp_error_report;
|
||||
new_ctx->rel_write_seq = 1;
|
||||
new_ctx->tcp_sock = newsk;
|
||||
|
|
Loading…
Reference in New Issue