|
@@ -1380,6 +1380,32 @@ out:
|
|
|
return pp;
|
|
|
}
|
|
|
|
|
|
+#define SECONDS_PER_DAY 86400
|
|
|
+
|
|
|
+/* inet_current_timestamp - Return IP network timestamp
|
|
|
+ *
|
|
|
+ * Return milliseconds since midnight in network byte order.
|
|
|
+ */
|
|
|
+__be32 inet_current_timestamp(void)
|
|
|
+{
|
|
|
+ u32 secs;
|
|
|
+ u32 msecs;
|
|
|
+ struct timespec64 ts;
|
|
|
+
|
|
|
+ ktime_get_real_ts64(&ts);
|
|
|
+
|
|
|
+ /* Get secs since midnight. */
|
|
|
+ (void)div_u64_rem(ts.tv_sec, SECONDS_PER_DAY, &secs);
|
|
|
+ /* Convert to msecs. */
|
|
|
+ msecs = secs * MSEC_PER_SEC;
|
|
|
+ /* Convert nsec to msec. */
|
|
|
+ msecs += (u32)ts.tv_nsec / NSEC_PER_MSEC;
|
|
|
+
|
|
|
+ /* Convert to network byte order. */
|
|
|
+ return htons(msecs);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(inet_current_timestamp);
|
|
|
+
|
|
|
int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
|
|
|
{
|
|
|
if (sk->sk_family == AF_INET)
|