Lines Matching refs:msk
133 struct mptcp_sock *msk)
138 spin_lock_bh(&msk->join_list_lock);
146 if (entry->addr.family == ((struct sock *)msk)->sk_family &&
147 !lookup_subflow_by_saddr(&msk->conn_list, &entry->addr) &&
148 !lookup_subflow_by_saddr(&msk->join_list, &entry->addr)) {
153 spin_unlock_bh(&msk->join_list_lock);
167 * Note: removal from the local address list during the msk life-cycle
182 static void check_work_pending(struct mptcp_sock *msk)
184 if (msk->pm.add_addr_signaled == msk->pm.add_addr_signal_max &&
185 (msk->pm.local_addr_used == msk->pm.local_addr_max ||
186 msk->pm.subflows == msk->pm.subflows_max))
187 WRITE_ONCE(msk->pm.work_pending, false);
191 lookup_anno_list_by_saddr(struct mptcp_sock *msk,
196 list_for_each_entry(entry, &msk->pm.anno_list, list) {
207 struct mptcp_sock *msk = entry->sock;
208 struct sock *sk = (struct sock *)msk;
210 pr_debug("msk=%p", msk);
212 if (!msk)
221 if (mptcp_pm_should_add_signal(msk)) {
226 spin_lock_bh(&msk->pm.lock);
228 if (!mptcp_pm_should_add_signal(msk)) {
230 mptcp_pm_announce_addr(msk, &entry->addr, false);
237 spin_unlock_bh(&msk->pm.lock);
244 mptcp_pm_del_add_timer(struct mptcp_sock *msk,
248 struct sock *sk = (struct sock *)msk;
250 spin_lock_bh(&msk->pm.lock);
251 entry = lookup_anno_list_by_saddr(msk, addr);
254 spin_unlock_bh(&msk->pm.lock);
262 static bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
266 struct sock *sk = (struct sock *)msk;
268 if (lookup_anno_list_by_saddr(msk, &entry->addr))
275 list_add(&add_entry->list, &msk->pm.anno_list);
278 add_entry->sock = msk;
287 void mptcp_pm_free_anno_list(struct mptcp_sock *msk)
290 struct sock *sk = (struct sock *)msk;
293 pr_debug("msk=%p", msk);
295 spin_lock_bh(&msk->pm.lock);
296 list_splice_init(&msk->pm.anno_list, &free_list);
297 spin_unlock_bh(&msk->pm.lock);
305 static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
308 struct sock *sk = (struct sock *)msk;
312 pernet = net_generic(sock_net((struct sock *)msk), pm_nl_pernet_id);
315 msk->pm.local_addr_used, msk->pm.local_addr_max,
316 msk->pm.add_addr_signaled, msk->pm.add_addr_signal_max,
317 msk->pm.subflows, msk->pm.subflows_max);
320 if (msk->pm.add_addr_signaled < msk->pm.add_addr_signal_max) {
322 msk->pm.add_addr_signaled);
325 if (mptcp_pm_alloc_anno_list(msk, local)) {
326 msk->pm.add_addr_signaled++;
327 mptcp_pm_announce_addr(msk, &local->addr, false);
331 msk->pm.local_addr_used = msk->pm.add_addr_signal_max;
334 check_work_pending(msk);
338 if (msk->pm.local_addr_used < msk->pm.local_addr_max &&
339 msk->pm.subflows < msk->pm.subflows_max) {
342 local = select_local_address(pernet, msk);
344 msk->pm.local_addr_used++;
345 msk->pm.subflows++;
346 check_work_pending(msk);
347 spin_unlock_bh(&msk->pm.lock);
349 spin_lock_bh(&msk->pm.lock);
354 msk->pm.local_addr_used = msk->pm.local_addr_max;
355 check_work_pending(msk);
359 void mptcp_pm_nl_fully_established(struct mptcp_sock *msk)
361 mptcp_pm_create_subflow_or_signal_addr(msk);
364 void mptcp_pm_nl_subflow_established(struct mptcp_sock *msk)
366 mptcp_pm_create_subflow_or_signal_addr(msk);
369 void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk)
371 struct sock *sk = (struct sock *)msk;
376 msk->pm.add_addr_accepted, msk->pm.add_addr_accept_max,
377 msk->pm.remote.family);
378 msk->pm.add_addr_accepted++;
379 msk->pm.subflows++;
380 if (msk->pm.add_addr_accepted >= msk->pm.add_addr_accept_max ||
381 msk->pm.subflows >= msk->pm.subflows_max)
382 WRITE_ONCE(msk->pm.accept_addr, false);
387 remote = msk->pm.remote;
393 spin_unlock_bh(&msk->pm.lock);
394 __mptcp_subflow_connect((struct sock *)msk, &local, &remote);
395 spin_lock_bh(&msk->pm.lock);
397 mptcp_pm_announce_addr(msk, &remote, true);
400 void mptcp_pm_nl_rm_addr_received(struct mptcp_sock *msk)
403 struct sock *sk = (struct sock *)msk;
405 pr_debug("address rm_id %d", msk->pm.rm_id);
407 if (!msk->pm.rm_id)
410 if (list_empty(&msk->conn_list))
413 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) {
418 if (msk->pm.rm_id != subflow->remote_id)
421 spin_unlock_bh(&msk->pm.lock);
424 spin_lock_bh(&msk->pm.lock);
426 msk->pm.add_addr_accepted--;
427 msk->pm.subflows--;
428 WRITE_ONCE(msk->pm.accept_addr, true);
436 void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk, u8 rm_id)
439 struct sock *sk = (struct sock *)msk;
446 if (list_empty(&msk->conn_list))
449 list_for_each_entry_safe(subflow, tmp, &msk->conn_list, node) {
457 spin_unlock_bh(&msk->pm.lock);
460 spin_lock_bh(&msk->pm.lock);
462 msk->pm.local_addr_used--;
463 msk->pm.subflows--;
518 int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
526 if (WARN_ON_ONCE(!msk))
529 /* The 0 ID mapping is defined by the first subflow, copied into the msk
532 local_address((struct sock_common *)msk, &msk_local);
540 pernet = net_generic(sock_net((struct sock *)msk), pm_nl_pernet_id);
568 void mptcp_pm_nl_data_init(struct mptcp_sock *msk)
570 struct mptcp_pm_data *pm = &msk->pm;
574 pernet = net_generic(sock_net((struct sock *)msk), pm_nl_pernet_id);
734 static bool remove_anno_list_by_saddr(struct mptcp_sock *msk,
739 entry = mptcp_pm_del_add_timer(msk, addr);
749 static bool mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
755 ret = remove_anno_list_by_saddr(msk, addr);
757 spin_lock_bh(&msk->pm.lock);
758 mptcp_pm_remove_addr(msk, addr->id);
759 spin_unlock_bh(&msk->pm.lock);
767 struct mptcp_sock *msk;
772 while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
773 struct sock *sk = (struct sock *)msk;
776 if (list_empty(&msk->conn_list)) {
777 mptcp_pm_remove_anno_addr(msk, addr, false);
782 remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr);
783 mptcp_pm_remove_anno_addr(msk, addr, remove_subflow);
785 mptcp_pm_remove_subflow(msk, addr->id);