Thread (32 messages) 32 messages, 7 authors, 2017-03-24

RE: Extending socket timestamping API for NTP

From: "Keller, Jacob E" <jacob.e.keller@intel.com>
Date: 2017-02-07 17:48:41

Hi Miroslav,
-----Original Message-----
From: Miroslav Lichvar [mailto:mlichvar@redhat.com]
Sent: Tuesday, February 07, 2017 6:02 AM
To: netdev@vger.kernel.org
Cc: Richard Cochran <richardcochran@gmail.com>; Jiri Benc
[off-list ref]; Keller, Jacob E [off-list ref]; Denny Page
[off-list ref]; Willem de Bruijn [off-list ref]
Subject: Extending socket timestamping API for NTP

I'd like to propose some changes and new options for the timestamping
interface that I think would be useful for NTP implementations and
maybe also other applications. Before I or someone else tries to
implement them, do you think they would actually make sense and fit
well in the current code?

1) new rx_filter for NTP

   Some NICs can't timestamp all received packets and are currently
   unusable for NTP with HW timestamping. The new filter would allow
   NTP support in new NICs and adding support to existing NICs with
   firmware/driver updates. The filter would apply to IPv4 and IPv6
   UDP packets received from or sent to the port number 123.
The main problem here is that most hardware that *can't* timestamp all packets is pretty limited to timestamping only PTP frames. It's possible with firmware upgrades this could be worked around, but I do not know if it would actually happen. Still, it can't really hurt too much to add a new filter, and those drivers which can support it already should be easy to implement.
   Should be the current drivers of HW that can timestamp all packets
   updated to fall back to HWTSTAMP_FILTER_ALL?
Generally, the drivers I am aware of that support timestamping all packets do so for any filter request, rather than actually limiting the timestamping.
2) new SO_TIMESTAMPING option to receive from the error queue only
   user data as was passed to sendmsg() instead of Ethernet frames

   Parsing Ethernet and IP headers (especially IPv6 options) is not
   fun and SOF_TIMESTAMPING_OPT_ID is not always practical, e.g. in
   applications which process messages from the error queue
   asynchronously and don't bind/connect their sockets.
This would be useful for application writing.
3) target address in msg_name of messages from the error queue

   With 2) and unconnected sockets, there needs to be a way to get the
   address to which the packet was sent. Is it ok to always fill
   msg_name, or does it need to be a new option?

I'm not sure.
4) allow sockets to use both SW and HW TX timestamping at the same time

   When using a socket which is not bound to a specific interface, it
   would be nice to get transmit SW timestamps when HW timestamps are
   missing. I suspect it's difficult to predict if a HW timestamp will
   be available. Maybe it would be acceptable to get from the error
   queue two messages per transmission if the interface supports both
   SW and HW timestamping?

This seems useful, but not sure how best to implement it.
Thoughts?

--
Miroslav Lichvar
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help