net: l2: openthread: openthread_border_router: Update address events
This commit refactored IPV6 and IPV4 address events. Events have been
defined independently for each installed callback.
Previously, IPV6 address event was not triggered due to a mix of IPV4
and IPV6 flags.
Signed-off-by: Cristian Bulacu <cristian.bulacu@nxp.com>
diff --git a/subsys/net/l2/openthread/openthread_border_router.c b/subsys/net/l2/openthread/openthread_border_router.c
index dde3837..8a21f0d 100644
--- a/subsys/net/l2/openthread/openthread_border_router.c
+++ b/subsys/net/l2/openthread/openthread_border_router.c
@@ -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;
@@ -234,15 +234,14 @@
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;
}
@@ -257,13 +256,15 @@
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);
}
@@ -318,15 +319,14 @@
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();