[email protected], le dim. 31 mai 2026 11:53:40 -0300, a ecrit:
> 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
We'd want && defined(SCM_TIMESTAMP) too, otherwise we won't be reporting
the timestamps anyway. Better decline the support if we won't be
reporting them.
Samuel
>
> 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
>
>
--
Samuel
void *memmem (const void *meule_de_foin, size_t lg_meule,
const void *aiguille, size_t lg_aiguille);
(extrait de la page de man de memmem -- Manuel du programmeur Linux)