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
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.