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