/*Pack and send on event multicast ip adress a PDelayReq message*/ static void issuePDelayReq(PtpClock *ptpClock) { Timestamp originTimestamp; TimeInternal internalTime; getTime(&internalTime); fromInternalTime(&internalTime, &originTimestamp); msgPackPDelayReq(ptpClock, ptpClock->msgObuf, &originTimestamp); if (!netSendPeerEvent(&ptpClock->netPath, ptpClock->msgObuf, PDELAY_REQ_LENGTH, &internalTime)) { ERROR("issuePDelayReq: can't sent\n"); toState(ptpClock, PTP_FAULTY); } else { DBGV("issuePDelayReq\n"); ptpClock->sentPDelayReqSequenceId++; /* Delay req TX timestamp is valid */ if (internalTime.seconds != 0) { addTime(&internalTime, &internalTime, &ptpClock->outboundLatency); ptpClock->pdelay_t1 = internalTime; } } }
/*Pack and send on event multicast ip adress a PDelayResp message*/ void issuePDelayResp(TimeInternal *time,MsgHeader *header,RunTimeOpts *rtOpts, PtpClock *ptpClock) { Timestamp requestReceiptTimestamp; fromInternalTime(time,&requestReceiptTimestamp); msgPackPDelayResp(ptpClock->msgObuf,header, &requestReceiptTimestamp,ptpClock); if (!netSendPeerEvent(ptpClock->msgObuf,PDELAY_RESP_LENGTH, &ptpClock->netPath)) { toState(PTP_FAULTY,rtOpts,ptpClock); DBGV("PdelayResp message can't be sent -> FAULTY state \n"); } else { DBGV("PDelayResp MSG sent ! \n"); } }
/*Pack and send on event multicast ip adress a PDelayReq message*/ void issuePDelayReq(RunTimeOpts *rtOpts,PtpClock *ptpClock) { Timestamp originTimestamp; TimeInternal internalTime; getTime(&internalTime); fromInternalTime(&internalTime,&originTimestamp); msgPackPDelayReq(ptpClock->msgObuf,&originTimestamp,ptpClock); if (!netSendPeerEvent(ptpClock->msgObuf,PDELAY_REQ_LENGTH, &ptpClock->netPath)) { toState(PTP_FAULTY,rtOpts,ptpClock); DBGV("PdelayReq message can't be sent -> FAULTY state \n"); } else { DBGV("PDelayReq MSG sent ! \n"); ptpClock->sentPDelayReqSequenceId++; } }
/*Pack and send on event multicast ip adress a PDelayResp message*/ static void issuePDelayResp(PtpClock *ptpClock, TimeInternal *time, const MsgHeader * pDelayReqHeader) { Timestamp requestReceiptTimestamp; fromInternalTime(time, &requestReceiptTimestamp); msgPackPDelayResp(ptpClock->msgObuf, pDelayReqHeader, &requestReceiptTimestamp); if (!netSendPeerEvent(&ptpClock->netPath, ptpClock->msgObuf, PDELAY_RESP_LENGTH, time)) { ERROR("issuePDelayResp: can't sent\n"); toState(ptpClock, PTP_FAULTY); } else { if (time->seconds != 0) { /*Add latency*/ addTime(time, time, &ptpClock->outboundLatency); } DBGV("issuePDelayResp\n"); } }