Lines Matching +full:ip +full:- +full:addr

5  * SPDX-License-Identifier: Apache-2.0
44 * so that integer-based math works better
138 NET_ASSERT(pkt->frags); \
150 if (&_net_if_list_start[index - 1] >= _net_if_list_end) { in z_impl_net_if_get_by_index()
155 return &_net_if_list_start[index - 1]; in z_impl_net_if_get_by_index()
186 if (context->send_cb) { in net_context_send_cb()
187 context->send_cb(context, status, context->user_data); in net_context_send_cb()
210 val = net_pkt_stats_tick(pkt)[i] - prev; in update_txtime_stats_detail()
240 net_pkt_lladdr_dst(pkt)->addr, in net_if_tx()
241 net_pkt_lladdr_dst(pkt)->len) < 0) { in net_if_tx()
262 status = net_if_l2(iface)->send(iface, pkt); in net_if_tx()
302 status = -ENETDOWN; in net_if_tx()
336 iface->tx_pending--; in net_process_tx_packet()
370 iface->tx_pending++; in net_if_try_queue_tx()
392 memset(&iface->stats, 0, sizeof(iface->stats)); in net_if_stats_reset()
407 memset(&iface->stats, 0, sizeof(iface->stats)); in net_if_stats_reset_all()
415 const struct net_if_api *api = net_if_get_device(iface)->api; in init_iface()
417 if (!api || !api->init) { in init_iface()
440 k_mutex_init(&iface->lock); in init_iface()
441 k_mutex_init(&iface->tx_lock); in init_iface()
443 api->init(iface); in init_iface()
456 int status = -EIO; in net_if_try_send_data()
463 status = -ENETDOWN; in net_if_try_send_data()
477 } else if (l2->send == NULL) { in net_if_try_send_data()
490 * https://github.com/zephyrproject-rtos/zephyr/issues/3111 in net_if_try_send_data()
493 net_pkt_lladdr_src(pkt)->len == 0) { in net_if_try_send_data()
495 net_pkt_lladdr_if(pkt)->addr, in net_if_try_send_data()
496 net_pkt_lladdr_if(pkt)->len); in net_if_try_send_data()
508 /* Bypass the IP stack with SOCK_RAW/IPPROTO_RAW sockets */ in net_if_try_send_data()
545 if (dst->len > 0) { in net_if_try_send_data()
558 uint8_t *addr, uint8_t len, in net_if_set_link_addr_locked() argument
565 ret = net_if_set_link_addr_unlocked(iface, addr, len, type); in net_if_set_link_addr_locked()
576 if (!memcmp(net_if_get_link_addr(iface)->addr, ll_addr->addr, in net_if_get_by_link_addr()
577 ll_addr->len)) { in net_if_get_by_link_addr()
677 if (net_if_l2(iface) && net_if_l2(iface)->get_flags) { in l2_flags_get()
678 flags = net_if_l2(iface)->get_flags(iface); in l2_flags_get()
685 /* Return how many bits are shared between two IP addresses */
714 uint8_t family, void *addr) in iface_router_lookup() argument
730 (struct in6_addr *)addr)) || in iface_router_lookup()
733 (struct in_addr *)addr))) { in iface_router_lookup()
749 router->address.family == AF_INET6) { in iface_router_notify_deletion()
755 router->iface, in iface_router_notify_deletion()
756 &router->address.in6_addr, in iface_router_notify_deletion()
759 router->address.family == AF_INET) { in iface_router_notify_deletion()
765 router->iface, in iface_router_notify_deletion()
766 &router->address.in_addr, in iface_router_notify_deletion()
774 uint32_t ends = router->life_start; in iface_router_ends()
776 ends += MSEC_PER_SEC * router->lifetime; in iface_router_ends()
779 return (int32_t)(ends - now); in iface_router_ends()
828 prev_node = &router->node; in iface_router_expired()
834 prev_node, &router->node); in iface_router_expired()
835 router->is_used = false; in iface_router_expired()
844 uint8_t family, void *addr, in iface_router_add() argument
879 memcpy(net_if_router_ipv6(&routers[i]), addr, in iface_router_add()
888 net_sprint_ipv6_addr((struct in6_addr *)addr), in iface_router_add()
891 memcpy(net_if_router_ipv4(&routers[i]), addr, in iface_router_add()
902 net_sprint_ipv4_addr((struct in_addr *)addr), in iface_router_add()
922 if (!router->is_used) { in iface_router_rm()
929 if (sys_slist_find_and_remove(&active_router_timers, &router->node)) { in iface_router_rm()
933 router->is_used = false; in iface_router_rm()
946 router->is_used = false; in net_if_router_rm()
948 /* FIXME - remove timer */ in net_if_router_rm()
954 uint8_t family, void *addr) in iface_router_find_default() argument
959 /* Todo: addr will need to be handled */ in iface_router_find_default()
960 ARG_UNUSED(addr); in iface_router_find_default()
1001 sys_slist_find_and_remove(&mcast_monitor_callbacks, &mon->node); in net_if_mcast_mon_register()
1002 sys_slist_prepend(&mcast_monitor_callbacks, &mon->node); in net_if_mcast_mon_register()
1004 mon->iface = iface; in net_if_mcast_mon_register()
1005 mon->cb = cb; in net_if_mcast_mon_register()
1014 sys_slist_find_and_remove(&mcast_monitor_callbacks, &mon->node); in net_if_mcast_mon_unregister()
1020 const struct net_addr *addr, in net_if_mcast_monitor() argument
1029 if (iface == mon->iface || mon->iface == NULL) { in net_if_mcast_monitor()
1030 mon->cb(iface, addr, is_joined); in net_if_mcast_monitor()
1051 ret = -ENOTSUP; in net_if_config_ipv6_get()
1055 if (iface->config.ip.ipv6) { in net_if_config_ipv6_get()
1057 *ipv6 = iface->config.ip.ipv6; in net_if_config_ipv6_get()
1070 iface->config.ip.ipv6 = &ipv6_addresses[i].ipv6; in net_if_config_ipv6_get()
1083 ret = -ESRCH; in net_if_config_ipv6_get()
1098 ret = -ENOTSUP; in net_if_config_ipv6_put()
1102 if (!iface->config.ip.ipv6) { in net_if_config_ipv6_put()
1103 ret = -EALREADY; in net_if_config_ipv6_put()
1114 iface->config.ip.ipv6 = NULL; in net_if_config_ipv6_put()
1123 ret = -ESRCH; in net_if_config_ipv6_put()
1134 struct in6_addr addr; in join_mcast_allnodes() local
1137 if (iface->config.ip.ipv6 == NULL) { in join_mcast_allnodes()
1141 net_ipv6_addr_create_ll_allnodes_mcast(&addr); in join_mcast_allnodes()
1143 ret = net_ipv6_mld_join(iface, &addr); in join_mcast_allnodes()
1144 if (ret < 0 && ret != -EALREADY && ret != -ENETDOWN) { in join_mcast_allnodes()
1146 net_sprint_ipv6_addr(&addr), in join_mcast_allnodes()
1154 struct in6_addr addr; in join_mcast_solicit_node() local
1157 if (iface->config.ip.ipv6 == NULL) { in join_mcast_solicit_node()
1162 net_ipv6_addr_create_solicited_node(my_addr, &addr); in join_mcast_solicit_node()
1164 ret = net_ipv6_mld_join(iface, &addr); in join_mcast_solicit_node()
1166 if (ret != -EALREADY && ret != -ENETDOWN) { in join_mcast_solicit_node()
1168 net_sprint_ipv6_addr(&addr), in join_mcast_solicit_node()
1173 net_sprint_ipv6_addr(&addr), in join_mcast_solicit_node()
1180 struct net_if_ipv6 *ipv6 = iface->config.ip.ipv6; in leave_mcast_all()
1188 if (!ipv6->mcast[i].is_used || in leave_mcast_all()
1189 !ipv6->mcast[i].is_joined) { in leave_mcast_all()
1193 net_ipv6_mld_leave(iface, &ipv6->mcast[i].address.in6_addr); in leave_mcast_all()
1197 static void join_mcast_nodes(struct net_if *iface, struct in6_addr *addr) in join_mcast_nodes() argument
1201 if (iface->config.ip.ipv6 == NULL) { in join_mcast_nodes()
1210 join_mcast_solicit_node(iface, addr); in join_mcast_nodes()
1228 int32_t delay = -1; in dad_timeout()
1242 delay = (int32_t)(ifaddr->dad_start + in dad_timeout()
1243 DAD_TIMEOUT - current_time); in dad_timeout()
1249 sys_slist_remove(&active_dad_timers, NULL, &ifaddr->dad_node); in dad_timeout()
1250 sys_slist_append(&expired_list, &ifaddr->dad_node); in dad_timeout()
1265 net_sprint_ipv6_addr(&ifaddr->address.in6_addr), in dad_timeout()
1266 ifaddr->ifindex); in dad_timeout()
1268 ifaddr->addr_state = NET_ADDR_PREFERRED; in dad_timeout()
1269 iface = net_if_get_by_index(ifaddr->ifindex); in dad_timeout()
1273 &ifaddr->address.in6_addr, in dad_timeout()
1279 net_ipv6_nbr_rm(iface, &ifaddr->address.in6_addr); in dad_timeout()
1286 ifaddr->addr_state = NET_ADDR_TENTATIVE; in net_if_ipv6_start_dad()
1289 NET_DBG("Interface %p ll addr %s tentative IPv6 addr %s", in net_if_ipv6_start_dad()
1292 net_if_get_link_addr(iface)->addr, in net_if_ipv6_start_dad()
1293 net_if_get_link_addr(iface)->len), in net_if_ipv6_start_dad()
1294 net_sprint_ipv6_addr(&ifaddr->address.in6_addr)); in net_if_ipv6_start_dad()
1296 ifaddr->dad_count = 1U; in net_if_ipv6_start_dad()
1301 net_sprint_ipv6_addr(&ifaddr->address.in6_addr)); in net_if_ipv6_start_dad()
1304 ifaddr->dad_start = k_uptime_get_32(); in net_if_ipv6_start_dad()
1305 ifaddr->ifindex = net_if_get_by_iface(iface); in net_if_ipv6_start_dad()
1309 &ifaddr->dad_node); in net_if_ipv6_start_dad()
1310 sys_slist_append(&active_dad_timers, &ifaddr->dad_node); in net_if_ipv6_start_dad()
1321 net_sprint_ipv6_addr(&ifaddr->address.in6_addr)); in net_if_ipv6_start_dad()
1330 struct in6_addr addr = { }; in net_if_start_dad() local
1339 if (ret != -ENOTSUP) { in net_if_start_dad()
1352 ((uint8_t *)&ipv6->network_counter), in net_if_start_dad()
1355 (sizeof(ipv6->network_counter)), in net_if_start_dad()
1358 (ipv6->iid ? ipv6->iid->dad_count : 0U), in net_if_start_dad()
1360 &addr, in net_if_start_dad()
1367 ifaddr = net_if_ipv6_addr_add(iface, &addr, NET_ADDR_AUTOCONF, 0); in net_if_start_dad()
1370 net_sprint_ipv6_addr(&addr), iface); in net_if_start_dad()
1374 IF_ENABLED(CONFIG_NET_IPV6_IID_STABLE, (ipv6->iid = ifaddr)); in net_if_start_dad()
1381 ARRAY_FOR_EACH(ipv6->unicast, i) { in net_if_start_dad()
1382 if (!ipv6->unicast[i].is_used || in net_if_start_dad()
1383 ipv6->unicast[i].address.family != AF_INET6 || in net_if_start_dad()
1384 &ipv6->unicast[i] == ifaddr || in net_if_start_dad()
1386 &ipv6->unicast[i].address.in6_addr)) { in net_if_start_dad()
1390 sys_slist_prepend(&dad_needed, &ipv6->unicast[i].dad_need_node); in net_if_start_dad()
1409 void net_if_ipv6_dad_failed(struct net_if *iface, const struct in6_addr *addr) in net_if_ipv6_dad_failed() argument
1416 ifaddr = net_if_ipv6_addr_lookup(addr, &iface); in net_if_ipv6_dad_failed()
1419 net_sprint_ipv6_addr(addr), iface); in net_if_ipv6_dad_failed()
1424 ifaddr->dad_count++; in net_if_ipv6_dad_failed()
1429 (ifaddr->addr_timeout), (0)); in net_if_ipv6_dad_failed()
1431 (ifaddr->addr_preferred_lifetime), (0U)); in net_if_ipv6_dad_failed()
1433 if (!net_ipv6_pe_check_dad(ifaddr->dad_count)) { in net_if_ipv6_dad_failed()
1436 iface->pe_enabled = false; in net_if_ipv6_dad_failed()
1442 &ifaddr->address.in6_addr, in net_if_ipv6_dad_failed()
1449 net_if_ipv6_addr_rm(iface, addr); in net_if_ipv6_dad_failed()
1451 if (IS_ENABLED(CONFIG_NET_IPV6_PE) && iface->pe_enabled) { in net_if_ipv6_dad_failed()
1454 net_ipv6_pe_start(iface, addr, timeout, preferred_lifetime); in net_if_ipv6_dad_failed()
1481 int32_t delay = -1; in rs_timeout()
1495 delay = (int32_t)(ipv6->rs_start + RS_TIMEOUT - current_time); in rs_timeout()
1501 sys_slist_remove(&active_rs_timers, NULL, &ipv6->rs_node); in rs_timeout()
1502 sys_slist_append(&expired_list, &ipv6->rs_node); in rs_timeout()
1508 k_work_reschedule(&rs_timer, K_MSEC(ipv6->rs_start + in rs_timeout()
1509 RS_TIMEOUT - current_time)); in rs_timeout()
1518 ipv6->rs_count++; in rs_timeout()
1521 if (tmp->config.ip.ipv6 == ipv6) { in rs_timeout()
1529 iface, ipv6->rs_count); in rs_timeout()
1530 if (ipv6->rs_count < RS_COUNT) { in rs_timeout()
1549 ipv6 = iface->config.ip.ipv6; in net_if_start_rs()
1559 ipv6->rs_start = k_uptime_get_32(); in net_if_start_rs()
1562 sys_slist_append(&active_rs_timers, &ipv6->rs_node); in net_if_start_rs()
1582 ipv6 = iface->config.ip.ipv6; in net_if_stop_rs()
1590 sys_slist_find_and_remove(&active_rs_timers, &ipv6->rs_node); in net_if_stop_rs()
1619 if (!iface->config.ip.ipv6) { in net_if_nbr_reachability_hint()
1631 /* To be called when interface comes up so that all the non-joined multicast
1652 ARRAY_FOR_EACH(ipv6->unicast, i) { in rejoin_ipv6_mcast_groups()
1653 if (!ipv6->unicast[i].is_used) { in rejoin_ipv6_mcast_groups()
1657 join_mcast_nodes(iface, &ipv6->unicast[i].address.in6_addr); in rejoin_ipv6_mcast_groups()
1663 ARRAY_FOR_EACH(ipv6->mcast, i) { in rejoin_ipv6_mcast_groups()
1664 if (!ipv6->mcast[i].is_used || in rejoin_ipv6_mcast_groups()
1665 net_if_ipv6_maddr_is_joined(&ipv6->mcast[i])) { in rejoin_ipv6_mcast_groups()
1669 sys_slist_prepend(&rejoin_needed, &ipv6->mcast[i].rejoin_node); in rejoin_ipv6_mcast_groups()
1681 ret = net_ipv6_mld_join(iface, &ifaddr->address.in6_addr); in rejoin_ipv6_mcast_groups()
1684 net_sprint_ipv6_addr(&ifaddr->address.in6_addr), in rejoin_ipv6_mcast_groups()
1688 net_sprint_ipv6_addr(&ifaddr->address.in6_addr), in rejoin_ipv6_mcast_groups()
1716 ARRAY_FOR_EACH(ipv6->mcast, i) { in clear_joined_ipv6_mcast_groups()
1717 if (!ipv6->mcast[i].is_used) { in clear_joined_ipv6_mcast_groups()
1721 net_if_ipv6_maddr_leave(iface, &ipv6->mcast[i]); in clear_joined_ipv6_mcast_groups()
1731 net_sprint_ipv6_addr(&ifaddr->address.in6_addr)); in address_expired()
1734 &ifaddr->lifetime.node); in address_expired()
1736 net_timeout_set(&ifaddr->lifetime, 0, 0); in address_expired()
1739 ARRAY_FOR_EACH(iface->config.ip.ipv6->unicast, i) { in address_expired()
1740 if (&iface->config.ip.ipv6->unicast[i] == ifaddr) { in address_expired()
1742 &iface->config.ip.ipv6->unicast[i].address.in6_addr); in address_expired()
1761 struct net_timeout *timeout = &current->lifetime; in address_lifetime_timeout()
1801 &ifaddr->lifetime.node); in address_start_timer()
1804 &ifaddr->lifetime.node); in address_start_timer()
1806 net_timeout_set(&ifaddr->lifetime, vlifetime, k_uptime_get_32()); in address_start_timer()
1815 struct net_if_addr *net_if_ipv6_addr_lookup(const struct in6_addr *addr, in net_if_ipv6_addr_lookup() argument
1825 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_addr_lookup()
1831 ARRAY_FOR_EACH(ipv6->unicast, i) { in net_if_ipv6_addr_lookup()
1832 if (!ipv6->unicast[i].is_used || in net_if_ipv6_addr_lookup()
1833 ipv6->unicast[i].address.family != AF_INET6) { in net_if_ipv6_addr_lookup()
1838 addr->s6_addr, in net_if_ipv6_addr_lookup()
1839 ipv6->unicast[i].address.in6_addr.s6_addr, in net_if_ipv6_addr_lookup()
1846 ifaddr = &ipv6->unicast[i]; in net_if_ipv6_addr_lookup()
1860 struct in6_addr *addr) in net_if_ipv6_addr_lookup_by_iface() argument
1867 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_addr_lookup_by_iface()
1872 ARRAY_FOR_EACH(ipv6->unicast, i) { in net_if_ipv6_addr_lookup_by_iface()
1873 if (!ipv6->unicast[i].is_used || in net_if_ipv6_addr_lookup_by_iface()
1874 ipv6->unicast[i].address.family != AF_INET6) { in net_if_ipv6_addr_lookup_by_iface()
1879 addr->s6_addr, in net_if_ipv6_addr_lookup_by_iface()
1880 ipv6->unicast[i].address.in6_addr.s6_addr, in net_if_ipv6_addr_lookup_by_iface()
1882 ifaddr = &ipv6->unicast[i]; in net_if_ipv6_addr_lookup_by_iface()
1893 int z_impl_net_if_ipv6_addr_lookup_by_index(const struct in6_addr *addr) in z_impl_net_if_ipv6_addr_lookup_by_index() argument
1898 if_addr = net_if_ipv6_addr_lookup(addr, &iface); in z_impl_net_if_ipv6_addr_lookup_by_index()
1908 const struct in6_addr *addr) in z_vrfy_net_if_ipv6_addr_lookup_by_index() argument
1912 K_OOPS(k_usermode_from_copy(&addr_v6, (void *)addr, sizeof(addr_v6))); in z_vrfy_net_if_ipv6_addr_lookup_by_index()
1925 net_sprint_ipv6_addr(&ifaddr->address.in6_addr), in net_if_ipv6_addr_update_lifetime()
1928 ifaddr->addr_state = NET_ADDR_PREFERRED; in net_if_ipv6_addr_update_lifetime()
1936 struct in6_addr *addr) in ipv6_addr_find() argument
1938 struct net_if_ipv6 *ipv6 = iface->config.ip.ipv6; in ipv6_addr_find()
1940 ARRAY_FOR_EACH(ipv6->unicast, i) { in ipv6_addr_find()
1941 if (!ipv6->unicast[i].is_used) { in ipv6_addr_find()
1946 addr, &ipv6->unicast[i].address.in6_addr)) { in ipv6_addr_find()
1948 return &ipv6->unicast[i]; in ipv6_addr_find()
1956 struct in6_addr *addr, in net_if_addr_init() argument
1960 ifaddr->is_used = true; in net_if_addr_init()
1961 ifaddr->is_added = true; in net_if_addr_init()
1962 ifaddr->is_temporary = false; in net_if_addr_init()
1963 ifaddr->address.family = AF_INET6; in net_if_addr_init()
1964 ifaddr->addr_type = addr_type; in net_if_addr_init()
1965 ifaddr->atomic_ref = ATOMIC_INIT(1); in net_if_addr_init()
1967 net_ipaddr_copy(&ifaddr->address.in6_addr, addr); in net_if_addr_init()
1969 /* FIXME - set the mcast addr for this node */ in net_if_addr_init()
1972 ifaddr->is_infinite = false; in net_if_addr_init()
1975 net_sprint_ipv6_addr(addr), in net_if_addr_init()
1980 ifaddr->is_infinite = true; in net_if_addr_init()
1985 struct in6_addr *addr, in net_if_ipv6_addr_add() argument
1999 ifaddr = ipv6_addr_find(iface, addr); in net_if_ipv6_addr_add()
2007 if (!ifaddr->is_added) { in net_if_ipv6_addr_add()
2008 atomic_inc(&ifaddr->atomic_ref); in net_if_ipv6_addr_add()
2009 ifaddr->is_added = true; in net_if_ipv6_addr_add()
2015 ARRAY_FOR_EACH(ipv6->unicast, i) { in net_if_ipv6_addr_add()
2016 if (ipv6->unicast[i].is_used) { in net_if_ipv6_addr_add()
2020 net_if_addr_init(&ipv6->unicast[i], addr, addr_type, in net_if_ipv6_addr_add()
2025 net_sprint_ipv6_addr(addr), in net_if_ipv6_addr_add()
2030 !net_ipv6_is_addr_loopback(addr) && in net_if_ipv6_addr_add()
2035 /* If DAD is not done for point-to-point links, then in net_if_ipv6_addr_add()
2038 ipv6->unicast[i].addr_state = NET_ADDR_PREFERRED; in net_if_ipv6_addr_add()
2043 &ipv6->unicast[i].address.in6_addr, in net_if_ipv6_addr_add()
2046 ifaddr = &ipv6->unicast[i]; in net_if_ipv6_addr_add()
2055 * MUST join the all-nodes multicast address and the in net_if_ipv6_addr_add()
2056 * solicited-node multicast address of the tentative in net_if_ipv6_addr_add()
2063 join_mcast_nodes(iface, &ifaddr->address.in6_addr); in net_if_ipv6_addr_add()
2076 bool net_if_ipv6_addr_rm(struct net_if *iface, const struct in6_addr *addr) in net_if_ipv6_addr_rm() argument
2083 if (iface == NULL || addr == NULL) { in net_if_ipv6_addr_rm()
2089 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_addr_rm()
2095 ret = net_if_addr_unref(iface, AF_INET6, addr, &ifaddr); in net_if_ipv6_addr_rm()
2098 net_sprint_ipv6_addr(addr), ret); in net_if_ipv6_addr_rm()
2100 ifaddr->is_added = false; in net_if_ipv6_addr_rm()
2104 net_sprint_ipv6_addr(addr), ret); in net_if_ipv6_addr_rm()
2114 struct in6_addr *addr, in z_impl_net_if_ipv6_addr_add_by_index() argument
2125 return net_if_ipv6_addr_add(iface, addr, addr_type, vlifetime) ? in z_impl_net_if_ipv6_addr_add_by_index()
2131 struct in6_addr *addr, in z_vrfy_net_if_ipv6_addr_add_by_index() argument
2143 K_OOPS(k_usermode_from_copy(&addr_v6, (void *)addr, sizeof(addr_v6))); in z_vrfy_net_if_ipv6_addr_add_by_index()
2155 const struct in6_addr *addr) in z_impl_net_if_ipv6_addr_rm_by_index() argument
2164 return net_if_ipv6_addr_rm(iface, addr); in z_impl_net_if_ipv6_addr_rm_by_index()
2169 const struct in6_addr *addr) in z_vrfy_net_if_ipv6_addr_rm_by_index() argument
2179 K_OOPS(k_usermode_from_copy(&addr_v6, (void *)addr, sizeof(addr_v6))); in z_vrfy_net_if_ipv6_addr_rm_by_index()
2198 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_addr_foreach()
2203 ARRAY_FOR_EACH(ipv6->unicast, i) { in net_if_ipv6_addr_foreach()
2204 struct net_if_addr *if_addr = &ipv6->unicast[i]; in net_if_ipv6_addr_foreach()
2206 if (!if_addr->is_used) { in net_if_ipv6_addr_foreach()
2218 const struct in6_addr *addr) in net_if_ipv6_maddr_add() argument
2229 if (!net_ipv6_is_addr_mcast(addr)) { in net_if_ipv6_maddr_add()
2231 net_sprint_ipv6_addr(addr)); in net_if_ipv6_maddr_add()
2235 if (net_if_ipv6_maddr_lookup(addr, &iface)) { in net_if_ipv6_maddr_add()
2237 net_sprint_ipv6_addr(addr)); in net_if_ipv6_maddr_add()
2241 ARRAY_FOR_EACH(ipv6->mcast, i) { in net_if_ipv6_maddr_add()
2242 if (ipv6->mcast[i].is_used) { in net_if_ipv6_maddr_add()
2246 ipv6->mcast[i].is_used = true; in net_if_ipv6_maddr_add()
2247 ipv6->mcast[i].address.family = AF_INET6; in net_if_ipv6_maddr_add()
2248 memcpy(&ipv6->mcast[i].address.in6_addr, addr, 16); in net_if_ipv6_maddr_add()
2252 net_sprint_ipv6_addr(addr)); in net_if_ipv6_maddr_add()
2256 &ipv6->mcast[i].address.in6_addr, in net_if_ipv6_maddr_add()
2259 ifmaddr = &ipv6->mcast[i]; in net_if_ipv6_maddr_add()
2269 bool net_if_ipv6_maddr_rm(struct net_if *iface, const struct in6_addr *addr) in net_if_ipv6_maddr_rm() argument
2276 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_maddr_rm()
2281 ARRAY_FOR_EACH(ipv6->mcast, i) { in net_if_ipv6_maddr_rm()
2282 if (!ipv6->mcast[i].is_used) { in net_if_ipv6_maddr_rm()
2286 if (!net_ipv6_addr_cmp(&ipv6->mcast[i].address.in6_addr, in net_if_ipv6_maddr_rm()
2287 addr)) { in net_if_ipv6_maddr_rm()
2291 ipv6->mcast[i].is_used = false; in net_if_ipv6_maddr_rm()
2295 net_sprint_ipv6_addr(addr)); in net_if_ipv6_maddr_rm()
2299 &ipv6->mcast[i].address.in6_addr, in net_if_ipv6_maddr_rm()
2323 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_maddr_foreach()
2329 if (!ipv6->mcast[i].is_used) { in net_if_ipv6_maddr_foreach()
2333 cb(iface, &ipv6->mcast[i], user_data); in net_if_ipv6_maddr_foreach()
2354 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_maddr_lookup()
2360 ARRAY_FOR_EACH(ipv6->mcast, i) { in net_if_ipv6_maddr_lookup()
2361 if (!ipv6->mcast[i].is_used || in net_if_ipv6_maddr_lookup()
2362 ipv6->mcast[i].address.family != AF_INET6) { in net_if_ipv6_maddr_lookup()
2367 maddr->s6_addr, in net_if_ipv6_maddr_lookup()
2368 ipv6->mcast[i].address.in6_addr.s6_addr, in net_if_ipv6_maddr_lookup()
2374 ifmaddr = &ipv6->mcast[i]; in net_if_ipv6_maddr_lookup()
2387 void net_if_ipv6_maddr_leave(struct net_if *iface, struct net_if_mcast_addr *addr) in net_if_ipv6_maddr_leave() argument
2389 if (iface == NULL || addr == NULL) { in net_if_ipv6_maddr_leave()
2394 addr->is_joined = false; in net_if_ipv6_maddr_leave()
2398 void net_if_ipv6_maddr_join(struct net_if *iface, struct net_if_mcast_addr *addr) in net_if_ipv6_maddr_join() argument
2400 if (iface == NULL || addr == NULL) { in net_if_ipv6_maddr_join()
2405 addr->is_joined = true; in net_if_ipv6_maddr_join()
2412 struct in6_addr *addr = NULL; in net_if_ipv6_get_ll() local
2417 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_get_ll()
2422 ARRAY_FOR_EACH(ipv6->unicast, i) { in net_if_ipv6_get_ll()
2423 if (!ipv6->unicast[i].is_used || in net_if_ipv6_get_ll()
2425 ipv6->unicast[i].addr_state != addr_state) || in net_if_ipv6_get_ll()
2426 ipv6->unicast[i].address.family != AF_INET6) { in net_if_ipv6_get_ll()
2430 if (net_ipv6_is_ll_addr(&ipv6->unicast[i].address.in6_addr)) { in net_if_ipv6_get_ll()
2431 addr = &ipv6->unicast[i].address.in6_addr; in net_if_ipv6_get_ll()
2439 return addr; in net_if_ipv6_get_ll()
2445 struct in6_addr *addr = NULL; in net_if_ipv6_get_ll_addr() local
2450 addr = net_if_ipv6_get_ll(tmp, state); in net_if_ipv6_get_ll_addr()
2451 if (addr) { in net_if_ipv6_get_ll_addr()
2464 return addr; in net_if_ipv6_get_ll_addr()
2470 struct net_if_ipv6 *ipv6 = iface->config.ip.ipv6; in check_global_addr()
2476 ARRAY_FOR_EACH(ipv6->unicast, i) { in check_global_addr()
2477 if (!ipv6->unicast[i].is_used || in check_global_addr()
2478 (ipv6->unicast[i].addr_state != state) || in check_global_addr()
2479 ipv6->unicast[i].address.family != AF_INET6) { in check_global_addr()
2483 if (!net_ipv6_is_ll_addr(&ipv6->unicast[i].address.in6_addr)) { in check_global_addr()
2484 return &ipv6->unicast[i].address.in6_addr; in check_global_addr()
2494 struct in6_addr *addr = NULL; in net_if_ipv6_get_global_addr() local
2502 addr = check_global_addr(tmp, state); in net_if_ipv6_get_global_addr()
2503 if (addr) { in net_if_ipv6_get_global_addr()
2517 return addr; in net_if_ipv6_get_global_addr()
2523 struct in6_addr *addr, in remove_prefix_addresses() argument
2526 ARRAY_FOR_EACH(ipv6->unicast, i) { in remove_prefix_addresses()
2527 if (!ipv6->unicast[i].is_used || in remove_prefix_addresses()
2528 ipv6->unicast[i].address.family != AF_INET6 || in remove_prefix_addresses()
2529 ipv6->unicast[i].addr_type != NET_ADDR_AUTOCONF) { in remove_prefix_addresses()
2534 addr->s6_addr, in remove_prefix_addresses()
2535 ipv6->unicast[i].address.in6_addr.s6_addr, in remove_prefix_addresses()
2538 &ipv6->unicast[i].address.in6_addr); in remove_prefix_addresses()
2547 net_if_lock(ifprefix->iface); in prefix_lifetime_expired()
2550 net_sprint_ipv6_addr(&ifprefix->prefix), in prefix_lifetime_expired()
2551 ifprefix->len); in prefix_lifetime_expired()
2553 ifprefix->is_used = false; in prefix_lifetime_expired()
2555 if (net_if_config_ipv6_get(ifprefix->iface, &ipv6) < 0) { in prefix_lifetime_expired()
2561 remove_prefix_addresses(ifprefix->iface, ipv6, &ifprefix->prefix, in prefix_lifetime_expired()
2562 ifprefix->len); in prefix_lifetime_expired()
2567 net_ipaddr_copy(&info.addr, &ifprefix->prefix); in prefix_lifetime_expired()
2568 info.len = ifprefix->len; in prefix_lifetime_expired()
2572 ifprefix->iface, in prefix_lifetime_expired()
2576 net_mgmt_event_notify(NET_EVENT_IPV6_PREFIX_DEL, ifprefix->iface); in prefix_lifetime_expired()
2579 net_if_unlock(ifprefix->iface); in prefix_lifetime_expired()
2587 net_sprint_ipv6_addr(&ifprefix->prefix), in prefix_timer_remove()
2588 ifprefix->len); in prefix_timer_remove()
2591 &ifprefix->lifetime.node); in prefix_timer_remove()
2593 net_timeout_set(&ifprefix->lifetime, 0, 0); in prefix_timer_remove()
2613 struct net_timeout *timeout = &current->lifetime; in prefix_lifetime_timeout()
2620 &current->lifetime.node); in prefix_lifetime_timeout()
2622 &current->lifetime.node); in prefix_lifetime_timeout()
2652 &ifprefix->lifetime.node); in prefix_start_timer()
2654 &ifprefix->lifetime.node); in prefix_start_timer()
2656 net_timeout_set(&ifprefix->lifetime, lifetime, k_uptime_get_32()); in prefix_start_timer()
2666 struct net_if_ipv6 *ipv6 = iface->config.ip.ipv6; in ipv6_prefix_find()
2672 ARRAY_FOR_EACH(ipv6->prefix, i) { in ipv6_prefix_find()
2673 if (!ipv6->prefix[i].is_used) { in ipv6_prefix_find()
2677 if (net_ipv6_addr_cmp(prefix, &ipv6->prefix[i].prefix) && in ipv6_prefix_find()
2678 prefix_len == ipv6->prefix[i].len) { in ipv6_prefix_find()
2679 return &ipv6->prefix[i]; in ipv6_prefix_find()
2688 struct in6_addr *addr, uint8_t len, in net_if_ipv6_prefix_init() argument
2691 ifprefix->is_used = true; in net_if_ipv6_prefix_init()
2692 ifprefix->len = len; in net_if_ipv6_prefix_init()
2693 ifprefix->iface = iface; in net_if_ipv6_prefix_init()
2694 net_ipaddr_copy(&ifprefix->prefix, addr); in net_if_ipv6_prefix_init()
2697 ifprefix->is_infinite = true; in net_if_ipv6_prefix_init()
2699 ifprefix->is_infinite = false; in net_if_ipv6_prefix_init()
2726 ARRAY_FOR_EACH(ipv6->prefix, i) { in net_if_ipv6_prefix_add()
2727 if (ipv6->prefix[i].is_used) { in net_if_ipv6_prefix_add()
2731 net_if_ipv6_prefix_init(iface, &ipv6->prefix[i], prefix, in net_if_ipv6_prefix_add()
2740 net_ipaddr_copy(&info.addr, prefix); in net_if_ipv6_prefix_add()
2751 ifprefix = &ipv6->prefix[i]; in net_if_ipv6_prefix_add()
2761 bool net_if_ipv6_prefix_rm(struct net_if *iface, struct in6_addr *addr, in net_if_ipv6_prefix_rm() argument
2769 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_prefix_rm()
2774 ARRAY_FOR_EACH(ipv6->prefix, i) { in net_if_ipv6_prefix_rm()
2775 if (!ipv6->prefix[i].is_used) { in net_if_ipv6_prefix_rm()
2779 if (!net_ipv6_addr_cmp(&ipv6->prefix[i].prefix, addr) || in net_if_ipv6_prefix_rm()
2780 ipv6->prefix[i].len != len) { in net_if_ipv6_prefix_rm()
2784 net_if_ipv6_prefix_unset_timer(&ipv6->prefix[i]); in net_if_ipv6_prefix_rm()
2786 ipv6->prefix[i].is_used = false; in net_if_ipv6_prefix_rm()
2791 remove_prefix_addresses(iface, ipv6, addr, len); in net_if_ipv6_prefix_rm()
2796 net_ipaddr_copy(&info.addr, addr); in net_if_ipv6_prefix_rm()
2818 const struct in6_addr *addr) in net_if_ipv6_prefix_get() argument
2833 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_prefix_get()
2838 ARRAY_FOR_EACH(ipv6->prefix, i) { in net_if_ipv6_prefix_get()
2839 if (!ipv6->prefix[i].is_used) { in net_if_ipv6_prefix_get()
2843 if (net_ipv6_is_prefix(ipv6->prefix[i].prefix.s6_addr, in net_if_ipv6_prefix_get()
2844 addr->s6_addr, in net_if_ipv6_prefix_get()
2845 ipv6->prefix[i].len)) { in net_if_ipv6_prefix_get()
2846 if (!prefix || prefix->len > ipv6->prefix[i].len) { in net_if_ipv6_prefix_get()
2847 prefix = &ipv6->prefix[i]; in net_if_ipv6_prefix_get()
2859 struct in6_addr *addr, in net_if_ipv6_prefix_lookup() argument
2867 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_prefix_lookup()
2872 ARRAY_FOR_EACH(ipv6->prefix, i) { in net_if_ipv6_prefix_lookup()
2873 if (!ipv6->prefix[i].is_used) { in net_if_ipv6_prefix_lookup()
2877 if (net_ipv6_is_prefix(ipv6->prefix[i].prefix.s6_addr, in net_if_ipv6_prefix_lookup()
2878 addr->s6_addr, len)) { in net_if_ipv6_prefix_lookup()
2879 prefix = &ipv6->prefix[i]; in net_if_ipv6_prefix_lookup()
2890 bool net_if_ipv6_addr_onlink(struct net_if **iface, struct in6_addr *addr) in net_if_ipv6_addr_onlink() argument
2903 ipv6 = tmp->config.ip.ipv6; in net_if_ipv6_addr_onlink()
2909 ARRAY_FOR_EACH(ipv6->prefix, i) { in net_if_ipv6_addr_onlink()
2910 if (ipv6->prefix[i].is_used && in net_if_ipv6_addr_onlink()
2911 net_ipv6_is_prefix(ipv6->prefix[i].prefix.s6_addr, in net_if_ipv6_addr_onlink()
2912 addr->s6_addr, in net_if_ipv6_addr_onlink()
2913 ipv6->prefix[i].len)) { in net_if_ipv6_addr_onlink()
2946 if (!prefix->is_used) { in net_if_ipv6_prefix_unset_timer()
2954 struct in6_addr *addr) in net_if_ipv6_router_lookup() argument
2956 return iface_router_lookup(iface, AF_INET6, addr); in net_if_ipv6_router_lookup()
2960 struct in6_addr *addr) in net_if_ipv6_router_find_default() argument
2962 return iface_router_find_default(iface, AF_INET6, addr); in net_if_ipv6_router_find_default()
2969 net_sprint_ipv6_addr(&router->address.in6_addr), in net_if_ipv6_router_update_lifetime()
2972 router->life_start = k_uptime_get_32(); in net_if_ipv6_router_update_lifetime()
2973 router->lifetime = lifetime; in net_if_ipv6_router_update_lifetime()
2975 iface_router_update_timer(router->life_start); in net_if_ipv6_router_update_lifetime()
2979 struct in6_addr *addr, in net_if_ipv6_router_add() argument
2982 return iface_router_add(iface, AF_INET6, addr, false, lifetime); in net_if_ipv6_router_add()
3000 if (!iface->config.ip.ipv6) { in net_if_ipv6_get_mcast_hop_limit()
3004 ret = iface->config.ip.ipv6->mcast_hop_limit; in net_if_ipv6_get_mcast_hop_limit()
3019 if (!iface->config.ip.ipv6) { in net_if_ipv6_set_mcast_hop_limit()
3023 iface->config.ip.ipv6->mcast_hop_limit = hop_limit; in net_if_ipv6_set_mcast_hop_limit()
3038 if (!iface->config.ip.ipv6) { in net_if_ipv6_get_hop_limit()
3042 ret = iface->config.ip.ipv6->hop_limit; in net_if_ipv6_get_hop_limit()
3057 if (!iface->config.ip.ipv6) { in net_if_ipv6_set_hop_limit()
3061 iface->config.ip.ipv6->hop_limit = hop_limit; in net_if_ipv6_set_hop_limit()
3074 static inline bool is_proper_ipv6_address(struct net_if_addr *addr) in is_proper_ipv6_address() argument
3076 if (addr->is_used && addr->addr_state == NET_ADDR_PREFERRED && in is_proper_ipv6_address()
3077 addr->address.family == AF_INET6 && in is_proper_ipv6_address()
3078 !net_ipv6_is_ll_addr(&addr->address.in6_addr)) { in is_proper_ipv6_address()
3113 struct net_if_ipv6 *ipv6 = iface->config.ip.ipv6; in net_if_ipv6_get_best_match()
3123 ipv6 = iface->config.ip.ipv6; in net_if_ipv6_get_best_match()
3128 ARRAY_FOR_EACH(ipv6->unicast, i) { in net_if_ipv6_get_best_match()
3129 if (!is_proper_ipv6_address(&ipv6->unicast[i])) { in net_if_ipv6_get_best_match()
3133 len = get_diff_ipv6(dst, &ipv6->unicast[i].address.in6_addr); in net_if_ipv6_get_best_match()
3142 if (ipv6->unicast[i].is_mesh_local && len < 64 && in net_if_ipv6_get_best_match()
3147 ret = use_public_address(iface->pe_prefer_public, in net_if_ipv6_get_best_match()
3148 ipv6->unicast[i].is_temporary, in net_if_ipv6_get_best_match()
3151 temp_addr = &ipv6->unicast[i].address.in6_addr; in net_if_ipv6_get_best_match()
3155 src = &ipv6->unicast[i].address.in6_addr; in net_if_ipv6_get_best_match()
3159 if (!ipv6->unicast[i].is_temporary) { in net_if_ipv6_get_best_match()
3160 public_addr = &ipv6->unicast[i]; in net_if_ipv6_get_best_match()
3165 src = &ipv6->unicast[i].address.in6_addr; in net_if_ipv6_get_best_match()
3169 if (IS_ENABLED(CONFIG_NET_IPV6_PE) && !iface->pe_prefer_public && temp_addr) { in net_if_ipv6_get_best_match()
3179 !net_ipv6_addr_cmp(&public_addr->address.in6_addr, src)) { in net_if_ipv6_get_best_match()
3180 src = &public_addr->address.in6_addr; in net_if_ipv6_get_best_match()
3216 prefix_len = prefix->len; in net_if_ipv6_select_src_addr_hint()
3227 struct in6_addr *addr; in net_if_ipv6_select_src_addr_hint() local
3229 addr = net_if_ipv6_get_best_match(iface, dst, in net_if_ipv6_select_src_addr_hint()
3233 if (addr) { in net_if_ipv6_select_src_addr_hint()
3234 src = addr; in net_if_ipv6_select_src_addr_hint()
3243 struct in6_addr *addr; in net_if_ipv6_select_src_addr_hint() local
3245 addr = net_if_ipv6_get_ll(net_if_get_default(), NET_ADDR_PREFERRED); in net_if_ipv6_select_src_addr_hint()
3246 if (addr) { in net_if_ipv6_select_src_addr_hint()
3247 src = addr; in net_if_ipv6_select_src_addr_hint()
3252 addr = net_if_ipv6_get_ll(iface, in net_if_ipv6_select_src_addr_hint()
3254 if (addr) { in net_if_ipv6_select_src_addr_hint()
3255 src = addr; in net_if_ipv6_select_src_addr_hint()
3301 min_reachable = (MIN_RANDOM_NUMER * ipv6->base_reachable_time) in net_if_ipv6_calc_reachable_time()
3303 max_reachable = (MAX_RANDOM_NUMER * ipv6->base_reachable_time) in net_if_ipv6_calc_reachable_time()
3310 sys_rand32_get() % (max_reachable - min_reachable); in net_if_ipv6_calc_reachable_time()
3323 struct net_if_ipv6 *ipv6 = iface->config.ip.ipv6; in iface_ipv6_start()
3327 &ipv6->mcast[0].address.in6_addr); in iface_ipv6_start()
3336 struct net_if_ipv6 *ipv6 = iface->config.ip.ipv6; in iface_ipv6_stop()
3347 IF_ENABLED(CONFIG_NET_IPV6_IID_STABLE, (ipv6->network_counter++)); in iface_ipv6_stop()
3348 IF_ENABLED(CONFIG_NET_IPV6_IID_STABLE, (ipv6->iid = NULL)); in iface_ipv6_stop()
3351 ARRAY_FOR_EACH(ipv6->unicast, i) { in iface_ipv6_stop()
3352 if (ipv6->unicast[i].is_used && in iface_ipv6_stop()
3353 ipv6->unicast[i].address.family == AF_INET6 && in iface_ipv6_stop()
3354 ipv6->unicast[i].addr_type == NET_ADDR_AUTOCONF) { in iface_ipv6_stop()
3356 &ipv6->unicast[i].address.in6_addr); in iface_ipv6_stop()
3388 struct net_if_mcast_addr *net_if_ipv6_maddr_lookup(const struct in6_addr *addr, in net_if_ipv6_maddr_lookup() argument
3391 ARG_UNUSED(addr); in net_if_ipv6_maddr_lookup()
3397 struct net_if_addr *net_if_ipv6_addr_lookup(const struct in6_addr *addr, in net_if_ipv6_addr_lookup() argument
3400 ARG_UNUSED(addr); in net_if_ipv6_addr_lookup()
3433 ret = -ENOTSUP; in net_if_config_ipv4_get()
3437 if (iface->config.ip.ipv4) { in net_if_config_ipv4_get()
3439 *ipv4 = iface->config.ip.ipv4; in net_if_config_ipv4_get()
3452 iface->config.ip.ipv4 = &ipv4_addresses[i].ipv4; in net_if_config_ipv4_get()
3465 ret = -ESRCH; in net_if_config_ipv4_get()
3479 ret = -ENOTSUP; in net_if_config_ipv4_put()
3483 if (!iface->config.ip.ipv4) { in net_if_config_ipv4_put()
3484 ret = -EALREADY; in net_if_config_ipv4_put()
3495 iface->config.ip.ipv4 = NULL; in net_if_config_ipv4_put()
3504 ret = -ESRCH; in net_if_config_ipv4_put()
3512 const struct in_addr *addr) in net_if_ipv4_addr_mask_cmp() argument
3520 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_addr_mask_cmp()
3525 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_addr_mask_cmp()
3526 if (!ipv4->unicast[i].ipv4.is_used || in net_if_ipv4_addr_mask_cmp()
3527 ipv4->unicast[i].ipv4.address.family != AF_INET) { in net_if_ipv4_addr_mask_cmp()
3531 subnet = UNALIGNED_GET(&addr->s_addr) & in net_if_ipv4_addr_mask_cmp()
3532 ipv4->unicast[i].netmask.s_addr; in net_if_ipv4_addr_mask_cmp()
3534 if ((ipv4->unicast[i].ipv4.address.in_addr.s_addr & in net_if_ipv4_addr_mask_cmp()
3535 ipv4->unicast[i].netmask.s_addr) == subnet) { in net_if_ipv4_addr_mask_cmp()
3548 const struct in_addr *addr) in ipv4_is_broadcast_address() argument
3556 ipv4 = iface->config.ip.ipv4; in ipv4_is_broadcast_address()
3562 ARRAY_FOR_EACH(ipv4->unicast, i) { in ipv4_is_broadcast_address()
3563 if (!ipv4->unicast[i].ipv4.is_used || in ipv4_is_broadcast_address()
3564 ipv4->unicast[i].ipv4.address.family != AF_INET) { in ipv4_is_broadcast_address()
3568 bcast.s_addr = ipv4->unicast[i].ipv4.address.in_addr.s_addr | in ipv4_is_broadcast_address()
3569 ~ipv4->unicast[i].netmask.s_addr; in ipv4_is_broadcast_address()
3571 if (bcast.s_addr == UNALIGNED_GET(&addr->s_addr)) { in ipv4_is_broadcast_address()
3583 const struct in_addr *addr) in net_if_ipv4_is_addr_bcast() argument
3588 ret = ipv4_is_broadcast_address(iface, addr); in net_if_ipv4_is_addr_bcast()
3593 ret = ipv4_is_broadcast_address(one_iface, addr); in net_if_ipv4_is_addr_bcast()
3626 static inline bool is_proper_ipv4_address(struct net_if_addr *addr) in is_proper_ipv4_address() argument
3628 if (addr->is_used && addr->addr_state == NET_ADDR_PREFERRED && in is_proper_ipv4_address()
3629 addr->address.family == AF_INET) { in is_proper_ipv4_address()
3646 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_get_best_match()
3651 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_get_best_match()
3654 if (!is_proper_ipv4_address(&ipv4->unicast[i].ipv4)) { in net_if_ipv4_get_best_match()
3658 if (net_ipv4_is_ll_addr(&ipv4->unicast[i].ipv4.address.in_addr) != ll) { in net_if_ipv4_get_best_match()
3662 subnet.s_addr = ipv4->unicast[i].ipv4.address.in_addr.s_addr & in net_if_ipv4_get_best_match()
3663 ipv4->unicast[i].netmask.s_addr; in net_if_ipv4_get_best_match()
3667 src = &ipv4->unicast[i].ipv4.address.in_addr; in net_if_ipv4_get_best_match()
3680 struct in_addr *addr = NULL; in if_ipv4_get_addr() local
3689 ipv4 = iface->config.ip.ipv4; in if_ipv4_get_addr()
3694 ARRAY_FOR_EACH(ipv4->unicast, i) { in if_ipv4_get_addr()
3695 if (!ipv4->unicast[i].ipv4.is_used || in if_ipv4_get_addr()
3697 ipv4->unicast[i].ipv4.addr_state != addr_state) || in if_ipv4_get_addr()
3698 ipv4->unicast[i].ipv4.address.family != AF_INET) { in if_ipv4_get_addr()
3702 if (net_ipv4_is_ll_addr(&ipv4->unicast[i].ipv4.address.in_addr)) { in if_ipv4_get_addr()
3712 addr = &ipv4->unicast[i].ipv4.address.in_addr; in if_ipv4_get_addr()
3719 return addr; in if_ipv4_get_addr()
3752 struct in_addr *addr; in net_if_ipv4_select_src_addr() local
3754 addr = net_if_ipv4_get_best_match(iface, dst, in net_if_ipv4_select_src_addr()
3757 if (addr) { in net_if_ipv4_select_src_addr()
3758 src = addr; in net_if_ipv4_select_src_addr()
3767 struct in_addr *addr; in net_if_ipv4_select_src_addr() local
3770 addr = net_if_ipv4_get_best_match(iface, dst, in net_if_ipv4_select_src_addr()
3773 if (addr) { in net_if_ipv4_select_src_addr()
3774 src = addr; in net_if_ipv4_select_src_addr()
3782 addr = net_if_ipv4_get_best_match(net_if_get_default(), in net_if_ipv4_select_src_addr()
3785 if (addr) { in net_if_ipv4_select_src_addr()
3786 src = addr; in net_if_ipv4_select_src_addr()
3823 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_addr_get_first_by_index()
3828 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_addr_get_first_by_index()
3829 if (!ipv4->unicast[i].ipv4.is_used || in net_if_ipv4_addr_get_first_by_index()
3830 ipv4->unicast[i].ipv4.address.family != AF_INET) { in net_if_ipv4_addr_get_first_by_index()
3834 ifaddr = &ipv4->unicast[i].ipv4; in net_if_ipv4_addr_get_first_by_index()
3844 struct net_if_addr *net_if_ipv4_addr_lookup(const struct in_addr *addr, in net_if_ipv4_addr_lookup() argument
3854 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_addr_lookup()
3860 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_addr_lookup()
3861 if (!ipv4->unicast[i].ipv4.is_used || in net_if_ipv4_addr_lookup()
3862 ipv4->unicast[i].ipv4.address.family != AF_INET) { in net_if_ipv4_addr_lookup()
3866 if (UNALIGNED_GET(&addr->s4_addr32[0]) == in net_if_ipv4_addr_lookup()
3867 ipv4->unicast[i].ipv4.address.in_addr.s_addr) { in net_if_ipv4_addr_lookup()
3873 ifaddr = &ipv4->unicast[i].ipv4; in net_if_ipv4_addr_lookup()
3886 int z_impl_net_if_ipv4_addr_lookup_by_index(const struct in_addr *addr) in z_impl_net_if_ipv4_addr_lookup_by_index() argument
3891 if_addr = net_if_ipv4_addr_lookup(addr, &iface); in z_impl_net_if_ipv4_addr_lookup_by_index()
3901 const struct in_addr *addr) in z_vrfy_net_if_ipv4_addr_lookup_by_index() argument
3905 K_OOPS(k_usermode_from_copy(&addr_v4, (void *)addr, sizeof(addr_v4))); in z_vrfy_net_if_ipv4_addr_lookup_by_index()
3913 const struct in_addr *addr) in net_if_ipv4_get_netmask_by_addr() argument
3925 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_get_netmask_by_addr()
3930 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_get_netmask_by_addr()
3931 if (!ipv4->unicast[i].ipv4.is_used || in net_if_ipv4_get_netmask_by_addr()
3932 ipv4->unicast[i].ipv4.address.family != AF_INET) { in net_if_ipv4_get_netmask_by_addr()
3936 subnet = UNALIGNED_GET(&addr->s_addr) & in net_if_ipv4_get_netmask_by_addr()
3937 ipv4->unicast[i].netmask.s_addr; in net_if_ipv4_get_netmask_by_addr()
3939 if ((ipv4->unicast[i].ipv4.address.in_addr.s_addr & in net_if_ipv4_get_netmask_by_addr()
3940 ipv4->unicast[i].netmask.s_addr) == subnet) { in net_if_ipv4_get_netmask_by_addr()
3941 netmask = ipv4->unicast[i].netmask; in net_if_ipv4_get_netmask_by_addr()
3953 const struct in_addr *addr, in net_if_ipv4_set_netmask_by_addr() argument
3966 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_set_netmask_by_addr()
3971 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_set_netmask_by_addr()
3972 if (!ipv4->unicast[i].ipv4.is_used || in net_if_ipv4_set_netmask_by_addr()
3973 ipv4->unicast[i].ipv4.address.family != AF_INET) { in net_if_ipv4_set_netmask_by_addr()
3977 subnet = UNALIGNED_GET(&addr->s_addr) & in net_if_ipv4_set_netmask_by_addr()
3978 ipv4->unicast[i].netmask.s_addr; in net_if_ipv4_set_netmask_by_addr()
3980 if ((ipv4->unicast[i].ipv4.address.in_addr.s_addr & in net_if_ipv4_set_netmask_by_addr()
3981 ipv4->unicast[i].netmask.s_addr) == subnet) { in net_if_ipv4_set_netmask_by_addr()
3982 ipv4->unicast[i].netmask = *netmask; in net_if_ipv4_set_netmask_by_addr()
4010 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_get_netmask()
4015 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_get_netmask()
4016 if (!ipv4->unicast[i].ipv4.is_used || in net_if_ipv4_get_netmask()
4017 ipv4->unicast[i].ipv4.address.family != AF_INET) { in net_if_ipv4_get_netmask()
4021 netmask = iface->config.ip.ipv4->unicast[i].netmask; in net_if_ipv4_get_netmask()
4047 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_set_netmask_deprecated()
4052 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_set_netmask_deprecated()
4053 if (!ipv4->unicast[i].ipv4.is_used || in net_if_ipv4_set_netmask_deprecated()
4054 ipv4->unicast[i].ipv4.address.family != AF_INET) { in net_if_ipv4_set_netmask_deprecated()
4058 net_ipaddr_copy(&ipv4->unicast[i].netmask, netmask); in net_if_ipv4_set_netmask_deprecated()
4088 const struct in_addr *addr, in z_impl_net_if_ipv4_set_netmask_by_addr_by_index() argument
4098 net_if_ipv4_set_netmask_by_addr(iface, addr, netmask); in z_impl_net_if_ipv4_set_netmask_by_addr_by_index()
4124 const struct in_addr *addr, in z_vrfy_net_if_ipv4_set_netmask_by_addr_by_index() argument
4135 K_OOPS(k_usermode_from_copy(&ipv4_addr, (void *)addr, in z_vrfy_net_if_ipv4_set_netmask_by_addr_by_index()
4158 if (!iface->config.ip.ipv4) { in net_if_ipv4_get_gw()
4162 gw = iface->config.ip.ipv4->gw; in net_if_ipv4_get_gw()
4177 if (!iface->config.ip.ipv4) { in net_if_ipv4_set_gw()
4181 net_ipaddr_copy(&iface->config.ip.ipv4->gw, gw); in net_if_ipv4_set_gw()
4222 struct in_addr *addr) in ipv4_addr_find() argument
4224 struct net_if_ipv4 *ipv4 = iface->config.ip.ipv4; in ipv4_addr_find()
4226 ARRAY_FOR_EACH(ipv4->unicast, i) { in ipv4_addr_find()
4227 if (!ipv4->unicast[i].ipv4.is_used) { in ipv4_addr_find()
4231 if (net_ipv4_addr_cmp(addr, in ipv4_addr_find()
4232 &ipv4->unicast[i].ipv4.address.in_addr)) { in ipv4_addr_find()
4233 return &ipv4->unicast[i].ipv4; in ipv4_addr_find()
4246 net_sprint_ipv4_addr(&ifaddr->address.in_addr), in net_if_ipv4_acd_succeeded()
4247 ifaddr->ifindex); in net_if_ipv4_acd_succeeded()
4249 ifaddr->addr_state = NET_ADDR_PREFERRED; in net_if_ipv4_acd_succeeded()
4252 &ifaddr->address.in_addr, in net_if_ipv4_acd_succeeded()
4263 net_sprint_ipv4_addr(&ifaddr->address.in_addr), in net_if_ipv4_acd_failed()
4264 ifaddr->ifindex); in net_if_ipv4_acd_failed()
4267 &ifaddr->address.in_addr, in net_if_ipv4_acd_failed()
4270 net_if_ipv4_addr_rm(iface, &ifaddr->address.in_addr); in net_if_ipv4_acd_failed()
4277 ifaddr->addr_state = NET_ADDR_TENTATIVE; in net_if_ipv4_start_acd()
4280 NET_DBG("Interface %p ll addr %s tentative IPv4 addr %s", in net_if_ipv4_start_acd()
4282 net_sprint_ll_addr(net_if_get_link_addr(iface)->addr, in net_if_ipv4_start_acd()
4283 net_if_get_link_addr(iface)->len), in net_if_ipv4_start_acd()
4284 net_sprint_ipv4_addr(&ifaddr->address.in_addr)); in net_if_ipv4_start_acd()
4288 net_sprint_ipv4_addr(&ifaddr->address.in_addr), in net_if_ipv4_start_acd()
4296 iface, net_sprint_ipv4_addr(&ifaddr->address.in_addr)); in net_if_ipv4_start_acd()
4313 if (ret != -ENOTSUP) { in net_if_start_acd()
4324 ipv4->conflict_cnt = 0; in net_if_start_acd()
4334 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_start_acd()
4335 if (!ipv4->unicast[i].ipv4.is_used || in net_if_start_acd()
4336 ipv4->unicast[i].ipv4.address.family != AF_INET || in net_if_start_acd()
4338 &ipv4->unicast[i].ipv4.address.in_addr)) { in net_if_start_acd()
4342 sys_slist_prepend(&acd_needed, &ipv4->unicast[i].ipv4.acd_need_node); in net_if_start_acd()
4366 struct in_addr *addr, in net_if_ipv4_addr_add() argument
4370 uint32_t default_netmask = UINT32_MAX << (32 - CONFIG_NET_IPV4_DEFAULT_NETMASK); in net_if_ipv4_addr_add()
4382 ifaddr = ipv4_addr_find(iface, addr); in net_if_ipv4_addr_add()
4391 if (!ifaddr->is_added) { in net_if_ipv4_addr_add()
4392 atomic_inc(&ifaddr->atomic_ref); in net_if_ipv4_addr_add()
4393 ifaddr->is_added = true; in net_if_ipv4_addr_add()
4399 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_addr_add()
4400 cur = &ipv4->unicast[i]; in net_if_ipv4_addr_add()
4403 && cur->ipv4.addr_type == NET_ADDR_OVERRIDABLE) { in net_if_ipv4_addr_add()
4404 ifaddr = &cur->ipv4; in net_if_ipv4_addr_add()
4409 if (!ipv4->unicast[i].ipv4.is_used) { in net_if_ipv4_addr_add()
4410 ifaddr = &cur->ipv4; in net_if_ipv4_addr_add()
4417 ifaddr->is_used = true; in net_if_ipv4_addr_add()
4418 ifaddr->is_added = true; in net_if_ipv4_addr_add()
4419 ifaddr->address.family = AF_INET; in net_if_ipv4_addr_add()
4420 ifaddr->address.in_addr.s4_addr32[0] = in net_if_ipv4_addr_add()
4421 addr->s4_addr32[0]; in net_if_ipv4_addr_add()
4422 ifaddr->addr_type = addr_type; in net_if_ipv4_addr_add()
4423 ifaddr->atomic_ref = ATOMIC_INIT(1); in net_if_ipv4_addr_add()
4427 ifaddr->is_infinite = false; in net_if_ipv4_addr_add()
4429 ifaddr->is_infinite = true; in net_if_ipv4_addr_add()
4439 net_sprint_ipv4_addr(addr), in net_if_ipv4_addr_add()
4444 !net_ipv4_is_addr_loopback(addr)) { in net_if_ipv4_addr_add()
4448 ifaddr->addr_state = NET_ADDR_PREFERRED; in net_if_ipv4_addr_add()
4451 cur->netmask.s_addr = htonl(default_netmask); in net_if_ipv4_addr_add()
4454 &ifaddr->address.in_addr, in net_if_ipv4_addr_add()
4470 bool net_if_ipv4_addr_rm(struct net_if *iface, const struct in_addr *addr) in net_if_ipv4_addr_rm() argument
4477 if (iface == NULL || addr == NULL) { in net_if_ipv4_addr_rm()
4483 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_addr_rm()
4489 ret = net_if_addr_unref(iface, AF_INET, addr, &ifaddr); in net_if_ipv4_addr_rm()
4492 net_sprint_ipv4_addr(addr), ret); in net_if_ipv4_addr_rm()
4494 ifaddr->is_added = false; in net_if_ipv4_addr_rm()
4498 net_sprint_ipv4_addr(addr), ret); in net_if_ipv4_addr_rm()
4508 struct in_addr *addr, in z_impl_net_if_ipv4_addr_add_by_index() argument
4520 if_addr = net_if_ipv4_addr_add(iface, addr, addr_type, vlifetime); in z_impl_net_if_ipv4_addr_add_by_index()
4526 struct in_addr *addr, in z_vrfy_net_if_ipv4_addr_add_by_index() argument
4538 K_OOPS(k_usermode_from_copy(&addr_v4, (void *)addr, sizeof(addr_v4))); in z_vrfy_net_if_ipv4_addr_add_by_index()
4550 const struct in_addr *addr) in z_impl_net_if_ipv4_addr_rm_by_index() argument
4559 return net_if_ipv4_addr_rm(iface, addr); in z_impl_net_if_ipv4_addr_rm_by_index()
4564 const struct in_addr *addr) in z_vrfy_net_if_ipv4_addr_rm_by_index() argument
4574 K_OOPS(k_usermode_from_copy(&addr_v4, (void *)addr, sizeof(addr_v4))); in z_vrfy_net_if_ipv4_addr_rm_by_index()
4593 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_addr_foreach()
4598 ARRAY_FOR_EACH(ipv4->unicast, i) { in net_if_ipv4_addr_foreach()
4599 struct net_if_addr *if_addr = &ipv4->unicast[i].ipv4; in net_if_ipv4_addr_foreach()
4601 if (!if_addr->is_used) { in net_if_ipv4_addr_foreach()
4614 const struct in_addr *addr) in ipv4_maddr_find() argument
4616 struct net_if_ipv4 *ipv4 = iface->config.ip.ipv4; in ipv4_maddr_find()
4622 ARRAY_FOR_EACH(ipv4->mcast, i) { in ipv4_maddr_find()
4623 if ((is_used && !ipv4->mcast[i].is_used) || in ipv4_maddr_find()
4624 (!is_used && ipv4->mcast[i].is_used)) { in ipv4_maddr_find()
4628 if (addr) { in ipv4_maddr_find()
4629 if (!net_ipv4_addr_cmp(&ipv4->mcast[i].address.in_addr, in ipv4_maddr_find()
4630 addr)) { in ipv4_maddr_find()
4635 return &ipv4->mcast[i]; in ipv4_maddr_find()
4641 const struct in_addr *addr) in net_if_ipv4_maddr_add() argument
4651 if (!net_ipv4_is_addr_mcast(addr)) { in net_if_ipv4_maddr_add()
4653 net_sprint_ipv4_addr(addr)); in net_if_ipv4_maddr_add()
4659 maddr->is_used = true; in net_if_ipv4_maddr_add()
4660 maddr->address.family = AF_INET; in net_if_ipv4_maddr_add()
4661 maddr->address.in_addr.s4_addr32[0] = addr->s4_addr32[0]; in net_if_ipv4_maddr_add()
4665 net_sprint_ipv4_addr(addr)); in net_if_ipv4_maddr_add()
4669 &maddr->address.in_addr, in net_if_ipv4_maddr_add()
4679 bool net_if_ipv4_maddr_rm(struct net_if *iface, const struct in_addr *addr) in net_if_ipv4_maddr_rm() argument
4686 maddr = ipv4_maddr_find(iface, true, addr); in net_if_ipv4_maddr_rm()
4688 maddr->is_used = false; in net_if_ipv4_maddr_rm()
4692 net_sprint_ipv4_addr(addr)); in net_if_ipv4_maddr_rm()
4696 &maddr->address.in_addr, in net_if_ipv4_maddr_rm()
4718 ipv4 = iface->config.ip.ipv4; in net_if_ipv4_maddr_foreach()
4724 if (!ipv4->mcast[i].is_used) { in net_if_ipv4_maddr_foreach()
4728 cb(iface, &ipv4->mcast[i], user_data); in net_if_ipv4_maddr_foreach()
4738 struct net_if_mcast_addr *addr = NULL; in net_if_ipv4_maddr_lookup() local
4747 addr = ipv4_maddr_find(iface, true, maddr); in net_if_ipv4_maddr_lookup()
4748 if (addr) { in net_if_ipv4_maddr_lookup()
4761 return addr; in net_if_ipv4_maddr_lookup()
4764 void net_if_ipv4_maddr_leave(struct net_if *iface, struct net_if_mcast_addr *addr) in net_if_ipv4_maddr_leave() argument
4766 if (iface == NULL || addr == NULL) { in net_if_ipv4_maddr_leave()
4771 addr->is_joined = false; in net_if_ipv4_maddr_leave()
4775 void net_if_ipv4_maddr_join(struct net_if *iface, struct net_if_mcast_addr *addr) in net_if_ipv4_maddr_join() argument
4777 if (iface == NULL || addr == NULL) { in net_if_ipv4_maddr_join()
4782 addr->is_joined = true; in net_if_ipv4_maddr_join()
4797 if (!iface->config.ip.ipv4) { in net_if_ipv4_get_ttl()
4801 ret = iface->config.ip.ipv4->ttl; in net_if_ipv4_get_ttl()
4816 if (!iface->config.ip.ipv4) { in net_if_ipv4_set_ttl()
4820 iface->config.ip.ipv4->ttl = ttl; in net_if_ipv4_set_ttl()
4835 if (!iface->config.ip.ipv4) { in net_if_ipv4_get_mcast_ttl()
4839 ret = iface->config.ip.ipv4->mcast_ttl; in net_if_ipv4_get_mcast_ttl()
4854 if (!iface->config.ip.ipv4) { in net_if_ipv4_set_mcast_ttl()
4858 iface->config.ip.ipv4->mcast_ttl = ttl; in net_if_ipv4_set_mcast_ttl()
4864 struct in_addr *addr) in net_if_ipv4_router_lookup() argument
4866 return iface_router_lookup(iface, AF_INET, addr); in net_if_ipv4_router_lookup()
4870 struct in_addr *addr) in net_if_ipv4_router_find_default() argument
4872 return iface_router_find_default(iface, AF_INET, addr); in net_if_ipv4_router_find_default()
4876 struct in_addr *addr, in net_if_ipv4_router_add() argument
4880 return iface_router_add(iface, AF_INET, addr, is_default, lifetime); in net_if_ipv4_router_add()
4909 struct net_if_ipv4 *ipv4 = iface->config.ip.ipv4; in leave_ipv4_mcast_all()
4915 ARRAY_FOR_EACH(ipv4->mcast, i) { in leave_ipv4_mcast_all()
4916 if (!ipv4->mcast[i].is_used || in leave_ipv4_mcast_all()
4917 !ipv4->mcast[i].is_joined) { in leave_ipv4_mcast_all()
4921 net_ipv4_igmp_leave(iface, &ipv4->mcast[i].address.in_addr); in leave_ipv4_mcast_all()
4936 /* To be called when interface comes up so that all the non-joined multicast
4958 ARRAY_FOR_EACH(ipv4->mcast, i) { in rejoin_ipv4_mcast_groups()
4959 if (!ipv4->mcast[i].is_used || in rejoin_ipv4_mcast_groups()
4960 net_if_ipv4_maddr_is_joined(&ipv4->mcast[i])) { in rejoin_ipv4_mcast_groups()
4964 sys_slist_prepend(&rejoin_needed, &ipv4->mcast[i].rejoin_node); in rejoin_ipv4_mcast_groups()
4972 ret = net_ipv4_igmp_join(iface, &ifaddr->address.in_addr, NULL); in rejoin_ipv4_mcast_groups()
4975 net_sprint_ipv4_addr(&ifaddr->address.in_addr), in rejoin_ipv4_mcast_groups()
4979 net_sprint_ipv4_addr(&ifaddr->address.in_addr), in rejoin_ipv4_mcast_groups()
5007 ARRAY_FOR_EACH(ipv4->mcast, i) { in clear_joined_ipv4_mcast_groups()
5008 if (!ipv4->mcast[i].is_used) { in clear_joined_ipv4_mcast_groups()
5012 net_if_ipv4_maddr_leave(iface, &ipv4->mcast[i]); in clear_joined_ipv4_mcast_groups()
5021 struct net_if_mcast_addr *net_if_ipv4_maddr_lookup(const struct in_addr *addr, in net_if_ipv4_maddr_lookup() argument
5024 ARG_UNUSED(addr); in net_if_ipv4_maddr_lookup()
5030 struct net_if_addr *net_if_ipv4_addr_lookup(const struct in_addr *addr, in net_if_ipv4_addr_lookup() argument
5033 ARG_UNUSED(addr); in net_if_ipv4_addr_lookup()
5064 if (IS_ENABLED(CONFIG_NET_IPV6) && dst->sa_family == AF_INET6) { in net_if_select_src_iface()
5065 iface = net_if_ipv6_select_src_iface(&net_sin6(dst)->sin6_addr); in net_if_select_src_iface()
5069 if (IS_ENABLED(CONFIG_NET_IPV4) && dst->sa_family == AF_INET) { in net_if_select_src_iface()
5070 iface = net_if_ipv4_select_src_iface(&net_sin(dst)->sin_addr); in net_if_select_src_iface()
5084 const void *addr, in get_ifaddr() argument
5093 COND_CODE_1(CONFIG_NET_IPV6, (iface->config.ip.ipv6), (NULL)); in get_ifaddr()
5096 int found = -1; in get_ifaddr()
5102 net_ipv6_addr_create_solicited_node((struct in6_addr *)addr, in get_ifaddr()
5105 ARRAY_FOR_EACH(ipv6->unicast, i) { in get_ifaddr()
5108 if (!ipv6->unicast[i].is_used) { in get_ifaddr()
5112 /* Count how many times this solicited-node multicast address is identical in get_ifaddr()
5116 &ipv6->unicast[i].address.in6_addr, in get_ifaddr()
5123 if (!net_ipv6_addr_cmp(&ipv6->unicast[i].address.in6_addr, addr)) { in get_ifaddr()
5131 ifaddr = &ipv6->unicast[found]; in get_ifaddr()
5143 COND_CODE_1(CONFIG_NET_IPV4, (iface->config.ip.ipv4), (NULL)); in get_ifaddr()
5149 ARRAY_FOR_EACH(ipv4->unicast, i) { in get_ifaddr()
5150 if (!ipv4->unicast[i].ipv4.is_used) { in get_ifaddr()
5154 if (!net_ipv4_addr_cmp(&ipv4->unicast[i].ipv4.address.in_addr, in get_ifaddr()
5155 addr)) { in get_ifaddr()
5159 ifaddr = &ipv4->unicast[i].ipv4; in get_ifaddr()
5179 ipv6 = COND_CODE_1(CONFIG_NET_IPV6, (iface->config.ip.ipv6), (NULL)); in remove_ipv6_ifaddr()
5184 if (!ifaddr->is_infinite) { in remove_ipv6_ifaddr()
5189 &ifaddr->lifetime.node); in remove_ipv6_ifaddr()
5202 &ifaddr->dad_node)) { in remove_ipv6_ifaddr()
5206 net_ipv6_nbr_rm(iface, &ifaddr->address.in6_addr); in remove_ipv6_ifaddr()
5213 /* Remove the solicited-node multicast address only if no other in remove_ipv6_ifaddr()
5218 net_ipv6_addr_create_solicited_node(&ifaddr->address.in6_addr, in remove_ipv6_ifaddr()
5224 * info if someone adds a new IP address into this position in remove_ipv6_ifaddr()
5229 &ifaddr->address.in6_addr, in remove_ipv6_ifaddr()
5242 ipv4 = COND_CODE_1(CONFIG_NET_IPV4, (iface->config.ip.ipv4), (NULL)); in remove_ipv4_ifaddr()
5253 &ifaddr->address.in_addr, in remove_ipv4_ifaddr()
5268 const void *addr, in net_if_addr_ref_debug() argument
5274 const void *addr) in net_if_addr_ref_debug()
5287 ifaddr = get_ifaddr(iface, family, addr, NULL); in net_if_addr_ref_debug()
5290 ref = ifaddr ? atomic_get(&ifaddr->atomic_ref) : 0; in net_if_addr_ref_debug()
5293 NET_ERR("iface %d addr %s (%s():%d)", in net_if_addr_ref_debug()
5296 addr, in net_if_addr_ref_debug()
5302 } while (!atomic_cas(&ifaddr->atomic_ref, ref, ref + 1)); in net_if_addr_ref_debug()
5307 net_addr_ntop(ifaddr->address.family, in net_if_addr_ref_debug()
5308 (void *)&ifaddr->address.in_addr, in net_if_addr_ref_debug()
5310 ifaddr->addr_state, in net_if_addr_ref_debug()
5321 const void *addr, in net_if_addr_unref_debug() argument
5327 const void *addr, in net_if_addr_unref_debug()
5342 ifaddr = get_ifaddr(iface, family, addr, &maddr_count); in net_if_addr_unref_debug()
5346 NET_ERR("iface %d addr %s (%s():%d)", in net_if_addr_unref_debug()
5349 addr, in net_if_addr_unref_debug()
5353 return -EINVAL; in net_if_addr_unref_debug()
5357 ref = atomic_get(&ifaddr->atomic_ref); in net_if_addr_unref_debug()
5366 return -EINVAL; in net_if_addr_unref_debug()
5369 } while (!atomic_cas(&ifaddr->atomic_ref, ref, ref - 1)); in net_if_addr_unref_debug()
5374 net_addr_ntop(ifaddr->address.family, in net_if_addr_unref_debug()
5375 (void *)&ifaddr->address.in_addr, in net_if_addr_unref_debug()
5377 ifaddr->addr_state, in net_if_addr_unref_debug()
5378 ref - 1, caller, line); in net_if_addr_unref_debug()
5386 return ref - 1; in net_if_addr_unref_debug()
5389 ifaddr->is_used = false; in net_if_addr_unref_debug()
5391 if (IS_ENABLED(CONFIG_NET_IPV6) && family == AF_INET6 && addr != NULL) { in net_if_addr_unref_debug()
5395 if (IS_ENABLED(CONFIG_NET_IPV4) && family == AF_INET && addr != NULL) { in net_if_addr_unref_debug()
5415 return net_if_l2(iface)->recv(iface, pkt); in net_if_recv_data()
5423 sys_slist_find_and_remove(&link_callbacks, &link->node); in net_if_register_link_cb()
5424 sys_slist_prepend(&link_callbacks, &link->node); in net_if_register_link_cb()
5426 link->cb = cb; in net_if_register_link_cb()
5435 sys_slist_find_and_remove(&link_callbacks, &link->node); in net_if_unregister_link_cb()
5448 link->cb(iface, lladdr, status); in net_if_call_link_cb()
5514 return -1; in net_if_get_by_iface()
5517 return (iface - _net_if_list_start) + 1; in net_if_get_by_iface()
5562 NET_ASSERT(net_if_get_link_addr(iface)->addr != NULL); in notify_iface_up()
5570 /* If the interface is only having point-to-point traffic then we do in notify_iface_up()
5626 enum net_if_oper_state prev_state = iface->if_dev->oper_state; in update_operational_state()
5707 status = -EALREADY; in net_if_up()
5712 if (!net_if_l2(iface) || !net_if_l2(iface)->enable) { in net_if_up()
5731 NET_DBG("Device %s (%p) is not ready", dev->name, dev); in net_if_up()
5732 status = -ENXIO; in net_if_up()
5741 status = net_if_l2(iface)->enable(iface, true); in net_if_up()
5770 status = -EALREADY; in net_if_down()
5778 if (!net_if_l2(iface) || !net_if_l2(iface)->enable) { in net_if_down()
5783 status = net_if_l2(iface)->enable(iface, false); in net_if_down()
5865 return -EINVAL; in promisc_mode_set()
5870 return -ENOTSUP; in promisc_mode_set()
5884 return -ENOTSUP; in promisc_mode_set()
5897 if (ret < 0 && ret != -EALREADY) { in net_if_set_promisc()
5903 ret = -EALREADY; in net_if_set_promisc()
5949 ret = -EBUSY; in net_if_suspend()
5954 ret = -EALREADY; in net_if_suspend()
5973 ret = -EALREADY; in net_if_resume()
6021 sys_slist_find_and_remove(&timestamp_callbacks, &handle->node); in net_if_register_timestamp_cb()
6022 sys_slist_prepend(&timestamp_callbacks, &handle->node); in net_if_register_timestamp_cb()
6024 handle->iface = iface; in net_if_register_timestamp_cb()
6025 handle->cb = cb; in net_if_register_timestamp_cb()
6026 handle->pkt = pkt; in net_if_register_timestamp_cb()
6035 sys_slist_find_and_remove(&timestamp_callbacks, &handle->node); in net_if_unregister_timestamp_cb()
6050 if (((handle->iface == NULL) || in net_if_call_timestamp_cb()
6051 (handle->iface == net_pkt_iface(pkt))) && in net_if_call_timestamp_cb()
6052 (handle->pkt == NULL || handle->pkt == pkt)) { in net_if_call_timestamp_cb()
6053 handle->cb(pkt); in net_if_call_timestamp_cb()
6129 return -EINVAL; in net_if_get_name()
6132 name_len = strlen(net_if_get_config(iface)->name); in net_if_get_name()
6134 return -ERANGE; in net_if_get_name()
6138 memcpy(buf, net_if_get_config(iface)->name, name_len + 1); in net_if_get_name()
6142 return -ENOTSUP; in net_if_get_name()
6152 return -EINVAL; in net_if_set_name()
6156 if (name_len >= sizeof(iface->config.name)) { in net_if_set_name()
6157 return -ENAMETOOLONG; in net_if_set_name()
6165 if (memcmp(net_if_get_config(iface_check)->name, in net_if_set_name()
6168 return -EALREADY; in net_if_set_name()
6173 memcpy(net_if_get_config(iface)->name, buf, name_len + 1); in net_if_set_name()
6177 return -ENOTSUP; in net_if_set_name()
6185 return -EINVAL; in net_if_get_by_name()
6189 if (strncmp(net_if_get_config(iface)->name, name, strlen(name)) == 0) { in net_if_get_by_name()
6194 return -ENOENT; in net_if_get_by_name()
6196 return -ENOTSUP; in net_if_get_by_name()
6235 snprintk(name, sizeof(name) - 1, "ppp%d", count++); in set_default_name()
6267 memset(net_if_get_config(iface)->name, 0, in net_if_init()
6268 sizeof(iface->config.name)); in net_if_init()
6277 if (net_if_get_config(iface)->name[0] == '\0') { in net_if_init()