Jason Xing wrote: > From: Jason Xing <kernelxing@xxxxxxxxxxx> > > 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. > > Suggested-by: Willem de Bruijn <willemb@xxxxxxxxxx> > Signed-off-by: Jason Xing <kernelxing@xxxxxxxxxxx> Reviewed-by: Willem de Bruijn <willemb@xxxxxxxxxx> I really only suggested making this a new flag, not the main idea of filtering. > --- > v6 > Link: https://lore.kernel.org/all/20240906095640.77533-1-kerneljasonxing@xxxxxxxxx/ > 1. add the description in doc provided by Willem > 2. align the if statements (Willem) > > v5 > Link: https://lore.kernel.org/all/20240905071738.3725-1-kerneljasonxing@xxxxxxxxx/ > 1. squash the hardware case patch into this one (Willem) > 2. update corresponding commit message and doc (Willem) > 3. remove the limitation in sock_set_timestamping() and restore the > simplification branches. (Willem) > > v4 > Link: https://lore.kernel.org/all/20240830153751.86895-2-kerneljasonxing@xxxxxxxxx/ > 1. revise the commit message and doc (Willem) > 2. simplify the test statement (Jakub) > 3. add Willem's reviewed-by tag (Willem) > > v3 > 1. Willem suggested this alternative way to solve the issue, so I > added his Suggested-by tag here. Thanks! > --- > Documentation/networking/timestamping.rst | 17 +++++++++++++++++ > include/uapi/linux/net_tstamp.h | 3 ++- > net/ethtool/common.c | 1 + > net/ipv4/tcp.c | 9 +++++++-- > net/socket.c | 10 ++++++++-- > 5 files changed, 35 insertions(+), 5 deletions(-) > > diff --git a/Documentation/networking/timestamping.rst b/Documentation/networking/timestamping.rst > index 9c7773271393..8199e6917671 100644 > --- a/Documentation/networking/timestamping.rst > +++ b/Documentation/networking/timestamping.rst > @@ -267,6 +267,23 @@ SOF_TIMESTAMPING_OPT_TX_SWHW: > two separate messages will be looped to the socket's error queue, > each containing just one timestamp. > > +SOF_TIMESTAMPING_OPT_RX_FILTER: > + Filter out spurious receive timestamps: report a receive timestamp > + only if the matching timestamp generation flag is enabled. > + > + Receive timestamps are generated early in the ingress path, before a > + packet's destination socket is known. If any socket enables receive > + timestamps, packets for all socket will receive timestamped packets. nit: s/packets for all socket/all sockets/ My error in my suggestion. Not important enough to respin. > + Including those that request timestamp reporting with > + SOF_TIMESTAMPING_SOFTWARE and/or SOF_TIMESTAMPING_RAW_HARDWARE, but > + do not request receive timestamp generation. This can happen when > + requesting transmit timestamps only.