Lines Matching refs:entry
155 struct mptcp_pm_addr_entry *entry, *ret = NULL;
160 list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
161 if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW))
164 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap))
167 ret = entry;
177 struct mptcp_pm_addr_entry *entry, *ret = NULL;
185 list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
186 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap))
189 if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL))
192 ret = entry;
248 struct mptcp_pm_add_entry *entry;
252 list_for_each_entry(entry, &msk->pm.anno_list, list) {
253 if (mptcp_addresses_equal(&entry->addr, addr, true))
254 return entry;
262 struct mptcp_pm_add_entry *entry;
269 list_for_each_entry(entry, &msk->pm.anno_list, list) {
270 if (mptcp_addresses_equal(&entry->addr, &saddr, true)) {
283 struct mptcp_pm_add_entry *entry = from_timer(entry, timer, add_timer);
284 struct mptcp_sock *msk = entry->sock;
295 if (!entry->addr.id)
306 pr_debug("retransmit ADD_ADDR id=%d", entry->addr.id);
307 mptcp_pm_announce_addr(msk, &entry->addr, false);
309 entry->retrans_times++;
312 if (entry->retrans_times < ADD_ADDR_RETRANS_MAX)
318 if (entry->retrans_times == ADD_ADDR_RETRANS_MAX)
329 struct mptcp_pm_add_entry *entry;
333 entry = mptcp_lookup_anno_list_by_saddr(msk, addr);
334 if (entry && (!check_id || entry->addr.id == addr->id))
335 entry->retrans_times = ADD_ADDR_RETRANS_MAX;
338 if (entry && (!check_id || entry->addr.id == addr->id))
339 sk_stop_timer_sync(sk, &entry->add_timer);
341 return entry;
383 struct mptcp_pm_add_entry *entry, *tmp;
393 list_for_each_entry_safe(entry, tmp, &free_list, list) {
394 sk_stop_timer_sync(sk, &entry->add_timer);
395 kfree(entry);
417 /* Non-fullmesh endpoint, fill in the single entry
498 struct mptcp_pm_addr_entry *entry;
500 list_for_each_entry(entry, &pernet->local_addr_list, list) {
501 if (entry->addr.id == id)
502 return entry;
511 struct mptcp_pm_addr_entry *entry;
513 list_for_each_entry(entry, &pernet->local_addr_list, list) {
515 mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) ||
516 (lookup_by_id && entry->addr.id == info->id))
517 return entry;
540 struct mptcp_pm_addr_entry *entry;
546 entry = __lookup_addr(pernet, &mpc_addr, false);
547 if (entry) {
548 __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap);
549 msk->mpc_endpoint_id = entry->addr.id;
550 backup = !!(entry->flags & MPTCP_PM_ADDR_FLAG_BACKUP);
634 struct mptcp_pm_addr_entry *entry;
643 list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
644 if (!(entry->flags & MPTCP_PM_ADDR_FLAG_FULLMESH))
647 if (!mptcp_pm_addr_families_match(sk, &entry->addr, remote))
652 addrs[i++] = entry->addr;
891 static bool address_use_port(struct mptcp_pm_addr_entry *entry)
893 return (entry->flags &
899 static void __mptcp_pm_release_addr_entry(struct mptcp_pm_addr_entry *entry)
901 if (entry->lsk)
902 sock_release(entry->lsk);
903 kfree(entry);
907 struct mptcp_pm_addr_entry *entry,
924 if (test_bit(entry->addr.id, pernet->id_bitmap)) {
932 if (!address_use_port(entry))
933 entry->addr.port = 0;
935 if (mptcp_addresses_equal(&cur->addr, &entry->addr,
936 cur->addr.port || entry->addr.port)) {
945 if (entry->addr.id)
949 entry->addr.id = cur->addr.id;
956 if (!entry->addr.id && needs_id) {
958 entry->addr.id = find_next_zero_bit(pernet->id_bitmap,
961 if (!entry->addr.id && pernet->next_id != 1) {
967 if (!entry->addr.id && needs_id)
970 __set_bit(entry->addr.id, pernet->id_bitmap);
971 if (entry->addr.id > pernet->next_id)
972 pernet->next_id = entry->addr.id;
974 if (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL) {
978 if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) {
984 if (!entry->addr.port)
985 list_add_tail_rcu(&entry->list, &pernet->local_addr_list);
987 list_add_rcu(&entry->list, &pernet->local_addr_list);
988 ret = entry->addr.id;
993 /* just replaced an existing entry, free it */
1005 struct mptcp_pm_addr_entry *entry)
1014 err = sock_create_kern(sock_net(sk), entry->addr.family,
1015 SOCK_STREAM, IPPROTO_MPTCP, &entry->lsk);
1019 newsk = entry->lsk->sk;
1041 mptcp_info2sockaddr(&entry->addr, &addr, entry->addr.family);
1043 if (entry->addr.family == AF_INET6)
1071 struct mptcp_pm_addr_entry *entry;
1078 list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) {
1079 if (mptcp_addresses_equal(&entry->addr, skc, entry->addr.port)) {
1080 ret = entry->addr.id;
1089 entry = kmalloc(sizeof(*entry), GFP_ATOMIC);
1090 if (!entry)
1093 entry->addr = *skc;
1094 entry->addr.id = 0;
1095 entry->addr.port = 0;
1096 entry->ifindex = 0;
1097 entry->flags = MPTCP_PM_ADDR_FLAG_IMPLICIT;
1098 entry->lsk = NULL;
1099 ret = mptcp_pm_nl_append_new_local_addr(pernet, entry, true);
1101 kfree(entry);
1258 struct mptcp_pm_addr_entry *entry)
1263 memset(entry, 0, sizeof(*entry));
1265 err = mptcp_pm_parse_pm_addr_attr(tb, attr, info, &entry->addr, require_family);
1272 entry->ifindex = val;
1276 entry->flags = nla_get_u32(tb[MPTCP_PM_ADDR_ATTR_FLAGS]);
1279 entry->addr.port = htons(nla_get_u16(tb[MPTCP_PM_ADDR_ATTR_PORT]));
1331 struct mptcp_pm_addr_entry addr, *entry;
1354 entry = kzalloc(sizeof(*entry), GFP_KERNEL_ACCOUNT);
1355 if (!entry) {
1360 *entry = addr;
1361 if (entry->addr.port) {
1362 ret = mptcp_pm_nl_create_listen_socket(skb->sk, entry);
1368 ret = mptcp_pm_nl_append_new_local_addr(pernet, entry,
1379 __mptcp_pm_release_addr_entry(entry);
1386 struct mptcp_pm_addr_entry *entry;
1391 entry = __lookup_addr_by_id(pm_nl_get_pernet(net), id);
1392 if (entry) {
1393 *flags = entry->flags;
1394 *ifindex = entry->ifindex;
1404 struct mptcp_pm_add_entry *entry;
1406 entry = mptcp_pm_del_add_timer(msk, addr, false);
1407 if (entry) {
1408 list_del(&entry->list);
1409 kfree(entry);
1435 const struct mptcp_pm_addr_entry *entry)
1437 const struct mptcp_addr_info *addr = &entry->addr;
1461 !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT));
1513 struct mptcp_pm_addr_entry addr, *entry;
1530 entry = __lookup_addr_by_id(pernet, addr.addr.id);
1531 if (!entry) {
1536 if (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL) {
1540 if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) {
1546 list_del_rcu(&entry->list);
1547 __clear_bit(entry->addr.id, pernet->id_bitmap);
1550 mptcp_nl_remove_subflow_and_signal_addr(sock_net(skb->sk), entry);
1552 __mptcp_pm_release_addr_entry(entry);
1560 struct mptcp_pm_addr_entry *entry;
1562 list_for_each_entry(entry, rm_list, list) {
1563 if ((remove_anno_list_by_saddr(msk, &entry->addr) ||
1564 lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) &&
1566 alist.ids[alist.nr++] = entry->addr.id;
1580 struct mptcp_pm_addr_entry *entry;
1582 list_for_each_entry(entry, rm_list, list) {
1583 if (lookup_subflow_by_saddr(&msk->conn_list, &entry->addr) &&
1585 slist.ids[slist.nr++] = entry->addr.id;
1587 if (remove_anno_list_by_saddr(msk, &entry->addr) &&
1589 alist.ids[alist.nr++] = entry->addr.id;
1663 struct mptcp_pm_addr_entry *entry)
1665 struct mptcp_addr_info *addr = &entry->addr;
1678 if (nla_put_u32(skb, MPTCP_PM_ADDR_ATTR_FLAGS, entry->flags))
1680 if (entry->ifindex &&
1681 nla_put_s32(skb, MPTCP_PM_ADDR_ATTR_IF_IDX, entry->ifindex))
1705 struct mptcp_pm_addr_entry addr, *entry;
1727 entry = __lookup_addr_by_id(pernet, addr.addr.id);
1728 if (!entry) {
1734 ret = mptcp_nl_fill_addr(msg, entry);
1755 struct mptcp_pm_addr_entry *entry;
1766 entry = __lookup_addr_by_id(pernet, i);
1767 if (!entry)
1770 if (entry->addr.id <= id)
1779 if (mptcp_nl_fill_addr(msg, entry) < 0) {
1784 id = entry->addr.id;
1915 struct mptcp_pm_addr_entry *entry;
1925 entry = __lookup_addr(pernet, &addr->addr, lookup_by_id);
1926 if (!entry) {
1931 (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) {
1936 changed = (addr->flags ^ entry->flags) & mask;
1937 entry->flags = (entry->flags & ~mask) | (addr->flags & mask);
1938 *addr = *entry;