Skip to content
Snippets Groups Projects
Commit 92f37fd2 authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller
Browse files

[NET]: Adding SO_TIMESTAMPNS / SCM_TIMESTAMPNS support


Now that network timestamps use ktime_t infrastructure, we can add a new
SOL_SOCKET sockopt  SO_TIMESTAMPNS.

This command is similar to SO_TIMESTAMP, but permits transmission of
a 'timespec struct' instead of a 'timeval struct' control message.
(nanosecond resolution instead of microsecond)

Control message is labelled SCM_TIMESTAMPNS instead of SCM_TIMESTAMP

A socket cannot mix SO_TIMESTAMP and SO_TIMESTAMPNS : the two modes are
mutually exclusive.

sock_recv_timestamp() became too big to be fully inlined so I added a
__sock_recv_timestamp() helper function.

Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
CC: linux-arch@vger.kernel.org
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c7a3c5da
No related branches found
No related tags found
No related merge requests found
Showing
with 40 additions and 0 deletions
...@@ -52,6 +52,8 @@ ...@@ -52,6 +52,8 @@
#define SO_PEERSEC 30 #define SO_PEERSEC 30
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
/* Security levels - as per NRL IPv6 - don't actually do anything */ /* Security levels - as per NRL IPv6 - don't actually do anything */
#define SO_SECURITY_AUTHENTICATION 19 #define SO_SECURITY_AUTHENTICATION 19
......
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_SOCKET_H */ #endif /* _ASM_SOCKET_H */
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_SOCKET_H */ #endif /* _ASM_SOCKET_H */
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* __ASM_AVR32_SOCKET_H */ #endif /* __ASM_AVR32_SOCKET_H */
...@@ -51,6 +51,8 @@ ...@@ -51,6 +51,8 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_SOCKET_H */ #endif /* _ASM_SOCKET_H */
......
...@@ -49,6 +49,8 @@ ...@@ -49,6 +49,8 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_SOCKET_H */ #endif /* _ASM_SOCKET_H */
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_SOCKET_H */ #endif /* _ASM_SOCKET_H */
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_SOCKET_H */ #endif /* _ASM_SOCKET_H */
...@@ -58,5 +58,7 @@ ...@@ -58,5 +58,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_IA64_SOCKET_H */ #endif /* _ASM_IA64_SOCKET_H */
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_M32R_SOCKET_H */ #endif /* _ASM_M32R_SOCKET_H */
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_SOCKET_H */ #endif /* _ASM_SOCKET_H */
...@@ -70,6 +70,8 @@ To add: #define SO_REUSEPORT 0x0200 /* Allow local address and port reuse. */ ...@@ -70,6 +70,8 @@ To add: #define SO_REUSEPORT 0x0200 /* Allow local address and port reuse. */
#define SO_SNDBUFFORCE 31 #define SO_SNDBUFFORCE 31
#define SO_RCVBUFFORCE 33 #define SO_RCVBUFFORCE 33
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#ifdef __KERNEL__ #ifdef __KERNEL__
......
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
#define SO_PEERCRED 0x4011 #define SO_PEERCRED 0x4011
#define SO_TIMESTAMP 0x4012 #define SO_TIMESTAMP 0x4012
#define SCM_TIMESTAMP SO_TIMESTAMP #define SCM_TIMESTAMP SO_TIMESTAMP
#define SO_TIMESTAMPNS 0x4013
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
/* Security levels - as per NRL IPv6 - don't actually do anything */ /* Security levels - as per NRL IPv6 - don't actually do anything */
#define SO_SECURITY_AUTHENTICATION 0x4016 #define SO_SECURITY_AUTHENTICATION 0x4016
......
...@@ -56,5 +56,7 @@ ...@@ -56,5 +56,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_POWERPC_SOCKET_H */ #endif /* _ASM_POWERPC_SOCKET_H */
...@@ -57,5 +57,7 @@ ...@@ -57,5 +57,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_SOCKET_H */ #endif /* _ASM_SOCKET_H */
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* __ASM_SH_SOCKET_H */ #endif /* __ASM_SH_SOCKET_H */
...@@ -49,6 +49,8 @@ ...@@ -49,6 +49,8 @@
#define SO_PEERSEC 0x001e #define SO_PEERSEC 0x001e
#define SO_PASSSEC 0x001f #define SO_PASSSEC 0x001f
#define SO_TIMESTAMPNS 0x0021
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
/* Security levels - as per NRL IPv6 - don't actually do anything */ /* Security levels - as per NRL IPv6 - don't actually do anything */
#define SO_SECURITY_AUTHENTICATION 0x5001 #define SO_SECURITY_AUTHENTICATION 0x5001
......
...@@ -49,6 +49,8 @@ ...@@ -49,6 +49,8 @@
#define SO_PEERSEC 0x001e #define SO_PEERSEC 0x001e
#define SO_PASSSEC 0x001f #define SO_PASSSEC 0x001f
#define SO_TIMESTAMPNS 0x0021
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
/* Security levels - as per NRL IPv6 - don't actually do anything */ /* Security levels - as per NRL IPv6 - don't actually do anything */
#define SO_SECURITY_AUTHENTICATION 0x5001 #define SO_SECURITY_AUTHENTICATION 0x5001
......
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* __V850_SOCKET_H__ */ #endif /* __V850_SOCKET_H__ */
...@@ -49,5 +49,7 @@ ...@@ -49,5 +49,7 @@
#define SO_PEERSEC 31 #define SO_PEERSEC 31
#define SO_PASSSEC 34 #define SO_PASSSEC 34
#define SO_TIMESTAMPNS 35
#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
#endif /* _ASM_SOCKET_H */ #endif /* _ASM_SOCKET_H */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment