Linux へのPTPクライエントデーモン ptpd / ptpd2 のインストール
PTPdのサイトからソースをダウンロードします.
http://ptpd.sourceforge.net/
http://sourceforge.net/projects/ptpd/files/ptpd/
ptpd-1.x.x.tar.gz がPTPd Version 1 クライエントデーモンです.
ptpd-2.x.x.tar.gz がPTPd Version 2 クライエントデーモンです.
特にptpd2(version 2 クライエント)は大幅な変更が行われています.以下の文章はptpd-1.1.0 および ptpd-2.1.0 について書いたものです.最新リリースとは内容が大きく異なることがありますので,個々のリリースとともに提供される情報に従ってください.弊社ではptpd/ptpd2クライエントに関するサポートは行っておりません.
特に ptpd-2.2.x 以降では実験的な要素(PTPサーバーやNTPとの連携機能)を含む大きな変更が行われましたので,利用に当たっては注意願います.
例1:通常のコンパイルと実行
tar.gz ファイルを展開し,srcディレクトリでmakeすると,ptpd(PTP Version 1)ないしptpd2(PTP Version 2)が生成されます.生成したptpdないしptpd2を起動します.
# ./ptpd (PTP Version 1 クライエント)
ないし
# ./ptpd2 (PTP Version 2 クライエント)
デーモンとして起動し,グランドマスタークロックからのパケットの受信を始めます.
例2:ptpdの動作を確認するためのコンパイルと実行
デバッグオプションを有効にするために,Makefile を編集して CPPFLAGS = -DPTPD_DBG の行を作ってからmakeします.デバッグ機能付けてコンパイルした ptpd を -c オプションを付けて起動します.
# ./ptpd -c (PTP Version 1クライエント)
ないし
# ./ptpd2 -c (PTP Version 2クライエント)
起動するとメッセージを書き出しながら,グランドマスタークロックからのパケットの受信を始めます.
デバッグメッセージの例:
注記:offset from master: の行の最後の数字がマスターとのオフセットを示し,マスターとのその時点での同期誤差となる.トラフィックの少ないLAN環境では1us以下を示すことは珍しくないが,トラフィックの多いLAN環境では,同期精度はトラフィックによるネットワーク遅延の変動の影響を受ける.
(ptpd debug) offset from master: 0s -306ns
(ptpd debug) observed drift: -11903
(ptpd debug) offset from master: 0s -806ns
(ptpd debug) observed drift: -11903
(ptpd debug) offset from master: 0s -806ns
(ptpd debug) observed drift: -11903
(ptpd debug) Q = 0, R = 24
(ptpd debug) handleDelayReq: self
(ptpd debug) offset from master: 0s 1193ns
(ptpd debug) observed drift: -11902
(ptpd debug) delay filter 170324, 64
(ptpd debug) offset from master: 0s 684ns
(ptpd debug) observed drift: -11902
(ptpd debug) offset from master: 0s -824ns
コマンドオプションの表示
-? をつけて実行すると,コマンドオプションを同じ内容を表示します.
# ./ptpd -?
Usage: ptpd [OPTION]
-? show this page
-c run in command line (non-daemon) mode
-f FILE send output to FILE
-d display stats
-D display stats in .csv format
-x do not reset the clock if off by more than one second
-t do not adjust the system clock
-a NUMBER,NUMBER specify clock servo P and I attenuations
-w NUMBER specify one way delay filter stiffness
-b NAME bind PTP to network interface NAME
-u ADDRESS also send uni-cast to ADDRESS
-l NUMBER,NUMBER specify inbound, outbound latency in nsec
-o NUMBER specify current UTC offset
-e NUMBER specify epoch NUMBER
-h specify half epoch
-y NUMBER specify sync interval in 2^NUMBER sec
-m NUMBER specify max number of foreign master records
-g run as slave only
-p make this a preferred clock
-s NUMBER specify system clock stratum
-i NAME specify system clock identifier
-v NUMBER specify system clock allen variance
-n NAME specify PTP subdomain name (not related to IP or DNS)
-k NUMBER,NUMBER send a management message of key, record, then exit
ツール
toolsディレクトリには GNU Octave (Matlab 互換)のマクロが用意されています.
# ./ptpd2 -?
Usage: ptpv2d [OPTION]
Ptpv2d runs on UDP/IP , P2P mode by default
-? show this page
-c run in command line (non-daemon) mode
-f FILE send output to FILE
-S send output to syslog
-T set multicast time to live
-d display stats
-D display stats in .csv format
-R record data about sync packets in a file
-x do not reset the clock if off by more than one second
-O do not reset the clock if offset is more than NUMBER nanoseconds
-M do not accept delay values of more than NUMBER nanoseconds
-t do not adjust the system clock
-a NUMBER,NUMBER specify clock servo P and I attenuations
-w NUMBER specify one way delay filter stiffness
-b NAME bind PTP to network interface NAME
-u ADDRESS also send uni-cast to ADDRESS
-e run in ethernet mode (level2)
-h run in End to End mode
-l NUMBER,NUMBER specify inbound, outbound latency in nsec
-o NUMBER specify current UTC offset
-i NUMBER specify PTP domain number
-n NUMBER specify announce interval in 2^NUMBER sec
-y NUMBER specify sync interval in 2^NUMBER sec
-m NUMBER specify max number of foreign master records
-g run as slave only
-v NUMBER specify system clock allen variance
-r NUMBER specify system clock accuracy
-s NUMBER specify system clock class
-p NUMBER specify priority1 attribute
-q NUMBER specify priority2 attribute
自動起動 RedHat/CentOS
/usr/sbin/ptpd2 に実行ファイルを置く
/etc/sysconfig/ptpd2 を作成
#
# PTPD Configuration
#
# PTPDARGS="-D -b eth0 -f /var/log/ptpd.log"
PTPDARGS="-D -f /var/log/ptpd.log"
/etc/rc.d/init.d/ptpd2 を作成
#!/bin/sh
#
# ptpd Precision Time Protocol daemon
#
# chkconfig: - 30 70
# description: ptpd implements a sub ms time coordination of LAN connected computers \
# implementing IEEE 1588
# Source function library.
. /etc/rc.d/init.d/functions
# exec="/usr/bin/ptpd2"
exec="/usr/sbin/ptpd2"
prog="ptpd2"
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
lockfile=/var/lock/subsys/$prog
start() {
[ -x $exec ] || exit 5
echo -n $"Starting $prog: "
# if not running, start it up here, usually something like "daemon $exec"
daemon --user root $exec $PTPDARGS
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
# stop it here, often "killproc $prog"
killproc $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
restart
}
force_reload() {
restart
}
rh_status() {
# run checks to determine if the service is running or use generic status
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $? 起動
service ptpd2 start 自動起動
chkconfig ptpd2 on |