Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 887feae3 authored by Deepa Dinamani's avatar Deepa Dinamani Committed by David S. Miller
Browse files

socket: Add SO_TIMESTAMP[NS]_NEW



Add SO_TIMESTAMP_NEW and SO_TIMESTAMPNS_NEW variants of
socket timestamp options.
These are the y2038 safe versions of the SO_TIMESTAMP_OLD
and SO_TIMESTAMPNS_OLD for all architectures.

Note that the format of scm_timestamping.ts[0] is not changed
in this patch.

Signed-off-by: default avatarDeepa Dinamani <deepa.kernel@gmail.com>
Acked-by: default avatarWillem de Bruijn <willemb@google.com>
Cc: jejb@parisc-linux.org
Cc: ralf@linux-mips.org
Cc: rth@twiddle.net
Cc: linux-alpha@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linux-parisc@vger.kernel.org
Cc: linux-rdma@vger.kernel.org
Cc: netdev@vger.kernel.org
Cc: sparclinux@vger.kernel.org
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 98bb03c8
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
#define _UAPI_ASM_SOCKET_H

#include <asm/sockios.h>
#include <asm/bitsperlong.h>

/* For setsockopt(2) */
/*
@@ -114,10 +115,19 @@
#define SO_TIMESTAMPNS_OLD      35
#define SO_TIMESTAMPING_OLD     37

#define SO_TIMESTAMP_NEW        63
#define SO_TIMESTAMPNS_NEW      64

#if !defined(__KERNEL__)

#if __BITS_PER_LONG == 64
#define SO_TIMESTAMP		SO_TIMESTAMP_OLD
#define SO_TIMESTAMPNS		SO_TIMESTAMPNS_OLD
#else
#define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)
#define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)
#endif

#define SO_TIMESTAMPING         SO_TIMESTAMPING_OLD

#define SCM_TIMESTAMP           SO_TIMESTAMP
+12 −2
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
#define _UAPI_ASM_SOCKET_H

#include <asm/sockios.h>
#include <asm/bitsperlong.h>

/*
 * For setsockopt(2)
@@ -125,10 +126,19 @@
#define SO_TIMESTAMPNS_OLD      35
#define SO_TIMESTAMPING_OLD     37

#define SO_TIMESTAMP_NEW        63
#define SO_TIMESTAMPNS_NEW      64

#if !defined(__KERNEL__)

#if __BITS_PER_LONG == 64
#define SO_TIMESTAMP		SO_TIMESTAMP_OLD
#define SO_TIMESTAMPNS		SO_TIMESTAMPNS_OLD
#else
#define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)
#define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)
#endif

#define SO_TIMESTAMPING         SO_TIMESTAMPING_OLD

#define SCM_TIMESTAMP           SO_TIMESTAMP
+12 −2
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
#define _UAPI_ASM_SOCKET_H

#include <asm/sockios.h>
#include <asm/bitsperlong.h>

/* For setsockopt(2) */
#define SOL_SOCKET	0xffff
@@ -106,10 +107,19 @@
#define SO_TIMESTAMPNS_OLD      0x4013
#define SO_TIMESTAMPING_OLD     0x4020

#define SO_TIMESTAMP_NEW        0x4038
#define SO_TIMESTAMPNS_NEW      0x4039

#if !defined(__KERNEL__)

#if __BITS_PER_LONG == 64
#define SO_TIMESTAMP		SO_TIMESTAMP_OLD
#define SO_TIMESTAMPNS		SO_TIMESTAMPNS_OLD
#else
#define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)
#define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)
#endif

#define SO_TIMESTAMPING         SO_TIMESTAMPING_OLD

#define SCM_TIMESTAMP           SO_TIMESTAMP
+12 −2
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
#define _ASM_SOCKET_H

#include <asm/sockios.h>
#include <asm/bitsperlong.h>

/* For setsockopt(2) */
#define SOL_SOCKET	0xffff
@@ -107,10 +108,19 @@
#define SO_TIMESTAMPNS_OLD       0x0021
#define SO_TIMESTAMPING_OLD      0x0023

#define SO_TIMESTAMP_NEW         0x0041
#define SO_TIMESTAMPNS_NEW       0x0042

#if !defined(__KERNEL__)

#if __BITS_PER_LONG == 64
#define SO_TIMESTAMP		SO_TIMESTAMP_OLD
#define SO_TIMESTAMPNS		SO_TIMESTAMPNS_OLD
#else
#define SO_TIMESTAMP (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMP_OLD : SO_TIMESTAMP_NEW)
#define SO_TIMESTAMPNS (sizeof(time_t) == sizeof(__kernel_long_t) ? SO_TIMESTAMPNS_OLD : SO_TIMESTAMPNS_NEW)
#endif

#define SO_TIMESTAMPING        SO_TIMESTAMPING_OLD

#define SCM_TIMESTAMP          SO_TIMESTAMP
+18 −0
Original line number Diff line number Diff line
@@ -3498,12 +3498,30 @@ static inline void skb_get_timestamp(const struct sk_buff *skb,
	*stamp = ns_to_kernel_old_timeval(skb->tstamp);
}

static inline void skb_get_new_timestamp(const struct sk_buff *skb,
					 struct __kernel_sock_timeval *stamp)
{
	struct timespec64 ts = ktime_to_timespec64(skb->tstamp);

	stamp->tv_sec = ts.tv_sec;
	stamp->tv_usec = ts.tv_nsec / 1000;
}

static inline void skb_get_timestampns(const struct sk_buff *skb,
				       struct timespec *stamp)
{
	*stamp = ktime_to_timespec(skb->tstamp);
}

static inline void skb_get_new_timestampns(const struct sk_buff *skb,
					   struct __kernel_timespec *stamp)
{
	struct timespec64 ts = ktime_to_timespec64(skb->tstamp);

	stamp->tv_sec = ts.tv_sec;
	stamp->tv_nsec = ts.tv_nsec;
}

static inline void __net_timestamp(struct sk_buff *skb)
{
	skb->tstamp = ktime_get_real();
Loading