net: sockets_offload: Allow to enable/disable DNS offload at runtime
Add new socket offloading functions, allowing to enable/disable offloaded DNS implementation at runtime. This may be useful if there is a mix of offloaded/native network interfaces in the system, so the application can choose which DNS backend to use. Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
This commit is contained in:
parent
344357a5b4
commit
b18bc7cc3e
3 changed files with 64 additions and 3 deletions
|
@ -41,6 +41,39 @@ struct socket_dns_offload {
|
||||||
*/
|
*/
|
||||||
void socket_offload_dns_register(const struct socket_dns_offload *ops);
|
void socket_offload_dns_register(const struct socket_dns_offload *ops);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Deregister an offloaded socket DNS API interface.
|
||||||
|
*
|
||||||
|
* @param ops A pointer to the offloaded socket DNS API interface.
|
||||||
|
*
|
||||||
|
* @retval 0 On success
|
||||||
|
* @retval -EINVAL Offloaded DNS API was not regsitered.
|
||||||
|
*/
|
||||||
|
int socket_offload_dns_deregister(const struct socket_dns_offload *ops);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable/disable DNS offloading at runtime.
|
||||||
|
*
|
||||||
|
* @param enable Whether to enable or disable the DNS offloading.
|
||||||
|
*/
|
||||||
|
void socket_offload_dns_enable(bool enable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if DNS offloading is enabled.
|
||||||
|
*
|
||||||
|
* @retval true DNS offloaded API is registered and enabled.
|
||||||
|
* @retval false DNS offloading is disabled.
|
||||||
|
*/
|
||||||
|
#if defined(CONFIG_NET_SOCKETS_OFFLOAD)
|
||||||
|
bool socket_offload_dns_is_enabled(void);
|
||||||
|
#else
|
||||||
|
static inline bool socket_offload_dns_is_enabled(void)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif /* defined(CONFIG_NET_SOCKETS_OFFLOAD) */
|
||||||
|
|
||||||
|
|
||||||
/** @cond INTERNAL_HIDDEN */
|
/** @cond INTERNAL_HIDDEN */
|
||||||
|
|
||||||
int socket_offload_getaddrinfo(const char *node, const char *service,
|
int socket_offload_getaddrinfo(const char *node, const char *service,
|
||||||
|
|
|
@ -433,7 +433,7 @@ int zsock_getaddrinfo(const char *host, const char *service,
|
||||||
const struct zsock_addrinfo *hints,
|
const struct zsock_addrinfo *hints,
|
||||||
struct zsock_addrinfo **res)
|
struct zsock_addrinfo **res)
|
||||||
{
|
{
|
||||||
if (IS_ENABLED(CONFIG_NET_SOCKETS_OFFLOAD)) {
|
if (socket_offload_dns_is_enabled()) {
|
||||||
return socket_offload_getaddrinfo(host, service, hints, res);
|
return socket_offload_getaddrinfo(host, service, hints, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,7 +471,7 @@ int zsock_getaddrinfo(const char *host, const char *service,
|
||||||
|
|
||||||
void zsock_freeaddrinfo(struct zsock_addrinfo *ai)
|
void zsock_freeaddrinfo(struct zsock_addrinfo *ai)
|
||||||
{
|
{
|
||||||
if (IS_ENABLED(CONFIG_NET_SOCKETS_OFFLOAD)) {
|
if (socket_offload_dns_is_enabled()) {
|
||||||
socket_offload_freeaddrinfo(ai);
|
socket_offload_freeaddrinfo(ai);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,8 @@ LOG_MODULE_REGISTER(net_socket_offload, CONFIG_NET_SOCKETS_LOG_LEVEL);
|
||||||
|
|
||||||
#include "sockets_internal.h"
|
#include "sockets_internal.h"
|
||||||
|
|
||||||
const struct socket_dns_offload *dns_offload;
|
static const struct socket_dns_offload *dns_offload;
|
||||||
|
static bool dns_offload_enabled;
|
||||||
|
|
||||||
void socket_offload_dns_register(const struct socket_dns_offload *ops)
|
void socket_offload_dns_register(const struct socket_dns_offload *ops)
|
||||||
{
|
{
|
||||||
|
@ -20,6 +21,33 @@ void socket_offload_dns_register(const struct socket_dns_offload *ops)
|
||||||
__ASSERT_NO_MSG(dns_offload == NULL);
|
__ASSERT_NO_MSG(dns_offload == NULL);
|
||||||
|
|
||||||
dns_offload = ops;
|
dns_offload = ops;
|
||||||
|
|
||||||
|
socket_offload_dns_enable(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
int socket_offload_dns_deregister(const struct socket_dns_offload *ops)
|
||||||
|
{
|
||||||
|
__ASSERT_NO_MSG(ops != NULL);
|
||||||
|
|
||||||
|
if (dns_offload != ops) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
dns_offload = NULL;
|
||||||
|
|
||||||
|
socket_offload_dns_enable(false);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void socket_offload_dns_enable(bool enable)
|
||||||
|
{
|
||||||
|
dns_offload_enabled = enable;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool socket_offload_dns_is_enabled(void)
|
||||||
|
{
|
||||||
|
return (dns_offload != NULL) && dns_offload_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
int socket_offload_getaddrinfo(const char *node, const char *service,
|
int socket_offload_getaddrinfo(const char *node, const char *service,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue