Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions modules/openthread/platform/mdns_socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ static int mdns_sock_v4 = -1;
#endif /* CONFIG_NET_IPV4 */
static struct otInstance *ot_instance_ptr;
static uint32_t ail_iface_index;
static bool mdns_socket_is_enabled;

static otError mdns_socket_init_v6(uint32_t ail_iface_idx);
#if defined(CONFIG_NET_IPV4)
Expand Down Expand Up @@ -87,10 +88,13 @@ static otError set_listening_enable(otInstance *instance, bool enable, uint32_t
#if defined(CONFIG_NET_IPV4)
SuccessOrExit(error = mdns_socket_init_v4(ail_iface_idx));
#endif /* CONFIG_NET_IPV4 */
mdns_socket_is_enabled = true;
mdns_plat_monitor_interface(net_if_get_by_index(ail_iface_idx));
ExitNow();
}

SuccessOrExit(error = mdns_socket_deinit());
mdns_socket_is_enabled = false;
exit:
return error;

Expand Down Expand Up @@ -389,6 +393,10 @@ void mdns_plat_monitor_interface(struct net_if *ail_iface)
otIp6Address ip6_addr = {0};
struct net_if_addr *unicast = NULL;

VerifyOrExit(mdns_socket_is_enabled);

net_if_lock(ail_iface);

otPlatMdnsHandleHostAddressRemoveAll(ot_instance_ptr, ail_iface_index);

ipv6 = ail_iface->config.ip.ipv6;
Expand Down Expand Up @@ -422,4 +430,8 @@ void mdns_plat_monitor_interface(struct net_if *ail_iface)
ail_iface_index);
}
#endif /* CONFIG_NET_IPV4 && CONFIG_NET_IPV4_MAPPING_TO_IPV6 */

net_if_unlock(ail_iface);
exit:
return;
}
28 changes: 14 additions & 14 deletions subsys/net/l2/openthread/openthread_border_router.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@
#include <string.h>

static struct net_mgmt_event_callback ail_net_event_connection_cb;
static struct net_mgmt_event_callback ail_net_event_address_cb;
static struct net_mgmt_event_callback ail_net_event_ipv6_addr_cb;
#if defined(CONFIG_NET_IPV4)
static struct net_mgmt_event_callback ail_net_event_ipv4_addr_add_cb;
static struct net_mgmt_event_callback ail_net_event_ipv4_addr_cb;
#endif /* CONFIG_NET_IPV4 */
static uint32_t ail_iface_index;
static struct net_if *ail_iface_ptr;
Expand Down Expand Up @@ -234,15 +234,14 @@ static void ail_connection_handler(struct net_mgmt_event_callback *cb, uint64_t
mdns_plat_monitor_interface(iface);
}

static void ail_address_event_handler(struct net_mgmt_event_callback *cb, uint64_t mgmt_event,
static void ail_ipv6_address_event_handler(struct net_mgmt_event_callback *cb, uint64_t mgmt_event,
struct net_if *iface)
{
if (net_if_l2(iface) != &NET_L2_GET_NAME(ETHERNET)) {
return;
}

if ((mgmt_event & (NET_EVENT_IPV6_ADDR_ADD | NET_EVENT_IPV6_ADDR_DEL |
NET_EVENT_IPV4_ADDR_ADD | NET_EVENT_IPV4_ADDR_DEL)) != mgmt_event) {
if ((mgmt_event & (NET_EVENT_IPV6_ADDR_ADD | NET_EVENT_IPV6_ADDR_DEL)) != mgmt_event) {
return;
}

Expand All @@ -257,13 +256,15 @@ static void ail_ipv4_address_event_handler(struct net_mgmt_event_callback *cb, u
return;
}

if (mgmt_event != NET_EVENT_IPV4_ADDR_ADD) {
if ((mgmt_event & (NET_EVENT_IPV4_ADDR_ADD | NET_EVENT_IPV4_ADDR_DEL)) != mgmt_event) {
return;
}

struct openthread_context *ot_context = openthread_get_default_context();
if (mgmt_event == NET_EVENT_IPV4_ADDR_ADD) {
struct openthread_context *ot_context = openthread_get_default_context();

openthread_start_border_router_services(ot_context->iface, iface);
openthread_start_border_router_services(ot_context->iface, iface);
}

mdns_plat_monitor_interface(iface);
}
Expand Down Expand Up @@ -318,15 +319,14 @@ void openthread_border_router_init(struct openthread_context *ot_ctx)
net_mgmt_init_event_callback(&ail_net_event_connection_cb, ail_connection_handler,
NET_EVENT_IF_UP | NET_EVENT_IF_DOWN);
net_mgmt_add_event_callback(&ail_net_event_connection_cb);
net_mgmt_init_event_callback(&ail_net_event_address_cb, ail_address_event_handler,
NET_EVENT_IPV6_ADDR_ADD | NET_EVENT_IPV6_ADDR_DEL |
NET_EVENT_IPV4_ADDR_ADD | NET_EVENT_IPV4_ADDR_DEL);
net_mgmt_add_event_callback(&ail_net_event_address_cb);
net_mgmt_init_event_callback(&ail_net_event_ipv6_addr_cb, ail_ipv6_address_event_handler,
NET_EVENT_IPV6_ADDR_ADD | NET_EVENT_IPV6_ADDR_DEL);
net_mgmt_add_event_callback(&ail_net_event_ipv6_addr_cb);
#if defined(CONFIG_NET_IPV4)
net_mgmt_init_event_callback(&ail_net_event_ipv4_addr_add_cb,
net_mgmt_init_event_callback(&ail_net_event_ipv4_addr_cb,
ail_ipv4_address_event_handler,
NET_EVENT_IPV4_ADDR_ADD);
net_mgmt_add_event_callback(&ail_net_event_ipv4_addr_add_cb);
net_mgmt_add_event_callback(&ail_net_event_ipv4_addr_cb);
#endif /* CONFIG_NET_IPV4 */
openthread_set_bbr_multicast_listener_cb(ot_bbr_multicast_listener_handler, (void *)ot_ctx);
(void)infra_if_start_icmp6_listener();
Expand Down