samples: net: socket_echo_select: add support for TI CC32xx TI CC32xx does not support binding the same port to multiple sockets, but instead uses the IPv6 socket to handle both IPv4 and IPv6 connections. This commit modifies the sample to reflect this. In addition, Kconfig options are overridden in order for the sample to take advantage of wifi and socket offloading on this platform. Signed-off-by: Vincent Wan <vwan@ti.com>
diff --git a/samples/net/sockets/echo_async_select/boards/cc3220sf_launchxl.conf b/samples/net/sockets/echo_async_select/boards/cc3220sf_launchxl.conf new file mode 100644 index 0000000..99d4498 --- /dev/null +++ b/samples/net/sockets/echo_async_select/boards/cc3220sf_launchxl.conf
@@ -0,0 +1,20 @@ +# Networking Config: +CONFIG_NET_NATIVE=n + +# Enable SimpleLink WiFi Driver and Socket Offload +CONFIG_WIFI=y +CONFIG_WIFI_SIMPLELINK=y +CONFIG_NET_SOCKETS_OFFLOAD=y + +# Disable unneeded settings from the base prj.conf: +CONFIG_NET_CONFIG_SETTINGS=n +CONFIG_NET_CONFIG_MY_IPV4_ADDR="" +CONFIG_NET_CONFIG_PEER_IPV4_ADDR="" +CONFIG_NET_CONFIG_MY_IPV6_ADDR="" +CONFIG_NET_CONFIG_PEER_IPV6_ADDR="" + +# Debugging +CONFIG_NET_LOG=y +CONFIG_WIFI_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_ASSERT=y
diff --git a/samples/net/sockets/echo_async_select/boards/cc3235sf_launchxl.conf b/samples/net/sockets/echo_async_select/boards/cc3235sf_launchxl.conf new file mode 100644 index 0000000..99d4498 --- /dev/null +++ b/samples/net/sockets/echo_async_select/boards/cc3235sf_launchxl.conf
@@ -0,0 +1,20 @@ +# Networking Config: +CONFIG_NET_NATIVE=n + +# Enable SimpleLink WiFi Driver and Socket Offload +CONFIG_WIFI=y +CONFIG_WIFI_SIMPLELINK=y +CONFIG_NET_SOCKETS_OFFLOAD=y + +# Disable unneeded settings from the base prj.conf: +CONFIG_NET_CONFIG_SETTINGS=n +CONFIG_NET_CONFIG_MY_IPV4_ADDR="" +CONFIG_NET_CONFIG_PEER_IPV4_ADDR="" +CONFIG_NET_CONFIG_MY_IPV6_ADDR="" +CONFIG_NET_CONFIG_PEER_IPV6_ADDR="" + +# Debugging +CONFIG_NET_LOG=y +CONFIG_WIFI_LOG_LEVEL_DBG=y +CONFIG_DEBUG=y +CONFIG_ASSERT=y
diff --git a/samples/net/sockets/echo_async_select/src/socket_echo_select.c b/samples/net/sockets/echo_async_select/src/socket_echo_select.c index 30d5a69..12771ae 100644 --- a/samples/net/sockets/echo_async_select/src/socket_echo_select.c +++ b/samples/net/sockets/echo_async_select/src/socket_echo_select.c
@@ -95,7 +95,8 @@ { int res; static int counter; - int serv4, serv6; +#if !defined(CONFIG_SOC_SERIES_CC32XX) + int serv4; struct sockaddr_in bind_addr4 = { .sin_family = AF_INET, .sin_port = htons(BIND_PORT), @@ -103,12 +104,16 @@ .s_addr = htonl(INADDR_ANY), }, }; +#endif + int serv6; struct sockaddr_in6 bind_addr6 = { .sin6_family = AF_INET6, .sin6_port = htons(BIND_PORT), .sin6_addr = IN6ADDR_ANY_INIT, }; + FD_ZERO(&readfds); +#if !defined(CONFIG_SOC_SERIES_CC32XX) serv4 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (serv4 < 0) { printf("error: socket: %d\n", errno); @@ -120,6 +125,10 @@ printf("Cannot bind IPv4, errno: %d\n", errno); } + setblocking(serv4, false); + listen(serv4, 5); + pollfds_add(serv4); +#endif serv6 = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); if (serv6 < 0) { printf("error: socket(AF_INET6): %d\n", errno); @@ -141,14 +150,8 @@ printf("Cannot bind IPv6, errno: %d\n", errno); } - FD_ZERO(&readfds); - - setblocking(serv4, false); setblocking(serv6, false); - listen(serv4, 5); listen(serv6, 5); - - pollfds_add(serv4); pollfds_add(serv6); printf("Async select-based TCP echo server waits for connections on " @@ -174,7 +177,16 @@ continue; } int fd = i; +#if defined(CONFIG_SOC_SERIES_CC32XX) + /* + * On TI CC32xx, the same port cannot be bound to two + * different sockets. Instead, the IPv6 socket is used + * to handle both IPv4 and IPv6 connections. + */ + if (fd == serv6) { +#else if (fd == serv4 || fd == serv6) { +#endif /* If server socket */ int client = accept(fd, (struct sockaddr *)&client_addr, &client_addr_len);