Lines Matching refs:addr
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()
145 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) in select_signal_address()
151 new_local->addr = entry->addr; in select_signal_address()
237 if (entry->addr.id == id) in __lookup_addr_by_id()
250 if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) in __lookup_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()
318 if (!mptcp_pm_alloc_anno_list(msk, &local.addr)) in mptcp_pm_create_subflow_or_signal_addr()
321 __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
325 if (local.addr.id == msk->mpc_endpoint_id) in mptcp_pm_create_subflow_or_signal_addr()
326 local.addr.id = 0; in mptcp_pm_create_subflow_or_signal_addr()
328 mptcp_pm_announce_addr(msk, &local.addr, false); in mptcp_pm_create_subflow_or_signal_addr()
350 __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
353 if (local.addr.id == msk->mpc_endpoint_id) in mptcp_pm_create_subflow_or_signal_addr()
354 local.addr.id = 0; in mptcp_pm_create_subflow_or_signal_addr()
358 nr = fill_remote_addresses_vec(msk, &local.addr, fullmesh, addrs); in mptcp_pm_create_subflow_or_signal_addr()
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()
413 if (mptcp_addresses_equal(&locals[i].addr, &mpc_addr, locals[i].addr.port)) in fill_local_addresses_vec()
414 locals[i].addr.id = 0; in fill_local_addresses_vec()
427 locals[i].addr.family = in fill_local_addresses_vec()
434 if (!mptcp_pm_addr_families_match(sk, &locals[i].addr, remote)) in fill_local_addresses_vec()
539 if (test_bit(entry->addr.id, pernet->id_bitmap)) { 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()
570 ret = cur->addr.id; 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()
610 if (!entry->addr.port) in mptcp_pm_nl_append_new_local_addr()
614 ret = entry->addr.id; in mptcp_pm_nl_append_new_local_addr()
635 struct sockaddr_storage addr; in mptcp_pm_nl_create_listen_socket() local
640 err = sock_create_kern(sock_net(sk), entry->addr.family, 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()
673 err = inet_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); in mptcp_pm_nl_create_listen_socket()
676 err = inet6_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); in mptcp_pm_nl_create_listen_socket()
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()
717 entry->addr.port = 0; in mptcp_pm_nl_get_local_id()
740 struct mptcp_addr_info *addr) in mptcp_nl_add_subflow_or_signal_addr() argument
758 if (mptcp_addresses_equal(addr, &mpc_addr, addr->port)) in mptcp_nl_add_subflow_or_signal_addr()
759 msk->mpc_endpoint_id = addr->id; in mptcp_nl_add_subflow_or_signal_addr()
788 struct mptcp_pm_addr_entry addr, *entry; in mptcp_pm_nl_add_addr_doit() local
796 ret = mptcp_pm_parse_entry(attr, info, true, &addr); in mptcp_pm_nl_add_addr_doit()
800 if (addr.addr.port && !address_use_port(&addr)) { in mptcp_pm_nl_add_addr_doit()
806 if (addr.flags & MPTCP_PM_ADDR_FLAG_SIGNAL && in mptcp_pm_nl_add_addr_doit()
807 addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) { in mptcp_pm_nl_add_addr_doit()
813 if (addr.flags & MPTCP_PM_ADDR_FLAG_IMPLICIT) { in mptcp_pm_nl_add_addr_doit()
819 entry = kmemdup(&addr, sizeof(addr), GFP_KERNEL_ACCOUNT); in mptcp_pm_nl_add_addr_doit()
825 if (entry->addr.port) { 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()
849 const struct mptcp_addr_info *addr) in mptcp_endp_get_local_id() argument
851 return msk->mpc_endpoint_id == addr->id ? 0 : addr->id; in mptcp_endp_get_local_id()
855 const struct mptcp_addr_info *addr, in mptcp_pm_remove_anno_addr() argument
861 list.ids[list.nr++] = mptcp_endp_get_local_id(msk, addr); in mptcp_pm_remove_anno_addr()
863 ret = mptcp_remove_anno_list_by_saddr(msk, addr); in mptcp_pm_remove_anno_addr()
867 __set_bit(addr->id, msk->pm.id_avail_bitmap); in mptcp_pm_remove_anno_addr()
887 const struct mptcp_addr_info *addr = &entry->addr; in mptcp_nl_remove_subflow_and_signal_addr() local
892 pr_debug("remove_id=%d\n", addr->id); in mptcp_nl_remove_subflow_and_signal_addr()
902 remove_subflow = mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr); in mptcp_nl_remove_subflow_and_signal_addr()
903 mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && in mptcp_nl_remove_subflow_and_signal_addr()
906 list.ids[0] = mptcp_endp_get_local_id(msk, addr); 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()
932 struct mptcp_addr_info *addr) in mptcp_nl_remove_id_zero_address() argument
948 if (!mptcp_addresses_equal(&msk_local, addr, addr->port)) in mptcp_nl_remove_id_zero_address()
971 struct mptcp_pm_addr_entry addr, *entry; in mptcp_pm_nl_del_addr_doit() local
980 ret = mptcp_pm_parse_entry(attr, info, false, &addr); in mptcp_pm_nl_del_addr_doit()
989 if (addr.addr.id == 0) in mptcp_pm_nl_del_addr_doit()
990 return mptcp_nl_remove_id_zero_address(sock_net(skb->sk), &addr.addr); in mptcp_pm_nl_del_addr_doit()
993 entry = __lookup_addr_by_id(pernet, addr.addr.id); in mptcp_pm_nl_del_addr_doit()
1010 __clear_bit(entry->addr.id, pernet->id_bitmap); in mptcp_pm_nl_del_addr_doit()
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()
1110 int mptcp_pm_nl_get_addr(u8 id, struct mptcp_pm_addr_entry *addr, in mptcp_pm_nl_get_addr() argument
1120 *addr = *entry; in mptcp_pm_nl_get_addr()
1146 if (entry->addr.id <= id) in mptcp_pm_nl_dump_addr()
1152 id = entry->addr.id; in mptcp_pm_nl_dump_addr()
1236 struct mptcp_addr_info *addr) in mptcp_pm_nl_fullmesh() argument
1240 list.ids[list.nr++] = mptcp_endp_get_local_id(msk, addr); in mptcp_pm_nl_fullmesh()
1269 mptcp_pm_mp_prio_send_ack(msk, &local->addr, NULL, bkup); in mptcp_pm_nl_set_flags_all()
1272 mptcp_pm_nl_fullmesh(msk, &local->addr); in mptcp_pm_nl_set_flags_all()
1294 if (local->addr.family == AF_UNSPEC) { in mptcp_pm_nl_set_flags()
1296 if (!local->addr.id) { in mptcp_pm_nl_set_flags()
1304 entry = lookup_by_id ? __lookup_addr_by_id(pernet, local->addr.id) : in mptcp_pm_nl_set_flags()
1305 __lookup_addr(pernet, &local->addr); in mptcp_pm_nl_set_flags()