如何解决获取硬件时间戳
libpcap中的pcap_next_ex函数获得的时间是否是网卡的硬时间戳?如果没有,接收包时如何获取硬时间戳 pcap_next_ex(pcap_t * p,struct pcap_pkthdr ** pkt_header,const u_char ** pkt_data)
解决方法
libpcap中的pcap_next_ex函数获得的时间是否是网卡的硬时间戳?
仅当向 libpcap传递数据包的代码路径从网卡获取时间戳并提供时间戳。
当前,libpcap提供 option 来在常规网络接口上获取硬件时间戳的唯一操作系统是Linux,但这不是默认操作系统。默认情况下,数据包会获得标准的Linux网络堆栈时间戳记,该时间戳记是由OS在处理数据包时生成的。
某些专用设备,其中libpcap 不不使用常规网络堆栈来获取数据包,可能提供硬件时间戳。 Endace DAG卡可能就是这种情况,但我不知道是不是这种情况。
如果没有,如何在接收到数据包时获取硬时间戳
您需要使用新的pcap_create()
/ pcap_activate()
API而不是旧的pcap_open_live()
API来打开适配器。
致电pcap_create()
后,致电pcap_list_tstamp_types()
;它将返回适配器和操作系统支持的time stamp types的列表。 如果 PCAP_TSTAMP_ADAPTER
或PCAP_TSTAMP_ADAPTER_UNSYNCED
可用,您将要使libpcap使用其中之一。为此,请在调用pcap_activate()
之前使用pcap_set_tstamp_type()
设置时间戳类型。
注意:您获得的时间戳可能不是表示为自世界标准时间1970年1月1日00:00:00开始经过的秒数;它们可能与该值相差几秒钟(无论在某个时间点TAI和UTC之间的差异是什么-我必须检查Precision Time Protocol规范以查看该偏移量是多少)。这是一个错误,如果有办法确定Linux中适配器提供的时间戳是基于UN * X时期还是某些TAI时期,我将尝试在某个时间点进行修复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。