【精选】PTP(Precision Time Protocol)高精度时间同步协议+linuxptp代码学习

您所在的位置:网站首页 ptp指令的功能 【精选】PTP(Precision Time Protocol)高精度时间同步协议+linuxptp代码学习

【精选】PTP(Precision Time Protocol)高精度时间同步协议+linuxptp代码学习

2023-11-11 23:01| 来源: 网络整理| 查看: 265

最近项目中用到了PTP做时间同步,基于linuxptp做的改进和开发。刚入门对很多东西不是很清楚,用wireshark在测试设备的slave这边抓了个包,对照源码和官方文档学习一波,请各位大佬多多批评指正。 目前设备上采用的是主从同步,oneStep模式,所以重点先看看这部分的实现逻辑。

PTP报文

设备在PTP这块采用的传输层协议是UDP。PTP协议使用的端口号是319和320,其中319对应事件消息(EVENT),需要网口记录收发时间戳,320对应普通消息(GENERAL),无需记录收发时间戳。

Signaling报文

Signaling报文负责传输搭载的TLV消息。一个Signaling报文可以携带多个TLV消息。可携带的TLV类型messageType对应官方文档14节。 Signaling报文占用空间大小与携带的TLV相关,为头部(34字节)+targetPortIdentity(10字节)+每个TLV所占空间。TLV消息所占空间与其携带数据有关,携带的数据大小为lengthField字段的值,总大小为TLV类型(2字节)+TLV数据长度(2字节)+数据。 Signaling报文格式 对应代码: port_signaling.c中的port_signaling_construct,生成初始不带TLV的Signaling报文。 port_signaling.c中的process_signaling,处理收到的Signaling报文:

判断当前端口状态,状态正常即可(除INITIALIZING、FAULTY和DISABLED外); 遍历消息的TLV链表,根据TLV类型以及TLV带的messageType执行对应的操作。 如果收到的TLV是Request Unicast Transmission,需要解析其中的messageType。如果messageType是Announce或Sync,需要进一步添加或更新源端client。最后调用unicast_service_reply返回对应Grant Unicast Transmission报文。 如果收到的TLV是Grant Unicast Transmission,对应函数unicast_client_grant。需要判断源端是否是自己发送Request的master,然后判断对方的grant对自己的messageType类型,最后根据Unicast状态执行对应操作。 request unicast transmission TLV

功能: Slave端口→Master端口,Slave端口请求Master端口发送对应TLV中指定的报文(包括Announce、Sync、Delay_Resp或Pdelay_Resp),并约定发送间隔。这部分主从的约定功能是可选的,对应官方文档16.1节。 logInterMessagePeriod字段用于约定后续消息发送间隔,用以2为底的对数表示。 例如,开始时Slave端口发送了一个Signaling报文,如下所示。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3