drivers: wifi: simplelink: Rework offloading mechanism
Switch to `NET_SOCKET_REGISTER` mechanism over the offloaded API
registration.
Including the following fixes from the review:
* The fd returned by the socket accept call needs to be finalized,
similar to how it is done for socket creation.
* sl_RecvFrom() in TI SimpleLink Host driver does not support NULL
pointers for 'from' address and address length, and sl_SendTo() does
not ignore the destination address when in connection mode, so passing
NULL would cause a failure. These issues have been reported to TI
(CC3X20SDK-1970, CC3X20SDK-1971).
Let's use sl_Recv and sl_Send to implement recvfrom/sendto in the case
of NULL addresses.
* simplelink_poll() should not process negative file descriptors in the
fds array after sl_Selecti() returns. A negative fd value indicates
that the entry is invalid and should be ignored.
Signed-off-by: Vincent Wan <vincent.wan@linaro.org>
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
diff --git a/drivers/wifi/simplelink/simplelink.c b/drivers/wifi/simplelink/simplelink.c
index 72ab02e..2392245 100644
--- a/drivers/wifi/simplelink/simplelink.c
+++ b/drivers/wifi/simplelink/simplelink.c
@@ -235,7 +235,7 @@
#ifdef CONFIG_NET_SOCKETS_OFFLOAD
/* Direct socket offload: */
- socket_offload_register(&simplelink_ops);
+ socket_offload_dns_register(&simplelink_dns_ops);
simplelink_sockets_init();
#endif
diff --git a/drivers/wifi/simplelink/simplelink_sockets.c b/drivers/wifi/simplelink/simplelink_sockets.c
index e665655..48b6f9f 100644
--- a/drivers/wifi/simplelink/simplelink_sockets.c
+++ b/drivers/wifi/simplelink/simplelink_sockets.c
@@ -20,13 +20,23 @@
#include <ti/drivers/net/wifi/source/driver.h>
#include "simplelink_support.h"
+#include "sockets_internal.h"
#include "tls_internal.h"
#define FAILED (-1)
+/* Increment by 1 to make sure we do not store the value of 0, which has
+ * a special meaning in the fdtable subsys.
+ */
+#define SD_TO_OBJ(sd) ((void *)(sd + 1))
+#define OBJ_TO_SD(obj) (((int)obj) - 1)
+
/* Mutex for getaddrinfo() calls: */
K_MUTEX_DEFINE(ga_mutex);
+static int simplelink_socket_accept(void *obj, struct sockaddr *addr,
+ socklen_t *addrlen);
+
/*
* Convert SL error codes into BSD errno values
* note that we are handling the same set of values as in TI SlNetSock
@@ -373,8 +383,10 @@
}
}
-static int simplelink_accept(int sd, struct sockaddr *addr, socklen_t *addrlen)
+static int simplelink_accept(void *obj, struct sockaddr *addr,
+ socklen_t *addrlen)
{
+ int sd = OBJ_TO_SD(obj);
int retval;
SlSockAddr_t *sl_addr;
SlSockAddrIn_t sl_addr_in;
@@ -410,9 +422,10 @@
return retval;
}
-static int simplelink_bind(int sd, const struct sockaddr *addr,
+static int simplelink_bind(void *obj, const struct sockaddr *addr,
socklen_t addrlen)
{
+ int sd = OBJ_TO_SD(obj);
int retval;
SlSockAddr_t *sl_addr;
SlSockAddrIn_t sl_addr_in;
@@ -443,8 +456,9 @@
return retval;
}
-static int simplelink_listen(int sd, int backlog)
+static int simplelink_listen(void *obj, int backlog)
{
+ int sd = OBJ_TO_SD(obj);
int retval;
retval = (int)sl_Listen(sd, backlog);
@@ -456,9 +470,10 @@
return retval;
}
-static int simplelink_connect(int sd, const struct sockaddr *addr,
+static int simplelink_connect(void *obj, const struct sockaddr *addr,
socklen_t addrlen)
{
+ int sd = OBJ_TO_SD(obj);
int retval;
SlSockAddr_t *sl_addr;
SlSockAddrIn_t sl_addr_in;
@@ -509,13 +524,16 @@
#define ONE_THOUSAND 1000
+static const struct socket_op_vtable simplelink_socket_fd_op_vtable;
+
static int simplelink_poll(struct pollfd *fds, int nfds, int msecs)
{
- int max_fd = 0;
+ int max_sd = 0;
struct SlTimeval_t tv, *ptv;
SlFdSet_t rfds; /* Set of read file descriptors */
SlFdSet_t wfds; /* Set of write file descriptors */
- int i, retval, fd;
+ int i, retval, sd;
+ void *obj;
if (nfds > SL_FD_SETSIZE) {
retval = slcb_SetErrno(EINVAL);
@@ -537,30 +555,50 @@
for (i = 0; i < nfds; i++) {
fds[i].revents = 0;
- fd = fds[i].fd;
- if (fd < 0) {
+ if (fds[i].fd < 0) {
continue;
+ } else {
+ obj = z_get_fd_obj(fds[i].fd,
+ (const struct fd_op_vtable *)
+ &simplelink_socket_fd_op_vtable,
+ ENOTSUP);
+ if (obj != NULL) {
+ /* Offloaded socket found. */
+ sd = OBJ_TO_SD(obj);
+ } else {
+ /* Non-offloaded socket, return an error. */
+ retval = slcb_SetErrno(EINVAL);
+ goto exit;
+ }
}
if (fds[i].events & POLLIN) {
- SL_SOCKET_FD_SET(fd, &rfds);
+ SL_SOCKET_FD_SET(sd, &rfds);
}
if (fds[i].events & POLLOUT) {
- SL_SOCKET_FD_SET(fd, &wfds);
+ SL_SOCKET_FD_SET(sd, &wfds);
}
- if (fds[i].fd > max_fd) {
- max_fd = fds[i].fd;
+ if (sd > max_sd) {
+ max_sd = sd;
}
}
/* Wait for requested read and write fds to be ready: */
- retval = sl_Select(max_fd + 1, &rfds, &wfds, NULL, ptv);
+ retval = sl_Select(max_sd + 1, &rfds, &wfds, NULL, ptv);
if (retval > 0) {
- for (i = 0; i < (max_fd + 1); i++) {
- if (SL_SOCKET_FD_ISSET(fds[i].fd, &rfds)) {
- fds[i].revents |= POLLIN;
- }
- if (SL_SOCKET_FD_ISSET(fds[i].fd, &wfds)) {
- fds[i].revents |= POLLOUT;
+ for (i = 0; i < nfds; i++) {
+ if (fds[i].fd >= 0) {
+ obj = z_get_fd_obj(
+ fds[i].fd,
+ (const struct fd_op_vtable *)
+ &simplelink_socket_fd_op_vtable,
+ ENOTSUP);
+ sd = OBJ_TO_SD(obj);
+ if (SL_SOCKET_FD_ISSET(sd, &rfds)) {
+ fds[i].revents |= POLLIN;
+ }
+ if (SL_SOCKET_FD_ISSET(sd, &wfds)) {
+ fds[i].revents |= POLLOUT;
+ }
}
}
}
@@ -651,9 +689,10 @@
/* Needed to keep line lengths < 80: */
#define _SEC_DOMAIN_VERIF SL_SO_SECURE_DOMAIN_NAME_VERIFICATION
-static int simplelink_setsockopt(int sd, int level, int optname,
+static int simplelink_setsockopt(void *obj, int level, int optname,
const void *optval, socklen_t optlen)
{
+ int sd = OBJ_TO_SD(obj);
int retval;
if (IS_ENABLED(CONFIG_NET_SOCKETS_SOCKOPT_TLS) && level == SOL_TLS) {
@@ -744,9 +783,10 @@
return retval;
}
-static int simplelink_getsockopt(int sd, int level, int optname,
+static int simplelink_getsockopt(void *obj, int level, int optname,
void *optval, socklen_t *optlen)
{
+ int sd = OBJ_TO_SD(obj);
int retval;
if (IS_ENABLED(CONFIG_NET_SOCKETS_SOCKOPT_TLS) && level == SOL_TLS) {
@@ -839,29 +879,10 @@
return retval;
}
-static ssize_t simplelink_recv(int sd, void *buf, size_t max_len, int flags)
+static ssize_t simplelink_recvfrom(void *obj, void *buf, size_t len, int flags,
+ struct sockaddr *from, socklen_t *fromlen)
{
- ssize_t retval;
- int nb_enabled;
-
- retval = handle_recv_flags(sd, flags, TRUE, &nb_enabled);
- if (!retval) {
- retval = (ssize_t)sl_Recv(sd, buf, max_len, 0);
- handle_recv_flags(sd, flags, FALSE, &nb_enabled);
- if (retval < 0) {
- retval = slcb_SetErrno(getErrno(retval));
- }
- } else {
- retval = slcb_SetErrno(retval);
- }
-
- return (ssize_t)(retval);
-}
-
-static ssize_t simplelink_recvfrom(int sd, void *buf, short int len,
- short int flags, struct sockaddr *from,
- socklen_t *fromlen)
-{
+ int sd = OBJ_TO_SD(obj);
ssize_t retval;
SlSockAddr_t *sl_addr;
SlSockAddrIn_t sl_addr_in;
@@ -869,27 +890,31 @@
SlSocklen_t sl_addrlen;
int nb_enabled;
- __ASSERT_NO_MSG(fromlen);
-
retval = handle_recv_flags(sd, flags, TRUE, &nb_enabled);
if (!retval) {
/* Translate to sl_RecvFrom() parameters: */
- sl_addr = translate_z_to_sl_addrlen(*fromlen, &sl_addr_in,
- &sl_addr_in6,
- &sl_addrlen);
- if (sl_addr == NULL) {
- retval = SL_RET_CODE_INVALID_INPUT;
- } else {
+ if (fromlen != NULL) {
+ sl_addr = translate_z_to_sl_addrlen(*fromlen,
+ &sl_addr_in,
+ &sl_addr_in6,
+ &sl_addrlen);
retval = (ssize_t)sl_RecvFrom(sd, buf, len, 0, sl_addr,
&sl_addrlen);
- handle_recv_flags(sd, flags, FALSE, &nb_enabled);
+ } else {
+ retval = (ssize_t)sl_Recv(sd, buf, len, 0);
}
+ handle_recv_flags(sd, flags, FALSE, &nb_enabled);
if (retval >= 0) {
- /* Translate sl_addr into *addr and set *addrlen: */
- translate_sl_to_z_addr(sl_addr, sl_addrlen, from,
- fromlen);
+ if (fromlen != NULL) {
+ /*
+ * Translate sl_addr into *addr and set
+ * *addrlen
+ */
+ translate_sl_to_z_addr(sl_addr, sl_addrlen,
+ from, fromlen);
+ }
} else {
retval = slcb_SetErrno(getErrno(retval));
}
@@ -900,42 +925,33 @@
return retval;
}
-static ssize_t simplelink_send(int sd, const void *buf, size_t len,
- int flags)
+static ssize_t simplelink_sendto(void *obj, const void *buf, size_t len,
+ int flags, const struct sockaddr *to,
+ socklen_t tolen)
{
- ssize_t retval;
-
- retval = (ssize_t)sl_Send(sd, buf, len, flags);
-
- if (retval < 0) {
- retval = slcb_SetErrno(getErrno(retval));
- }
-
- return retval;
-}
-
-static ssize_t simplelink_sendto(int sd, const void *buf, size_t len,
- int flags, const struct sockaddr *to,
- socklen_t tolen)
-{
+ int sd = OBJ_TO_SD(obj);
ssize_t retval;
SlSockAddr_t *sl_addr;
SlSockAddrIn_t sl_addr_in;
SlSockAddrIn6_t sl_addr_in6;
SlSocklen_t sl_addrlen;
- /* Translate to sl_SendTo() parameters: */
- sl_addr = translate_z_to_sl_addrs(to, tolen, &sl_addr_in,
- &sl_addr_in6, &sl_addrlen);
+ if (to != NULL) {
+ /* Translate to sl_SendTo() parameters: */
+ sl_addr = translate_z_to_sl_addrs(to, tolen, &sl_addr_in,
+ &sl_addr_in6, &sl_addrlen);
- if (sl_addr == NULL) {
- retval = SL_RET_CODE_INVALID_INPUT;
- goto exit;
+ if (sl_addr == NULL) {
+ retval = SL_RET_CODE_INVALID_INPUT;
+ goto exit;
+ }
+
+ retval = sl_SendTo(sd, buf, (u16_t)len, flags,
+ sl_addr, sl_addrlen);
+ } else {
+ retval = (ssize_t)sl_Send(sd, buf, len, flags);
}
- retval = sl_SendTo(sd, buf, (u16_t)len, flags,
- sl_addr, sl_addrlen);
-
exit:
if (retval < 0) {
retval = slcb_SetErrno(getErrno(retval));
@@ -944,20 +960,27 @@
return retval;
}
+static ssize_t simplelink_sendmsg(void *obj, const struct msghdr *msg,
+ int flags)
+{
+ errno = -ENOTSUP;
+ return -1;
+}
+
/*
* Later SimpleLink SDK versions implement the full getaddrinfo semantics,
* returning potentially multiple IP addresses.
* This version implements a simple gethostbyname() API for client only.
*/
static int simplelink_getaddrinfo(const char *node, const char *service,
- const struct addrinfo *hints,
- struct addrinfo **res)
+ const struct zsock_addrinfo *hints,
+ struct zsock_addrinfo **res)
{
_u8 sl_family = SL_AF_INET;
unsigned long port = 0;
int socktype = SOCK_STREAM;
int proto = IPPROTO_TCP;
- struct addrinfo *ai;
+ struct zsock_addrinfo *ai;
struct sockaddr *ai_addr;
_i16 retval;
_u32 ipaddr[4];
@@ -1000,7 +1023,7 @@
}
/* Allocate out res (addrinfo) struct. Just one. */
- *res = calloc(1, sizeof(struct addrinfo));
+ *res = calloc(1, sizeof(struct zsock_addrinfo));
ai = *res;
if (!ai) {
retval = EAI_MEMORY;
@@ -1048,7 +1071,7 @@
return retval;
}
-static void simplelink_freeaddrinfo(struct addrinfo *res)
+static void simplelink_freeaddrinfo(struct zsock_addrinfo *res)
{
__ASSERT_NO_MSG(res);
@@ -1095,26 +1118,131 @@
return retval;
}
+static int simplelink_ioctl(void *obj, unsigned int request, va_list args)
+{
+ int sd = OBJ_TO_SD(obj);
+
+ switch (request) {
+ /* Handle close specifically. */
+ case ZFD_IOCTL_CLOSE:
+ return simplelink_close(sd);
+
+ case ZFD_IOCTL_POLL_PREPARE:
+ return -EXDEV;
+
+ case ZFD_IOCTL_POLL_UPDATE:
+ return -EOPNOTSUPP;
+
+ case ZFD_IOCTL_POLL_OFFLOAD: {
+ struct zsock_pollfd *fds;
+ int nfds;
+ int timeout;
+
+ fds = va_arg(args, struct zsock_pollfd *);
+ nfds = va_arg(args, int);
+ timeout = va_arg(args, int);
+
+ return simplelink_poll(fds, nfds, timeout);
+ }
+
+ /* Otherwise, just forward to offloaded fcntl()
+ * In Zephyr, fcntl() is just an alias of ioctl().
+ */
+ default:
+ return simplelink_fcntl(sd, request, args);
+ }
+}
+
+static ssize_t simplelink_read(void *obj, void *buffer, size_t count)
+{
+ return simplelink_recvfrom(obj, buffer, count, 0, NULL, 0);
+}
+
+static ssize_t simplelink_write(void *obj, const void *buffer,
+ size_t count)
+{
+ return simplelink_sendto(obj, buffer, count, 0, NULL, 0);
+}
+
+static const struct socket_op_vtable simplelink_socket_fd_op_vtable = {
+ .fd_vtable = {
+ .read = simplelink_read,
+ .write = simplelink_write,
+ .ioctl = simplelink_ioctl,
+ },
+ .bind = simplelink_bind,
+ .connect = simplelink_connect,
+ .listen = simplelink_listen,
+ .accept = simplelink_socket_accept,
+ .sendto = simplelink_sendto,
+ .sendmsg = simplelink_sendmsg,
+ .recvfrom = simplelink_recvfrom,
+ .getsockopt = simplelink_getsockopt,
+ .setsockopt = simplelink_setsockopt,
+};
+
+static bool simplelink_is_supported(int family, int type, int proto)
+{
+ /* TODO offloading always enabled for now. */
+ return true;
+}
+
+static int simplelink_socket_create(int family, int type, int proto)
+{
+ int fd = z_reserve_fd();
+ int sock;
+
+ if (fd < 0) {
+ return -1;
+ }
+
+ sock = simplelink_socket(family, type, proto);
+ if (sock < 0) {
+ z_free_fd(fd);
+ return -1;
+ }
+
+ z_finalize_fd(fd, SD_TO_OBJ(sock),
+ (const struct fd_op_vtable *)
+ &simplelink_socket_fd_op_vtable);
+
+ return fd;
+}
+
+static int simplelink_socket_accept(void *obj, struct sockaddr *addr,
+ socklen_t *addrlen)
+{
+ int fd = z_reserve_fd();
+ int sock;
+
+ if (fd < 0) {
+ return -1;
+ }
+
+ sock = simplelink_accept(obj, addr, addrlen);
+ if (sock < 0) {
+ z_free_fd(fd);
+ return -1;
+ }
+
+ z_finalize_fd(fd, SD_TO_OBJ(sock),
+ (const struct fd_op_vtable *)
+ &simplelink_socket_fd_op_vtable);
+
+ return fd;
+}
+
+#ifdef CONFIG_NET_SOCKETS_OFFLOAD
+NET_SOCKET_REGISTER(simplelink, AF_UNSPEC, simplelink_is_supported,
+ simplelink_socket_create);
+#endif
+
void simplelink_sockets_init(void)
{
k_mutex_init(&ga_mutex);
}
-const struct socket_offload simplelink_ops = {
- .socket = simplelink_socket,
- .close = simplelink_close,
- .accept = simplelink_accept,
- .bind = simplelink_bind,
- .listen = simplelink_listen,
- .connect = simplelink_connect,
- .poll = simplelink_poll,
- .setsockopt = simplelink_setsockopt,
- .getsockopt = simplelink_getsockopt,
- .recv = simplelink_recv,
- .recvfrom = simplelink_recvfrom,
- .send = simplelink_send,
- .sendto = simplelink_sendto,
+const struct socket_dns_offload simplelink_dns_ops = {
.getaddrinfo = simplelink_getaddrinfo,
.freeaddrinfo = simplelink_freeaddrinfo,
- .fcntl = simplelink_fcntl,
};
diff --git a/drivers/wifi/simplelink/simplelink_sockets.h b/drivers/wifi/simplelink/simplelink_sockets.h
index a621b46..dfc57f4 100644
--- a/drivers/wifi/simplelink/simplelink_sockets.h
+++ b/drivers/wifi/simplelink/simplelink_sockets.h
@@ -11,7 +11,7 @@
extern "C" {
#endif
-extern const struct socket_offload simplelink_ops;
+extern const struct socket_dns_offload simplelink_dns_ops;
extern void simplelink_sockets_init(void);
#ifdef __cplusplus
diff --git a/samples/net/mqtt_publisher/boards/cc3220sf_launchxl.conf b/samples/net/mqtt_publisher/boards/cc3220sf_launchxl.conf
index 6bbae4a..e73fcf6 100644
--- a/samples/net/mqtt_publisher/boards/cc3220sf_launchxl.conf
+++ b/samples/net/mqtt_publisher/boards/cc3220sf_launchxl.conf
@@ -2,6 +2,7 @@
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
+CONFIG_NET_NATIVE=n
CONFIG_TEST_RANDOM_GENERATOR=y
# Enable SimpleLink WiFi Driver and Socket Offload
diff --git a/samples/net/mqtt_publisher/boards/cc3235sf_launchxl.conf b/samples/net/mqtt_publisher/boards/cc3235sf_launchxl.conf
index 19dbc16..c7b2b1d 100644
--- a/samples/net/mqtt_publisher/boards/cc3235sf_launchxl.conf
+++ b/samples/net/mqtt_publisher/boards/cc3235sf_launchxl.conf
@@ -2,6 +2,7 @@
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
+CONFIG_NET_NATIVE=n
CONFIG_TEST_RANDOM_GENERATOR=y
# Enable SimpleLink WiFi Driver and Socket Offload
diff --git a/samples/net/sockets/echo/boards/cc3220sf_launchxl.conf b/samples/net/sockets/echo/boards/cc3220sf_launchxl.conf
index 20ef27c..55eea09 100644
--- a/samples/net/sockets/echo/boards/cc3220sf_launchxl.conf
+++ b/samples/net/sockets/echo/boards/cc3220sf_launchxl.conf
@@ -1,5 +1,6 @@
# Networking Config:
CONFIG_NETWORKING=y
+CONFIG_NET_NATIVE=n
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
diff --git a/samples/net/sockets/echo/boards/cc3235sf_launchxl.conf b/samples/net/sockets/echo/boards/cc3235sf_launchxl.conf
index 98eebdf..2d3f992 100644
--- a/samples/net/sockets/echo/boards/cc3235sf_launchxl.conf
+++ b/samples/net/sockets/echo/boards/cc3235sf_launchxl.conf
@@ -1,5 +1,6 @@
# Networking Config:
CONFIG_NETWORKING=y
+CONFIG_NET_NATIVE=n
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
diff --git a/samples/net/sockets/echo_async/boards/cc3220sf_launchxl.conf b/samples/net/sockets/echo_async/boards/cc3220sf_launchxl.conf
index d7c40c0..86d810b 100644
--- a/samples/net/sockets/echo_async/boards/cc3220sf_launchxl.conf
+++ b/samples/net/sockets/echo_async/boards/cc3220sf_launchxl.conf
@@ -1,5 +1,6 @@
# Networking Config:
CONFIG_NETWORKING=y
+CONFIG_NET_NATIVE=n
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_CONFIG_NEED_IPV6=n
diff --git a/samples/net/sockets/http_get/boards/cc3220sf_launchxl.conf b/samples/net/sockets/http_get/boards/cc3220sf_launchxl.conf
index 1b8312b..cff62a4 100644
--- a/samples/net/sockets/http_get/boards/cc3220sf_launchxl.conf
+++ b/samples/net/sockets/http_get/boards/cc3220sf_launchxl.conf
@@ -1,5 +1,6 @@
# Networking Config:
CONFIG_NETWORKING=y
+CONFIG_NET_NATIVE=n
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
diff --git a/samples/net/sockets/http_get/boards/cc3235sf_launchxl.conf b/samples/net/sockets/http_get/boards/cc3235sf_launchxl.conf
index 263ea1b..20355fe 100644
--- a/samples/net/sockets/http_get/boards/cc3235sf_launchxl.conf
+++ b/samples/net/sockets/http_get/boards/cc3235sf_launchxl.conf
@@ -1,5 +1,6 @@
# Networking Config:
CONFIG_NETWORKING=y
+CONFIG_NET_NATIVE=n
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
diff --git a/samples/net/sockets/sntp_client/boards/cc3220sf_launchxl.conf b/samples/net/sockets/sntp_client/boards/cc3220sf_launchxl.conf
index f5f4782..7daf0c8 100644
--- a/samples/net/sockets/sntp_client/boards/cc3220sf_launchxl.conf
+++ b/samples/net/sockets/sntp_client/boards/cc3220sf_launchxl.conf
@@ -1,5 +1,6 @@
# Networking Config:
CONFIG_NETWORKING=y
+CONFIG_NET_NATIVE=n
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_CONFIG_NEED_IPV6=n
diff --git a/tests/net/lib/mqtt_packet/boards/cc3220sf_launchxl.conf b/tests/net/lib/mqtt_packet/boards/cc3220sf_launchxl.conf
index a3548ed..a9452ec 100644
--- a/tests/net/lib/mqtt_packet/boards/cc3220sf_launchxl.conf
+++ b/tests/net/lib/mqtt_packet/boards/cc3220sf_launchxl.conf
@@ -2,6 +2,7 @@
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
+CONFIG_NET_NATIVE=n
CONFIG_TEST_RANDOM_GENERATOR=y
# Enable SimpleLink WiFi Driver and Socket Offload
diff --git a/tests/net/lib/mqtt_publisher/boards/cc3220sf_launchxl.conf b/tests/net/lib/mqtt_publisher/boards/cc3220sf_launchxl.conf
index 2f8f2e0..ea117de 100644
--- a/tests/net/lib/mqtt_publisher/boards/cc3220sf_launchxl.conf
+++ b/tests/net/lib/mqtt_publisher/boards/cc3220sf_launchxl.conf
@@ -2,6 +2,7 @@
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
+CONFIG_NET_NATIVE=n
# Enable SimpleLink WiFi Driver and Socket Offload
CONFIG_WIFI=y
diff --git a/tests/net/lib/mqtt_pubsub/boards/cc3220sf_launchxl.conf b/tests/net/lib/mqtt_pubsub/boards/cc3220sf_launchxl.conf
index a3548ed..a9452ec 100644
--- a/tests/net/lib/mqtt_pubsub/boards/cc3220sf_launchxl.conf
+++ b/tests/net/lib/mqtt_pubsub/boards/cc3220sf_launchxl.conf
@@ -2,6 +2,7 @@
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
+CONFIG_NET_NATIVE=n
CONFIG_TEST_RANDOM_GENERATOR=y
# Enable SimpleLink WiFi Driver and Socket Offload
diff --git a/tests/net/lib/mqtt_subscriber/boards/cc3220sf_launchxl.conf b/tests/net/lib/mqtt_subscriber/boards/cc3220sf_launchxl.conf
index a3548ed..a9452ec 100644
--- a/tests/net/lib/mqtt_subscriber/boards/cc3220sf_launchxl.conf
+++ b/tests/net/lib/mqtt_subscriber/boards/cc3220sf_launchxl.conf
@@ -2,6 +2,7 @@
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_SOCKETS=y
+CONFIG_NET_NATIVE=n
CONFIG_TEST_RANDOM_GENERATOR=y
# Enable SimpleLink WiFi Driver and Socket Offload