mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
mptcp: add userspace_pm_lookup_addr_by_id helper
commit 06afe09091ee69dc7ab058b4be9917ae59cc81e5 upstream. Corresponding __lookup_addr_by_id() helper in the in-kernel netlink PM, this patch adds a new helper mptcp_userspace_pm_lookup_addr_by_id() to lookup the address entry with the given id on the userspace pm local address list. Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Reviewed-by: Mat Martineau <martineau@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net> Stable-dep-of: f642c5c4d528 ("mptcp: hold pm lock when deleting entry") Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
762ca2d2e3
commit
aa2b28ddcc
1 changed files with 16 additions and 15 deletions
|
@ -107,19 +107,26 @@ static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct mptcp_pm_addr_entry *
|
||||||
|
mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id)
|
||||||
|
{
|
||||||
|
struct mptcp_pm_addr_entry *entry;
|
||||||
|
|
||||||
|
list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
|
||||||
|
if (entry->addr.id == id)
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk,
|
int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk,
|
||||||
unsigned int id,
|
unsigned int id,
|
||||||
u8 *flags, int *ifindex)
|
u8 *flags, int *ifindex)
|
||||||
{
|
{
|
||||||
struct mptcp_pm_addr_entry *entry, *match = NULL;
|
struct mptcp_pm_addr_entry *match;
|
||||||
|
|
||||||
spin_lock_bh(&msk->pm.lock);
|
spin_lock_bh(&msk->pm.lock);
|
||||||
list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
|
match = mptcp_userspace_pm_lookup_addr_by_id(msk, id);
|
||||||
if (id == entry->addr.id) {
|
|
||||||
match = entry;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
spin_unlock_bh(&msk->pm.lock);
|
spin_unlock_bh(&msk->pm.lock);
|
||||||
if (match) {
|
if (match) {
|
||||||
*flags = match->flags;
|
*flags = match->flags;
|
||||||
|
@ -280,7 +287,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info)
|
||||||
{
|
{
|
||||||
struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
|
struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
|
||||||
struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID];
|
struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID];
|
||||||
struct mptcp_pm_addr_entry *match = NULL;
|
struct mptcp_pm_addr_entry *match;
|
||||||
struct mptcp_pm_addr_entry *entry;
|
struct mptcp_pm_addr_entry *entry;
|
||||||
struct mptcp_sock *msk;
|
struct mptcp_sock *msk;
|
||||||
LIST_HEAD(free_list);
|
LIST_HEAD(free_list);
|
||||||
|
@ -317,13 +324,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info)
|
||||||
|
|
||||||
lock_sock(sk);
|
lock_sock(sk);
|
||||||
|
|
||||||
list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
|
match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val);
|
||||||
if (entry->addr.id == id_val) {
|
|
||||||
match = entry;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!match) {
|
if (!match) {
|
||||||
GENL_SET_ERR_MSG(info, "address with specified id not found");
|
GENL_SET_ERR_MSG(info, "address with specified id not found");
|
||||||
release_sock(sk);
|
release_sock(sk);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue