You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2021/12/19 16:09:10 UTC

[incubator-nuttx] 01/02: net: Add NET_SOCK_[FAMILY|TYPE|PROTOCOL] defintion to netconfig.h

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit 882bc8639cdb7c0fa8c5f6f7c889616fdc8976f6
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Sun Dec 19 16:03:14 2021 +0800

    net: Add NET_SOCK_[FAMILY|TYPE|PROTOCOL] defintion to netconfig.h
    
    to help create a general sock for ioctl operation
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
 include/nuttx/net/netconfig.h | 95 ++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 90 insertions(+), 5 deletions(-)

diff --git a/include/nuttx/net/netconfig.h b/include/nuttx/net/netconfig.h
index 18d5d29..0486a73 100644
--- a/include/nuttx/net/netconfig.h
+++ b/include/nuttx/net/netconfig.h
@@ -57,11 +57,7 @@
 #include <nuttx/net/ethernet.h>
 
 /****************************************************************************
- * Public Definitions
- ****************************************************************************/
-
-/****************************************************************************
- * Public Type Definitions
+ * Pre-processor Definitions
  ****************************************************************************/
 
 #ifndef MAX
@@ -72,6 +68,95 @@
 #  define MIN(a,b) ((a) < (b) ? (a) : (b))
 #endif
 
+/* Using the following definitions, the following socket() arguments should
+ * provide a valid socket in all configurations:
+ *
+ *   ret = socket(NET_SOCK_FAMILY, NET_SOCK_TYPE,
+ *                NET_SOCK_PROTOCOL);
+ */
+
+/* The address family that we used to create the socket really does not
+ * matter.  It should, however, be valid in the current configuration.
+ */
+
+#if defined(CONFIG_NET_IPv4)
+#  define NET_SOCK_FAMILY  AF_INET
+#elif defined(CONFIG_NET_IPv6)
+#  define NET_SOCK_FAMILY  AF_INET6
+#elif defined(CONFIG_NET_LOCAL)
+#  define NET_SOCK_FAMILY  AF_LOCAL
+#elif defined(CONFIG_NET_PKT)
+#  define NET_SOCK_FAMILY  AF_PACKET
+#elif defined(CONFIG_NET_CAN)
+#  define NET_SOCK_FAMILY  AF_CAN
+#elif defined(CONFIG_NET_IEEE802154)
+#  define NET_SOCK_FAMILY  AF_IEEE802154
+#elif defined(CONFIG_WIRELESS_PKTRADIO)
+#  define NET_SOCK_FAMILY  AF_PKTRADIO
+#elif defined(CONFIG_NET_BLUETOOTH)
+#  define NET_SOCK_FAMILY  AF_BLUETOOTH
+#elif defined(CONFIG_NET_USRSOCK)
+#  define NET_SOCK_FAMILY  AF_INET
+#elif defined(CONFIG_NET_NETLINK)
+#  define NET_SOCK_FAMILY  AF_NETLINK
+#elif defined(CONFIG_NET_RPMSG)
+#  define NET_SOCK_FAMILY  AF_RPMSG
+#else
+#  define NET_SOCK_FAMILY  AF_UNSPEC
+#endif
+
+/* Socket protocol of zero normally works */
+
+#define NET_SOCK_PROTOCOL  0
+
+/* SOCK_DGRAM is the preferred socket type to use when we just want a
+ * socket for performing driver ioctls.  However, we can't use SOCK_DRAM
+ * if UDP is disabled.
+ *
+ * Pick a socket type (and perhaps protocol) compatible with the currently
+ * selected address family.
+ */
+
+#if NET_SOCK_FAMILY == AF_INET
+#  if defined(CONFIG_NET_UDP)
+#    define NET_SOCK_TYPE SOCK_DGRAM
+#  elif defined(CONFIG_NET_TCP)
+#   define NET_SOCK_TYPE SOCK_STREAM
+#  elif defined(CONFIG_NET_ICMP_SOCKET)
+#   define NET_SOCK_TYPE SOCK_DGRAM
+#   undef NET_SOCK_PROTOCOL
+#   define NET_SOCK_PROTOCOL IPPROTO_ICMP
+#  endif
+#elif NET_SOCK_FAMILY == AF_INET6
+#  if defined(CONFIG_NET_UDP)
+#    define NET_SOCK_TYPE SOCK_DGRAM
+#  elif defined(CONFIG_NET_TCP)
+#   define NET_SOCK_TYPE SOCK_STREAM
+#  elif defined(CONFIG_NET_ICMPv6_SOCKET)
+#   define NET_SOCK_TYPE SOCK_DGRAM
+#   undef NET_SOCK_PROTOCOL
+#   define NET_SOCK_PROTOCOL IPPROTO_ICMP6
+#  endif
+#elif NET_SOCK_FAMILY == AF_LOCAL
+#  if defined(CONFIG_NET_LOCAL_DGRAM)
+#    define NET_SOCK_TYPE SOCK_DGRAM
+#  elif defined(CONFIG_NET_LOCAL_STREAM)
+#     define NET_SOCK_TYPE SOCK_STREAM
+#  endif
+#elif NET_SOCK_FAMILY == AF_PACKET
+#  define NET_SOCK_TYPE SOCK_RAW
+#elif NET_SOCK_FAMILY == AF_CAN
+#  define NET_SOCK_TYPE SOCK_RAW
+#elif NET_SOCK_FAMILY == AF_IEEE802154
+#  define NET_SOCK_TYPE SOCK_DGRAM
+#elif NET_SOCK_FAMILY == AF_BLUETOOTH
+#  define NET_SOCK_TYPE SOCK_RAW
+#elif NET_SOCK_FAMILY == AF_NETLINK
+#  define NET_SOCK_TYPE SOCK_DGRAM
+#elif NET_SOCK_FAMILY == AF_RPMSG
+#  define NET_SOCK_TYPE SOCK_STREAM
+#endif
+
 /* Eliminate dependencies on other header files.  This should not harm
  * portability because these are well-known constants.
  */