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/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 1def5da221 net: move ttl field into socket_conn_s struct
1def5da221 is described below

commit 1def5da221eefc1e1fcf7e15ad885adbee6460fd
Author: zhanghongyu <[email protected]>
AuthorDate: Fri May 12 14:25:33 2023 +0800

    net: move ttl field into socket_conn_s struct
    
    move ttl filed from udp_conn_s to socket_conn_s structure to make it more 
than just control udp.
    
    Signed-off-by: zhanghongyu <[email protected]>
---
 include/nuttx/net/net.h           |  3 +++
 net/inet/ipv4_setsockopt.c        |  7 ++-----
 net/sixlowpan/sixlowpan_udpsend.c |  2 +-
 net/tcp/tcp_conn.c                |  2 ++
 net/tcp/tcp_send.c                | 11 ++++++-----
 net/udp/udp.h                     |  1 -
 net/udp/udp_conn.c                | 12 ++++++------
 net/udp/udp_send.c                |  6 +++---
 8 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/include/nuttx/net/net.h b/include/nuttx/net/net.h
index a73d6723f4..f92ea91ca8 100644
--- a/include/nuttx/net/net.h
+++ b/include/nuttx/net/net.h
@@ -228,6 +228,9 @@ struct socket_conn_s
 
   uint8_t       s_tos;       /* IPv4 Type of Service */
 #define s_tclass s_tos       /* IPv6 traffic class defination */
+#if defined(CONFIG_NET_IPv4) || defined(CONFIG_NET_IPv6)
+  uint8_t       ttl;         /* Default time-to-live */
+#endif
 
   /* Connection-specific content may follow */
 };
diff --git a/net/inet/ipv4_setsockopt.c b/net/inet/ipv4_setsockopt.c
index f0e3a04b76..3207b65406 100644
--- a/net/inet/ipv4_setsockopt.c
+++ b/net/inet/ipv4_setsockopt.c
@@ -37,7 +37,6 @@
 #include "netfilter/iptables.h"
 #include "igmp/igmp.h"
 #include "inet/inet.h"
-#include "udp/udp.h"
 #include "socket/socket.h"
 
 #if defined(CONFIG_NET_IPv4) && defined(CONFIG_NET_SOCKOPTS)
@@ -180,11 +179,9 @@ int ipv4_setsockopt(FAR struct socket *psock, int option,
       case IP_MULTICAST_TTL:          /* Set/read the time-to-live value of
                                        * outgoing multicast packets */
         {
-          FAR struct udp_conn_s *conn;
-          int ttl;
+          FAR struct socket_conn_s *conn;
 
-          if (psock->s_type != SOCK_DGRAM ||
-              value == NULL || value_len == 0)
+          if (value == NULL || value_len == 0)
             {
               ret = -EINVAL;
               break;
diff --git a/net/sixlowpan/sixlowpan_udpsend.c 
b/net/sixlowpan/sixlowpan_udpsend.c
index 878e4df5f5..d10dc5801c 100644
--- a/net/sixlowpan/sixlowpan_udpsend.c
+++ b/net/sixlowpan/sixlowpan_udpsend.c
@@ -227,7 +227,7 @@ ssize_t psock_6lowpan_udp_sendto(FAR struct socket *psock,
   ipv6udp.ipv6.tcf    = 0x00;
   ipv6udp.ipv6.flow   = 0x00;
   ipv6udp.ipv6.proto  = IP_PROTO_UDP;
-  ipv6udp.ipv6.ttl    = conn->ttl;
+  ipv6udp.ipv6.ttl    = conn->sconn.ttl;
 
   /* The IPv6 header length field does not include the size of IPv6 IP
    * header.
diff --git a/net/tcp/tcp_conn.c b/net/tcp/tcp_conn.c
index b5658e019d..ef6a0d184c 100644
--- a/net/tcp/tcp_conn.c
+++ b/net/tcp/tcp_conn.c
@@ -737,6 +737,7 @@ FAR struct tcp_conn_s *tcp_alloc(uint8_t domain)
   if (conn)
     {
       memset(conn, 0, sizeof(struct tcp_conn_s));
+      conn->sconn.ttl     = IP_TTL_DEFAULT;
       conn->tcpstateflags = TCP_ALLOCATED;
 #if defined(CONFIG_NET_IPv4) && defined(CONFIG_NET_IPv6)
       conn->domain        = domain;
@@ -1116,6 +1117,7 @@ FAR struct tcp_conn_s *tcp_alloc_accept(FAR struct 
net_driver_s *dev,
 #endif
 
       conn->sconn.s_tos      = listener->sconn.s_tos;
+      conn->sconn.ttl        = listener->sconn.ttl;
 #if CONFIG_NET_RECV_BUFSIZE > 0
       conn->rcv_bufs         = listener->rcv_bufs;
 #endif
diff --git a/net/tcp/tcp_send.c b/net/tcp/tcp_send.c
index edd6422c13..6c328c4c0d 100644
--- a/net/tcp/tcp_send.c
+++ b/net/tcp/tcp_send.c
@@ -182,7 +182,7 @@ static void tcp_sendcommon(FAR struct net_driver_s *dev,
       ninfo("do IPv6 IP header build!\n");
       ipv6_build_header(IPv6BUF, dev->d_len - IPv6_HDRLEN,
                         IP_PROTO_TCP, dev->d_ipv6addr, conn->u.ipv6.raddr,
-                        IP_TTL_DEFAULT, conn->sconn.s_tclass);
+                        conn->sconn.ttl, conn->sconn.s_tclass);
 
       /* Calculate TCP checksum. */
 
@@ -202,7 +202,7 @@ static void tcp_sendcommon(FAR struct net_driver_s *dev,
       ninfo("do IPv4 IP header build!\n");
       ipv4_build_header(IPv4BUF, dev->d_len, IP_PROTO_TCP,
                         &dev->d_ipaddr, &conn->u.ipv4.raddr,
-                        IP_TTL_DEFAULT, conn->sconn.s_tos, NULL);
+                        conn->sconn.ttl, conn->sconn.s_tos, NULL);
 
       /* Calculate TCP checksum. */
 
@@ -477,8 +477,8 @@ void tcp_reset(FAR struct net_driver_s *dev, FAR struct 
tcp_conn_s *conn)
 
       ipv6_build_header(ipv6, dev->d_len - IPv6_HDRLEN,
                         IP_PROTO_TCP, dev->d_ipv6addr, ipv6->srcipaddr,
-                        IP_TTL_DEFAULT, conn ? conn->sconn.s_tclass : 0);
-
+                        conn ? conn->sconn.ttl : IP_TTL_DEFAULT,
+                        conn ? conn->sconn.s_tos : 0);
       tcp->tcpchksum = 0;
       tcp->tcpchksum = ~tcp_ipv6_chksum(dev);
     }
@@ -493,7 +493,8 @@ void tcp_reset(FAR struct net_driver_s *dev, FAR struct 
tcp_conn_s *conn)
 
       ipv4_build_header(IPv4BUF, dev->d_len, IP_PROTO_TCP,
                         &dev->d_ipaddr, (FAR in_addr_t *)ipv4->srcipaddr,
-                        IP_TTL_DEFAULT, conn ? conn->sconn.s_tos : 0, NULL);
+                        conn ? conn->sconn.ttl : IP_TTL_DEFAULT,
+                        conn ? conn->sconn.s_tos : 0, NULL);
 
       tcp->tcpchksum = 0;
       tcp->tcpchksum = ~tcp_ipv4_chksum(dev);
diff --git a/net/udp/udp.h b/net/udp/udp.h
index 68e794e5cf..2e325ccbe6 100644
--- a/net/udp/udp.h
+++ b/net/udp/udp.h
@@ -115,7 +115,6 @@ struct udp_conn_s
   uint16_t rport;         /* Remote port number (network byte order) */
   uint8_t  flags;         /* See _UDP_FLAG_* definitions */
   uint8_t  domain;        /* IP domain: PF_INET or PF_INET6 */
-  uint8_t  ttl;           /* Default time-to-live */
   uint8_t  crefs;         /* Reference counts on this instance */
 
 #if CONFIG_NET_RECV_BUFSIZE > 0
diff --git a/net/udp/udp_conn.c b/net/udp/udp_conn.c
index 48202cf622..5b18064927 100644
--- a/net/udp/udp_conn.c
+++ b/net/udp/udp_conn.c
@@ -636,17 +636,17 @@ FAR struct udp_conn_s *udp_alloc(uint8_t domain)
     {
       /* Make sure that the connection is marked as uninitialized */
 
-      conn->flags   = 0;
+      conn->sconn.ttl = IP_TTL_DEFAULT;
+      conn->flags     = 0;
 #if defined(CONFIG_NET_IPv4) && defined(CONFIG_NET_IPv6)
-      conn->domain  = domain;
+      conn->domain    = domain;
 #endif
-      conn->lport   = 0;
-      conn->ttl     = IP_TTL_DEFAULT;
+      conn->lport     = 0;
 #if CONFIG_NET_RECV_BUFSIZE > 0
-      conn->rcvbufs = CONFIG_NET_RECV_BUFSIZE;
+      conn->rcvbufs   = CONFIG_NET_RECV_BUFSIZE;
 #endif
 #if CONFIG_NET_SEND_BUFSIZE > 0
-      conn->sndbufs = CONFIG_NET_SEND_BUFSIZE;
+      conn->sndbufs   = CONFIG_NET_SEND_BUFSIZE;
 
       nxsem_init(&conn->sndsem, 0, 0);
 #endif
diff --git a/net/udp/udp_send.c b/net/udp/udp_send.c
index fa01e04849..2ca0c2c339 100644
--- a/net/udp/udp_send.c
+++ b/net/udp/udp_send.c
@@ -123,7 +123,7 @@ void udp_send(FAR struct net_driver_s *dev, FAR struct 
udp_conn_s *conn)
           dev->d_len        = dev->d_sndlen + IPv4UDP_HDRLEN;
 
           ipv4_build_header(IPv4BUF, dev->d_len, IP_PROTO_UDP,
-                            &dev->d_ipaddr, &raddr, IP_TTL_DEFAULT,
+                            &dev->d_ipaddr, &raddr, conn->sconn.ttl,
                             conn->sconn.s_tos, NULL);
 
 #ifdef CONFIG_NET_STATISTICS
@@ -149,8 +149,8 @@ void udp_send(FAR struct net_driver_s *dev, FAR struct 
udp_conn_s *conn)
           dev->d_len        = dev->d_sndlen + UDP_HDRLEN;
 
           ipv6_build_header(IPv6BUF, dev->d_len, IP_PROTO_UDP,
-                            dev->d_ipv6addr, conn->u.ipv6.raddr, conn->ttl,
-                            conn->sconn.s_tclass);
+                            dev->d_ipv6addr, conn->u.ipv6.raddr,
+                            conn->sconn.ttl, conn->sconn.s_tclass);
 
           /* The total length to send is the size of the application data
            * plus the IPv6 and UDP headers (and, eventually, the link layer

Reply via email to