mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 22:21:21 +00: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:
parent
887feae36a
commit
9718475e69
12 changed files with 88 additions and 30 deletions
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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue