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