void handlePDelayReq(MsgHeader *header, Octet *msgIbuf, ssize_t length, TimeInternal *time, Boolean isFromSelf, RunTimeOpts *rtOpts, PtpClock *ptpClock) { if (ptpClock->delayMechanism == P2P) { DBGV("PdelayReq message received : \n"); if(length < PDELAY_REQ_LENGTH) { ERROR("short PDelayReq message\n"); toState(PTP_FAULTY, rtOpts, ptpClock); return; } switch (ptpClock->portState ) { case PTP_INITIALIZING: case PTP_FAULTY: case PTP_DISABLED: case PTP_UNCALIBRATED: case PTP_LISTENING: DBGV("HandlePdelayReq : disregard\n"); return; case PTP_SLAVE: case PTP_MASTER: case PTP_PASSIVE: if (isFromSelf) { /* * Get sending timestamp from IP stack * with SO_TIMESTAMP */ ptpClock->pdelay_req_send_time.seconds = time->seconds; ptpClock->pdelay_req_send_time.nanoseconds = time->nanoseconds; /*Add latency*/ addTime(&ptpClock->pdelay_req_send_time, &ptpClock->pdelay_req_send_time, &rtOpts->outboundLatency); break; } else { msgUnpackHeader(ptpClock->msgIbuf, &ptpClock->PdelayReqHeader); issuePDelayResp(time, header, rtOpts, ptpClock); break; } default: DBG("do unrecognized state3\n"); break; } } else /* (End to End mode..) */ ERROR("Peer Delay messages are disregarded in End to End " "mode \n"); }
static void handlePDelayReq(PtpClock *ptpClock, TimeInternal *time, Boolean isFromSelf) { switch (ptpClock->portDS.delayMechanism) { case E2E: ERROR("handlePDelayReq: disreguard in E2E mode\n"); break; case P2P: DBGV("handlePDelayReq: recieved\n"); if (ptpClock->msgIbufLength < PDELAY_REQ_LENGTH) { ERROR("handlePDelayReq: short message\n"); toState(ptpClock, PTP_FAULTY); return; } switch (ptpClock->portDS.portState) { case PTP_INITIALIZING: case PTP_FAULTY: case PTP_DISABLED: case PTP_UNCALIBRATED: case PTP_LISTENING: DBGV("handlePDelayReq: disreguard\n"); return; case PTP_PASSIVE: case PTP_SLAVE: case PTP_MASTER: if (isFromSelf) { DBGV("handlePDelayReq: ignore from self\n"); break; } // if (isFromSelf) /* && loopback mode */ // { // /* Get sending timestamp from IP stack with So_TIMESTAMP*/ // ptpClock->pdelay_req_send_time = *time; // // /*Add latency*/ // addTime(&ptpClock->pdelay_req_send_time, &ptpClock->pdelay_req_send_time, &rtOpts->outboundLatency); // break; // } // else // { //ptpClock->PdelayReqHeader = ptpClock->msgTmpHeader; issuePDelayResp(ptpClock, time, &ptpClock->msgTmpHeader); if ((time->seconds != 0) && getFlag(ptpClock->msgTmpHeader.flagField[0], FLAG0_TWO_STEP)) /* not loopback mode */ { issuePDelayRespFollowUp(ptpClock, time, &ptpClock->msgTmpHeader); } break; // } default: DBG("handlePDelayReq: unrecognized state\n"); break; } break; default: /* nothing */ break; } }