从Java访问NIC或内核时间戳数据
我将Solarflare卡与从Java访问NIC或内核时间戳数据,java,c,sockets,java-native-interface,ptpd,Java,C,Sockets,Java Native Interface,Ptpd,我将Solarflare卡与sfptpd一起使用,并在我的C代码中使用硬件时间戳。它与提供以下输出的没有太大区别: $ 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
sfptpd
一起使用,并在我的C代码中使用硬件时间戳。它与提供以下输出的没有太大区别:
$ 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
结构相关的辅助数据,并从SO_TIMESTAMPNS
中提取timespec
(如果我想依赖软件内核时间戳,而不需要Solarflare、onload等,这几乎是一样的)
到目前为止还不错。我想知道是否有任何方法可以使用标准JavaAPI访问这些时间戳?如果没有,那么最简单的方法是什么?我不介意破解一些JNI代码。在最坏的情况下,我可以在本地代码中处理网络,通过元数据向Java提供接收到的数据(但如果可能,我希望避免这样做,因为我正在考虑从现有应用访问时间戳)