forked from Minki/linux
socket: Update timestamping Documentation
With the new y2038 safe timestamping options added, update the documentation to reflect the changes. Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com> Acked-by: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9718475e69
commit
9dd49211b8
@ -6,11 +6,21 @@ The interfaces for receiving network packages timestamps are:
|
|||||||
* SO_TIMESTAMP
|
* SO_TIMESTAMP
|
||||||
Generates a timestamp for each incoming packet in (not necessarily
|
Generates a timestamp for each incoming packet in (not necessarily
|
||||||
monotonic) system time. Reports the timestamp via recvmsg() in a
|
monotonic) system time. Reports the timestamp via recvmsg() in a
|
||||||
control message as struct timeval (usec resolution).
|
control message in usec resolution.
|
||||||
|
SO_TIMESTAMP is defined as SO_TIMESTAMP_NEW or SO_TIMESTAMP_OLD
|
||||||
|
based on the architecture type and time_t representation of libc.
|
||||||
|
Control message format is in struct __kernel_old_timeval for
|
||||||
|
SO_TIMESTAMP_OLD and in struct __kernel_sock_timeval for
|
||||||
|
SO_TIMESTAMP_NEW options respectively.
|
||||||
|
|
||||||
* SO_TIMESTAMPNS
|
* SO_TIMESTAMPNS
|
||||||
Same timestamping mechanism as SO_TIMESTAMP, but reports the
|
Same timestamping mechanism as SO_TIMESTAMP, but reports the
|
||||||
timestamp as struct timespec (nsec resolution).
|
timestamp as struct timespec in nsec resolution.
|
||||||
|
SO_TIMESTAMPNS is defined as SO_TIMESTAMPNS_NEW or SO_TIMESTAMPNS_OLD
|
||||||
|
based on the architecture type and time_t representation of libc.
|
||||||
|
Control message format is in struct timespec for SO_TIMESTAMPNS_OLD
|
||||||
|
and in struct __kernel_timespec for SO_TIMESTAMPNS_NEW options
|
||||||
|
respectively.
|
||||||
|
|
||||||
* IP_MULTICAST_LOOP + SO_TIMESTAMP[NS]
|
* IP_MULTICAST_LOOP + SO_TIMESTAMP[NS]
|
||||||
Only for multicast:approximate transmit timestamp obtained by
|
Only for multicast:approximate transmit timestamp obtained by
|
||||||
@ -22,7 +32,7 @@ The interfaces for receiving network packages timestamps are:
|
|||||||
timestamps for stream sockets.
|
timestamps for stream sockets.
|
||||||
|
|
||||||
|
|
||||||
1.1 SO_TIMESTAMP:
|
1.1 SO_TIMESTAMP (also SO_TIMESTAMP_OLD and SO_TIMESTAMP_NEW):
|
||||||
|
|
||||||
This socket option enables timestamping of datagrams on the reception
|
This socket option enables timestamping of datagrams on the reception
|
||||||
path. Because the destination socket, if any, is not known early in
|
path. Because the destination socket, if any, is not known early in
|
||||||
@ -31,15 +41,25 @@ same is true for all early receive timestamp options.
|
|||||||
|
|
||||||
For interface details, see `man 7 socket`.
|
For interface details, see `man 7 socket`.
|
||||||
|
|
||||||
|
Always use SO_TIMESTAMP_NEW timestamp to always get timestamp in
|
||||||
|
struct __kernel_sock_timeval format.
|
||||||
|
|
||||||
1.2 SO_TIMESTAMPNS:
|
SO_TIMESTAMP_OLD returns incorrect timestamps after the year 2038
|
||||||
|
on 32 bit machines.
|
||||||
|
|
||||||
|
1.2 SO_TIMESTAMPNS (also SO_TIMESTAMPNS_OLD and SO_TIMESTAMPNS_NEW):
|
||||||
|
|
||||||
This option is identical to SO_TIMESTAMP except for the returned data type.
|
This option is identical to SO_TIMESTAMP except for the returned data type.
|
||||||
Its struct timespec allows for higher resolution (ns) timestamps than the
|
Its struct timespec allows for higher resolution (ns) timestamps than the
|
||||||
timeval of SO_TIMESTAMP (ms).
|
timeval of SO_TIMESTAMP (ms).
|
||||||
|
|
||||||
|
Always use SO_TIMESTAMPNS_NEW timestamp to always get timestamp in
|
||||||
|
struct __kernel_timespec format.
|
||||||
|
|
||||||
1.3 SO_TIMESTAMPING:
|
SO_TIMESTAMPNS_OLD returns incorrect timestamps after the year 2038
|
||||||
|
on 32 bit machines.
|
||||||
|
|
||||||
|
1.3 SO_TIMESTAMPING (also SO_TIMESTAMPING_OLD and SO_TIMESTAMPING_NEW):
|
||||||
|
|
||||||
Supports multiple types of timestamp requests. As a result, this
|
Supports multiple types of timestamp requests. As a result, this
|
||||||
socket option takes a bitmap of flags, not a boolean. In
|
socket option takes a bitmap of flags, not a boolean. In
|
||||||
@ -323,10 +343,23 @@ SO_TIMESTAMP and SO_TIMESTAMPNS records can be retrieved.
|
|||||||
These timestamps are returned in a control message with cmsg_level
|
These timestamps are returned in a control message with cmsg_level
|
||||||
SOL_SOCKET, cmsg_type SCM_TIMESTAMPING, and payload of type
|
SOL_SOCKET, cmsg_type SCM_TIMESTAMPING, and payload of type
|
||||||
|
|
||||||
|
For SO_TIMESTAMPING_OLD:
|
||||||
|
|
||||||
struct scm_timestamping {
|
struct scm_timestamping {
|
||||||
struct timespec ts[3];
|
struct timespec ts[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
For SO_TIMESTAMPING_NEW:
|
||||||
|
|
||||||
|
struct scm_timestamping64 {
|
||||||
|
struct __kernel_timespec ts[3];
|
||||||
|
|
||||||
|
Always use SO_TIMESTAMPING_NEW timestamp to always get timestamp in
|
||||||
|
struct scm_timestamping64 format.
|
||||||
|
|
||||||
|
SO_TIMESTAMPING_OLD returns incorrect timestamps after the year 2038
|
||||||
|
on 32 bit machines.
|
||||||
|
|
||||||
The structure can return up to three timestamps. This is a legacy
|
The structure can return up to three timestamps. This is a legacy
|
||||||
feature. At least one field is non-zero at any time. Most timestamps
|
feature. At least one field is non-zero at any time. Most timestamps
|
||||||
are passed in ts[0]. Hardware timestamps are passed in ts[2].
|
are passed in ts[0]. Hardware timestamps are passed in ts[2].
|
||||||
|
Loading…
Reference in New Issue
Block a user