Skip to content

Commit ef0da3b

Browse files
Paolo Abenidavem330
authored andcommitted
mptcp: move address attribute into mptcp_addr_info
So that can be accessed easily from the subflow creation helper. No functional change intended. Signed-off-by: Paolo Abeni <[email protected]> Reviewed-by: Mat Martineau <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 06242e4 commit ef0da3b

File tree

3 files changed

+25
-24
lines changed

3 files changed

+25
-24
lines changed

net/mptcp/pm_netlink.c

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ static int pm_nl_pernet_id;
2323

2424
struct mptcp_pm_addr_entry {
2525
struct list_head list;
26-
unsigned int flags;
27-
int ifindex;
2826
struct mptcp_addr_info addr;
2927
struct rcu_head rcu;
3028
};
@@ -119,7 +117,7 @@ select_local_address(const struct pm_nl_pernet *pernet,
119117
rcu_read_lock();
120118
spin_lock_bh(&msk->join_list_lock);
121119
list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
122-
if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW))
120+
if (!(entry->addr.flags & MPTCP_PM_ADDR_FLAG_SUBFLOW))
123121
continue;
124122

125123
/* avoid any address already in use by subflows and
@@ -150,7 +148,7 @@ select_signal_address(struct pm_nl_pernet *pernet, unsigned int pos)
150148
* can lead to additional addresses not being announced.
151149
*/
152150
list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
153-
if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL))
151+
if (!(entry->addr.flags & MPTCP_PM_ADDR_FLAG_SIGNAL))
154152
continue;
155153
if (i++ == pos) {
156154
ret = entry;
@@ -210,8 +208,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
210208
msk->pm.subflows++;
211209
check_work_pending(msk);
212210
spin_unlock_bh(&msk->pm.lock);
213-
__mptcp_subflow_connect(sk, local->ifindex,
214-
&local->addr, &remote);
211+
__mptcp_subflow_connect(sk, &local->addr, &remote);
215212
spin_lock_bh(&msk->pm.lock);
216213
return;
217214
}
@@ -257,13 +254,13 @@ void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
257254
local.family = remote.family;
258255

259256
spin_unlock_bh(&msk->pm.lock);
260-
__mptcp_subflow_connect((struct sock *)msk, 0, &local, &remote);
257+
__mptcp_subflow_connect((struct sock *)msk, &local, &remote);
261258
spin_lock_bh(&msk->pm.lock);
262259
}
263260

264261
static bool address_use_port(struct mptcp_pm_addr_entry *entry)
265262
{
266-
return (entry->flags &
263+
return (entry->addr.flags &
267264
(MPTCP_PM_ADDR_FLAG_SIGNAL | MPTCP_PM_ADDR_FLAG_SUBFLOW)) ==
268265
MPTCP_PM_ADDR_FLAG_SIGNAL;
269266
}
@@ -293,9 +290,9 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet,
293290
goto out;
294291
}
295292

296-
if (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)
293+
if (entry->addr.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)
297294
pernet->add_addr_signal_max++;
298-
if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)
295+
if (entry->addr.flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)
299296
pernet->local_addr_max++;
300297

301298
entry->addr.id = pernet->next_id++;
@@ -345,8 +342,9 @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
345342
if (!entry)
346343
return -ENOMEM;
347344

348-
entry->flags = 0;
349345
entry->addr = skc_local;
346+
entry->addr.ifindex = 0;
347+
entry->addr.flags = 0;
350348
ret = mptcp_pm_nl_append_new_local_addr(pernet, entry);
351349
if (ret < 0)
352350
kfree(entry);
@@ -460,14 +458,17 @@ static int mptcp_pm_parse_addr(struct nlattr *attr, struct genl_info *info,
460458
entry->addr.addr.s_addr = nla_get_in_addr(tb[addr_addr]);
461459

462460
skip_family:
463-
if (tb[MPTCP_PM_ADDR_ATTR_IF_IDX])
464-
entry->ifindex = nla_get_s32(tb[MPTCP_PM_ADDR_ATTR_IF_IDX]);
461+
if (tb[MPTCP_PM_ADDR_ATTR_IF_IDX]) {
462+
u32 val = nla_get_s32(tb[MPTCP_PM_ADDR_ATTR_IF_IDX]);
463+
464+
entry->addr.ifindex = val;
465+
}
465466

466467
if (tb[MPTCP_PM_ADDR_ATTR_ID])
467468
entry->addr.id = nla_get_u8(tb[MPTCP_PM_ADDR_ATTR_ID]);
468469

469470
if (tb[MPTCP_PM_ADDR_ATTR_FLAGS])
470-
entry->flags = nla_get_u32(tb[MPTCP_PM_ADDR_ATTR_FLAGS]);
471+
entry->addr.flags = nla_get_u32(tb[MPTCP_PM_ADDR_ATTR_FLAGS]);
471472

472473
return 0;
473474
}
@@ -535,9 +536,9 @@ static int mptcp_nl_cmd_del_addr(struct sk_buff *skb, struct genl_info *info)
535536
ret = -EINVAL;
536537
goto out;
537538
}
538-
if (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)
539+
if (entry->addr.flags & MPTCP_PM_ADDR_FLAG_SIGNAL)
539540
pernet->add_addr_signal_max--;
540-
if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)
541+
if (entry->addr.flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)
541542
pernet->local_addr_max--;
542543

543544
pernet->addrs--;
@@ -593,10 +594,10 @@ static int mptcp_nl_fill_addr(struct sk_buff *skb,
593594
goto nla_put_failure;
594595
if (nla_put_u8(skb, MPTCP_PM_ADDR_ATTR_ID, addr->id))
595596
goto nla_put_failure;
596-
if (nla_put_u32(skb, MPTCP_PM_ADDR_ATTR_FLAGS, entry->flags))
597+
if (nla_put_u32(skb, MPTCP_PM_ADDR_ATTR_FLAGS, entry->addr.flags))
597598
goto nla_put_failure;
598-
if (entry->ifindex &&
599-
nla_put_s32(skb, MPTCP_PM_ADDR_ATTR_IF_IDX, entry->ifindex))
599+
if (entry->addr.ifindex &&
600+
nla_put_s32(skb, MPTCP_PM_ADDR_ATTR_IF_IDX, entry->addr.ifindex))
600601
goto nla_put_failure;
601602

602603
if (addr->family == AF_INET &&

net/mptcp/protocol.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ struct mptcp_addr_info {
140140
sa_family_t family;
141141
__be16 port;
142142
u8 id;
143+
u8 flags;
144+
int ifindex;
143145
union {
144146
struct in_addr addr;
145147
#if IS_ENABLED(CONFIG_MPTCP_IPV6)
@@ -358,8 +360,7 @@ bool mptcp_subflow_data_available(struct sock *sk);
358360
void __init mptcp_subflow_init(void);
359361

360362
/* called with sk socket lock held */
361-
int __mptcp_subflow_connect(struct sock *sk, int ifindex,
362-
const struct mptcp_addr_info *loc,
363+
int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_addr_info *loc,
363364
const struct mptcp_addr_info *remote);
364365
int mptcp_subflow_create_socket(struct sock *sk, struct socket **new_sock);
365366

net/mptcp/subflow.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,8 +1035,7 @@ static void mptcp_info2sockaddr(const struct mptcp_addr_info *info,
10351035
#endif
10361036
}
10371037

1038-
int __mptcp_subflow_connect(struct sock *sk, int ifindex,
1039-
const struct mptcp_addr_info *loc,
1038+
int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_addr_info *loc,
10401039
const struct mptcp_addr_info *remote)
10411040
{
10421041
struct mptcp_sock *msk = mptcp_sk(sk);
@@ -1080,7 +1079,7 @@ int __mptcp_subflow_connect(struct sock *sk, int ifindex,
10801079
if (loc->family == AF_INET6)
10811080
addrlen = sizeof(struct sockaddr_in6);
10821081
#endif
1083-
ssk->sk_bound_dev_if = ifindex;
1082+
ssk->sk_bound_dev_if = loc->ifindex;
10841083
err = kernel_bind(sf, (struct sockaddr *)&addr, addrlen);
10851084
if (err)
10861085
goto failed;

0 commit comments

Comments
 (0)