Lines Matching refs:addr
28 struct mptcp_addr_info addr; member
69 addr_equals = a->addr.s_addr == b->addr.s_addr; in mptcp_addresses_equal()
75 addr_equals = a->addr.s_addr == b->addr6.s6_addr32[3]; in mptcp_addresses_equal()
78 addr_equals = a->addr6.s6_addr32[3] == b->addr.s_addr; in mptcp_addresses_equal()
90 void mptcp_local_address(const struct sock_common *skc, struct mptcp_addr_info *addr) in mptcp_local_address() argument
92 addr->family = skc->skc_family; in mptcp_local_address()
93 addr->port = htons(skc->skc_num); in mptcp_local_address()
94 if (addr->family == AF_INET) in mptcp_local_address()
95 addr->addr.s_addr = skc->skc_rcv_saddr; in mptcp_local_address()
97 else if (addr->family == AF_INET6) in mptcp_local_address()
98 addr->addr6 = skc->skc_v6_rcv_saddr; in mptcp_local_address()
103 struct mptcp_addr_info *addr) in remote_address() argument
105 addr->family = skc->skc_family; in remote_address()
106 addr->port = skc->skc_dport; in remote_address()
107 if (addr->family == AF_INET) in remote_address()
108 addr->addr.s_addr = skc->skc_daddr; in remote_address()
110 else if (addr->family == AF_INET6) in remote_address()
111 addr->addr6 = skc->skc_v6_daddr; in remote_address()
166 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) in select_local_address()
192 if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) in select_signal_address()
254 const struct mptcp_addr_info *addr) in mptcp_lookup_anno_list_by_saddr() argument
261 if (mptcp_addresses_equal(&entry->addr, addr, true)) in mptcp_lookup_anno_list_by_saddr()
278 if (mptcp_addresses_equal(&entry->addr, &saddr, true)) { in mptcp_pm_sport_in_anno_list()
303 if (!entry->addr.id) in mptcp_pm_add_timer()
314 pr_debug("retransmit ADD_ADDR id=%d", entry->addr.id); in mptcp_pm_add_timer()
315 mptcp_pm_announce_addr(msk, &entry->addr, false); in mptcp_pm_add_timer()
335 const struct mptcp_addr_info *addr, bool check_id) in mptcp_pm_del_add_timer() argument
341 entry = mptcp_lookup_anno_list_by_saddr(msk, addr); in mptcp_pm_del_add_timer()
342 if (entry && (!check_id || entry->addr.id == addr->id)) in mptcp_pm_del_add_timer()
346 if (entry && (!check_id || entry->addr.id == addr->id)) in mptcp_pm_del_add_timer()
353 const struct mptcp_addr_info *addr) in mptcp_pm_alloc_anno_list() argument
361 add_entry = mptcp_lookup_anno_list_by_saddr(msk, addr); in mptcp_pm_alloc_anno_list()
378 add_entry->addr = *addr; in mptcp_pm_alloc_anno_list()
508 if (entry->addr.id == id) in __lookup_addr_by_id()
522 mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) || in __lookup_addr()
523 (lookup_by_id && entry->addr.id == info->id)) in __lookup_addr()
556 __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
557 msk->mpc_endpoint_id = entry->addr.id; in mptcp_pm_create_subflow_or_signal_addr()
591 if (!mptcp_pm_alloc_anno_list(msk, &local.addr)) in mptcp_pm_create_subflow_or_signal_addr()
594 __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
596 mptcp_pm_announce_addr(msk, &local.addr, false); in mptcp_pm_create_subflow_or_signal_addr()
619 __clear_bit(local.addr.id, msk->pm.id_avail_bitmap); in mptcp_pm_create_subflow_or_signal_addr()
620 nr = fill_remote_addresses_vec(msk, &local.addr, fullmesh, addrs); in mptcp_pm_create_subflow_or_signal_addr()
626 __mptcp_subflow_connect(sk, &local.addr, &addrs[i]); in mptcp_pm_create_subflow_or_signal_addr()
666 if (!mptcp_pm_addr_families_match(sk, &entry->addr, remote)) in fill_local_addresses_vec()
671 addrs[i] = entry->addr; in fill_local_addresses_vec()
674 if (mptcp_addresses_equal(&entry->addr, &mpc_addr, entry->addr.port)) in fill_local_addresses_vec()
772 struct mptcp_addr_info *addr, in mptcp_pm_nl_mp_prio_send_ack() argument
785 if (!mptcp_addresses_equal(&local, addr, addr->port)) in mptcp_pm_nl_mp_prio_send_ack()
958 if (test_bit(entry->addr.id, pernet->id_bitmap)) { in mptcp_pm_nl_append_new_local_addr()
967 entry->addr.port = 0; in mptcp_pm_nl_append_new_local_addr()
969 if (mptcp_addresses_equal(&cur->addr, &entry->addr, in mptcp_pm_nl_append_new_local_addr()
970 cur->addr.port || entry->addr.port)) { in mptcp_pm_nl_append_new_local_addr()
979 if (entry->addr.id) in mptcp_pm_nl_append_new_local_addr()
983 entry->addr.id = cur->addr.id; in mptcp_pm_nl_append_new_local_addr()
990 if (!entry->addr.id && needs_id) { in mptcp_pm_nl_append_new_local_addr()
992 entry->addr.id = find_next_zero_bit(pernet->id_bitmap, in mptcp_pm_nl_append_new_local_addr()
995 if (!entry->addr.id && pernet->next_id != 1) { in mptcp_pm_nl_append_new_local_addr()
1001 if (!entry->addr.id && needs_id) in mptcp_pm_nl_append_new_local_addr()
1004 __set_bit(entry->addr.id, pernet->id_bitmap); in mptcp_pm_nl_append_new_local_addr()
1005 if (entry->addr.id > pernet->next_id) in mptcp_pm_nl_append_new_local_addr()
1006 pernet->next_id = entry->addr.id; in mptcp_pm_nl_append_new_local_addr()
1018 if (!entry->addr.port) in mptcp_pm_nl_append_new_local_addr()
1022 ret = entry->addr.id; in mptcp_pm_nl_append_new_local_addr()
1043 struct sockaddr_storage addr; in mptcp_pm_nl_create_listen_socket() local
1048 err = sock_create_kern(sock_net(sk), entry->addr.family, in mptcp_pm_nl_create_listen_socket()
1075 mptcp_info2sockaddr(&entry->addr, &addr, entry->addr.family); in mptcp_pm_nl_create_listen_socket()
1077 if (entry->addr.family == AF_INET6) in mptcp_pm_nl_create_listen_socket()
1081 err = inet_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); in mptcp_pm_nl_create_listen_socket()
1084 err = inet6_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); in mptcp_pm_nl_create_listen_socket()
1113 if (mptcp_addresses_equal(&entry->addr, skc, entry->addr.port)) { in mptcp_pm_nl_get_local_id()
1114 ret = entry->addr.id; in mptcp_pm_nl_get_local_id()
1127 entry->addr = *skc; in mptcp_pm_nl_get_local_id()
1128 entry->addr.id = 0; in mptcp_pm_nl_get_local_id()
1129 entry->addr.port = 0; in mptcp_pm_nl_get_local_id()
1148 if (mptcp_addresses_equal(&entry->addr, skc, entry->addr.port)) { in mptcp_pm_nl_is_backup()
1240 struct mptcp_addr_info *addr, in mptcp_pm_parse_pm_addr_attr() argument
1257 addr->id = nla_get_u8(tb[MPTCP_PM_ADDR_ATTR_ID]); in mptcp_pm_parse_pm_addr_attr()
1268 addr->family = nla_get_u16(tb[MPTCP_PM_ADDR_ATTR_FAMILY]); in mptcp_pm_parse_pm_addr_attr()
1269 if (addr->family != AF_INET in mptcp_pm_parse_pm_addr_attr()
1271 && addr->family != AF_INET6 in mptcp_pm_parse_pm_addr_attr()
1278 addr_addr = mptcp_pm_family_to_addr(addr->family); in mptcp_pm_parse_pm_addr_attr()
1286 if (addr->family == AF_INET6) in mptcp_pm_parse_pm_addr_attr()
1287 addr->addr6 = nla_get_in6_addr(tb[addr_addr]); in mptcp_pm_parse_pm_addr_attr()
1290 addr->addr.s_addr = nla_get_in_addr(tb[addr_addr]); in mptcp_pm_parse_pm_addr_attr()
1293 addr->port = htons(nla_get_u16(tb[MPTCP_PM_ADDR_ATTR_PORT])); in mptcp_pm_parse_pm_addr_attr()
1299 struct mptcp_addr_info *addr) in mptcp_pm_parse_addr() argument
1303 memset(addr, 0, sizeof(*addr)); in mptcp_pm_parse_addr()
1305 return mptcp_pm_parse_pm_addr_attr(tb, attr, info, addr, true); in mptcp_pm_parse_addr()
1317 err = mptcp_pm_parse_pm_addr_attr(tb, attr, info, &entry->addr, require_family); in mptcp_pm_parse_entry()
1331 entry->addr.port = htons(nla_get_u16(tb[MPTCP_PM_ADDR_ATTR_PORT])); in mptcp_pm_parse_entry()
1383 struct mptcp_pm_addr_entry addr, *entry; in mptcp_nl_cmd_add_addr() local
1386 ret = mptcp_pm_parse_entry(attr, info, true, &addr); in mptcp_nl_cmd_add_addr()
1390 if (addr.addr.port && !address_use_port(&addr)) { in mptcp_nl_cmd_add_addr()
1395 if (addr.flags & MPTCP_PM_ADDR_FLAG_SIGNAL && in mptcp_nl_cmd_add_addr()
1396 addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) { in mptcp_nl_cmd_add_addr()
1401 if (addr.flags & MPTCP_PM_ADDR_FLAG_IMPLICIT) { in mptcp_nl_cmd_add_addr()
1412 *entry = addr; in mptcp_nl_cmd_add_addr()
1413 if (entry->addr.port) { in mptcp_nl_cmd_add_addr()
1458 const struct mptcp_addr_info *addr) in remove_anno_list_by_saddr() argument
1462 entry = mptcp_pm_del_add_timer(msk, addr, false); in remove_anno_list_by_saddr()
1473 const struct mptcp_addr_info *addr, in mptcp_pm_remove_anno_addr() argument
1479 list.ids[list.nr++] = addr->id; in mptcp_pm_remove_anno_addr()
1481 ret = remove_anno_list_by_saddr(msk, addr); in mptcp_pm_remove_anno_addr()
1485 __set_bit(addr->id, msk->pm.id_avail_bitmap); in mptcp_pm_remove_anno_addr()
1505 const struct mptcp_addr_info *addr = &entry->addr; in mptcp_nl_remove_subflow_and_signal_addr() local
1510 pr_debug("remove_id=%d", addr->id); in mptcp_nl_remove_subflow_and_signal_addr()
1512 list.ids[list.nr++] = addr->id; in mptcp_nl_remove_subflow_and_signal_addr()
1522 mptcp_pm_remove_anno_addr(msk, addr, false); in mptcp_nl_remove_subflow_and_signal_addr()
1527 remove_subflow = lookup_subflow_by_saddr(&msk->conn_list, addr); in mptcp_nl_remove_subflow_and_signal_addr()
1528 mptcp_pm_remove_anno_addr(msk, addr, remove_subflow && in mptcp_nl_remove_subflow_and_signal_addr()
1554 struct mptcp_addr_info *addr) in mptcp_nl_remove_id_zero_address() argument
1570 if (!mptcp_addresses_equal(&msk_local, addr, addr->port)) in mptcp_nl_remove_id_zero_address()
1593 struct mptcp_pm_addr_entry addr, *entry; in mptcp_nl_cmd_del_addr() local
1597 ret = mptcp_pm_parse_entry(attr, info, false, &addr); in mptcp_nl_cmd_del_addr()
1606 if (addr.addr.id == 0) in mptcp_nl_cmd_del_addr()
1607 return mptcp_nl_remove_id_zero_address(sock_net(skb->sk), &addr.addr); in mptcp_nl_cmd_del_addr()
1610 entry = __lookup_addr_by_id(pernet, addr.addr.id); in mptcp_nl_cmd_del_addr()
1627 __clear_bit(entry->addr.id, pernet->id_bitmap); in mptcp_nl_cmd_del_addr()
1648 if (remove_anno_list_by_saddr(msk, &entry->addr)) in mptcp_pm_remove_addrs()
1651 &entry->addr)) in mptcp_pm_remove_addrs()
1654 alist.ids[alist.nr++] = entry->addr.id; in mptcp_pm_remove_addrs()
1673 lookup_subflow_by_saddr(&msk->conn_list, &entry->addr)) in mptcp_pm_remove_addrs_and_subflows()
1674 slist.ids[slist.nr++] = entry->addr.id; in mptcp_pm_remove_addrs_and_subflows()
1677 remove_anno_list_by_saddr(msk, &entry->addr)) in mptcp_pm_remove_addrs_and_subflows()
1678 alist.ids[alist.nr++] = entry->addr.id; in mptcp_pm_remove_addrs_and_subflows()
1758 struct mptcp_addr_info *addr = &entry->addr; in mptcp_nl_fill_addr() local
1765 if (nla_put_u16(skb, MPTCP_PM_ADDR_ATTR_FAMILY, addr->family)) in mptcp_nl_fill_addr()
1767 if (nla_put_u16(skb, MPTCP_PM_ADDR_ATTR_PORT, ntohs(addr->port))) in mptcp_nl_fill_addr()
1769 if (nla_put_u8(skb, MPTCP_PM_ADDR_ATTR_ID, addr->id)) in mptcp_nl_fill_addr()
1777 if (addr->family == AF_INET && in mptcp_nl_fill_addr()
1779 addr->addr.s_addr)) in mptcp_nl_fill_addr()
1782 else if (addr->family == AF_INET6 && in mptcp_nl_fill_addr()
1783 nla_put_in6_addr(skb, MPTCP_PM_ADDR_ATTR_ADDR6, &addr->addr6)) in mptcp_nl_fill_addr()
1798 struct mptcp_pm_addr_entry addr, *entry; in mptcp_nl_cmd_get_addr() local
1803 ret = mptcp_pm_parse_entry(attr, info, false, &addr); in mptcp_nl_cmd_get_addr()
1820 entry = __lookup_addr_by_id(pernet, addr.addr.id); in mptcp_nl_cmd_get_addr()
1863 if (entry->addr.id <= id) in mptcp_nl_cmd_dump_addrs()
1877 id = entry->addr.id; in mptcp_nl_cmd_dump_addrs()
1962 struct mptcp_addr_info *addr) in mptcp_pm_nl_fullmesh() argument
1966 list.ids[list.nr++] = addr->id; in mptcp_pm_nl_fullmesh()
1976 struct mptcp_addr_info *addr, in mptcp_nl_set_flags() argument
1991 ret = mptcp_pm_nl_mp_prio_send_ack(msk, addr, NULL, bkup); in mptcp_nl_set_flags()
1993 mptcp_pm_nl_fullmesh(msk, addr); in mptcp_nl_set_flags()
2004 int mptcp_pm_nl_set_flags(struct net *net, struct mptcp_pm_addr_entry *addr, u8 bkup) in mptcp_pm_nl_set_flags() argument
2012 if (addr->addr.family == AF_UNSPEC) { in mptcp_pm_nl_set_flags()
2014 if (!addr->addr.id) in mptcp_pm_nl_set_flags()
2019 entry = __lookup_addr(pernet, &addr->addr, lookup_by_id); in mptcp_pm_nl_set_flags()
2024 if ((addr->flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && in mptcp_pm_nl_set_flags()
2030 changed = (addr->flags ^ entry->flags) & mask; in mptcp_pm_nl_set_flags()
2031 entry->flags = (entry->flags & ~mask) | (addr->flags & mask); in mptcp_pm_nl_set_flags()
2032 *addr = *entry; in mptcp_pm_nl_set_flags()
2035 mptcp_nl_set_flags(net, &addr->addr, bkup, changed); in mptcp_pm_nl_set_flags()
2041 struct mptcp_pm_addr_entry remote = { .addr = { .family = AF_UNSPEC }, }; in mptcp_nl_cmd_set_flags()
2042 struct mptcp_pm_addr_entry addr = { .addr = { .family = AF_UNSPEC }, }; in mptcp_nl_cmd_set_flags() local
2050 ret = mptcp_pm_parse_entry(attr, info, false, &addr); in mptcp_nl_cmd_set_flags()
2060 if (addr.flags & MPTCP_PM_ADDR_FLAG_BACKUP) in mptcp_nl_cmd_set_flags()
2063 return mptcp_pm_set_flags(net, token, &addr, &remote, bkup); in mptcp_nl_cmd_set_flags()
2271 if (nla_put_in_addr(skb, MPTCP_ATTR_DADDR4, info->addr.s_addr)) in mptcp_event_addr_announced()