63135b8a35a17da8253ee0781f1188455006a411
[o-du/phy.git] / docs / PTP-configuration_fh.rst
1 ..    Copyright (c) 2019 Intel
2 ..
3 ..  Licensed under the Apache License, Version 2.0 (the "License");
4 ..  you may not use this file except in compliance with the License.
5 ..  You may obtain a copy of the License at
6 ..
7 ..      http://www.apache.org/licenses/LICENSE-2.0
8 ..
9 ..  Unless required by applicable law or agreed to in writing, software
10 ..  distributed under the License is distributed on an "AS IS" BASIS,
11 ..  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 ..  See the License for the specific language governing permissions and
13 ..  limitations under the License.
14
15 .. |br| raw:: html
16
17    <br />
18    
19 PTP configuration
20 =================
21
22 A.5 PTP Synchronization
23 -----------------------
24 Precision Time Protocol (PTP) provides an efficient way to synchronize
25 time on the network nodes. This protocol uses Master-Slave architecture.
26 Grandmaster Clock (Master) is a reference clock for the other nodes,
27 which adapt their clocks to the master.
28
29 Using Physical Hardware Clock (PHC) from the Grandmaster Clock, NIC port
30 precision timestamp packets can be served for other network nodes. Slave
31 nodes adjust their PHC to the master following the IEEE 1588
32 specification.
33
34 There are existing implementations of PTP protocol that are widely used
35 in the industry. One of them is PTP for Linux, which is a set of tools
36 providing necessary PTP functionality. There is no need to re-implement
37 the 1588 protocol because PTP for Linux is precise and efficient enough
38 to be used out of the box.
39
40 To meet xRAN requirements, two tools from PTP for Linux package are
41 required: ptp4l and phc2sys.
42
43 PTP for Linux\* Requirements
44 ----------------------------
45
46 PTP for Linux\* introduces some software and hardware requirements. The
47 machine on which the tools will be run needs to use at least a 3.10
48 Kernel version (built-in PTP support). There are several Kernel options
49 that need to be enabled in Kernel configuration:
50
51 -  CONFIG_PPS
52
53 -  CONFIG_NETWORK_PHY_TIMESTAMPING
54
55 -  PTP_1588_CLOCK
56
57 Be sure that the Kernel is compiled with these options.
58
59 For the best precision, PTP uses hardware timestamping. NIC has its own
60 clock, called Physical Hardware Clock (PHC) to read current time just a
61 moment before the packet is sent to minimalize the delays added by the
62 Kernel processing the packet. Not every NIC supports that feature. To
63 confirm that currently attached NIC support Hardware Timestamps, use
64 ethtool with the command:
65
66 ethtool -T eth0
67
68 where eth0 is the potential PHC port. The output from the command should
69 say that there is Hardware Timestamps support.
70
71 To set up PTP for Linux*:
72
73 1.Download source code::
74
75     git clone http://git.code.sf.net/p/linuxptp/code linuxptp
76     
77     git checkout v2.0
78     
79 2.Apply patch (this is required to work around issue with some of the
80 GM PTP packet size.)::
81
82     diff --git a/msg.c b/msg.c
83     
84     old mode 100644
85     
86     new mode 100755
87     
88     index d1619d4..40d1538
89     
90     --- a/msg.c
91     
92     +++ b/msg.c
93     
94     @@ -399,9 +399,11 @@ int msg_post_recv(struct ptp_message \*m, int cnt)
95     
96     port_id_post_recv(&m->pdelay_resp.requestingPortIdentity);
97     
98     break;
99     
100     case FOLLOW_UP:
101     
102     + cnt -= 4;
103     
104     timestamp_post_recv(m, &m->follow_up.preciseOriginTimestamp);
105     
106     break;
107     
108     case DELAY_RESP:
109     
110     + cnt -= 4;
111     
112     timestamp_post_recv(m, &m->delay_resp.receiveTimestamp);
113     
114     port_id_post_recv(&m->delay_resp.requestingPortIdentity);
115     
116     break;
117
118 3.Build and install ptp41::
119
120    # make && make install
121
122 4.Modify configs/default.cfg to control frequency of Sync interval to
123 0.0625s::
124
125     logSyncInterval -4
126
127 ptp4l 
128 ----------
129
130 This tool handles all PTP traffic on the provided NIC port and updated
131 PHC. It also determines the Grandmaster Clock and tracks |br|
132 synchronization
133 status. This tool can be run as a daemon or as a regular Linux\*
134 application. When the synchronization is reached, it gives output on the
135 screen for precision tracking. The configuration file of ptp4l contains
136 many options that can be set to get the best synchronization precision.
137 Although, even with default.cfg the synchronization quality is good.
138
139 To start the synchronization process run::
140
141     cd linuxptp
142     
143     ./ptp4l -f ./configs/default.cfg -2 -i <if_name> -m
144
145 The output below shows what the output on non-master node should look
146 like when synchronization is started. This means that PHC on this
147 machine is synchronized to the master PHC::
148
149     ptp4l[1434165.358]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
150     
151     ptp4l[1434165.358]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
152     
153     ptp4l[1434166.384]: port 1: new foreign master fcaf6a.fffe.029708-1
154     
155     ptp4l[1434170.352]: selected best master clock fcaf6a.fffe.029708
156     
157     ptp4l[1434170.352]: updating UTC offset to 37
158     
159     ptp4l[1434170.352]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
160     
161     ptp4l[1434171.763]: master offset -5873 s0 freq -18397 path delay 2778
162     
163     ptp4l[1434172.763]: master offset -6088 s2 freq -18612 path delay 2778
164     
165     ptp4l[1434172.763]: port 1: UNCALIBRATED to SLAVE on
166     MASTER_CLOCK_SELECTED
167     
168     ptp4l[1434173.763]: master offset -5886 s2 freq -24498 path delay 2732
169     
170     ptp4l[1434174.763]: master offset 221 s2 freq -20157 path delay 2728
171     
172     ptp4l[1434175.763]: master offset 1911 s2 freq -18401 path delay 2724
173     
174     ptp4l[1434176.763]: master offset 1774 s2 freq -17964 path delay 2728
175     
176     ptp4l[1434177.763]: master offset 1198 s2 freq -18008 path delay 2728
177     
178     ptp4l[1434178.763]: master offset 746 s2 freq -18101 path delay 2755
179     
180     ptp4l[1434179.763]: master offset 218 s2 freq -18405 path delay 2792
181     
182     ptp4l[1434180.763]: master offset 103 s2 freq -18454 path delay 2792
183     
184     ptp4l[1434181.763]: master offset -13 s2 freq -18540 path delay 2813
185     
186     ptp4l[1434182.763]: master offset 9 s2 freq -18521 path delay 2813
187     
188     ptp4l[1434183.763]: master offset 11 s2 freq -18517 path delay 2813
189     
190 phc2sys
191 -----------
192
193 The PHC clock is independent from the system clock. Synchronizing only
194 PHC does not make the system clock exactly the same as the master. The
195 xRAN library requires use of the system clock to determine a common
196 point in time on two |br|
197 machines (O-DU and RU) to start transmission at the
198 same moment and keep time frames defined by ORAN Fronthaul |br|
199 specification.
200
201 This application keeps the system clock updated to PHC. It makes it
202 possible to use POSIX timers as a time reference in xRAN application.
203
204 Run phc2sys with the command::
205
206     cd linuxptp
207     
208     ./phc2sys -s enp25s0f0 -w -m -R 8
209
210 Command output will look like::
211
212     ptp4l[1434165.342]: selected /dev/ptp4 as PTP
213     
214     phc2sys[1434344.651]: CLOCK_REALTIME phc offset 450 s2 freq -39119 delay
215     1354
216     
217     phc2sys[1434344.776]: CLOCK_REALTIME phc offset 499 s2 freq -38620 delay
218     1344
219     
220     phc2sys[1434344.902]: CLOCK_REALTIME phc offset 485 s2 freq -38484 delay
221     1347
222     
223     phc2sys[1434345.027]: CLOCK_REALTIME phc offset 476 s2 freq -38348 delay
224     1346
225     
226     phc2sys[1434345.153]: CLOCK_REALTIME phc offset 392 s2 freq -38289 delay
227     1340
228     
229     phc2sys[1434345.278]: CLOCK_REALTIME phc offset 319 s2 freq -38244 delay
230     1340
231     
232     phc2sys[1434345.404]: CLOCK_REALTIME phc offset 278 s2 freq -38190 delay
233     1349
234     
235     phc2sys[1434345.529]: CLOCK_REALTIME phc offset 221 s2 freq -38163 delay
236     1343
237     
238     phc2sys[1434345.654]: CLOCK_REALTIME phc offset 97 s2 freq -38221 delay
239     1342
240     
241     phc2sys[1434345.780]: CLOCK_REALTIME phc offset 67 s2 freq -38222 delay
242     1344
243     
244     phc2sys[1434345.905]: CLOCK_REALTIME phc offset 68 s2 freq -38201 delay
245     1341
246     
247     phc2sys[1434346.031]: CLOCK_REALTIME phc offset 104 s2 freq -38144 delay
248     1340
249     
250     phc2sys[1434346.156]: CLOCK_REALTIME phc offset 58 s2 freq -38159 delay
251     1340
252     
253     phc2sys[1434346.281]: CLOCK_REALTIME phc offset 12 s2 freq -38188 delay
254     1343
255     
256     phc2sys[1434346.407]: CLOCK_REALTIME phc offset -36 s2 freq -38232 delay
257     1342
258     
259     phc2sys[1434346.532]: CLOCK_REALTIME phc offset -103 s2 freq -38310
260     delay 1348
261
262 Configuration C3
263 ------------------
264
265 Configuration C3 27 can be simulated for O-DU using a separate server
266 acting as Fronthaul Network and O-RU at the same time. O-RU server can
267 be configured to relay PTP and act as PTP master for O-DU. Settings
268 below can be used to |br|
269 instantiate this scenario. The difference is that
270 on the O-DU side, the Fronthaul port can be used as the source of PTP as
271 well as for U-plane and C-plane traffic.
272
273 1.Follow the steps in Section A.6.1 to install PTP on the O-RU server.
274
275 2.Copy configs/default.cfg to configs/default_slave.cfg and modify the
276 copied file as below::
277
278     diff --git a/configs/default.cfg b/configs/default.cfg
279     
280     old mode 100644
281     
282     new mode 100755
283     
284     index e23dfd7..f1ecaf1
285     
286     --- a/configs/default.cfg
287     
288     +++ b/configs/default.cfg
289     
290     @@ -3,26 +3,26 @@
291     
292     # Default Data Set
293     
294     #
295     
296     twoStepFlag 1
297     
298     -slaveOnly 0
299     
300     +slaveOnly 1
301     
302     priority1 128
303     
304     -priority2 128
305     
306     +priority2 255
307     
308     domainNumber 0
309     
310     #utc_offset 37
311     
312     -clockClass 248
313     
314     +clockClass 255
315     
316     clockAccuracy 0xFE
317     
318     offsetScaledLogVariance 0xFFFF
319     
320     free_running 0
321     
322     freq_est_interval 1
323     
324     dscp_event 0
325     
326     dscp_general 0
327     
328     -dataset_comparison ieee1588
329     
330     +dataset_comparison G.8275.x
331     
332     G.8275.defaultDS.localPriority 128
333     
334     maxStepsRemoved 255
335     
336     #
337     
338     # Port Data Set
339     
340     #
341     
342     logAnnounceInterval 1
343     
344     -logSyncInterval 0
345     
346     +logSyncInterval -4
347     
348     operLogSyncInterval 0
349     
350     logMinDelayReqInterval 0
351     
352     logMinPdelayReqInterval 0
353     
354     @@ -37,7 +37,7 @@ G.8275.portDS.localPriority 128
355     
356     asCapable auto
357     
358     BMCA ptp
359     
360     inhibit_announce 0
361     
362     -inhibit_pdelay_req 0
363     
364     +#inhibit_pdelay_req 0
365     
366     ignore_source_id 0
367     
368     #
369     
370     # Run time options
371
372 1.Start slave port toward PTP GM:: 
373
374     ./ptp4l -f ./configs/default_slave.cfg -2 -i enp25s0f0 –m
375
376 Example of output::
377
378     ./ptp4l -f ./configs/default_slave.cfg -2 -i enp25s0f0 -m
379     
380     ptp4l[3904470.256]: selected /dev/ptp6 as PTP clock
381     
382     ptp4l[3904470.274]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
383     
384     ptp4l[3904470.275]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
385     
386     ptp4l[3904471.085]: port 1: new foreign master fcaf6a.fffe.029708-1
387     
388     ptp4l[3904475.053]: selected best master clock fcaf6a.fffe.029708
389     
390     ptp4l[3904475.053]: updating UTC offset to 37
391     
392     ptp4l[3904475.053]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
393     
394     ptp4l[3904477.029]: master offset 196 s0 freq -18570 path delay 1109
395     
396     ptp4l[3904478.029]: master offset 212 s2 freq -18554 path delay 1109
397     
398     ptp4l[3904478.029]: port 1: UNCALIBRATED to SLAVE on
399     MASTER_CLOCK_SELECTED
400     
401     ptp4l[3904479.029]: master offset 86 s2 freq -18468 path delay 1109
402     
403     ptp4l[3904480.029]: master offset 23 s2 freq -18505 path delay 1124
404     
405     ptp4l[3904481.029]: master offset 3 s2 freq -18518 path delay 1132
406     
407     ptp4l[3904482.029]: master offset -169 s2 freq -18689 path delay 1141
408
409 2.Synchronize local timer clock on O-RU for sample application::
410
411    ./phc2sys -s enp25s0f0 -w -m -R 8
412
413 Example of output::
414
415    ./phc2sys -s enp25s0f0 -w -m -R 8
416    
417    phc2sys[3904510.892]: CLOCK_REALTIME phc offset 343 s0 freq -38967 delay
418    1530
419    
420    phc2sys[3904511.017]: CLOCK_REALTIME phc offset 368 s2 freq -38767 delay
421    1537
422    
423    phc2sys[3904511.142]: CLOCK_REALTIME phc offset 339 s2 freq -38428 delay
424    1534
425    
426    phc2sys[3904511.267]: CLOCK_REALTIME phc offset 298 s2 freq -38368 delay
427    1532
428    
429    phc2sys[3904511.392]: CLOCK_REALTIME phc offset 239 s2 freq -38337 delay
430    1534
431    
432    phc2sys[3904511.518]: CLOCK_REALTIME phc offset 145 s2 freq -38360 delay
433    1530
434    
435    phc2sys[3904511.643]: CLOCK_REALTIME phc offset 106 s2 freq -38355 delay
436    1527
437    
438    phc2sys[3904511.768]: CLOCK_REALTIME phc offset -30 s2 freq -38459 delay
439    1534
440    
441    phc2sys[3904511.893]: CLOCK_REALTIME phc offset -92 s2 freq -38530 delay
442    1530
443    
444    phc2sys[3904512.018]: CLOCK_REALTIME phc offset -173 s2 freq -38639
445    delay 1528
446    
447    phc2sys[3904512.143]: CLOCK_REALTIME phc offset -246 s2 freq -38764
448    delay 1530
449    
450    phc2sys[3904512.268]: CLOCK_REALTIME phc offset -300 s2 freq -38892
451    delay 1532
452
453 3. Modify configs/default.cfg as shown below to run PTP master on
454 Fronthaul of O-RU::
455
456     diff --git a/configs/default.cfg b/configs/default.cfg
457     
458     old mode 100644
459     
460     new mode 100755
461     
462     index e23dfd7..c9e9d4c
463     
464     --- a/configs/default.cfg
465     
466     +++ b/configs/default.cfg
467     
468     @@ -15,14 +15,14 @@ free_running 0
469     
470     freq_est_interval 1
471     
472     dscp_event 0
473     
474     dscp_general 0
475     
476     -dataset_comparison ieee1588
477     
478     +dataset_comparison G.8275.x
479     
480     G.8275.defaultDS.localPriority 128
481     
482     maxStepsRemoved 255
483     
484     #
485     
486     # Port Data Set
487     
488     #
489     
490     logAnnounceInterval 1
491     
492     -logSyncInterval 0
493     
494     +logSyncInterval -4
495     
496     operLogSyncInterval 0
497     
498     logMinDelayReqInterval 0
499     
500     logMinPdelayReqInterval 0
501     
502     @@ -37,7 +37,7 @@ G.8275.portDS.localPriority 128
503     
504     asCapable auto
505     
506     BMCA ptp
507     
508     inhibit_announce 0
509     
510     -inhibit_pdelay_req 0
511     
512     +#inhibit_pdelay_req 0
513     
514     ignore_source_id 0
515     
516     #
517     
518     # Run time options
519
520 4.Start PTP master toward O-DU::
521
522    ./ptp4l -f ./configs/default.cfg -2 -i enp175s0f1 –m
523
524 Example of output::
525
526    ./ptp4l -f ./configs/default.cfg -2 -i enp175s0f1 -m
527    
528    ptp4l[3903857.249]: selected /dev/ptp3 as PTP clock
529    
530    ptp4l[3903857.266]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
531    
532    ptp4l[3903857.267]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
533    
534    ptp4l[3903863.734]: port 1: LISTENING to MASTER on
535    ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
536    
537    ptp4l[3903863.734]: selected local clock 3cfdfe.fffe.bd005d as best
538    master
539    
540    ptp4l[3903863.734]: assuming the grand master role
541
542 5.Synchronize local NIC PTP master clock to local NIC PTP slave clock::
543
544    ./phc2sys -c enp175s0f1 -s enp25s0f0 -w -m -R 8
545
546 Example of output::
547
548    ./phc2sys -c enp175s0f1 -s enp25s0f0 -w -m -R 8
549
550    phc2sys[3904600.332]: enp175s0f1 phc offset 2042 s0 freq -2445 delay
551    4525
552    
553    phc2sys[3904600.458]: enp175s0f1 phc offset 2070 s2 freq -2223 delay
554    4506
555    
556    phc2sys[3904600.584]: enp175s0f1 phc offset 2125 s2 freq -98 delay 4505
557    
558    phc2sys[3904600.710]: enp175s0f1 phc offset 1847 s2 freq +262 delay 4518
559    
560    phc2sys[3904600.836]: enp175s0f1 phc offset 1500 s2 freq +469 delay 4515
561    
562    phc2sys[3904600.961]: enp175s0f1 phc offset 1146 s2 freq +565 delay 4547
563    
564    phc2sys[3904601.086]: enp175s0f1 phc offset 877 s2 freq +640 delay 4542
565    
566    phc2sys[3904601.212]: enp175s0f1 phc offset 517 s2 freq +543 delay 4517
567    
568    phc2sys[3904601.337]: enp175s0f1 phc offset 189 s2 freq +370 delay 4510
569    
570    phc2sys[3904601.462]: enp175s0f1 phc offset -125 s2 freq +113 delay 4554
571    
572    phc2sys[3904601.587]: enp175s0f1 phc offset -412 s2 freq -212 delay 4513
573    
574    phc2sys[3904601.712]: enp175s0f1 phc offset -693 s2 freq -617 delay 4519
575    
576    phc2sys[3904601.837]: enp175s0f1 phc offset -878 s2 freq -1009 delay
577    4515
578    
579    phc2sys[3904601.962]: enp175s0f1 phc offset -965 s2 freq -1360 delay
580    4518
581    
582    phc2sys[3904602.088]: enp175s0f1 phc offset -1048 s2 freq -1732 delay
583    4510
584    
585    phc2sys[3904602.213]: enp175s0f1 phc offset -1087 s2 freq -2086 delay
586    4531
587    
588    phc2sys[3904602.338]: enp175s0f1 phc offset -1014 s2 freq -2339 delay
589    4528
590    
591    phc2sys[3904602.463]: enp175s0f1 phc offset -1009 s2 freq -2638 delay
592    4531
593
594 6. On O-DU Install PTP for Linux tools from source code the same way as
595 on O-RU above but no need to apply the patch for msg.c
596
597 7. Start slave port toward PTP master from O-RU using the same
598 default_slave.cfg as on O-RU (see above)::
599
600     ./ptp4l -f ./configs/default_slave.cfg -2 -i enp181s0f0 –m
601
602 Example of output::
603
604     ./ptp4l -f ./configs/default_slave.cfg -2 -i enp181s0f0 -m
605     
606     ptp4l[809092.918]: selected /dev/ptp6 as PTP clock
607     
608     ptp4l[809092.934]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
609     
610     ptp4l[809092.934]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
611     
612     ptp4l[809092.949]: port 1: new foreign master 3cfdfe.fffe.bd005d-1
613     
614     ptp4l[809096.949]: selected best master clock 3cfdfe.fffe.bd005d
615     
616     ptp4l[809096.950]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
617     
618     ptp4l[809098.363]: port 1: UNCALIBRATED to SLAVE on
619     MASTER_CLOCK_SELECTED
620     
621     ptp4l[809099.051]: rms 38643 max 77557 freq +719 +/- 1326 delay 1905 +/-
622     0
623     
624     ptp4l[809100.051]: rms 1134 max 1935 freq -103 +/- 680 delay 1891 +/- 4
625     
626     ptp4l[809101.051]: rms 453 max 855 freq +341 +/- 642 delay 1888 +/- 0
627     
628     ptp4l[809102.052]: rms 491 max 772 freq +1120 +/- 752 delay 1702 +/- 0
629     
630     ptp4l[809103.052]: rms 423 max 654 freq +1352 +/- 653 delay 1888 +/- 0
631     
632     ptp4l[809104.052]: rms 412 max 579 freq +1001 +/- 672 delay 1702 +/- 0
633     
634     ptp4l[809105.053]: rms 441 max 672 freq +807 +/- 709 delay 1826 +/- 88
635     
636     ptp4l[809106.053]: rms 422 max 607 freq +1353 +/- 636 delay 1702 +/- 0
637     
638     ptp4l[809107.054]: rms 401 max 466 freq +946 +/- 646 delay 1702 +/- 0
639     
640     ptp4l[809108.055]: rms 401 max 502 freq +912 +/- 659
641
642 8. Synchronize local clock on O-DU for sample application or l1
643 application::
644
645     ./phc2sys -s enp181s0f0 -w -m -R 8
646
647 Example of output::
648
649    ./phc2sys -s enp181s0f0 -w -m -R 8
650
651     phc2sys[809127.123]: CLOCK_REALTIME phc offset 675 s0 freq -37379 delay
652     1646
653     
654     phc2sys[809127.249]: CLOCK_REALTIME phc offset 696 s2 freq -37212 delay
655     1654
656     
657     phc2sys[809127.374]: CLOCK_REALTIME phc offset 630 s2 freq -36582 delay
658     1648
659     
660     phc2sys[809127.500]: CLOCK_REALTIME phc offset 461 s2 freq -36562 delay
661     1642
662     
663     phc2sys[809127.625]: CLOCK_REALTIME phc offset 374 s2 freq -36510 delay
664     1643
665     
666     phc2sys[809127.751]: CLOCK_REALTIME phc offset 122 s2 freq -36650 delay
667     1649
668     
669     phc2sys[809127.876]: CLOCK_REALTIME phc offset 34 s2 freq -36702 delay
670     1650
671     
672     phc2sys[809128.002]: CLOCK_REALTIME phc offset -112 s2 freq -36837 delay
673     1645
674     
675     phc2sys[809128.127]: CLOCK_REALTIME phc offset -160 s2 freq -36919 delay
676     1643
677     
678     phc2sys[809128.252]: CLOCK_REALTIME phc offset -270 s2 freq -37077 delay
679     1657
680     
681     phc2sys[809128.378]: CLOCK_REALTIME phc offset -285 s2 freq -37173 delay
682     1644
683     
684     phc2sys[809128.503]: CLOCK_REALTIME phc offset -349 s2 freq -37322 delay
685     1644
686     
687     phc2sys[809128.629]: CLOCK_REALTIME phc offset -402 s2 freq -37480 delay
688     1641
689     
690     phc2sys[809128.754]: CLOCK_REALTIME phc offset -377 s2 freq -37576 delay
691     1648
692     
693     phc2sys[809128.879]: CLOCK_REALTIME phc offset -467 s2 freq -37779 delay
694     1650
695     
696     phc2sys[809129.005]: CLOCK_REALTIME phc offset -408 s2 freq -37860 delay
697     1648
698     
699     phc2sys[809129.130]: CLOCK_REALTIME phc offset -480 s2 freq -38054 delay
700     1655
701     
702     phc2sys[809129.256]: CLOCK_REALTIME phc offset -350 s2 freq -38068 delay
703     1650
704
705 Support in xRAN Library
706 ----------------------------
707
708 The xRAN library provides an API to check whether PTP for Linux is
709 running correctly. There is a function called xran_is_synchronized(). It
710 checks if ptp4l and phc2sys are running in the system by making PMC tool
711 requests for current port state and comparing it with the expected
712 value. This verification should be done before initialization.
713
714 *notes. “SLAVE” is the only expected value in this release; only a
715 non-master scenario is supported currently.*
716
717 .. |image0| image:: media/image3.png
718    :width: 2.52364in
719    :height: 3.77174in
720 .. |image1| image:: media/image8.png
721    :width: 6.258in
722    :height: 1.40538in
723 .. |image2| image:: media/image10.emf
724    :width: 6.18493in
725    :height: 0.53448in
726 .. |image3| image:: media/image15.png
727    :width: 6.27856in
728    :height: 2.672in
729 .. |image4| image:: media/image21.JPG
730    :width: 6.17708in
731    :height: 6.09375in