[NET]: Introduce SIOCGSTAMPNS ioctl to get timestamps with nanosec resolution
[deliverable/linux.git] / net / core / sock.c
index 6ddb3664b9937f0db6886bd32d11128389eead6c..cb48fa0e12497c076afb71c806b32833683ced5b 100644 (file)
@@ -1567,6 +1567,22 @@ int sock_get_timestamp(struct sock *sk, struct timeval __user *userstamp)
 }
 EXPORT_SYMBOL(sock_get_timestamp);
 
+int sock_get_timestampns(struct sock *sk, struct timespec __user *userstamp)
+{
+       struct timespec ts;
+       if (!sock_flag(sk, SOCK_TIMESTAMP))
+               sock_enable_timestamp(sk);
+       ts = ktime_to_timespec(sk->sk_stamp);
+       if (ts.tv_sec == -1)
+               return -ENOENT;
+       if (ts.tv_sec == 0) {
+               sk->sk_stamp = ktime_get_real();
+               ts = ktime_to_timespec(sk->sk_stamp);
+       }
+       return copy_to_user(userstamp, &ts, sizeof(ts)) ? -EFAULT : 0;
+}
+EXPORT_SYMBOL(sock_get_timestampns);
+
 void sock_enable_timestamp(struct sock *sk)
 {
        if (!sock_flag(sk, SOCK_TIMESTAMP)) {
This page took 0.025498 seconds and 5 git commands to generate.