diff options
Diffstat (limited to 'net/mptcp/pm.c')
| -rw-r--r-- | net/mptcp/pm.c | 29 | 
1 files changed, 21 insertions, 8 deletions
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 4ae19113b8eb..55406720c607 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -6,7 +6,6 @@  #define pr_fmt(fmt) "MPTCP: " fmt  #include <linux/kernel.h> -#include <net/tcp.h>  #include <net/mptcp.h>  #include "protocol.h" @@ -77,7 +76,7 @@ void mptcp_pm_new_connection(struct mptcp_sock *msk, const struct sock *ssk, int  {  	struct mptcp_pm_data *pm = &msk->pm; -	pr_debug("msk=%p, token=%u side=%d", msk, msk->token, server_side); +	pr_debug("msk=%p, token=%u side=%d", msk, READ_ONCE(msk->token), server_side);  	WRITE_ONCE(pm->server_side, server_side);  	mptcp_event(MPTCP_EVENT_CREATED, msk, ssk, GFP_ATOMIC); @@ -441,13 +440,27 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id  	return mptcp_pm_nl_get_flags_and_ifindex_by_id(msk, id, flags, ifindex);  } -int mptcp_pm_set_flags(struct net *net, struct nlattr *token, -		       struct mptcp_pm_addr_entry *loc, -		       struct mptcp_pm_addr_entry *rem, u8 bkup) +int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)  { -	if (token) -		return mptcp_userspace_pm_set_flags(net, token, loc, rem, bkup); -	return mptcp_pm_nl_set_flags(net, loc, bkup); +	if (info->attrs[MPTCP_PM_ATTR_TOKEN]) +		return mptcp_userspace_pm_get_addr(skb, info); +	return mptcp_pm_nl_get_addr(skb, info); +} + +int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) +{ +	const struct genl_info *info = genl_info_dump(cb); + +	if (info->attrs[MPTCP_PM_ATTR_TOKEN]) +		return mptcp_userspace_pm_dump_addr(msg, cb); +	return mptcp_pm_nl_dump_addr(msg, cb); +} + +int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info) +{ +	if (info->attrs[MPTCP_PM_ATTR_TOKEN]) +		return mptcp_userspace_pm_set_flags(skb, info); +	return mptcp_pm_nl_set_flags(skb, info);  }  void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk)  | 
