mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02:00
socket: Add SO_TIMESTAMPING_NEW
Add SO_TIMESTAMPING_NEW variant of socket timestamp options. This is the y2038 safe versions of the SO_TIMESTAMPING_OLD for all architectures. Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com> Acked-by: Willem de Bruijn <willemb@google.com> Cc: chris@zankel.net Cc: fenghua.yu@intel.com Cc: rth@twiddle.net Cc: tglx@linutronix.de Cc: ubraun@linux.ibm.com Cc: linux-alpha@vger.kernel.org Cc: linux-arch@vger.kernel.org Cc: linux-ia64@vger.kernel.org Cc: linux-mips@linux-mips.org Cc: linux-s390@vger.kernel.org Cc: linux-xtensa@linux-xtensa.org Cc: sparclinux@vger.kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
887feae36a
commit
9718475e69
13
net/socket.c
13
net/socket.c
@@ -706,7 +706,8 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
|
||||
{
|
||||
int need_software_tstamp = sock_flag(sk, SOCK_RCVTSTAMP);
|
||||
int new_tstamp = sock_flag(sk, SOCK_TSTAMP_NEW);
|
||||
struct scm_timestamping tss;
|
||||
struct scm_timestamping_internal tss;
|
||||
|
||||
int empty = 1, false_tstamp = 0;
|
||||
struct skb_shared_hwtstamps *shhwtstamps =
|
||||
skb_hwtstamps(skb);
|
||||
@@ -752,20 +753,22 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
|
||||
|
||||
memset(&tss, 0, sizeof(tss));
|
||||
if ((sk->sk_tsflags & SOF_TIMESTAMPING_SOFTWARE) &&
|
||||
ktime_to_timespec_cond(skb->tstamp, tss.ts + 0))
|
||||
ktime_to_timespec64_cond(skb->tstamp, tss.ts + 0))
|
||||
empty = 0;
|
||||
if (shhwtstamps &&
|
||||
(sk->sk_tsflags & SOF_TIMESTAMPING_RAW_HARDWARE) &&
|
||||
!skb_is_swtx_tstamp(skb, false_tstamp) &&
|
||||
ktime_to_timespec_cond(shhwtstamps->hwtstamp, tss.ts + 2)) {
|
||||
ktime_to_timespec64_cond(shhwtstamps->hwtstamp, tss.ts + 2)) {
|
||||
empty = 0;
|
||||
if ((sk->sk_tsflags & SOF_TIMESTAMPING_OPT_PKTINFO) &&
|
||||
!skb_is_err_queue(skb))
|
||||
put_ts_pktinfo(msg, skb);
|
||||
}
|
||||
if (!empty) {
|
||||
put_cmsg(msg, SOL_SOCKET,
|
||||
SO_TIMESTAMPING_OLD, sizeof(tss), &tss);
|
||||
if (sock_flag(sk, SOCK_TSTAMP_NEW))
|
||||
put_cmsg_scm_timestamping64(msg, &tss);
|
||||
else
|
||||
put_cmsg_scm_timestamping(msg, &tss);
|
||||
|
||||
if (skb_is_err_queue(skb) && skb->len &&
|
||||
SKB_EXT_ERR(skb)->opt_stats)
|
||||
|
Reference in New Issue
Block a user