mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 06:32:08 +00:00
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: Deepa Dinamani <deepa.kernel@gmail.com> Acked-by: Willem 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: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
98bb03c865
commit
887feae36a
12 changed files with 171 additions and 32 deletions
35
net/socket.c
35
net/socket.c
|
@ -705,6 +705,7 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
|
|||
struct sk_buff *skb)
|
||||
{
|
||||
int need_software_tstamp = sock_flag(sk, SOCK_RCVTSTAMP);
|
||||
int new_tstamp = sock_flag(sk, SOCK_TSTAMP_NEW);
|
||||
struct scm_timestamping tss;
|
||||
int empty = 1, false_tstamp = 0;
|
||||
struct skb_shared_hwtstamps *shhwtstamps =
|
||||
|
@ -719,15 +720,33 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
|
|||
|
||||
if (need_software_tstamp) {
|
||||
if (!sock_flag(sk, SOCK_RCVTSTAMPNS)) {
|
||||
struct __kernel_old_timeval tv;
|
||||
skb_get_timestamp(skb, &tv);
|
||||
put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_OLD,
|
||||
sizeof(tv), &tv);
|
||||
if (new_tstamp) {
|
||||
struct __kernel_sock_timeval tv;
|
||||
|
||||
skb_get_new_timestamp(skb, &tv);
|
||||
put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_NEW,
|
||||
sizeof(tv), &tv);
|
||||
} else {
|
||||
struct __kernel_old_timeval tv;
|
||||
|
||||
skb_get_timestamp(skb, &tv);
|
||||
put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMP_OLD,
|
||||
sizeof(tv), &tv);
|
||||
}
|
||||
} else {
|
||||
struct timespec ts;
|
||||
skb_get_timestampns(skb, &ts);
|
||||
put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPNS_OLD,
|
||||
sizeof(ts), &ts);
|
||||
if (new_tstamp) {
|
||||
struct __kernel_timespec ts;
|
||||
|
||||
skb_get_new_timestampns(skb, &ts);
|
||||
put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPNS_NEW,
|
||||
sizeof(ts), &ts);
|
||||
} else {
|
||||
struct timespec ts;
|
||||
|
||||
skb_get_timestampns(skb, &ts);
|
||||
put_cmsg(msg, SOL_SOCKET, SO_TIMESTAMPNS_OLD,
|
||||
sizeof(ts), &ts);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue