Commit 74459d12 authored by Grzegorz Daniluk's avatar Grzegorz Daniluk

WRPC Failures and Diagnostics document - first draft

parent 24895538
revinfo.tex
wrpc_failures.pdf
all : wrpc_failures.pdf
.PHONY : all clean
RELEASE = $(shell git describe --always --dirty)
wrpc_failures.pdf : wrpc_failures.tex fail.tex intro.tex snmp_objects.tex snmp_exports.tex
@echo '\\newcommand{\\gitrevinfo}{'$(RELEASE)'}' > revinfo.tex
pdflatex wrpc_failures.tex
pdflatex wrpc_failures.tex
# To speed up generation of document for development, please comment out:
# % print alphabetical list
# \printnoidxglossary[type=snmp_all,style=tree,sort=letter]
# from doc/wrpc_failures/snmp_exports.tex file.
clean :
rm -f *.eps *.dat *.log *.out *.aux *.dvi *.ps *.toc *.pdf revinfo.tex
This section tries to identify all the possible ways the White Rabbit PTP Core can
fail. The structure of each error description is the following:
\begin{itemize}[leftmargin=0pt]
\item [] \underline{Severity}: describes how critical is the fault. Currently
we distinguish two severity levels:
\begin{packed_items}
\item WARNING - means that despite the fault the synchronization
functionality was not affected so the WRPC behaves correctly in the WR
network.
\item ERROR - means that the fault is critical and most probably a WRPC
misbehaves.
\end{packed_items}
\item [] \underline{Mode}: for timing failures, it describes which modes are
affected. Possible values are:
\begin{packed_items}
\item \emph{Slave} - the WR PTP Core synchronizes to another WR device.
\item \emph{Grand Master} - the WR node (WR PTP Core) at the top of the
synchronization hierarchy. It is synchronized to an external clock (e.g.
GPS, Cesium) and provides timing to other WR/PTP devices.
\item \emph{Master} - the WR node (WR PTP Core) at the top of the
synchronization hierarchy. It provides timing to other WR/PTP devices
but runs from a local oscillator (not synchronized to an external
clock).
\item \emph{all} - any WR PTP Core can be affected regardless the timing
mode.
\end{packed_items}
\item [] \underline{Description}: What the problem is about, how important it
is and what are the effects if it occurs.
\item [] \underline{SNMP objects}: Which SNMP objects should be monitored to
detect the failure. These are objects from the \texttt{WR-WRPC-MIB}.
\item [] \underline{Error/Warning condition}: condition that should be checked
at the SNMP manager's side to detect given problem.
\item [] \underline{Action}: list of actions that should be performed in case
given error/warning is reported.
\end{itemize}
\subsection{Timing error}
\label{sec:timing_fail}
As a timing error we define the WR PTP Core not being able to synchronize its
local time to the WR Master (if WRPC runs in the slave mode), or not being able
to provide correct WR time to the rest of the WR network (if WRPC runs in the
master mode).
\noindent This section contains the list of faults leading to a timing error.
\subsubsection{\bf PTP/PPSi went out of \texttt{TRACK\_PHASE}}
\label{fail:timing:ppsi_track_phase}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Mode}: \emph{Slave}
\item [] \underline{Description}:\\
If the \emph{PTP/PPSi} WR servo goes out of the \texttt{TRACK\_PHASE}
state, this means something bad has happened and the node lost the
synchronization to its Master.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcPtpServoStateN}\\
\snmpadd{WR-WRPC-MIB::wrpcPtpServoStateErrCnt} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcPtpServoStateErrCnt != wrpcPtpServoStateErrCnt\_prev} }
\item [] \underline{Action}:
\begin{pck_proc}
\item Dump state
\item Check the status of the WR Switch which is the timing master for a
given WR node.
\item If the WR Switch did not report any problems, restart the WR Node.
\item If the problem persists replace the WR Node hardware with a new
unit.
\item If the problem persists, please notify WR experts.
\end{pck_proc}
\end{pck_descr}
\subsubsection{\bf Offset jump not compensated by Slave}
\label{fail:timing:offset_jump}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Mode}: \emph{Slave}
\item [] \underline{Description}:\\
This may happen if the Master resets its WR time counters (e.g. because
it lost the link to its Master higher in the hierarchy or to external
clock), but the WR Slave does not follow the jump.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcPtpClockOffsetPsHR}\\
\snmpadd{WR-WRPC-MIB::wrpcPtpClockOffsetErrCnt} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcPtpClockOffsetErrCnt != wrpcPtpClockOffsetErrCnt\_prev} }
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf Detected jump in the RTT value calculated by \emph{PTP/PPSi}}
\label{fail:timing:rtt_jump}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Mode}: \emph{Slave}
\item [] \underline{Description}:\\
Once a WR link is established the round-trip delay (RTT) can change
smoothly due to the temperature variations. However, if a sudden jump is
detected, that means that an erroneous timestamp was generated either on
the Master or the Slave side.
One cause of that could be the wrong value of the t24p transition point.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcPtpRTT}\\
\snmpadd{WR-WRPC-MIB::wrpcPtpRTTErrCnt} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcPtpRTTErrCnt != wrpcPtpRTTErrCnt\_prev} }
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf Wrong $\Delta_{TXM}$, $\Delta_{RXM}$, $\Delta_{TXS}$,
$\Delta_{RXS}$, $\alpha$ values are reported to the \emph{PTP/PPSi} daemon}
\label{fail:timing:deltas_report}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Mode}: \emph{Slave}
\item [] \underline{Description}:\\
If \emph{PTP/PPSi} doesn't get the correct values of fixed hardware delays,
it won't be able to calculate a proper Master-to-Slave delay. Although
the estimated offset in \emph{PTP/PPSi} is close to 0, the WRS won't be
synchronized to the Master with the sub-nanosecond accuracy.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcPtpDeltaTxM}\\
\snmpadd{WR-WRPC-MIB::wrpcPtpDeltaRxM}\\
\snmpadd{WR-WRPC-MIB::wrpcPtpDeltaTxS}\\
\snmpadd{WR-WRPC-MIB::wrpcPtpDeltaRxS}\\
\snmpadd{WR-WRPC-MIB::wrpcPtpAlpha} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcPtpDeltaTxM == 0 || wrpcPtpDeltaRxM == 0 ||}\\
\texttt{wrpcPtpDeltaTxS == 0 || wrpcPtpDeltaRxS == 0 ||}\\
\texttt{wrpcPtpAlpha == 0} }
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf PTP servo is not updating}
\label{fail:timing:servo_not_updating}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Mode}: \emph{Slave}
\item [] \underline{Description}:\\
If PTP servo is not updating, we still increment the internal timing
counters, but don't have updated information on the Master time and link
delay. After some time the slave local time will drift away from the
master.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcPtpServoUpdates}\\
\snmpadd{WR-WRPC-MIB::wrpcPtpServoUpdateTime} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcPtpServoUpdates != wrpcPtpServoUpdates} }
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf \emph{SoftPLL} became unlocked}
\label{fail:timing:spll_unlock}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR / WARNING
\item [] \underline{Mode}: \emph{all}
\item [] \underline{Description}:\\
If the \emph{SoftPLL} loses lock, for any reason, Slave, Master or Grand
Master node can no longer be syntonized and phase aligned with its time
source. WRPC in Master mode without properly locked Helper PLL is not
able to perform reliable phase measurements for enhancing Rx timestamps
resolution. For a Grand Master the reason of \emph{SoftPLL} going out of
lock might be disconnected 1-PPS/10MHz signals or that the external
clock is down.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcSpllMode}\\
\snmpadd{WR-WRPC-MIB::wrpcSpllSeqState}\\
\snmpadd{WR-WRPC-MIB::wrpcSpllAlignState}\\
\snmpadd{WR-WRPC-MIB::wrpcSpllHlock}\\
\snmpadd{WR-WRPC-MIB::wrpcSpllMlock}\\
\snmpadd{WR-WRPC-MIB::wrpcSpllDelCnt} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcSpllSeqState != ready\emph{(3)} ||}\\
\texttt{[wrpcSpllMode == grandmaster\emph(1) \&\& wrpcAlignState != locked\emph{(6)}] ||}\\ % GrandMaster not locked
\texttt{[wrpcSpllMode == slave\emph{(3)} \&\& wrpcSpllHlock == 0] ||}\\ % Spll slave and Hpll unlocked
\texttt{[wrpcSpllMode == slave\emph{(3)} \&\& wrpcSpllMlock == 0] ||}\\ % Spll slave and Mpll unlocked
\texttt{[wrpcSpllMode != grandmaster\emph{(1)} \&\& wrpcSpllMode != master\emph{(2)} \&\& wrpcSpllMode != slave\emph{(3)}]}} % Spll in neither of the GM/Master/Slave modes
\item [] \underline{Warning condition}:\\
{\footnotesize
\texttt{[wrpcSpllMode == grandmaster\emph{(1)} \&\& wrpcSpllDelCnt > 0] ||}\\ % GrandMaster has unlocked from reference at some point
\texttt{[wrpcSpllMode == master\emph{(2)} \&\& wrpcSpllDelCnt != wrpcSpllDelCnt\_prev] ||}\\ % Master just got unlocked
\texttt{[wrpcSpllMode == slave\emph{(3)} \&\& wrpcSpllDelCnt != wrpcSpllDelCnt\_prev]} } % Slave just got unlocked
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf WR link is down or FPGA not programmed or FPGA programmed with incorrect bitstream}
\label{fail:timing:master_down}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Mode}: \emph{all}
\item [] \underline{Description}:\\
We monitor the WRPC over the WR network. We can realize if this only
communication link is down by either SNMP requests timeouts or
periodically pinging the device.
\item [] \underline{SNMP objects}: \emph{(none)}
\item [] \underline{Error condition}:\\
{\footnotesize
SNMP request timeout or PING timeout}
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf PTP frames don't reach LM32}
\label{fail:timing:no_frames}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Mode}: \emph{all}
\item [] \underline{Description}:\\
In this case, \emph{PTP/PPSi} will fail to stay synchronized and provide
synchronization. Even if the WR servo is in the \texttt{TRACK\_PHASE}
state, it calculates a new phase shift based on the Master-to-Slave delay
variations. To calculate these variations, it still needs timestamped
PTP frames flowing. There could be several causes of such fault:
\begin{itemize}
\item WR PTP Core HDL problem
\item wrong VLANs configuration
\end{itemize}
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcPtpTx}\\
\snmpadd{WR-WRPC-MIB::wrpcPtpRx}\\
\snmpadd{WR-WRPC-MIB::wrpcPortInternalTx}\\
\snmpadd{WR-WRPC-MIB::wrpcPortInternalRx} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcPtpTx == wrpcPtpTx\_prev || wrpcPtpRx == wrpcPtpRx\_prev ||}\\
\texttt{wrpcPortInternalTx == wrpcPortInternalTx\_prev ||}\\
\texttt{wrpcPortInternalRx == wrpcPortInternalRx\_prev} }
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf Detected SFP not supported for WR timing}
\label{fail:timing:wrong_sfp}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Mode}: \emph{all}
\item [] \underline{Description}:\\
By not supported SFP for WR timing we mean a transceiver that doesn't
have the \emph{alpha} parameter and fixed hardware delays defined in the
SFP database. The consequence is \emph{PTP/PPSi} not having the right
values to estimate link asymmetry. Despite \emph{PTP/PPSi} offset being
close to 0 \emph{ps}, the device won't be properly synchronized.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcPortSfpPn}\\
\snmpadd{WR-WRPC-MIB::wrpcPortSfpInDB} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcPortSfpInDB != inDataBase\emph{(2)}} }
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf SFP database not configured}
\label{fail:timing:no_sfpdb}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Mode}: \emph{all}
\item [] \underline{Description}:\\
If there are no SFP entries in the database, any (even WR-supported) SFP
cannot be matched with the calibration values for a given hardware and
fiber. Despite \emph{PTP/PPSi} offset being close to 0 \emph{ps}, the
device won't be properly synchronized.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcSfpDeltaTx.<n>}\\
\snmpadd{WR-WRPC-MIB::wrpcSfpDeltaRx.<n>} }
\item [] \underline{Note}: It's enough to try reading index 1 of the above
SNMP objects tables to make sure there is at least one entry in the
database.
\item [] \underline{Error condition}:\\
{\footnotesize
Error when trying to get \texttt{wrpcSfpDeltaTx.1} and \texttt{wrpcSfpDeltaRx.1} SNMP objects}
\item [] \underline{Action}:\\
\end{pck_descr}
\newpage
\subsection{Other errors}
\label{sec:other_fail}
\subsubsection{\bf WR PTP Core reset}
\label{fail:other:reset}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Description}:\\
If the WRPC was reset it might either mean that there was a power cut or
some not yet known bug caused the WRPC software to crash.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcTimeSystemUptime} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcTimeSystemUpdate < wrpcTimeSystemUpdate\_prev} }
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf WR PTP Core time reset}
\label{fail:other:time_reset}
\begin{pck_descr}
\item [] \underline{Severity}: ERROR
\item [] \underline{Description}:\\
If the WRPC internal time counters are reset, this might mean the WR
Master in the network has some problems and WRPC has followed the time
reset. If that's not the case, this might mean some not yet known bug
caused the WRPC time reset.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcTimeTAI}\\
\snmpadd{WR-WRPC-MIB::wrpcTimeTAIString} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcTimeTAI == 0} }
\item [] \underline{Action}:\\
\end{pck_descr}
\subsubsection{\bf Temperature of the node too high}
\label{fail:other:temp}
\begin{pck_descr}
\item [] \underline{Severity}: WARNING
\item [] \underline{Description}:\\
If the temperature raises too high we might break our electronics. It
also means that most probably something is wrong with the node cooling.
\item [] \underline{SNMP objects}:\\
{\footnotesize
\snmpadd{WR-WRPC-MIB::wrpcTemperatureName.<n>}\\
\snmpadd{WR-WRPC-MIB::wrpcTemperatureValue.<n>} }
\item [] \underline{Error condition}:\\
{\footnotesize
\texttt{wrpcTemperatureValue.<n> > THRESHOLD} }
\item [] \underline{Action}:\\
\end{pck_descr}
\section{Introduction}
This document provides information about the diagnostics of White Rabbit
PTP Core (WRPC) - an HDL module present in every White Rabbit node. It is a
complementary documentation to the official \emph{White Rabbit PTP Core User's
Manual} published with every stable release. Please refer to this user manual
for the information about the WRPC, its interfaces and building instructions for
the official reference designs.\\
White Rabbit PTP Core starting from \emph{v4.0} provides diagnostic mechanisms
in the form of SNMP objects and optional Syslog messages (depending on the build
time LM32 software configuration). The implementation of the SNMP agent in the
WRPC is very basic comparing to the diagnostics offered by the White Rabbit
Switch. Since we are very constraint on the code size running inside the WR PTP
Core, almost all of the logic to detect and report errors has to be implemented
on the SNMP Manager's side.
%This document is
%organized in two parts. It starts with a description of the SNMP objects and
%procedures to be followed if various errors are reported (section
%\ref{sec:snmp_exports}). This first part is meant for the operators and people
%integrating a WR switch into a control system, without the deep knowledge about
%the White Rabbit internals. These people usually have to perform a quick
%diagnostics and decide on actions to restore a WR network.
%Second part of the document tries to list all the possible failures
%that may disturb synchronization and Ethernet switching (section
%\ref{sec:failures}). It is meant for the WR experts to help them with in-depth
%diagnosis of the problems reported by SNMP.
This document has many internal hyperlinks that associate general SNMP status
objects and expert SNMP objects with related problems' description and the other
way round. These links can be easily used when reading the document on a
computer.
\section{List of exported SNMP objects}
This section lists all the SNMP objects exported by the WR PTP Core. The objects
provide read-only values unless stated otherwise in their description.\\
\printnoidxglossary[type=snmp_status,title=,style=objtree,sort=def]
\snmpentrys{WR-WRPC-MIB}{}{wrpcVersionGroup}{
Group containing information about the WR PTP Core firmware version.}
\snmpentrys{WR-WRPC-MIB}{wrpcVersionGroup}{wrpcVersionHwType}{
\underline{Description:}
Type of the hardware of a given WR Node.}
\snmpentrys{WR-WRPC-MIB}{wrpcVersionGroup}{wrpcVersionSwVersion}{
\underline{Description:}
Version of the LM32 software running inside the WR PTP Core (WRPC) }
\snmpentrys{WR-WRPC-MIB}{wrpcVersionGroup}{wrpcVersionSwBuildBy}{
\underline{Description:}
Information who has compiled the LM32 software running inside the WRPC }
\snmpentrys{WR-WRPC-MIB}{wrpcVersionGroup}{wrpcVersionSwBuildDate}{
\underline{Description:}
Information when the LM32 software was compiled. }
\snmpentrys{WR-WRPC-MIB}{}{wrpcTimeGroup}{
Group containing system timers information}
\snmpentrys{WR-WRPC-MIB}{wrpcTimeGroup}{wrpcTimeTAI}{
\underline{Description:}
Current TAI time of the WR Node.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcTimeGroup}{wrpcTimeTAIString}{
\underline{Description:}
The current TAI time, printed as \%y-\%m-\%d-\%H:\%M:\%S (no time zone)
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcTimeGroup}{wrpcTimeSystemUptime}{
\underline{Description:}
System uptime in hundreds of second
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{}{wrpcTemperatureTable}{
Table of onboard thermometers measurements.}
\snmpentrys{WR-WRPC-MIB}{wrpcTemperatureTable}{wrpcTemperatureName.<n>}{
\underline{Description:}
Name of the temperature sensor \emph{n}.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcTemperatureTable}{wrpcTemperatureValue.<n>}{
\underline{Description:}
Temperature value of the sensor \emph{n}.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{}{wrpcSpllStatusGroup}{
Group containing White Rabbit PLLs status}
\snmpentrys{WR-WRPC-MIB}{wrpcSpllStatusGroup}{wrpcSpllMode}{
\underline{Description:}
Mode of operation of the Soft PLL inside WR PTP Core. Possible values:\\
\texttt{grandmaster\emph{(1)}} -- Master synchronized to external reference (e.g. GPS or Cesium) \\
\texttt{master\emph{(2)}} -- Free-running Master\\
\texttt{slave\emph{(3)}}\\
\texttt{disabled\emph{(4)}}
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcSpllStatusGroup}{wrpcSpllIrqCnt}{
\underline{Description:}
Number of interrupts received by SoftPLL for DDMTD tags.}
\snmpentrys{WR-WRPC-MIB}{wrpcSpllStatusGroup}{wrpcSpllSeqState}{
\underline{Description:}
SoftPLL sequencer state. Possible values:\\
\texttt{startExt\emph{(1)}}\\
\texttt{waitExt\emph{(2)}}\\
\texttt{startHelper\emph{(3)}}\\
\texttt{waitHelper\emph{(4)}}\\
\texttt{startMain\emph{(5)}}\\
\texttt{waitMain\emph{(6)}}\\
\texttt{disabled\emph{(7)}}\\
\texttt{ready\emph{(8)}}\\
\texttt{clearDacs\emph{(9)}}\\
\texttt{waitClearDacs\emph{(10)}}
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcSpllStatusGroup}{wrpcSpllAlignState}{
\underline{Description:}
SoftPLL aligner state. Possible values:\\
\texttt{extOff\emph{(0)}}\\
\texttt{start\emph{(1)}}\\
\texttt{initCsync\emph{(2)}}\\
\texttt{waitCsync\emph{(3)}}\\
\texttt{waitSample\emph{(4)}}\\
\texttt{compensateDelay\emph{(5)}}\\
\texttt{locked\emph{(6)}}\\
\texttt{startAlignment\emph{(7)}}\\
\texttt{startMain\emph{(8)}}\\
\texttt{waitClkin\emph{(9)}}\\
\texttt{waitPlock\emph{(10)}}
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcSpllStatusGroup}{wrpcSpllHlock}{
\underline{Description:}
Helper PLL lock status.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcSpllStatusGroup}{wrpcSpllMlock}{
\underline{Description:}
Main PLL lock status.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcSpllStatusGroup}{wrpcSpllHY}{
\underline{Description:}
Helper PLL DAC value (range 0-65535).}
\snmpentrys{WR-WRPC-MIB}{wrpcSpllStatusGroup}{wrpcSpllMY}{
\underline{Description:}
Main PLL DAC value (range 0-65535).}
\snmpentrys{WR-WRPC-MIB}{wrpcSpllStatusGroup}{wrpcSpllDelCnt}{
\underline{Description:}
Delock counter - how many times since the WRPC software has started, either
the Helper of Main PLL lost lock.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{}{wrpcPtpGroup}{
Group with various information about PTP state}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpServoStateN}{
\underline{Description:}
Current state of WR synchronization servo running in the PTP. Possible
values:\\
\texttt{uninitialized\emph{(0)}}\\
\texttt{syncNsec\emph{(1)}}\\
\texttt{syncSec\emph{(2)}}\\
\texttt{syncPhase\emph{(3)}}\\
\texttt{trackPhase\emph{(4)}}\\
\texttt{waitOffsetStable\emph{(5)}}
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpClockOffsetPsHR}{
\underline{Description:}
Current clock offset from master in picoseconds, calculated by PTP.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpSkew}{
\underline{Description:}
The estimated change of master-to-slave delay, in picoseconds.}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpRTT}{
\underline{Description:}
Round-trip-time in picoseconds calculated by PTP.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpServoUpdates}{
\underline{Description:}
Counter incremented each time the WR PTP servo calculates the offset value
from WR master and corrects the local clock.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpServoUpdateTime}{
\underline{Description:}
TAI nanoseconds when the WR PTP servo was last updated.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpDeltaTxM}{}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpDeltaRxM}{}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpDeltaTxS}{}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpDeltaRxS}{
\underline{Description:}
Fixed Tx and Rx latencies of the WR master and slave.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpServoStateErrCnt}{
\underline{Description:}
Number of times when WR PTP servo has lost the synchronization, i.e. went
ouf from the TRACK\_PHASE state.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpClockOffsetErrCnt}{
\underline{Description:}
Number of times when calculated offset to the Master was larger than
+/-500ps.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpRTTErrCnt}{
\underline{Description:}
Number of times when the jump was detected in the calculated round-trip-time
value. The jump is detected when rtt changes by more than 1ns comparing to the
previously calculated value.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpAsymmetry}{
\underline{Description:}
Link asymmetry calculated by PTP.}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpTx}{
\underline{Description:}
Number of transmitted PTP frames.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpRx}{
\underline{Description:}
Number of received PTP frames.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpGroup}{wrpcPtpAlpha}{
\underline{Description:}
Alpha value (fiber asymmetry coeficient) used for WR to estimate the one-way
link delay.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{}{wrpcPtpConfigGroup}{
The groups contains objects for configuring remotely the SFP databse with
calibration parameters}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpConfigGroup}{wrpcPtpConfigRestart}{
\underline{Description:}
Read-write object to trigger the PTP restart to use the new settings.
Possible values:
\begin{packed_items_snmp_obj}
\item write: \texttt{restartPtp\emph{(1)}} -- triggers PTP restart
\item read: \texttt{restartPtpSuccessful\emph{(100)}} -- PTP restart triggered succesfully
\item read: \texttt{restartPtpFailed\emph{(200)}} -- failed to trigger PTP restart
\end{packed_items_snmp_obj}
}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpConfigGroup}{wrpcPtpConfigApply}{
\underline{Description:}
Read-write object to validate and apply SFP settings. Possible values:
\begin{packed_items_snmp_obj}
\item write: \texttt{writeToFlashGivenSfp\emph{(1)}} -- write provided
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigDeltaTx}},
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigDeltaRx}},
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigAlpha}} values to the SFP
database stored in the Flash for the SFP product number provided in
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigSfpPn}}. The new values are
automatically loaded to the memory (\emph{sfp match} command is executed).
\item write: \texttt{writeToFlashCurrentSfp\emph{(2)}} -- write provided
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigDeltaTx}},
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigDeltaRx}},
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigAlpha}} values to the SFP
database stored in the Flash for the SFP that is currently used. The new
values are automatically loaded to the memory (\emph{sfp match} command is
executed).
\item w: \texttt{writeToMemoryCurrentSfp\emph{(3)}} -- write provided
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigDeltaTx}},
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigDeltaRx}},
\texttt{\glshyperlink{WR-WRPC-MIB::wrpcPtpConfigAlpha}} values only to the
memory. The SFP database in the Flash is not modified.
\item write: \texttt{eraseFlash\emph{(50)}} -- erase SFP database stored in the Flash
\item read: \texttt{applySuccessful\emph{(100)}} -- required configuration applied successfully
\item read: \texttt{applySuccessfulMatchFailed\emph{(101)}} -- required values written to the database but
could not be matched with the currently used SFP
\item read: \texttt{applyFailed\emph{(200)}} -- failed to apply configuration
\item read: \texttt{applyFailedI2CError\emph{(201)}} -- failed to apply, communication error with the
flash memory
\item read: \texttt{applyFailedDBFull\emph{(202)}} -- failed to apply, SFP database is full
\item read: \texttt{applyFailedInvalidPN\emph{(203)}} -- failed to apply, invalid SFP product number
\end{packed_items_snmp_obj}
}
\snmpentrys{WR-WRPC-MIB}{wrpcPtpConfigGroup}{wrpcPtpConfigSfpPn}{
\underline{Description:}
Read-write object. SFP product number identifying which entry in the Flash SFP databse to
update. }
\snmpentrys{WR-WRPC-MIB}{wrpcPtpConfigGroup}{wrpcPtpConfigDeltaTx}{
\underline{Description:}
Read-write object. Fixed Tx delay value to be written, in picoseconds. }
\snmpentrys{WR-WRPC-MIB}{wrpcPtpConfigGroup}{wrpcPtpConfigDeltaRx}{
\underline{Description:}
Read-write object. Fixed Rx delay value to be written, in picoseconds. }
\snmpentrys{WR-WRPC-MIB}{wrpcPtpConfigGroup}{wrpcPtpConfigAlpha}{
\underline{Description:}
Read-write object. Alpha fiber asymmetry parameter to be written. }
\snmpentrys{WR-WRPC-MIB}{}{wrpcPortGroup}{
Group containing various information about the WR Ethernet port.}
\snmpentrys{WR-WRPC-MIB}{wrpcPortGroup}{wrpcPortLinkStatus}{
\underline{Description:}
Status of the link. Possible values:\\
\texttt{down\emph{(1)}} -- link is down\\
\texttt{up\emph{(2)}} -- link is up}
\snmpentrys{WR-WRPC-MIB}{wrpcPortGroup}{wrpcPortSfpPn}{
\underline{Description:}
Product number of the SFP currently plugged into the WR port.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPortGroup}{wrpcPortSfpInDB}{
\underline{Description:}
Information whether the currently plugged SFP was matched with the
calibration values stored in the database.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPortGroup}{wrpcPortInternalTx}{
\underline{Description:}
Total number of Ethernet frames transmitted from LM32 processor.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcPortGroup}{wrpcPortInternalRx}{
\underline{Description:}
Total number of Ethernet frames received by LM32 processor.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{}{wrpcSfpTable}{
Table of the calibration values stored in the SFP database.}
\snmpentrys{WR-WRPC-MIB}{wrpcSfpTable}{wrpcSfpPn.<n>}{
\underline{Description:}
Product number for the SFP \emph{n} in the database.}
\snmpentrys{WR-WRPC-MIB}{wrpcSfpTable}{wrpcSfpDeltaTx.<n>}{
\underline{Description:}
Fixed Tx delay for the SFP \emph{n} in the database.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcSfpTable}{wrpcSfpDeltaRx.<n>}{
\underline{Description:}
Fixed Rx delay for the SFP \emph{n} in the database.
\glspar \underline{Related problems:}}
\snmpentrys{WR-WRPC-MIB}{wrpcSfpTable}{wrpcSfpAlpha.<n>}{
\underline{Description:}
Alpha fiber asymmetry coefficient for the SFP \emph{n} in the database.}
\def\us{\char`\_}
\documentclass[a4paper, 12pt]{article}
%\documentclass{article}
\usepackage{fullpage}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{arrows,automata,shapes}
\usepackage{multirow}
\usepackage{color}
\usepackage[latin1]{inputenc}
\usepackage{verbatim}
\usepackage{amsmath}
\usepackage{textcomp}
\usepackage{times,mathptmx}
\usepackage{chngcntr}
\usepackage{hyperref}
\usepackage{enumitem}
\usepackage{scrextend}
%\usepackage[table]{xcolor}
\usepackage{listings}
\definecolor{light-gray}{gray}{0.95}
%\usepackage[firstpage]{draftwatermark}
% for glossary
% nopostdot - no dot at the end of index entires
\usepackage[nogroupskip,nopostdot,counter=subsubsection]{glossaries}
\renewcommand{\glossarysection}[2][]{}
\usepackage{listings}
\usepackage{cancel}
\graphicspath{ {../../../../figures/} }
\newenvironment{packed_enum}{
\begin{enumerate}[leftmargin=0pt,topsep=-12pt]
\setlength{\itemsep}{1pt}
\setlength{\parskip}{0pt}
\setlength{\parsep}{0pt}
}{\end{enumerate}}
\newenvironment{packed_items}{
\begin{itemize}[topsep=-12pt]
\setlength{\itemsep}{1pt}
\setlength{\parskip}{0pt}
\setlength{\parsep}{0pt}
}{\end{itemize}}
\newenvironment{packed_items_snmp_obj}{
\begin{itemize}[leftmargin=50pt,topsep=-12pt]
\setlength{\itemsep}{1pt}
\setlength{\parskip}{0pt}
\setlength{\parsep}{0pt}
\renewcommand\labelitemi{--}
}{\end{itemize}}
\newenvironment{pck_descr}{
\begin{itemize}[leftmargin=0pt,topsep=-12pt]
\setlength{\itemsep}{1pt}
\setlength{\parskip}{0pt}
\setlength{\parsep}{0pt}
}{\end{itemize}}
\newenvironment{pck_proc}{
\begin{enumerate}[leftmargin=15pt,topsep=-12pt]
\setlength{\itemsep}{1pt}
\setlength{\parskip}{0pt}
\setlength{\parsep}{0pt}
}{\end{enumerate}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% creating subsubsubsection notation
% src: http://www.latex-community.org/forum/viewtopic.php?f=5&t=791
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{secnumdepth}{6}
\renewcommand\theparagraph{\Alph{paragraph}}
\makeatletter
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{0.0001pt \@plus .2ex}%
{\normalfont\normalsize\bfseries}}
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{0.0001pt \@plus .2ex}%
{\normalfont\normalsize\bfseries}}
\counterwithin{paragraph}{subsubsection}
\counterwithin{subparagraph}{paragraph}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\eqoffset}[1]{%
{\ensuremath{%
{\text{offset}}_{#1}}%
}%
}
\newcommand{\eqdelay}[1]{{\text{delay}}_{#1}}
\newcommand{\eqasymm}{{\text{asymmetry}}}
% for glossary, set way of sorting entries
\makenoidxglossaries
% don't bold entries, texttt them
\renewcommand*{\glsnamefont}[1]{\texttt{\textmd{#1}}}
\newglossary*{snmp_status}{SNMP's status objects}
\newglossary*{snmp_expert}{SNMP's expert objects}
\newglossary*{snmp_other}{Objects from other MIBs}
% alphabetical list of all entries
\newglossary*{snmp_all}{All SNMP objects}
\defglsentryfmt[snmp_status]{\texttt{\glsentryfmt}}
\defglsentryfmt[snmp_expert]{\texttt{\glsentryfmt}}
\defglsentryfmt[snmp_other]{\texttt{\glsentryfmt}}
% macro to add entires
\newcommand{\snmpadd}[1]{
\glspl{#1}\glsadd{x#1}%
}
% helpers to add glossary entries
% add newline to non empty strings. For descriptions.
\newcommand{\descr}[1]{
\ifx&#1&%
%
\else% put fixed space
\\#1
\fi
}
% {MIB}{parent}{object}{comment}{glossary_name}
\newcommand{\snmpentry}[5]{%
\ifx&#2&% if parameter 2 is empty don't add parent
\newglossaryentry{#1::#3}{%
type=#5,%
name={#3},%
plural={#1::#3},% used to display name not plural
user1={#1},% MIB
description={\descr{#4}}%
}%
\else
\newglossaryentry{#1::#3}{%
type=#5,%
name={#3},%
description={\descr{#4}},%
plural={#1::#3},% used to display name not plural
user1={#1},% MIB
parent={#1::#2}%
}%
\fi
% add entry to alphabetical list
\newglossaryentry{x#1::#3}{%
type=snmp_all,%
name={#1::#3},%
description={}
}%
}
% {MIB}{parent}{object}{comment}
\newcommand{\snmpentrye}[4]{%
\snmpentry{#1}{#2}{#3}{#4}{snmp_expert}
}
% {MIB}{parent}{object}{comment}
\newcommand{\snmpentrys}[4]{%
\snmpentry{#1}{#2}{#3}{#4}{snmp_status}
}
% command to add snmp objects from other MIBs
% {MIB}{parent}{object}{comment}
\newcommand{\snmpentryo}[4]{%
\snmpentry{#1}{#2}{#3}{#4}{snmp_other}
}
% extra indent for lists
\newlength{\paraaindent}
% indent for new paragraphs
\newlength{\snmpentryindent}
% load glossary definitions from snmp_objects.tex
\loadglsentries{snmp_objects}
% use \kern 0.33em instead of \space to have fixed width space
\newglossarystyle{objtree}{%
\renewenvironment{theglossary}%
{\setlength{\parindent}{0pt}%
\setlength{\parskip}{0pt plus 0.3pt}}%
{}%
\renewcommand*{\glossaryheader}{}%
\renewcommand*{\glsgroupheading}[1]{}%
\renewcommand{\glossentry}[2]{%
\hangindent30pt\relax
% save indent for other paragraphs
\setlength{\snmpentryindent}{\hangindent}
\parindent0pt\relax
% set indent for lists entries
\setlength{\paraaindent}{\hangindent}
\addtolength{\paraaindent}{14pt}
\setlist[enumerate]{leftmargin=\paraaindent}
$\bullet$\kern 0.33em\glsentryitem{##1}\glstreenamefmt{\glstarget{##1}{\texttt{\textmd{\glsentryuseri{##1}}::}\glossentryname{##1}}}%
\ifglshassymbol{##1}{\kern 0.33em(\glossentrysymbol{##1})}{}%
\glossentrydesc{##1}\glspostdescription\kern 0.33em##2\par\vspace{12pt}
}%
\renewcommand{\subglossentry}[3]{%
\hangindent##1\glstreeindent\relax
\addtolength{\hangindent}{30pt}
% save indent for other paragraphs
\setlength{\snmpentryindent}{\hangindent}
\parindent##1\glstreeindent\relax
% set indent for lists entries
\setlength{\paraaindent}{\hangindent}
\addtolength{\paraaindent}{14pt}
\setlist[enumerate]{leftmargin=\paraaindent}
\ifnum##1=1\relax
$\circ$%
\fi
\ifnum##1=2\relax
$\ast$%
\fi
\kern 0.33em%
\ifnum##1=1\relax
\glssubentryitem{##2}%
\fi
\glstreenamefmt{\glstarget{##2}{\glossentryname{##2}}}%
\ifglshassymbol{##2}{\kern 0.33em(\glossentrysymbol{##2})}{}%
\glossentrydesc{##2}\glspostdescription\kern 0.33em##3\par\vspace{12pt}
}%
%redefine \glspar to support indentation in many paragraphs
\renewcommand{\glspar}{%
\par
\parindent\snmpentryindent % restore first line in paragraph indent
\hangindent\snmpentryindent % restore other lines in paragraph indent
}%
}
\newcommand{\ignore}[1]{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\setcounter{tocdepth}{2}
\input{revinfo.tex}
\title{White Rabbit PTP Core: Failures and Diagnostics}
\author{Grzegorz Daniluk\\[.5cm] CERN BE-CO-HT\\ \small{\gitrevinfo}}
\maketitle
\thispagestyle{empty}
\begin{figure}[ht!]
\centering
\vspace{1.3cm}
\includegraphics[width=0.50\textwidth]{img/WRlogo.pdf}
\end{figure}
\newpage
\newpage
\newpage
\tableofcontents
\newpage
\input{intro.tex}
\newpage
\section{Possible Errors}
\label{sec:failures}
\input{fail.tex}
\newpage
\input{snmp_exports.tex}
\appendix
%\newpage
%\section{Operator's diagnostic example}
%\input{diamon_example.tex}
%\newpage
%\section{Sorted list of all MIB objects}
%\label{sec:snmp_exports:sorted}
%% print alphabetical list
%\printnoidxglossary[type=snmp_all,style=tree,sort=letter]
% add not used entries, but don't display their's section
% based on:
% http://tex.stackexchange.com/questions/115635/glossaries-suppress-pages-when-using-glsaddall
\forallglsentries{\thislabel}%
{%
\ifglsused{\thislabel}{}{\glsadd[format=ignore]{\thislabel}}%
}
\end{document}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment