From: Diego Nieto Cid <[email protected]>
* pfinet/linux-src/include/net/sock.h: add timestamp flag when
SO_TIMESTAMP is defined.
* 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.
---
pfinet/linux-src/include/net/sock.h | 3 +++
pfinet/linux-src/net/core/sock.c | 10 ++++++++++
pfinet/linux-src/net/ipv4/udp.c | 5 +++++
3 files changed, 18 insertions(+)
diff --git a/pfinet/linux-src/include/net/sock.h
b/pfinet/linux-src/include/net/sock.h
index 5c4444d1..8d59f761 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)
+ 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 c47c935b..d79e8c55 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)
+ 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)
+ 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 c1da9886..52bae18e 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);
--
2.53.0