Forráskód Böngészése

examples: Strip IPv6 function in example and use sockaddr_storage to replace sockaddr_in6

yuanjm 5 éve
szülő
commit
821eea45b3

+ 1 - 0
examples/common_components/protocol_examples_common/Kconfig.projbuild

@@ -189,6 +189,7 @@ menu "Example Connection Configuration"
         bool "Obtain IPv6 address"
         default y
         depends on EXAMPLE_CONNECT_WIFI || EXAMPLE_CONNECT_ETHERNET
+        select LWIP_IPV6
         help
             By default, examples will wait until IPv4 and IPv6 local link addresses are obtained.
             Disable this option if the network does not support IPv6.

+ 7 - 4
examples/common_components/protocol_examples_common/addr_from_stdin.c

@@ -10,7 +10,7 @@
 
 #define HOST_IP_SIZE 128
 
-esp_err_t get_addr_from_stdin(int port, int sock_type, int *ip_protocol, int *addr_family, struct sockaddr_in6 *dest_addr)
+esp_err_t get_addr_from_stdin(int port, int sock_type, int *ip_protocol, int *addr_family, struct sockaddr_storage *dest_addr)
 {
     char host_ip[HOST_IP_SIZE];
     int len;
@@ -49,15 +49,18 @@ esp_err_t get_addr_from_stdin(int port, int sock_type, int *ip_protocol, int *ad
             freeaddrinfo( addr_list );
             return ESP_OK;
 
-        } else if (cur->ai_family == AF_INET6) {
+        }
+#if CONFIG_LWIP_IPV6
+        else if (cur->ai_family == AF_INET6) {
             *ip_protocol = IPPROTO_IPV6;
             *addr_family = AF_INET6;
             // add port and interface number and return on first IPv6 match
-            dest_addr->sin6_port = htons(port);
-            dest_addr->sin6_scope_id = esp_netif_get_netif_impl_index(EXAMPLE_INTERFACE);
+            ((struct sockaddr_in6*)dest_addr)->sin6_port = htons(port);
+            ((struct sockaddr_in6*)dest_addr)->sin6_scope_id = esp_netif_get_netif_impl_index(EXAMPLE_INTERFACE);
             freeaddrinfo( addr_list );
             return ESP_OK;
         }
+#endif
     }
     // no match found
     freeaddrinfo( addr_list );

+ 3 - 3
examples/common_components/protocol_examples_common/include/addr_from_stdin.h

@@ -24,20 +24,20 @@ extern "C" {
  * @brief Read and evaluate IP address from stdin
  *
  * This API reads stdin and parses the input address using getaddrinfo()
- * to fill in struct sockaddr_in6 (for both IPv4 and IPv6) used to open
+ * to fill in struct sockaddr_storage (for both IPv4 and IPv6) used to open
  * a socket. IP protocol is guessed from the IP address string.
  *
  * @param[in] port port number of expected connection
  * @param[in] sock_type expected protocol: SOCK_STREAM or SOCK_DGRAM
  * @param[out] ip_protocol resultant IP protocol: IPPROTO_IP or IPPROTO_IP6
  * @param[out] addr_family resultant address family: AF_INET or AF_INET6
- * @param[out] dest_addr sockaddr_in6 structure (for both IPv4 and IPv6)
+ * @param[out] dest_addr sockaddr_storage structure (for both IPv4 and IPv6)
  * @return ESP_OK on success, ESP_FAIL otherwise
  */
 esp_err_t get_addr_from_stdin(int port, int sock_type,
                               int *ip_protocol,
                               int *addr_family,
-                              struct sockaddr_in6 *dest_addr);
+                              struct sockaddr_storage *dest_addr);
 
 #ifdef __cplusplus
 }

+ 1 - 1
examples/protocols/sockets/tcp_client/main/tcp_client.c

@@ -60,7 +60,7 @@ static void tcp_client_task(void *pvParameters)
         addr_family = AF_INET6;
         ip_protocol = IPPROTO_IPV6;
 #elif defined(CONFIG_EXAMPLE_SOCKET_IP_INPUT_STDIN)
-        struct sockaddr_in6 dest_addr = { 0 };
+        struct sockaddr_storage dest_addr = { 0 };
         ESP_ERROR_CHECK(get_addr_from_stdin(PORT, SOCK_STREAM, &ip_protocol, &addr_family, &dest_addr));
 #endif
         int sock =  socket(addr_family, SOCK_STREAM, ip_protocol);

+ 1 - 1
examples/protocols/sockets/udp_client/main/udp_client.c

@@ -64,7 +64,7 @@ static void udp_client_task(void *pvParameters)
         addr_family = AF_INET6;
         ip_protocol = IPPROTO_IPV6;
 #elif defined(CONFIG_EXAMPLE_SOCKET_IP_INPUT_STDIN)
-        struct sockaddr_in6 dest_addr = { 0 };
+        struct sockaddr_storage dest_addr = { 0 };
         ESP_ERROR_CHECK(get_addr_from_stdin(PORT, SOCK_DGRAM, &ip_protocol, &addr_family, &dest_addr));
 #endif