2

我正在使用 Solarflare 卡,sfptpd并且正在使用 C 代码中的硬件时间戳。它与给出以下输出的Solarflare 示例没有太大区别:

$ export EF_RX_TIMESTAMPING=3
$ onload ./rx_timestamping --proto udp --port 6666
oo:rx_timestamping[32356]: Using OpenOnload 201509-u1 Copyright 2006-2016 Solarflare Communications, 2002-2005 Level 5 Networks [1]
Socket created, listening on port 6666
Socket accepted
Selecting hardware timestamping mode.
Packet 1 - 3 bytes  timestamps 1468588400.706881929 1468588400.706878923 1468588400.706878923 
Packet 2 - 3 bytes  timestamps 1468588403.815893129 1468588403.815890313 1468588403.815890313

这个想法是检查与msghdr结构相关的辅助数据并从中提取timespecSO_TIMESTAMPNS好吧,如果我想依赖软件内核时间戳,这几乎是一样的——没有 Solarflare、onload 等)。

到目前为止,一切都很好。我想知道是否有任何方法可以使用标准 Java API 访问这些时间戳?如果没有,那么最简单的方法是什么?我不介意破解一些 JNI 代码。在最坏的情况下,我可以在本机代码中处理网络,为 Java 提供沿元数据接收到的数据(但如果可能的话,我想避免这样做,因为我正在考虑从现有应用程序访问时间戳)。

4

0 回答 0