ptp4l -i ens33 -f /etc/ptp4l.conf -m -S -2 #服务端 ptp4l -i ens33 -f /etc/ptp4l.conf -m -S -s -2 --step_threshold 0.00002 #客户端 phc2sys -s CLOCK_REALTIME -w -m #设置时间
摘自:https://blog.csdn.net/weixin_49041703/article/details/143308233
1 名称
ptp4l - PTP普通时钟/边界时钟/透明时钟协议栈
2 描述
ptp4l是一个Linux上PTP协议(IEEE 1588)的实现,支持普通时钟,边界时钟和透明时钟。
3 配置选项
配置选项 描述
-A 自动选择延迟测量机制,运行时使用E2E,但接收到peer delay request报文后自动切换到P2P。 -E E2E延迟测量机制 (默认配置) -P P2P延迟测量机制 -2 IEEE 802.3协议 -4 UDP/IPv4协议(默认配置) -6 UDP/IPv6协议 -H 硬件时间戳(默认配置) -S 软件时间戳 -L Legacy硬件时间戳 -f 指定配置文件,若没有指定,则使用默认配置。 -i 指定网口(PTP port),可以多次使用指定多个网口,但该选项或配置文件中至少要指定一个。 -p 指定PHC (PTP Hardware Clock) device,例如/dev/ptp0,该选项已经不推荐使用,适用于v3.5之前的内核,因为v3.5之前的内核不支持通过网口找到PHC device。 -s slaveOnly模式 -l 打印级别 0~7(默认6,LOG_INFO) -m 将信息打印到标准输出 -q 不将信息发送到系统logger -v 显示版本号 -h 显示help信息
4 长配置选项
下面每一个在配置文件中使用的选项也可以在命令行中使用,例如slaveOnly选项,可以在命令行中以下面的形式使用,
--slaveOnly 1 --slaveOnly=1
命令行中使用的配置选项的值,会覆盖配置文件中的[global]段配置选项的值。
5 配置文件
配置文件按段划分,空行和#开头的行会被忽略。
有三种段类型:
[global]段,用来配置program选项,clock选项,默认port选项。
port段使用被配置的网口的名字,如[eth0]段,其配置的选项会覆盖[global]段中默认port选项。port段可以为空内容,作用只是指定网口,这样命令行中不必使用-i选项。
[unicast_master_table]段,配置单播table,后面会有介绍。
5.1 Port选项
配置选项 描述 默认值 delayAsymmetry 非对称延迟,传输路径和接收路径的时间差,单位ns。当server-to-client传输时间更长时为正数,client-to-server传输时间更长时为负数。 0 logAnnounceInterval Announce报文发送时间间隔。同一个domain里的PTP设备,应该使用相同的值。时间间隔值为该值的2的次方。 1(2秒) logSyncInterval Sync报文发送时间间隔。时间间隔值为该值的2的次方。 0(1秒) operLogSyncInterval 时钟进入SERVO_LOCKED_STABLE状态时,请求的Sync报文时间间隔。如果配置了msg_interval_request选项,本地client port将请求远程server改变Sync报文发送时间间隔。时间间隔值为该值的2的次方。 0(1秒) logMinDelayReqInterval 允许的最小Delay_Req报文发送时间间隔。时间间隔值为该值的2的次方。 0(1秒) logMinPdelayReqInterval 允许的最小Pdelay_Req报文发送时间间隔。时间间隔值为该值的2的次方。 0(1秒) operLogPdelayReqInterval 时钟进入SERVO_LOCKED_STABLE状态时,要使用的Pdelay_Req报文时间间隔。如果配置了msg_interval_request选项,本地client port将使用该Pdelay_Req报文发送时间间隔。时间间隔值为该值的2的次方。 0(1秒) inhibit_delay_req 禁止发送任何delay request,需要配置asCapable为true。 0(disabled) announceReceiptTimeout 没有收到Announce报文的数目,用来判断Announce报文超时。 3 syncReceiptTimeout 没有收到sync/follow报文的数目,用于gPTP模式判断Sync是否超时,是否触发best master clock选择。 0(disabled) transportSpecific 报文transportSpecific域,范围0~255。 0 ignore_transport_specific 接收报文的transportSpecific域值,如果和配置的值匹配,则会被丢弃。设置该选项为1可以忽略该值的匹配。 0 path_trace_enabled 记录Annouce报文的路径。 0 follow_up_info 在follow_up报文包含802.1AS的数据 0 fault_reset_interval 重置port错误的时间,单位秒,时间值为该值的2的次方。 4(16秒) fault_badpeernet_interval 重置peer网络错误配置的时间,单位秒,时间值为该值的2的次方。 4(16秒) delay_mechanism 延迟测量机制,E2E, P2P或者Auto。 E2E hybrid_e2e delay request/response使用单播地址 0 inhibit_multicast_service 禁止多播,使用单播。 0 net_sync_monitor 使能NetSync Monitor协议,该选项要求hybrid_e2e被使能。 0 unicast_listen 单播监听 0 unicast_master_table 选择用于单播发现的table id 0 unicast_req_duration 单播发现的时间,单位秒。 3600 ptp_dst_mac PTP报文发送的MAC地址 01:1B:19:00:00:00 p2p_dst_mac peer机制报文发送的MAC地址 01:80:C2:00:00:0E network_transport 传输协议,UDPv4, UDPv6或L2 UDPv4 neighborPropDelayThresh peer delay最大阈值,单位ns,超过该值则认为对端设备是非gPTP设备 20000000 masterOnly 绕过BMCA,使clock工作在master模式 0 G.8275.portDS.localPriority ITU-T G.8275.1 and G.8275.2使用 128 min_neighbor_prop_delay peer delay最小阈值,单位ns,低于该值则认为对端设备是非gPTP设备 -20000000 tsproc_mode 时间戳计算模式,用来计算offset和delay。可选择filter, raw, filter_weight, raw_weight。 filter delay_filter 延迟测量的滤波算法,可选择moving_average或moving_median。 moving_median delay_filter_length 延迟滤波采样长度 10 egressLatency 发送延迟补偿,单位ns 0 ingressLatency 接收延迟补偿,单位ns 0 boundary_clock_jbod 允许多个PTP时钟,作为一个边界时钟来运行。要有额外的程序保证多个PTP时钟的同步。 0 udp_ttl UDP包生存时间值 1 5.2 程序选项和时钟选项 配置选项 描述 默认值 twoStepFlag 两步时间戳模式,单步时间戳模式选择 1 slaveOnly 绕过BMCA,使clock工作在slave模式 0 socket_priority 报文优先级,0~15,只在L2协议下生效 0 gmCapable 是否具有master能力,只对gPTP模式生效 1 priority1 时钟priority1属性,0~255 128 priority2 时钟priority2属性,0~255 128 clockClass 时钟clockClass属性 248 clockAccuracy 时钟clockAccuracy属性 0xFE clockIdentity 时钟clockIdentity属性,使用默认值则会在运行时自动生成 000000.0000.000000 offsetScaledLogVariance 时钟offsetScaledLogVariance属性 0xFFFF G.8275.defaultDS.localPriority ITU-T G.8275.1 and G.8275.2使用 128 maxStepsRemoved Announce报文的stepsRemoved值大于等于该值时,则不参与BMCA 255 domainNumber PTP域 0 utc_offset TAI和UTC时间差 37 free_running 不调整物理时钟 0 freq_est_interval 评估本地时钟和对端时钟频率比值的时间间隔,时间间隔值为该值的2的次方。 1(2秒) assume_two_step 按两步报文的方式,处理单步报文 0 tc_spanning_tree 透明时钟生成树模式,在PTP网络中,实现所有透明时钟内增加Announce报文的stepsRemoved值,和相应BMCA,可以避免环形PTP报文循环。 0 tx_timestamp_timeout 等待发送时间戳的超时时间,单位ms 1 check_fup_sync 检查sync,follow_up报文顺序 0 clock_servo 时钟伺服器,可选择pi,ntpshm,nullf pi clock_type 时钟类型,OC,BC,E2E_TC,P2P_TC OC pi_proportional_const pi算法选项 0.0 pi_integral_const pi算法选项 0.0 pi_proportional_scale pi算法选项 0.0 pi_proportional_exponent pi算法选项 -0.3 pi_proportional_norm_max pi算法选项 0.7 pi_integral_scale pi算法选项 0.0 pi_integral_exponent pi算法选项 0.4 pi_integral_norm_max pi算法选项 0.3 step_threshold 步进时钟的阈值,超过阈值,直接调整时钟时间,单位秒 0.0 first_step_threshold 第一次步进时钟的阈值,超过阈值,直接调整时钟时间,单位秒 0.00002 max_frequency 最大频率调整值,单位ppb 900000000 (90%) sanity_freq_limit PTP时钟和系统monotonic时钟频率偏差限制,单位ppb 200000000 (20%) initial_delay 链路延迟初始值,单位ns。设置为0的话,程序会先测量 0 ntpshm_segment ntpshm私服使用的SHM段的数目 0 udp6_scope IPv6多播报文的范围,默认为全局范围 0x0E uds_address UNIX domain socket地址 /var/run/ptp4l dscp_event PTP事件报文使用的Differentiated Services Codepoint (DSCP),0~63 0 dscp_general PTP通用报文使用的Differentiated Services Codepoint (DSCP),0~63 0 dataset_comparison BMCA比较dataset的方法,可选择"ieee1588"或 “G.8275.x” ieee1588 logging_level log级别 6 (LOG_INFO) message_tag 可以添加到所有打印信息中 空字符 verbose 打印消息到标准输出 0 use_syslog 打印消息到系统日志 1 summary_interval 打印统计信息时间间隔,时间间隔值为该值的2的次方。 0(1秒) time_stamping 时间戳类型,可选择hardware, software, legacy, onestep, 或p2p1step hardware productDescription 时钟描述 ;; revisionData 时钟描述 ;; userDescription 时钟描述 空字符 manufacturerIdentity 时钟描述 00:00:00 kernel_leap linux内核闰秒 1 timeSource 时钟类型 0xA0 hwts_filter 硬件时间戳过滤器设置模式,可选择normal, check, full normal asCapable 如果设置为true,就认为是gPTP设备,不再检查。 auto BMCA 最优时钟算法,可选择masterOnly,slaveOnly或ptp ptp inhibit_announce 禁止发送Annouce报文,需要使能ignore_source_id 0 ignore_source_id 忽略sync和follow_up报文的source port id检查 0 msg_interval_request 是否使能请求调整sync和peer delay request报文的发送间隔 0 servo_num_offset_values 时间偏差值连续小于servo_offset_threshold的数目,达到这个数目伺服器进入stable状态 10 servo_offset_threshold 时间偏差阈值 0 slave_event_monitor slave事件监测的UNIX domain socket地址 空字符 write_phase_mode 使用PTP硬件写相位功能,代替调整频率偏差 0
6 单播发现选项
配置选项 描述
table_id table id,正数值
logQueryInterval 单播协商时间间隔,时间间隔值为该值的2的次方。
peer_address P2P单播地址
L2|UDPv4|UDPv6 传输协议
7. 时间尺度
ptp4l作为PTP域的主时钟时,使用PTP时间还是使用UTC时间取决于时间戳类型。软件时间戳和legacy时间戳模式,使用UTC时间,硬件时间戳使用PTP时间。ptp4l使用硬件时间戳作为主时钟时,由phc2sys程序维护UTC和PTP时间的校正值。
三、报文内容解释
字段 长度 含义
TranSpec 4bit 传送相关: 0–表示PTP消息由1588协议使用
1–表示PTP消息由802.1as协议使用
MsgType 4bit 表示消息类型。
1588v2消息分为两类:事件消息(EVENT Message)和通用消息(General Message)。
事件报文是时间概念报文,进出设备端口时需要打上精确的时间戳,
而通用报文则是非时间概念报文,进出设备不会产生时戳。
类型值0 ~ 3的为事件消息,8 ~ D为通用消息。
0x00: Sync
0x01: Delay_Req
0x02: Pdelay_Req
0x03:Pdelay_Resp
0x04-7: Reserved
0x08: Follow_Up
0x09: Delay_Resp
0x0A: Pdelay_Resp_Follow_Up
0x0B: Announce
0x0C: Signaling
0x0D: Management
0x0E-0x0F: Reserved
Reserved1 4bit 保留字段
VerPTP 4bit 表示1588协议的版本
MsgLength 2byte PTP消息的长度,即PTP消息的全部字节数目。
计入字节始于报头的第一个字节,同时包含并收尾于任何尾标的最后一个字节,或是无尾标成员时收尾于消息的最后一个字节。
DomainNumber 1byte 域编号,表示发送该消息时钟所属的域。
Reserved2 1byte 保留字段
FlagField 2byte 标志域(详情在后表)
CorrectionField 8byte 修正域,各报文都有,主要用在Sync报文中,用于补偿网络中的传输时延,E2E的频率同步。
Reserved3 4byte 保留字段
SourcePortIdentity 8byte 源时钟ID
SourcePortIdentity 2byte 源端口ID
SequenceID 2byte 序列号ID,表示消息的序列号,以及关联消息的对应关系。
ControlField 1byte 控制域,由消息类型决定:
0x00:Sync
0x01:Delay_Req
0x02:Follow_Up
0x03:Delay_Resp
0x04:Management
0x05:All others
0x06-0xFF:reserved
LogMsgInterval 1byte 录入消息周期,PTP消息的发送时间间隔,由消息类型决定。
PTP Specified Message Field n byte PTP消息体和消息扩展字节。