浅聊一下PTPD
文章目录
- 浅聊一下PTPD
- 1.什么是PTPD
- 2.PTPD源码浅析一下
- 1.src文件
- 1.arith.c
- 2.bmc.c
- 3.constant.h 和 datatypes.h
- 4.display.c
- 5.management.c
- 6.protocol.c
- 7.ptp_datatypes.h
- 8.ptp_primitives.h
- 9.ptp_timers.c
- 10.ptpd.c
- 11.signaling.c
- 12.timedomain.c
- 2.def文件夹
- 3.dep文件夹
- 1.iniparser文件夹
- 2.ntpengine文件夹
- 3.alarms.c
- 4.configdefaults.c
- 5.daemonconfig.c
- 6.eventtimer_itimer.c
- 7.eventtimer_posix.c
- 8.eventtimer.c
- 9.ipv4_acl.c
- 10.msg.c
- 11.net.c
- 12.outlierfilter.c
- 13.servo.c
- 14.snmp.c
- 15.startup.c
- 16.statistics.c
- 17.sys.c
- 3.安装和使用ptpd
1.什么是PTPD
PTPd(Precision Time Protocol daemon)是一种用于实现精确时间同步的开源软件。它实现了IEEE 1588 Precision Time Protocol(PTP)标准,并可用于在计算机网络中实现高精度的时钟同步。
2.PTPD源码浅析一下
简单聊一下src文件夹里面源码作用
1.src文件
1.arith.c
主要就是时间格式转换数学函数。
2.bmc.c
前一篇文章说过了,bmc算法主要选出最优时钟
3.constant.h 和 datatypes.h
前一个定义了一些默认值以及常量,后一个定义一些结构体
4.display.c
内部显示函数,定义了函数如:显示时间戳结构,显示时钟标识结构,显示 MAC 地址,显示网络信息,显示一个时间间隔结构,显示一个端口标识结构,显示时钟质量结构,显示网络接口名称,显示同步消息,显示通告消息,显示 Follow_UP 消息,显示 DelayReq 消息,等等很多,需要看什么信息可以在里面找,然后拉出打印看看。
5.management.c
处理传入管理消息。
PTP协议解析和处理:PTPd实现了IEEE 1588 PTP标准,并包含了解析和处理PTP消息的代码。这些代码负责解析传入的PTP消息,提取关键信息,并根据协议规范执行适当的操作,例如时钟同步和时钟源选择。
6.protocol.c
处理 IEEE-1588 协议和状态机的代码。
状态机:PTPd使用状态机来管理各种协议状态和状态转换。源代码中包含了实现状态机的代码,以确保协议的正确执行和流程控制。
7.ptp_datatypes.h
ptpdv2中使用的主要结构,这个头文件定义了主程序数据结构,以及所有消息结构。
8.ptp_primitives.h
定义数据类型,如UInteger48 类型,Integer64 类型等
9.ptp_timers.c
计时器代码
10.ptpd.c
main函数
11.signaling.c
处理单播协商和处理信令消息代码
12.timedomain.c
时钟控制代码,负责监测本地时钟的状态、调整时钟频率和校准等操作,以保持时钟的准确性。
2.def文件夹
包含 X-Macros 在中引用的组件宏 .def 文件。
组件宏用于定义消息、派生数据类型和管理 TLV 字段。
X-Macros 用于自动生成大部分用于打包、解包和释放 ptp 数据字段的代码
3.dep文件夹
1.iniparser文件夹
解析配置文件信息(ini)
2.ntpengine文件夹
MD5代码以及ntpdc代码
3.alarms.c
处理警报的发出和清除。
4.configdefaults.c
配置文件模板的定义
5.daemonconfig.c
处理配置文件解析、重新加载、加载默认参数,解析命令行选项,打印帮助输出等。
6.eventtimer_itimer.c
EventTimer 间隔计时器实现
7.eventtimer_posix.c
EventTimer POSIX 计时器实现
8.eventtimer.c
EventTimer 对象的公共代码,负责创建和删除 加上维护链表所有创建的实例。
9.ipv4_acl.c
解析、创建和匹配 IPv4 ACL。
10.msg.c
打包和解包消息的代码。
11.net.c
与网络套接字和 NIC 驱动程序交互的代码。
12.outlierfilter.c
处理离群值过滤的代码
13.servo.c
在软件中实现时钟伺服的代码。
14.snmp.c
SNMP相关函数。
SNMP是广泛应用于TCP/IP网络的网络管理标准协议,该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。
SNMP采用轮询机制,提供最基本的功能集,适合小型、快速、低价格的环境使用,而且SNMP以用户数据报协议(UDP)报文为承载,因而受到绝大多数设备的支持,同时保证管理信息在任意两点传送,便于管理员在网络上的任何节点检索信息,进行故障排查。
15.startup.c
守护进程启动时调用此文件中的函数,并包括 getopt() 命令行参数解析。
16.statistics.c
维护和实现计算统计信息。
17.sys.c
调用内核时间例程并显示服务器统计信息的代码。
3.安装和使用ptpd
git clone https://github.com/ptpd/ptpd.git
cd ptpd
autoreconf -vi
./configure
make
make install
下载,以及主机编译
主机
./ptpd2 -M -i eth0 -C
从机
./ptpd2 -s -i eth0 -C
运行图就是正常打印。
如果要交叉编译参考ptpd2源码编译