dacb3dbfeb
Until now iterable sections APIs have been part of the toolchain (common) headers. They are not strictly related to a toolchain, they just rely on linker providing support for sections. Most files relied on indirect includes to access the API, now, it is included as needed. Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
76 lines
2 KiB
C
76 lines
2 KiB
C
/*
|
|
* Copyright (c) 2019 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef __CONN_MGR_PRV_H__
|
|
#define __CONN_MGR_PRV_H__
|
|
|
|
#include <zephyr/net/conn_mgr_connectivity.h>
|
|
#include <zephyr/sys/iterable_sections.h>
|
|
|
|
#if defined(CONFIG_NET_IPV6) && defined(CONFIG_NET_IPV4)
|
|
#define CONN_MGR_IFACE_MAX MAX(CONFIG_NET_IF_MAX_IPV6_COUNT, \
|
|
CONFIG_NET_IF_MAX_IPV4_COUNT)
|
|
#elif defined(CONFIG_NET_IPV6)
|
|
#define CONN_MGR_IFACE_MAX CONFIG_NET_IF_MAX_IPV6_COUNT
|
|
#else
|
|
#define CONN_MGR_IFACE_MAX CONFIG_NET_IF_MAX_IPV4_COUNT
|
|
#endif
|
|
|
|
/* External state flags */
|
|
#define CONN_MGR_IF_UP BIT(0)
|
|
#define CONN_MGR_IF_IPV6_SET BIT(1)
|
|
#define CONN_MGR_IF_IPV4_SET BIT(2)
|
|
|
|
/* Configuration flags */
|
|
#define CONN_MGR_IF_IGNORED BIT(7)
|
|
|
|
/* Internal state flags*/
|
|
#define CONN_MGR_IF_READY BIT(14)
|
|
|
|
/* Event flags */
|
|
#define CONN_MGR_IF_CHANGED BIT(15)
|
|
|
|
/* NET_MGMT event masks */
|
|
#define CONN_MGR_IFACE_EVENTS_MASK (NET_EVENT_IF_DOWN | \
|
|
NET_EVENT_IF_UP)
|
|
|
|
#define CONN_MGR_IPV6_EVENTS_MASK (NET_EVENT_IPV6_ADDR_ADD | \
|
|
NET_EVENT_IPV6_ADDR_DEL | \
|
|
NET_EVENT_IPV6_DAD_SUCCEED | \
|
|
NET_EVENT_IPV6_DAD_FAILED)
|
|
|
|
#define CONN_MGR_IPV4_EVENTS_MASK (NET_EVENT_IPV4_ADDR_ADD | \
|
|
NET_EVENT_IPV4_ADDR_DEL)
|
|
|
|
extern struct k_sem conn_mgr_event_signal;
|
|
extern struct k_mutex conn_mgr_lock;
|
|
|
|
void conn_mgr_init_events_handler(void);
|
|
|
|
/**
|
|
* @brief Retrieves the conn_mgr binding struct for a provided iface if it exists.
|
|
*
|
|
* Bindings for connectivity implementations with missing API structs are ignored.
|
|
*
|
|
* @param iface - bound network interface to obtain the binding struct for.
|
|
* @return struct conn_mgr_conn_binding* Pointer to the retrieved binding struct if it exists,
|
|
* NULL otherwise.
|
|
*/
|
|
static inline struct conn_mgr_conn_binding *conn_mgr_if_get_binding(struct net_if *iface)
|
|
{
|
|
STRUCT_SECTION_FOREACH(conn_mgr_conn_binding, binding) {
|
|
if (iface == binding->iface) {
|
|
if (binding->impl->api) {
|
|
return binding;
|
|
}
|
|
return NULL;
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
#endif /* __CONN_MGR_PRV_H__ */
|