mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-08-22 00:42:01 +02:00
mptcp: add userspace_pm_lookup_addr_by_id helper
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>
This commit is contained in:
parent
38f027fca1
commit
06afe09091
|
@ -106,19 +106,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;
|
||||||
|
@ -261,7 +268,7 @@ int mptcp_pm_nl_remove_doit(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);
|
||||||
|
@ -298,13 +305,7 @@ int mptcp_pm_nl_remove_doit(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…
Reference in New Issue
Block a user