commit 1495073d15dc618b0b07f4cc2744db190d5488ce
Author: Diego Nieto Cid <dnietoc@gmail.com>
Date:   Sun May 31 15:34:30 2026 -0300

    pfinet: implement rudimentary SO_TIMESTAMP support
    
    This patch adds support for UDP packet timestamping only when
    both SO_TIMESTAMP and SCM_TIMESTAMP are defined.
    
    * pfinet/linux-src/include/net/sock.h: add timestamp flag
    
    * pfinet/linux-src/net/core/sock.c: modify sock_*sockopt to set
      and query the timestamp flag.
    
    * pfinet/linux-src/net/ipv4/udp.c: call put_cmsg in udp_recvmsg
      to write the packet timestamp to the message anciliary data.
    Message-ID: <20260531183430.1305-1-dnietoc@gmail.com>

diff --git a/pfinet/linux-src/include/net/sock.h b/pfinet/linux-src/include/net/sock.h
index 5c4444d1a..435f8870d 100644
--- a/pfinet/linux-src/include/net/sock.h
+++ b/pfinet/linux-src/include/net/sock.h
@@ -411,6 +411,9 @@ struct sock {
 				broadcast,
 				bsdism;
 	unsigned char		debug;
+#if defined(SO_TIMESTAMP) && defined(SCM_TIMESTAMP)
+	unsigned char           timestamp;
+#endif
 	int			proc;
 	unsigned long	        lingertime;
 
diff --git a/pfinet/linux-src/net/core/sock.c b/pfinet/linux-src/net/core/sock.c
index c47c935bb..5ab7d840a 100644
--- a/pfinet/linux-src/net/core/sock.c
+++ b/pfinet/linux-src/net/core/sock.c
@@ -191,6 +191,11 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
 			else
 				sk->debug=valbool;
 			break;
+#if defined(SO_TIMESTAMP) && defined(SCM_TIMESTAMP)
+		case SO_TIMESTAMP:
+			sk->timestamp = valbool;
+			break;
+#endif
 		case SO_REUSEADDR:
 			sk->reuse = valbool;
 			break;
@@ -384,6 +389,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
 		case SO_DEBUG:		
 			v.val = sk->debug;
 			break;
+#if defined(SO_TIMESTAMP) && defined(SCM_TIMESTAMP)
+		case SO_TIMESTAMP:
+			v.val = sk->timestamp;
+			break;
+#endif
 		
 		case SO_DONTROUTE:
 			v.val = sk->localroute;
diff --git a/pfinet/linux-src/net/ipv4/udp.c b/pfinet/linux-src/net/ipv4/udp.c
index c1da98867..52bae18e6 100644
--- a/pfinet/linux-src/net/ipv4/udp.c
+++ b/pfinet/linux-src/net/ipv4/udp.c
@@ -813,6 +813,11 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, int len,
 		msg->msg_flags |= MSG_TRUNC;
 	}
 
+#if defined(SO_TIMESTAMP) && defined(SCM_TIMESTAMP)
+	if (sk->timestamp)
+		put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMP, sizeof(skb->stamp), &skb->stamp);
+#endif
+
 #ifndef CONFIG_UDP_DELAY_CSUM
 	err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov,
 					copied);
