introduce a new flag SOF_TIMESTAMPING_OPT_RX_FILTER in the receive path. User can set it with SOF_TIMESTAMPING_SOFTWARE to filter out rx software timestamp report, especially after a process turns on netstamp_needed_key which can time stamp every incoming skb. Previously, we found out if an application starts first which turns on netstamp_needed_key, then another one only passing SOF_TIMESTAMPING_SOFTWARE could also get rx timestamp. Now we handle this case by introducing this new flag without breaking users. Quoting Willem to explain why we need the flag: "why a process would want to request software timestamp reporting, but not receive software timestamp generation. The only use I see is when the application does request SOF_TIMESTAMPING_SOFTWARE | SOF_TIMESTAMPING_TX_SOFTWARE." Similarly, this new flag could also be used for hardware case where we can set it with SOF_TIMESTAMPING_RAW_HARDWARE, then we won't receive hardware receive timestamp. Another thing about errqueue in this patch I have a few words to say: In this case, we need to handle the egress path carefully, or else reporting the tx timestamp will fail. Egress path and ingress path will finally call sock_recv_timestamp(). We have to distinguish them. Errqueue is a good indicator to reflect the flow direction.
Showing the changes to include/uapi (1 of 5 files). Show all
Unified · Split
| @@ -32,8 +32,9 @@ enum { · 31 unmodified lines | ||
| 32 | 32 | SOF_TIMESTAMPING_OPT_TX_SWHW = (1<<14), |
| 33 | 33 | SOF_TIMESTAMPING_BIND_PHC = (1 << 15), |
| 34 | 34 | SOF_TIMESTAMPING_OPT_ID_TCP = (1 << 16), |
| 35 | + SOF_TIMESTAMPING_OPT_RX_FILTER = (1 << 17), | |
| 35 | 36 | |
| 36 | − SOF_TIMESTAMPING_LAST = SOF_TIMESTAMPING_OPT_ID_TCP, | |
| 37 | + SOF_TIMESTAMPING_LAST = SOF_TIMESTAMPING_OPT_RX_FILTER, | |
| 37 | 38 | SOF_TIMESTAMPING_MASK = (SOF_TIMESTAMPING_LAST - 1) | |
| 38 | 39 | SOF_TIMESTAMPING_LAST |
| 39 | 40 | }; |