aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorWillem de Bruijn <willemb@google.com>2014-11-30 22:22:34 -0500
committerDavid S. Miller <davem@davemloft.net>2014-12-08 20:20:48 -0500
commit829ae9d611651467fe6cd7be834bd33ca6b28dfe (patch)
treec61fa3c4fcf20e77540eb8090cde1cec49120e7e /Documentation
parent7ce875e5ecb8562fd44040f69bda96c999e38bbc (diff)
net-timestamp: allow reading recv cmsg on errqueue with origin tstamp
Allow reading of timestamps and cmsg at the same time on all relevant socket families. One use is to correlate timestamps with egress device, by asking for cmsg IP_PKTINFO. on AF_INET sockets, call the relevant function (ip_cmsg_recv). To avoid changing legacy expectations, only do so if the caller sets a new timestamping flag SOF_TIMESTAMPING_OPT_CMSG. on AF_INET6 sockets, IPV6_PKTINFO and all other recv cmsg are already returned for all origins. only change is to set ifindex, which is not initialized for all error origins. In both cases, only generate the pktinfo message if an ifindex is known. This is not the case for ACK timestamps. The difference between the protocol families is probably a historical accident as a result of the different conditions for generating cmsg in the relevant ip(v6)_recv_error function: ipv4: if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP) { ipv6: if (serr->ee.ee_origin != SO_EE_ORIGIN_LOCAL) { At one time, this was the same test bar for the ICMP/ICMP6 distinction. This is no longer true. Signed-off-by: Willem de Bruijn <willemb@google.com> ---- Changes v1 -> v2 large rewrite - integrate with existing pktinfo cmsg generation code - on ipv4: only send with new flag, to maintain legacy behavior - on ipv6: send at most a single pktinfo cmsg - on ipv6: initialize fields if not yet initialized The recv cmsg interfaces are also relevant to the discussion of whether looping packet headers is problematic. For v6, cmsgs that identify many headers are already returned. This patch expands that to v4. If it sounds reasonable, I will follow with patches 1. request timestamps without payload with SOF_TIMESTAMPING_OPT_TSONLY (http://patchwork.ozlabs.org/patch/366967/) 2. sysctl to conditionally drop all timestamps that have payload or cmsg from users without CAP_NET_RAW. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/networking/timestamping.txt12
1 files changed, 11 insertions, 1 deletions
diff --git a/Documentation/networking/timestamping.txt b/Documentation/networking/timestamping.txt
index 1d6d02d6ba52..b08e27261ff9 100644
--- a/Documentation/networking/timestamping.txt
+++ b/Documentation/networking/timestamping.txt
@@ -122,7 +122,7 @@ SOF_TIMESTAMPING_RAW_HARDWARE:
122 122
1231.3.3 Timestamp Options 1231.3.3 Timestamp Options
124 124
125The interface supports one option 125The interface supports the options
126 126
127SOF_TIMESTAMPING_OPT_ID: 127SOF_TIMESTAMPING_OPT_ID:
128 128
@@ -145,6 +145,16 @@ SOF_TIMESTAMPING_OPT_ID:
145 stream sockets, it increments with every byte. 145 stream sockets, it increments with every byte.
146 146
147 147
148SOF_TIMESTAMPING_OPT_CMSG:
149
150 Support recv() cmsg for all timestamped packets. Control messages
151 are already supported unconditionally on all packets with receive
152 timestamps and on IPv6 packets with transmit timestamp. This option
153 extends them to IPv4 packets with transmit timestamp. One use case
154 is to correlate packets with their egress device, by enabling socket
155 option IP_PKTINFO simultaneously.
156
157
1481.4 Bytestream Timestamps 1581.4 Bytestream Timestamps
149 159
150The SO_TIMESTAMPING interface supports timestamping of bytes in a 160The SO_TIMESTAMPING interface supports timestamping of bytes in a