@@ -23,8 +23,6 @@ static int pm_nl_pernet_id;
23
23
24
24
struct mptcp_pm_addr_entry {
25
25
struct list_head list ;
26
- unsigned int flags ;
27
- int ifindex ;
28
26
struct mptcp_addr_info addr ;
29
27
struct rcu_head rcu ;
30
28
};
@@ -119,7 +117,7 @@ select_local_address(const struct pm_nl_pernet *pernet,
119
117
rcu_read_lock ();
120
118
spin_lock_bh (& msk -> join_list_lock );
121
119
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 ))
123
121
continue ;
124
122
125
123
/* avoid any address already in use by subflows and
@@ -150,7 +148,7 @@ select_signal_address(struct pm_nl_pernet *pernet, unsigned int pos)
150
148
* can lead to additional addresses not being announced.
151
149
*/
152
150
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 ))
154
152
continue ;
155
153
if (i ++ == pos ) {
156
154
ret = entry ;
@@ -210,8 +208,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
210
208
msk -> pm .subflows ++ ;
211
209
check_work_pending (msk );
212
210
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 );
215
212
spin_lock_bh (& msk -> pm .lock );
216
213
return ;
217
214
}
@@ -257,13 +254,13 @@ void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
257
254
local .family = remote .family ;
258
255
259
256
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 );
261
258
spin_lock_bh (& msk -> pm .lock );
262
259
}
263
260
264
261
static bool address_use_port (struct mptcp_pm_addr_entry * entry )
265
262
{
266
- return (entry -> flags &
263
+ return (entry -> addr . flags &
267
264
(MPTCP_PM_ADDR_FLAG_SIGNAL | MPTCP_PM_ADDR_FLAG_SUBFLOW )) ==
268
265
MPTCP_PM_ADDR_FLAG_SIGNAL ;
269
266
}
@@ -293,9 +290,9 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet,
293
290
goto out ;
294
291
}
295
292
296
- if (entry -> flags & MPTCP_PM_ADDR_FLAG_SIGNAL )
293
+ if (entry -> addr . flags & MPTCP_PM_ADDR_FLAG_SIGNAL )
297
294
pernet -> add_addr_signal_max ++ ;
298
- if (entry -> flags & MPTCP_PM_ADDR_FLAG_SUBFLOW )
295
+ if (entry -> addr . flags & MPTCP_PM_ADDR_FLAG_SUBFLOW )
299
296
pernet -> local_addr_max ++ ;
300
297
301
298
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)
345
342
if (!entry )
346
343
return - ENOMEM ;
347
344
348
- entry -> flags = 0 ;
349
345
entry -> addr = skc_local ;
346
+ entry -> addr .ifindex = 0 ;
347
+ entry -> addr .flags = 0 ;
350
348
ret = mptcp_pm_nl_append_new_local_addr (pernet , entry );
351
349
if (ret < 0 )
352
350
kfree (entry );
@@ -460,14 +458,17 @@ static int mptcp_pm_parse_addr(struct nlattr *attr, struct genl_info *info,
460
458
entry -> addr .addr .s_addr = nla_get_in_addr (tb [addr_addr ]);
461
459
462
460
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
+ }
465
466
466
467
if (tb [MPTCP_PM_ADDR_ATTR_ID ])
467
468
entry -> addr .id = nla_get_u8 (tb [MPTCP_PM_ADDR_ATTR_ID ]);
468
469
469
470
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 ]);
471
472
472
473
return 0 ;
473
474
}
@@ -535,9 +536,9 @@ static int mptcp_nl_cmd_del_addr(struct sk_buff *skb, struct genl_info *info)
535
536
ret = - EINVAL ;
536
537
goto out ;
537
538
}
538
- if (entry -> flags & MPTCP_PM_ADDR_FLAG_SIGNAL )
539
+ if (entry -> addr . flags & MPTCP_PM_ADDR_FLAG_SIGNAL )
539
540
pernet -> add_addr_signal_max -- ;
540
- if (entry -> flags & MPTCP_PM_ADDR_FLAG_SUBFLOW )
541
+ if (entry -> addr . flags & MPTCP_PM_ADDR_FLAG_SUBFLOW )
541
542
pernet -> local_addr_max -- ;
542
543
543
544
pernet -> addrs -- ;
@@ -593,10 +594,10 @@ static int mptcp_nl_fill_addr(struct sk_buff *skb,
593
594
goto nla_put_failure ;
594
595
if (nla_put_u8 (skb , MPTCP_PM_ADDR_ATTR_ID , addr -> id ))
595
596
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 ))
597
598
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 ))
600
601
goto nla_put_failure ;
601
602
602
603
if (addr -> family == AF_INET &&
0 commit comments