Lines Matching refs:entry
107 struct mptcp_pm_addr_entry *entry; in select_local_address() local
113 list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { in select_local_address()
114 if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)) in select_local_address()
117 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) in select_local_address()
120 new_local->addr = entry->addr; in select_local_address()
121 new_local->flags = entry->flags; in select_local_address()
122 new_local->ifindex = entry->ifindex; in select_local_address()
135 struct mptcp_pm_addr_entry *entry; in select_signal_address() local
144 list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { in select_signal_address()
145 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) in select_signal_address()
148 if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) in select_signal_address()
151 new_local->addr = entry->addr; in select_signal_address()
152 new_local->flags = entry->flags; in select_signal_address()
153 new_local->ifindex = entry->ifindex; in select_signal_address()
233 struct mptcp_pm_addr_entry *entry; in __lookup_addr_by_id() local
235 list_for_each_entry_rcu(entry, &pernet->local_addr_list, list, in __lookup_addr_by_id()
237 if (entry->addr.id == id) in __lookup_addr_by_id()
238 return entry; in __lookup_addr_by_id()
246 struct mptcp_pm_addr_entry *entry; in __lookup_addr() local
248 list_for_each_entry_rcu(entry, &pernet->local_addr_list, list, in __lookup_addr()
250 if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) in __lookup_addr()
251 return entry; in __lookup_addr()
275 struct mptcp_pm_addr_entry *entry; in mptcp_pm_create_subflow_or_signal_addr() local
281 entry = __lookup_addr(pernet, &mpc_addr); in mptcp_pm_create_subflow_or_signal_addr()
282 if (entry) { in mptcp_pm_create_subflow_or_signal_addr()
283 __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
284 msk->mpc_endpoint_id = entry->addr.id; in mptcp_pm_create_subflow_or_signal_addr()
285 backup = !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP); in mptcp_pm_create_subflow_or_signal_addr()
388 struct mptcp_pm_addr_entry *entry; in fill_local_addresses_vec() local
400 list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { in fill_local_addresses_vec()
401 if (!(entry->flags & MPTCP_PM_ADDR_FLAG_FULLMESH)) in fill_local_addresses_vec()
404 if (!mptcp_pm_addr_families_match(sk, &entry->addr, remote)) in fill_local_addresses_vec()
408 locals[i].addr = entry->addr; in fill_local_addresses_vec()
409 locals[i].flags = entry->flags; in fill_local_addresses_vec()
410 locals[i].ifindex = entry->ifindex; in fill_local_addresses_vec()
506 static bool address_use_port(struct mptcp_pm_addr_entry *entry) in address_use_port() argument
508 return (entry->flags & in address_use_port()
514 static void __mptcp_pm_release_addr_entry(struct mptcp_pm_addr_entry *entry) in __mptcp_pm_release_addr_entry() argument
516 if (entry->lsk) in __mptcp_pm_release_addr_entry()
517 sock_release(entry->lsk); in __mptcp_pm_release_addr_entry()
518 kfree(entry); in __mptcp_pm_release_addr_entry()
522 struct mptcp_pm_addr_entry *entry, in mptcp_pm_nl_append_new_local_addr() argument
539 if (test_bit(entry->addr.id, pernet->id_bitmap)) { in mptcp_pm_nl_append_new_local_addr()
547 if (!address_use_port(entry)) in mptcp_pm_nl_append_new_local_addr()
548 entry->addr.port = 0; in mptcp_pm_nl_append_new_local_addr()
550 if (mptcp_addresses_equal(&cur->addr, &entry->addr, in mptcp_pm_nl_append_new_local_addr()
551 cur->addr.port || entry->addr.port)) { in mptcp_pm_nl_append_new_local_addr()
560 if (entry->addr.id) in mptcp_pm_nl_append_new_local_addr()
569 kfree(entry); in mptcp_pm_nl_append_new_local_addr()
575 entry->addr.id = cur->addr.id; in mptcp_pm_nl_append_new_local_addr()
582 if (!entry->addr.id && needs_id) { in mptcp_pm_nl_append_new_local_addr()
584 entry->addr.id = find_next_zero_bit(pernet->id_bitmap, in mptcp_pm_nl_append_new_local_addr()
587 if (!entry->addr.id && pernet->next_id != 1) { in mptcp_pm_nl_append_new_local_addr()
593 if (!entry->addr.id && needs_id) in mptcp_pm_nl_append_new_local_addr()
596 __set_bit(entry->addr.id, pernet->id_bitmap); in mptcp_pm_nl_append_new_local_addr()
597 if (entry->addr.id > pernet->next_id) in mptcp_pm_nl_append_new_local_addr()
598 pernet->next_id = entry->addr.id; in mptcp_pm_nl_append_new_local_addr()
600 if (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL) { in mptcp_pm_nl_append_new_local_addr()
604 if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { in mptcp_pm_nl_append_new_local_addr()
610 if (!entry->addr.port) in mptcp_pm_nl_append_new_local_addr()
611 list_add_tail_rcu(&entry->list, &pernet->local_addr_list); in mptcp_pm_nl_append_new_local_addr()
613 list_add_rcu(&entry->list, &pernet->local_addr_list); in mptcp_pm_nl_append_new_local_addr()
614 ret = entry->addr.id; in mptcp_pm_nl_append_new_local_addr()
631 struct mptcp_pm_addr_entry *entry) in mptcp_pm_nl_create_listen_socket() argument
640 err = sock_create_kern(sock_net(sk), entry->addr.family, in mptcp_pm_nl_create_listen_socket()
641 SOCK_STREAM, IPPROTO_MPTCP, &entry->lsk); in mptcp_pm_nl_create_listen_socket()
645 newsk = entry->lsk->sk; in mptcp_pm_nl_create_listen_socket()
667 mptcp_info2sockaddr(&entry->addr, &addr, entry->addr.family); in mptcp_pm_nl_create_listen_socket()
669 if (entry->addr.family == AF_INET6) in mptcp_pm_nl_create_listen_socket()
699 struct mptcp_pm_addr_entry *entry; in mptcp_pm_nl_get_local_id() local
706 entry = __lookup_addr(pernet, &skc->addr); in mptcp_pm_nl_get_local_id()
707 ret = entry ? entry->addr.id : -1; in mptcp_pm_nl_get_local_id()
713 entry = kmemdup(skc, sizeof(*skc), GFP_ATOMIC); in mptcp_pm_nl_get_local_id()
714 if (!entry) in mptcp_pm_nl_get_local_id()
717 entry->addr.port = 0; in mptcp_pm_nl_get_local_id()
718 ret = mptcp_pm_nl_append_new_local_addr(pernet, entry, true, false); in mptcp_pm_nl_get_local_id()
720 kfree(entry); in mptcp_pm_nl_get_local_id()
728 struct mptcp_pm_addr_entry *entry; in mptcp_pm_nl_is_backup() local
732 entry = __lookup_addr(pernet, skc); in mptcp_pm_nl_is_backup()
733 backup = entry && !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP); in mptcp_pm_nl_is_backup()
788 struct mptcp_pm_addr_entry addr, *entry; in mptcp_pm_nl_add_addr_doit() local
819 entry = kmemdup(&addr, sizeof(addr), GFP_KERNEL_ACCOUNT); in mptcp_pm_nl_add_addr_doit()
820 if (!entry) { in mptcp_pm_nl_add_addr_doit()
825 if (entry->addr.port) { in mptcp_pm_nl_add_addr_doit()
826 ret = mptcp_pm_nl_create_listen_socket(skb->sk, entry); in mptcp_pm_nl_add_addr_doit()
832 ret = mptcp_pm_nl_append_new_local_addr(pernet, entry, in mptcp_pm_nl_add_addr_doit()
840 mptcp_nl_add_subflow_or_signal_addr(sock_net(skb->sk), &entry->addr); in mptcp_pm_nl_add_addr_doit()
844 __mptcp_pm_release_addr_entry(entry); in mptcp_pm_nl_add_addr_doit()
885 const struct mptcp_pm_addr_entry *entry) in mptcp_nl_remove_subflow_and_signal_addr() argument
887 const struct mptcp_addr_info *addr = &entry->addr; in mptcp_nl_remove_subflow_and_signal_addr()
904 !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT)); in mptcp_nl_remove_subflow_and_signal_addr()
913 if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { in mptcp_nl_remove_subflow_and_signal_addr()
919 if (msk->mpc_endpoint_id == entry->addr.id) in mptcp_nl_remove_subflow_and_signal_addr()
971 struct mptcp_pm_addr_entry addr, *entry; in mptcp_pm_nl_del_addr_doit() local
993 entry = __lookup_addr_by_id(pernet, addr.addr.id); in mptcp_pm_nl_del_addr_doit()
994 if (!entry) { in mptcp_pm_nl_del_addr_doit()
999 if (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL) { in mptcp_pm_nl_del_addr_doit()
1003 if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { in mptcp_pm_nl_del_addr_doit()
1009 list_del_rcu(&entry->list); in mptcp_pm_nl_del_addr_doit()
1010 __clear_bit(entry->addr.id, pernet->id_bitmap); in mptcp_pm_nl_del_addr_doit()
1013 mptcp_nl_remove_subflow_and_signal_addr(sock_net(skb->sk), entry); in mptcp_pm_nl_del_addr_doit()
1015 __mptcp_pm_release_addr_entry(entry); in mptcp_pm_nl_del_addr_doit()
1024 struct mptcp_pm_addr_entry *entry; in mptcp_pm_flush_addrs_and_subflows() local
1026 list_for_each_entry(entry, rm_list, list) { in mptcp_pm_flush_addrs_and_subflows()
1028 mptcp_lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) in mptcp_pm_flush_addrs_and_subflows()
1029 slist.ids[slist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr); in mptcp_pm_flush_addrs_and_subflows()
1032 mptcp_remove_anno_list_by_saddr(msk, &entry->addr)) in mptcp_pm_flush_addrs_and_subflows()
1033 alist.ids[alist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr); in mptcp_pm_flush_addrs_and_subflows()
1114 struct mptcp_pm_addr_entry *entry; in mptcp_pm_nl_get_addr() local
1118 entry = __lookup_addr_by_id(pernet, id); in mptcp_pm_nl_get_addr()
1119 if (entry) { in mptcp_pm_nl_get_addr()
1120 *addr = *entry; in mptcp_pm_nl_get_addr()
1132 struct mptcp_pm_addr_entry *entry; in mptcp_pm_nl_dump_addr() local
1142 entry = __lookup_addr_by_id(pernet, i); in mptcp_pm_nl_dump_addr()
1143 if (!entry) in mptcp_pm_nl_dump_addr()
1146 if (entry->addr.id <= id) in mptcp_pm_nl_dump_addr()
1149 if (mptcp_pm_genl_fill_addr(msg, cb, entry) < 0) in mptcp_pm_nl_dump_addr()
1152 id = entry->addr.id; in mptcp_pm_nl_dump_addr()
1288 struct mptcp_pm_addr_entry *entry; in mptcp_pm_nl_set_flags() local
1304 entry = lookup_by_id ? __lookup_addr_by_id(pernet, local->addr.id) : in mptcp_pm_nl_set_flags()
1306 if (!entry) { in mptcp_pm_nl_set_flags()
1312 (entry->flags & (MPTCP_PM_ADDR_FLAG_SIGNAL | in mptcp_pm_nl_set_flags()
1319 changed = (local->flags ^ entry->flags) & mask; in mptcp_pm_nl_set_flags()
1320 entry->flags = (entry->flags & ~mask) | (local->flags & mask); in mptcp_pm_nl_set_flags()
1321 *local = *entry; in mptcp_pm_nl_set_flags()