Commit b64e38cf authored by Davide Ciminaghi's avatar Davide Ciminaghi Committed by Alessandro Rubini

pdelay: factorize code handling pdelay_resp_followup

remove duplication, remove code size
parent 18b2ed68
...@@ -228,6 +228,45 @@ int st_com_peer_handle_pres(struct pp_instance *ppi, unsigned char *buf, ...@@ -228,6 +228,45 @@ int st_com_peer_handle_pres(struct pp_instance *ppi, unsigned char *buf,
return 0; return 0;
} }
int st_com_peer_handle_pres_followup(struct pp_instance *ppi,
unsigned char *buf, int plen)
{
MsgHeader *hdr = &ppi->received_ptp_header;
MsgPDelayRespFollowUp respFllw;
int e = 0;
if (plen < PP_PDELAY_RESP_FOLLOW_UP_LENGTH)
/* Ignore */
return e;
msg_unpack_pdelay_resp_follow_up(buf, &respFllw);
if ((memcmp(&DSPOR(ppi)->portIdentity.clockIdentity,
&respFllw.requestingPortIdentity.clockIdentity,
PP_CLOCK_IDENTITY_LENGTH) == 0) &&
((ppi->sent_seq[PPM_PDELAY_REQ]) ==
hdr->sequenceId) &&
(DSPOR(ppi)->portIdentity.portNumber ==
respFllw.requestingPortIdentity.portNumber) &&
(ppi->flags & PPI_FLAG_FROM_CURRENT_PARENT)) {
to_TimeInternal(&ppi->t5,
&respFllw.responseOriginTimestamp);
ppi->flags |= PPI_FLAG_WAITING_FOR_RF_UP;
if (pp_hooks.handle_presp)
e = pp_hooks.handle_presp(ppi);
else
pp_servo_got_presp(ppi);
} else {
pp_diag(ppi, frames, 2, "%s: "
"PDelay Resp F-up doesn't match PDelay Req\n",
__func__);
}
return e;
}
int st_com_peer_handle_preq(struct pp_instance *ppi, unsigned char *buf, int st_com_peer_handle_preq(struct pp_instance *ppi, unsigned char *buf,
int len) int len)
{ {
......
...@@ -41,6 +41,9 @@ int st_com_peer_handle_preq(struct pp_instance *ppi, unsigned char *buf, ...@@ -41,6 +41,9 @@ int st_com_peer_handle_preq(struct pp_instance *ppi, unsigned char *buf,
int st_com_peer_handle_pres(struct pp_instance *ppi, unsigned char *buf, int st_com_peer_handle_pres(struct pp_instance *ppi, unsigned char *buf,
int len); int len);
int st_com_peer_handle_pres_followup(struct pp_instance *ppi,
unsigned char *buf, int len);
static inline int __send_and_log(struct pp_instance *ppi, int msglen, static inline int __send_and_log(struct pp_instance *ppi, int msglen,
int msgtype, int chtype) int msgtype, int chtype)
{ {
......
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
int pp_listening(struct pp_instance *ppi, unsigned char *pkt, int plen) int pp_listening(struct pp_instance *ppi, unsigned char *pkt, int plen)
{ {
int e = 0; /* error var, to check errors in msg handling */ int e = 0; /* error var, to check errors in msg handling */
MsgHeader *hdr = &ppi->received_ptp_header;
MsgPDelayRespFollowUp respFllw;
if (pp_hooks.listening) if (pp_hooks.listening)
e = pp_hooks.listening(ppi, pkt, plen); e = pp_hooks.listening(ppi, pkt, plen);
...@@ -46,36 +44,7 @@ int pp_listening(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -46,36 +44,7 @@ int pp_listening(struct pp_instance *ppi, unsigned char *pkt, int plen)
break; break;
case PPM_PDELAY_RESP_FOLLOW_UP: case PPM_PDELAY_RESP_FOLLOW_UP:
if (plen < PP_PDELAY_RESP_FOLLOW_UP_LENGTH) e = st_com_peer_handle_pres_followup(ppi, pkt, plen);
break;
msg_unpack_pdelay_resp_follow_up(pkt, &respFllw);
if ((memcmp(&DSPOR(ppi)->portIdentity.clockIdentity,
&respFllw.requestingPortIdentity.clockIdentity,
PP_CLOCK_IDENTITY_LENGTH) == 0) &&
((ppi->sent_seq[PPM_PDELAY_REQ]) ==
hdr->sequenceId) &&
(DSPOR(ppi)->portIdentity.portNumber ==
respFllw.requestingPortIdentity.portNumber) &&
(ppi->flags & PPI_FLAG_FROM_CURRENT_PARENT)) {
to_TimeInternal(&ppi->t5,
&respFllw.responseOriginTimestamp);
ppi->flags |= PPI_FLAG_WAITING_FOR_RF_UP;
if (pp_hooks.handle_presp)
e = pp_hooks.handle_presp(ppi);
else
pp_servo_got_presp(ppi);
if (e)
goto out;
} else {
pp_diag(ppi, frames, 2, "%s: "
"PDelay Resp F-up doesn't match PDelay Req\n",
__func__);
}
break; break;
default: default:
......
...@@ -13,8 +13,6 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -13,8 +13,6 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen)
{ {
int msgtype; int msgtype;
int e = 0; /* error var, to check errors in msg handling */ int e = 0; /* error var, to check errors in msg handling */
MsgHeader *hdr = &ppi->received_ptp_header;
MsgPDelayRespFollowUp respFllw;
/* ignore errors; we are not getting FAULTY if not transmitting */ /* ignore errors; we are not getting FAULTY if not transmitting */
pp_lib_may_issue_sync(ppi); pp_lib_may_issue_sync(ppi);
...@@ -68,36 +66,7 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -68,36 +66,7 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen)
break; break;
case PPM_PDELAY_RESP_FOLLOW_UP: case PPM_PDELAY_RESP_FOLLOW_UP:
if (plen < PP_PDELAY_RESP_FOLLOW_UP_LENGTH) e = st_com_peer_handle_pres_followup(ppi, pkt, plen);
break;
msg_unpack_pdelay_resp_follow_up(pkt, &respFllw);
if ((memcmp(&DSPOR(ppi)->portIdentity.clockIdentity,
&respFllw.requestingPortIdentity.clockIdentity,
PP_CLOCK_IDENTITY_LENGTH) == 0) &&
((ppi->sent_seq[PPM_PDELAY_REQ]) ==
hdr->sequenceId) &&
(DSPOR(ppi)->portIdentity.portNumber ==
respFllw.requestingPortIdentity.portNumber) &&
(ppi->flags & PPI_FLAG_FROM_CURRENT_PARENT)) {
to_TimeInternal(&ppi->t5,
&respFllw.responseOriginTimestamp);
ppi->flags |= PPI_FLAG_WAITING_FOR_RF_UP;
if (pp_hooks.handle_presp)
e = pp_hooks.handle_presp(ppi);
else
pp_servo_got_presp(ppi);
if (e)
goto out;
} else {
pp_diag(ppi, frames, 2, "%s: "
"PDelay Resp F-up doesn't match PDelay Req\n",
__func__);
}
break; break;
default: default:
......
...@@ -12,8 +12,6 @@ ...@@ -12,8 +12,6 @@
int pp_passive(struct pp_instance *ppi, unsigned char *pkt, int plen) int pp_passive(struct pp_instance *ppi, unsigned char *pkt, int plen)
{ {
int e = 0; /* error var, to check errors in msg handling */ int e = 0; /* error var, to check errors in msg handling */
MsgHeader *hdr = &ppi->received_ptp_header;
MsgPDelayRespFollowUp respFllw;
/* when the clock is using peer-delay, listening must send it too */ /* when the clock is using peer-delay, listening must send it too */
if (ppi->glbs->delay_mech == PP_P2P_MECH) if (ppi->glbs->delay_mech == PP_P2P_MECH)
...@@ -41,34 +39,7 @@ int pp_passive(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -41,34 +39,7 @@ int pp_passive(struct pp_instance *ppi, unsigned char *pkt, int plen)
break; break;
case PPM_PDELAY_RESP_FOLLOW_UP: case PPM_PDELAY_RESP_FOLLOW_UP:
if (plen < PP_PDELAY_RESP_FOLLOW_UP_LENGTH) e = st_com_peer_handle_pres_followup(ppi, pkt, plen);
break;
msg_unpack_pdelay_resp_follow_up(pkt, &respFllw);
if ((memcmp(&DSPOR(ppi)->portIdentity.clockIdentity,
&respFllw.requestingPortIdentity.clockIdentity,
PP_CLOCK_IDENTITY_LENGTH) == 0) &&
((ppi->sent_seq[PPM_PDELAY_REQ]) ==
hdr->sequenceId) &&
(DSPOR(ppi)->portIdentity.portNumber ==
respFllw.requestingPortIdentity.portNumber) &&
(ppi->flags & PPI_FLAG_FROM_CURRENT_PARENT)) {
to_TimeInternal(&ppi->t5,
&respFllw.responseOriginTimestamp);
ppi->flags |= PPI_FLAG_WAITING_FOR_RF_UP;
if (pp_hooks.handle_presp)
e = pp_hooks.handle_presp(ppi);
else
pp_servo_got_presp(ppi);
} else {
pp_diag(ppi, frames, 2, "%s: "
"PDelay Resp F-up doesn't match PDelay Req\n",
__func__);
}
break; break;
default: default:
......
...@@ -16,7 +16,6 @@ int pp_slave(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -16,7 +16,6 @@ int pp_slave(struct pp_instance *ppi, unsigned char *pkt, int plen)
int e = 0; /* error var, to check errors in msg handling */ int e = 0; /* error var, to check errors in msg handling */
MsgHeader *hdr = &ppi->received_ptp_header; MsgHeader *hdr = &ppi->received_ptp_header;
MsgDelayResp resp; MsgDelayResp resp;
MsgPDelayRespFollowUp respFllw;
if (ppi->is_new_state) { if (ppi->is_new_state) {
memset(&ppi->t1, 0, sizeof(ppi->t1)); memset(&ppi->t1, 0, sizeof(ppi->t1));
...@@ -101,35 +100,7 @@ int pp_slave(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -101,35 +100,7 @@ int pp_slave(struct pp_instance *ppi, unsigned char *pkt, int plen)
break; break;
case PPM_PDELAY_RESP_FOLLOW_UP: case PPM_PDELAY_RESP_FOLLOW_UP:
if (plen < PP_PDELAY_RESP_FOLLOW_UP_LENGTH) e = st_com_peer_handle_pres_followup(ppi, pkt, plen);
break;
msg_unpack_pdelay_resp_follow_up(pkt, &respFllw);
if ((memcmp(&DSPOR(ppi)->portIdentity.clockIdentity,
&respFllw.requestingPortIdentity.clockIdentity,
PP_CLOCK_IDENTITY_LENGTH) == 0) &&
((ppi->sent_seq[PPM_PDELAY_REQ]) ==
hdr->sequenceId) &&
(DSPOR(ppi)->portIdentity.portNumber ==
respFllw.requestingPortIdentity.portNumber) &&
(ppi->flags & PPI_FLAG_FROM_CURRENT_PARENT)) {
to_TimeInternal(&ppi->t5,
&respFllw.responseOriginTimestamp);
ppi->flags |= PPI_FLAG_WAITING_FOR_RF_UP;
if (pp_hooks.handle_presp)
e = pp_hooks.handle_presp(ppi);
else
pp_servo_got_presp(ppi);
if (e)
goto out;
} else {
pp_diag(ppi, frames, 2, "pp_pclock : "
"PDelay Resp F-up doesn't match PDelay Req\n");
}
break; break;
default: default:
......
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