Re: [PATCH hurd] pfinet: implement rudimentary SO_TIMESTAMP support

Samuel Thibault <[email protected]>
Newsgroups gmane.os.hurd.bugs
Organization I am not organized
Message-ID <ahxoYEClrRQUDfIZ@end>
[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)
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.