func Run()

in cmd/ptpcheck/checker/checker.go [45:106]


func Run(c *ptp.MgmtClient) (*PTPCheckResult, error) {
	var err error
	currentDataSet, err := c.CurrentDataSet()
	if err != nil {
		return nil, err
	}
	log.Debugf("CurrentDataSet: %+v", currentDataSet)
	defaultDataSet, err := c.DefaultDataSet()
	if err != nil {
		return nil, err
	}
	log.Debugf("DefaultDataSet: %+v", defaultDataSet)
	parentDataSet, err := c.ParentDataSet()
	if err != nil {
		return nil, err
	}
	log.Debugf("ParentDataSet: %+v", parentDataSet)

	/* gmPresent calculation from non-standard TIME_STATUS_NP

	 if (cid_eq(&c->dad.pds.grandmasterIdentity, &c->dds.clockIdentity))
	            tsn->gmPresent = 0;
	        else
				tsn->gmPresent = 1;

	where dad.pds is PARENT_DATA_SET and dds is DEFAULT_DATA_SET
	*/
	gmPresent := defaultDataSet.ClockIdentity != parentDataSet.GrandmasterIdentity

	result := &PTPCheckResult{
		OffsetFromMasterNS:  currentDataSet.OffsetFromMaster.Nanoseconds(),
		GrandmasterPresent:  gmPresent,
		MeanPathDelayNS:     currentDataSet.MeanPathDelay.Nanoseconds(),
		StepsRemoved:        int(currentDataSet.StepsRemoved),
		ClockIdentity:       defaultDataSet.ClockIdentity.String(),
		GrandmasterIdentity: parentDataSet.GrandmasterIdentity.String(),
		PortStatsTX:         map[string]uint64{},
		PortStatsRX:         map[string]uint64{},
	}

	portStats, err := c.PortStatsNP()
	// it's a non-standard ptp4l thing, might be missing
	if err != nil {
		log.Warningf("couldn't get PortStatsNP: %v", err)
	} else {
		log.Debugf("PortStatsNP: %+v", portStats)
		for k, v := range ptp.MessageTypeToString {
			result.PortStatsRX[v] = portStats.PortStats.RXMsgType[k]
			result.PortStatsTX[v] = portStats.PortStats.TXMsgType[k]
		}
	}

	timeStatus, err := c.TimeStatusNP()
	// it's a non-standard ptp4l thing, might be missing
	if err != nil {
		log.Warningf("couldn't get TimeStatusNP: %v", err)
	} else {
		log.Debugf("TimeStatusNP: %+v", timeStatus)
		result.IngressTimeNS = timeStatus.IngressTimeNS
	}
	return result, nil
}