1 /*
2 * Copyright (c) 2018 Linaro Limited.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <zephyr/logging/log.h>
8 LOG_MODULE_REGISTER(net_socket_offload, CONFIG_NET_SOCKETS_LOG_LEVEL);
9
10 #include <zephyr/net/socket_offload.h>
11 #include <zephyr/net/socket.h>
12
13 #include "sockets_internal.h"
14
15 static const struct socket_dns_offload *dns_offload;
16 static bool dns_offload_enabled;
17
socket_offload_dns_register(const struct socket_dns_offload * ops)18 void socket_offload_dns_register(const struct socket_dns_offload *ops)
19 {
20 __ASSERT_NO_MSG(ops);
21 __ASSERT_NO_MSG(dns_offload == NULL);
22
23 dns_offload = ops;
24
25 socket_offload_dns_enable(true);
26 }
27
socket_offload_dns_deregister(const struct socket_dns_offload * ops)28 int socket_offload_dns_deregister(const struct socket_dns_offload *ops)
29 {
30 __ASSERT_NO_MSG(ops != NULL);
31
32 if (dns_offload != ops) {
33 return -EINVAL;
34 }
35
36 dns_offload = NULL;
37
38 socket_offload_dns_enable(false);
39
40 return 0;
41 }
42
socket_offload_dns_enable(bool enable)43 void socket_offload_dns_enable(bool enable)
44 {
45 dns_offload_enabled = enable;
46 }
47
socket_offload_dns_is_enabled(void)48 bool socket_offload_dns_is_enabled(void)
49 {
50 return (dns_offload != NULL) && dns_offload_enabled;
51 }
52
socket_offload_getaddrinfo(const char * node,const char * service,const struct zsock_addrinfo * hints,struct zsock_addrinfo ** res)53 int socket_offload_getaddrinfo(const char *node, const char *service,
54 const struct zsock_addrinfo *hints,
55 struct zsock_addrinfo **res)
56 {
57 __ASSERT_NO_MSG(dns_offload);
58 __ASSERT_NO_MSG(dns_offload->getaddrinfo);
59
60 return dns_offload->getaddrinfo(node, service, hints, res);
61 }
62
socket_offload_freeaddrinfo(struct zsock_addrinfo * res)63 void socket_offload_freeaddrinfo(struct zsock_addrinfo *res)
64 {
65 __ASSERT_NO_MSG(dns_offload);
66 __ASSERT_NO_MSG(dns_offload->freeaddrinfo);
67
68 dns_offload->freeaddrinfo(res);
69 }
70