Commit 33821404 authored by Aurelio Colosimo's avatar Aurelio Colosimo

msg sending implemented

msg_issue_xxx functions declared, implemented and used
See that pp_get_tstamp now returns a TimeInternal struct.
Actually timestamp struct might be defined outside of ieee_1588_types.h
file, since it is not defined in the spec. For the moment, I leave
it there, but in the future it must be redefined for our purposes (and
in standard_c_notation)
parent 2e755840
...@@ -28,9 +28,9 @@ void *pp_memcpy(void *dest, const void *src, int count) ...@@ -28,9 +28,9 @@ void *pp_memcpy(void *dest, const void *src, int count)
return dest; return dest;
} }
void pp_get_stamp(uint32_t *sptr) void pp_get_tstamp(TimeInternal *t)
{ {
*sptr = htonl(sys_time(0)); /* FIXME tstamp *sptr = htonl(sys_time(0));*/
} }
int pp_memcmp(const void *cs, const void *ct, int count) int pp_memcmp(const void *cs, const void *ct, int count)
......
...@@ -32,7 +32,7 @@ void *pp_memset(void *s, int c, int count) ...@@ -32,7 +32,7 @@ void *pp_memset(void *s, int c, int count)
return memset(s, c, count); return memset(s, c, count);
} }
void pp_get_stamp(uint32_t *sptr) void pp_get_tstamp(TimeInternal *t)
{ {
*sptr = htonl(time(NULL)); /*FIXME tstamp *sptr = htonl(time(NULL)); */
} }
...@@ -3,8 +3,7 @@ ...@@ -3,8 +3,7 @@
*/ */
/* Timer interface for GNU/Linux (and most likely other posix systems */ /* Timer interface for GNU/Linux (and most likely other posix systems */
#include <time.h>
#include <sys/time.h>
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <stdlib.h> #include <stdlib.h>
...@@ -44,7 +43,7 @@ extern int posix_timer_init(struct pp_instance *ppi) ...@@ -44,7 +43,7 @@ extern int posix_timer_init(struct pp_instance *ppi)
extern int posix_timer_start(uint32_t interval, struct pp_timer *tm) extern int posix_timer_start(uint32_t interval, struct pp_timer *tm)
{ {
pp_get_stamp(&tm->start); time((time_t*)&tm->start);
tm->interval = interval; tm->interval = interval;
return 0; return 0;
...@@ -67,7 +66,7 @@ extern int posix_timer_expired(struct pp_timer *tm) ...@@ -67,7 +66,7 @@ extern int posix_timer_expired(struct pp_timer *tm)
return 0; return 0;
} }
pp_get_stamp(&now); time((time_t*)&now);
if (tm->start + tm->interval < now) if (tm->start + tm->interval < now)
return 1; return 1;
......
...@@ -29,7 +29,7 @@ void *pp_memcpy(void *dest, const void *src, int count) ...@@ -29,7 +29,7 @@ void *pp_memcpy(void *dest, const void *src, int count)
return dest; return dest;
} }
void pp_get_stamp(uint32_t *sptr) void pp_get_tstamp(uint32_t *sptr)
{ {
*sptr = htonl(spec_time()); *sptr = htonl(spec_time());
} }
......
...@@ -220,34 +220,45 @@ extern UInteger8 bmc(struct pp_instance *ppi, ...@@ -220,34 +220,45 @@ extern UInteger8 bmc(struct pp_instance *ppi,
extern void msg_pack_header(struct pp_instance *ppi, void *buf); extern void msg_pack_header(struct pp_instance *ppi, void *buf);
extern void msg_unpack_header(struct pp_instance *ppi, void *buf); extern void msg_unpack_header(struct pp_instance *ppi, void *buf);
void *msg_copy_header(MsgHeader *dest, MsgHeader *src); void *msg_copy_header(MsgHeader *dest, MsgHeader *src);
extern void msg_pack_sync(struct pp_instance *ppi, void *buf, extern void msg_pack_sync(struct pp_instance *ppi, Timestamp *orig_tstamp);
Timestamp *orig_tstamp);
extern void msg_unpack_sync(void *buf, MsgSync *sync); extern void msg_unpack_sync(void *buf, MsgSync *sync);
extern void msg_pack_announce(struct pp_instance *ppi, void *buf); extern void msg_pack_announce(struct pp_instance *ppi);
extern void msg_unpack_announce(void *buf, MsgAnnounce *ann); extern void msg_unpack_announce(void *buf, MsgAnnounce *ann);
extern void msg_pack_follow_up(struct pp_instance *ppi, void *buf, extern void msg_pack_follow_up(struct pp_instance *ppi,
Timestamp *prec_orig_tstamp); Timestamp *prec_orig_tstamp);
extern void msg_unpack_follow_up(void *buf, MsgFollowUp *flwup); extern void msg_unpack_follow_up(void *buf, MsgFollowUp *flwup);
extern void msg_pack_pdelay_req(struct pp_instance *ppi, void *buf, extern void msg_pack_pdelay_req(struct pp_instance *ppi,
Timestamp *orig_tstamp); Timestamp *orig_tstamp);
extern void msg_unpack_pdelay_req(void *buf, MsgPDelayReq *pdelay_req); extern void msg_unpack_pdelay_req(void *buf, MsgPDelayReq *pdelay_req);
extern void msg_pack_delay_req(struct pp_instance *ppi, void *buf, extern void msg_pack_delay_req(struct pp_instance *ppi,
Timestamp *orig_tstamp); Timestamp *orig_tstamp);
extern void msg_unpack_delay_req(void *buf, MsgDelayReq *delay_req); extern void msg_unpack_delay_req(void *buf, MsgDelayReq *delay_req);
extern void msg_pack_delay_resp(struct pp_instance *ppi, void *buf, extern void msg_pack_delay_resp(struct pp_instance *ppi,
MsgHeader *hdr, Timestamp *rcv_tstamp); MsgHeader *hdr, Timestamp *rcv_tstamp);
extern void msg_unpack_delay_resp(void *buf, MsgDelayResp *resp); extern void msg_unpack_delay_resp(void *buf, MsgDelayResp *resp);
extern void msg_pack_pdelay_resp(struct pp_instance *ppi, void *buf, extern void msg_pack_pdelay_resp(struct pp_instance *ppi,
MsgHeader *hdr, Timestamp *req_rec_tstamp); MsgHeader *hdr, Timestamp *req_rec_tstamp);
extern void msg_unpack_pdelay_resp(void *buf, MsgPDelayResp *presp); extern void msg_unpack_pdelay_resp(void *buf, MsgPDelayResp *presp);
extern void msg_pack_pdelay_resp_followup(struct pp_instance *ppi, void *buf, extern void msg_pack_pdelay_resp_followup(struct pp_instance *ppi,
MsgHeader *hdr, MsgHeader *hdr,
Timestamp *resp_orig_tstamp); Timestamp *resp_orig_tstamp);
extern void msg_unpack_pdelay_resp_followup(void *buf, extern void msg_unpack_pdelay_resp_followup(void *buf,
MsgPDelayRespFollowUp *presp_follow); MsgPDelayRespFollowUp *presp_follow);
/* each of them returns 0 if no error and -1 in case of error in send */
extern int msg_issue_announce(struct pp_instance *ppi);
extern int msg_issue_sync(struct pp_instance *ppi);
extern int msg_issue_followup(struct pp_instance *ppi, TimeInternal *time);
extern int msg_issue_delay_req(struct pp_instance *ppi);
extern int msg_issue_pdelay_req(struct pp_instance *ppi);
extern int msg_issue_pdelay_resp(struct pp_instance *ppi, TimeInternal *time,
MsgHeader *hdr);
extern int msg_issue_delay_resp(struct pp_instance *ppi, TimeInternal *time);
extern int msg_issue_pdelay_resp_follow_up(struct pp_instance *ppi,
TimeInternal *time);
/* arith.c */
/* Functions for timestamp handling (internal to protocol format conversion*/
/* FIXME: add prefix in function name? */ /* FIXME: add prefix in function name? */
extern void int64_to_TimeInternal(Integer64 bigint, TimeInternal *internal); extern void int64_to_TimeInternal(Integer64 bigint, TimeInternal *internal);
extern int from_TimeInternal(TimeInternal *internal, Timestamp *external); extern int from_TimeInternal(TimeInternal *internal, Timestamp *external);
...@@ -255,9 +266,8 @@ extern int to_TimeInternal(TimeInternal *internal, Timestamp *external); ...@@ -255,9 +266,8 @@ extern int to_TimeInternal(TimeInternal *internal, Timestamp *external);
extern void add_TimeInternal(TimeInternal *r, TimeInternal *x, TimeInternal *y); extern void add_TimeInternal(TimeInternal *r, TimeInternal *x, TimeInternal *y);
extern void sub_TimeInternal(TimeInternal *r, TimeInternal *x, TimeInternal *y); extern void sub_TimeInternal(TimeInternal *r, TimeInternal *x, TimeInternal *y);
/* Get a timestamp */ /* Get a timestamp */
extern void pp_get_stamp(uint32_t *sptr); extern void pp_get_tstamp(TimeInternal *t);
/* /*
* The state machine itself is an array of these structures. * The state machine itself is an array of these structures.
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
#include <pptp/diag.h> #include <pptp/diag.h>
#include "common-fun.h" #include "common-fun.h"
void st_com_execute_slave(struct pp_instance *ppi) int st_com_execute_slave(struct pp_instance *ppi)
{ {
if (pp_timer_expired(ppi->timers[PP_TIMER_ANN_RECEIPT])) { if (pp_timer_expired(ppi->timers[PP_TIMER_ANN_RECEIPT])) {
DBGV("event ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES\n"); DBGV("event ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES\n");
...@@ -26,15 +26,16 @@ void st_com_execute_slave(struct pp_instance *ppi) ...@@ -26,15 +26,16 @@ void st_com_execute_slave(struct pp_instance *ppi)
if (ppi->rt_opts->e2e_mode) { if (ppi->rt_opts->e2e_mode) {
if (pp_timer_expired(ppi->timers[PP_TIMER_DELAYREQ])) { if (pp_timer_expired(ppi->timers[PP_TIMER_DELAYREQ])) {
DBGV("TODO: event DELAYREQ_INTERVAL_TIMEOUT_EXPIRES\n"); DBGV("TODO: event DELAYREQ_INTERVAL_TIMEOUT_EXPIRES\n");
/* TODO issueDelayReq(rtOpts,ptpClock); */ return msg_issue_delay_req(ppi);
} }
} else { } else {
if (pp_timer_expired(ppi->timers[PP_TIMER_PDELAYREQ])) if (pp_timer_expired(ppi->timers[PP_TIMER_PDELAYREQ]))
{ {
DBGV("TODO: event PDELAYREQ_INTERVAL_TOUT_EXPIRES\n"); DBGV("TODO: event PDELAYREQ_INTERVAL_TOUT_EXPIRES\n");
/* TODO issuePDelayReq(rtOpts,ptpClock); */ return msg_issue_pdelay_req(ppi);
} }
} }
return 0;
} }
void st_com_restart_annrec_timer(struct pp_instance *ppi) void st_com_restart_annrec_timer(struct pp_instance *ppi)
...@@ -286,9 +287,7 @@ int st_com_handle_pdelay_req(struct pp_instance *ppi, unsigned char *buf, ...@@ -286,9 +287,7 @@ int st_com_handle_pdelay_req(struct pp_instance *ppi, unsigned char *buf,
} else { } else {
msg_copy_header(&ppi->pdelay_req_hdr, hdr); msg_copy_header(&ppi->pdelay_req_hdr, hdr);
/* TODO issuePDelayResp(time, header, rtOpts, return msg_issue_pdelay_resp(ppi, &time, hdr);
ptpClock);
*/
} }
return 0; return 0;
} }
...@@ -324,6 +323,6 @@ int st_com_master_handle_sync(struct pp_instance *ppi, unsigned char *buf, ...@@ -324,6 +323,6 @@ int st_com_master_handle_sync(struct pp_instance *ppi, unsigned char *buf,
/* Add latency */ /* Add latency */
add_TimeInternal(time, time, &ppi->rt_opts->outbound_latency); add_TimeInternal(time, time, &ppi->rt_opts->outbound_latency);
/* TODO issueFollowup(time,rtOpts,ptpClock);*/ msg_issue_followup(ppi, time);
return 0; return 0;
} }
...@@ -7,7 +7,8 @@ ...@@ -7,7 +7,8 @@
/* Contains all functions common to more than one state */ /* Contains all functions common to more than one state */
void st_com_execute_slave(struct pp_instance *ppi); /* returns -1 in case of error, see below */
int st_com_execute_slave(struct pp_instance *ppi);
void st_com_restart_annrec_timer(struct pp_instance *ppi); void st_com_restart_annrec_timer(struct pp_instance *ppi);
......
...@@ -86,8 +86,12 @@ void *msg_copy_header(MsgHeader *dest, MsgHeader *src) ...@@ -86,8 +86,12 @@ void *msg_copy_header(MsgHeader *dest, MsgHeader *src)
/* Pack Sync message into out buffer of ppi */ /* Pack Sync message into out buffer of ppi */
void msg_pack_sync(struct pp_instance *ppi, void *buf, Timestamp *orig_tstamp) void msg_pack_sync(struct pp_instance *ppi, Timestamp *orig_tstamp)
{ {
void *buf;
buf = ppi->buf_out;
/* changes in header */ /* changes in header */
*(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0; *(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0;
/* RAZ messageType */ /* RAZ messageType */
...@@ -126,8 +130,11 @@ void msg_unpack_sync(void *buf, MsgSync *sync) ...@@ -126,8 +130,11 @@ void msg_unpack_sync(void *buf, MsgSync *sync)
} }
/* Pack Announce message into out buffer of ppi */ /* Pack Announce message into out buffer of ppi */
void msg_pack_announce(struct pp_instance *ppi, void *buf) void msg_pack_announce(struct pp_instance *ppi)
{ {
void *buf;
buf = ppi->buf_out;
/* changes in header */ /* changes in header */
*(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0; *(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0;
/* RAZ messageType */ /* RAZ messageType */
...@@ -186,9 +193,12 @@ void msg_unpack_announce(void *buf, MsgAnnounce *ann) ...@@ -186,9 +193,12 @@ void msg_unpack_announce(void *buf, MsgAnnounce *ann)
/* Pack Follow Up message into out buffer of ppi*/ /* Pack Follow Up message into out buffer of ppi*/
void msg_pack_follow_up(struct pp_instance *ppi, void *buf, void msg_pack_follow_up(struct pp_instance *ppi, Timestamp *prec_orig_tstamp)
Timestamp *prec_orig_tstamp)
{ {
void *buf;
buf = ppi->buf_out;
/* changes in header */ /* changes in header */
*(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0; *(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0;
/* RAZ messageType */ /* RAZ messageType */
...@@ -198,7 +208,7 @@ void msg_pack_follow_up(struct pp_instance *ppi, void *buf, ...@@ -198,7 +208,7 @@ void msg_pack_follow_up(struct pp_instance *ppi, void *buf,
*(UInteger16 *) (buf + 2) = htons(PP_FOLLOW_UP_LENGTH); *(UInteger16 *) (buf + 2) = htons(PP_FOLLOW_UP_LENGTH);
*(UInteger16 *) (buf + 30) = htons(ppi->sent_seq_id[PPM_SYNC] - 1); *(UInteger16 *) (buf + 30) = htons(ppi->sent_seq_id[PPM_SYNC] - 1);
/* sentSyncSequenceId has already been incremented in "issueSync" */ /* sentSyncSequenceId has already been incremented in msg_issue_sync */
*(UInteger8 *) (buf + 32) = 0x02; *(UInteger8 *) (buf + 32) = 0x02;
/* Table 23 */ /* Table 23 */
...@@ -231,9 +241,12 @@ void msg_unpack_follow_up(void *buf, MsgFollowUp *flwup) ...@@ -231,9 +241,12 @@ void msg_unpack_follow_up(void *buf, MsgFollowUp *flwup)
} }
/* pack PdelayReq message into out buffer of ppi */ /* pack PdelayReq message into out buffer of ppi */
void msg_pack_pdelay_req(struct pp_instance *ppi, void *buf, void msg_pack_pdelay_req(struct pp_instance *ppi, Timestamp *orig_tstamp)
Timestamp *orig_tstamp)
{ {
void *buf;
buf = ppi->buf_out;
/* changes in header */ /* changes in header */
*(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0; *(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0;
/* RAZ messageType */ /* RAZ messageType */
...@@ -261,10 +274,13 @@ void msg_pack_pdelay_req(struct pp_instance *ppi, void *buf, ...@@ -261,10 +274,13 @@ void msg_pack_pdelay_req(struct pp_instance *ppi, void *buf,
} }
/*pack DelayReq message into out buffer of ppi*/ /* pack DelayReq message into out buffer of ppi */
void msg_pack_delay_req(struct pp_instance *ppi, void *buf, void msg_pack_delay_req(struct pp_instance *ppi, Timestamp *orig_tstamp)
Timestamp *orig_tstamp)
{ {
void *buf;
buf = ppi->buf_out;
/* changes in header */ /* changes in header */
*(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0; *(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0;
/* RAZ messageType */ /* RAZ messageType */
...@@ -288,10 +304,14 @@ void msg_pack_delay_req(struct pp_instance *ppi, void *buf, ...@@ -288,10 +304,14 @@ void msg_pack_delay_req(struct pp_instance *ppi, void *buf,
} }
/*pack delayResp message into OUT buffer of ppi*/ /* pack DelayResp message into OUT buffer of ppi */
void msg_pack_delay_resp(struct pp_instance *ppi, void *buf, void msg_pack_delay_resp(struct pp_instance *ppi,
MsgHeader *hdr, Timestamp *rcv_tstamp) MsgHeader *hdr, Timestamp *rcv_tstamp)
{ {
void *buf;
buf = ppi->buf_out;
/* changes in header */ /* changes in header */
*(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0; *(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0;
/* RAZ messageType */ /* RAZ messageType */
...@@ -329,9 +349,13 @@ void msg_pack_delay_resp(struct pp_instance *ppi, void *buf, ...@@ -329,9 +349,13 @@ void msg_pack_delay_resp(struct pp_instance *ppi, void *buf,
/* Pack PdelayResp message into out buffer of ppi */ /* Pack PdelayResp message into out buffer of ppi */
void msg_pack_pdelay_resp(struct pp_instance *ppi, void *buf, MsgHeader *hdr, void msg_pack_pdelay_resp(struct pp_instance *ppi, MsgHeader *hdr,
Timestamp *req_rec_tstamp) Timestamp *req_rec_tstamp)
{ {
void *buf;
buf = ppi->buf_out;
/* changes in header */ /* changes in header */
*(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0; *(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0;
/* RAZ messageType */ /* RAZ messageType */
...@@ -437,10 +461,14 @@ void msg_unpack_pdelay_resp(void *buf, MsgPDelayResp *presp) ...@@ -437,10 +461,14 @@ void msg_unpack_pdelay_resp(void *buf, MsgPDelayResp *presp)
} }
/* Pack PdelayRespFollowUp message into out buffer of ppi */ /* Pack PdelayRespFollowUp message into out buffer of ppi */
void msg_pack_pdelay_resp_followup(struct pp_instance *ppi, void *buf, void msg_pack_pdelay_resp_followup(struct pp_instance *ppi,
MsgHeader *hdr, MsgHeader *hdr,
Timestamp *resp_orig_tstamp) Timestamp *resp_orig_tstamp)
{ {
void *buf;
buf = ppi->buf_out;
/* changes in header */ /* changes in header */
*(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0; *(char *)(buf + 0) = *(char *)(buf + 0) & 0xF0;
/* RAZ messageType */ /* RAZ messageType */
...@@ -488,3 +516,104 @@ void msg_unpack_pdelay_resp_followup(void *buf, ...@@ -488,3 +516,104 @@ void msg_unpack_pdelay_resp_followup(void *buf,
presp_follow->requestingPortIdentity.portNumber = presp_follow->requestingPortIdentity.portNumber =
htons(*(UInteger16 *) (buf + 52)); htons(*(UInteger16 *) (buf + 52));
} }
/* FIXME diag in the following macro */
#define MSG_SEND_AND_RET(x,y)\
if (pp_send_packet(ppi, ppi->buf_out, PP_## x ##_LENGTH, PP_NP_## y) <\
PP_## x ##_LENGTH) {\
return -1;\
}\
ppi->sent_seq_id[PPM_## x]++;\
return 0;
/* Pack and send on general multicast ip adress an Announce message */
int msg_issue_announce(struct pp_instance *ppi)
{
msg_pack_announce(ppi);
MSG_SEND_AND_RET(ANNOUNCE, GEN);
}
/* Pack and send on event multicast ip adress a Sync message */
int msg_issue_sync(struct pp_instance *ppi)
{
Timestamp orig_tstamp;
TimeInternal now;
pp_get_tstamp(&now);
from_TimeInternal(&now, &orig_tstamp);
msg_pack_sync(ppi,&orig_tstamp);
MSG_SEND_AND_RET(SYNC, EVT);
}
/* Pack and send on general multicast ip adress a FollowUp message */
int msg_issue_followup(struct pp_instance *ppi, TimeInternal *time)
{
Timestamp prec_orig_tstamp;
from_TimeInternal(time, &prec_orig_tstamp);
msg_pack_follow_up(ppi, &prec_orig_tstamp);
MSG_SEND_AND_RET(FOLLOW_UP, GEN);
}
/* Pack and send on event multicast ip adress a DelayReq message */
int msg_issue_delay_req(struct pp_instance *ppi)
{
Timestamp orig_tstamp;
TimeInternal now;
pp_get_tstamp(&now);
from_TimeInternal(&now, &orig_tstamp);
msg_pack_delay_req(ppi, &orig_tstamp);
MSG_SEND_AND_RET(DELAY_REQ, EVT);
}
/* Pack and send on event multicast ip adress a PDelayReq message */
int msg_issue_pdelay_req(struct pp_instance *ppi)
{
Timestamp orig_tstamp;
TimeInternal now;
pp_get_tstamp(&now);
from_TimeInternal(&now, &orig_tstamp);
msg_pack_pdelay_req(ppi, &orig_tstamp);
MSG_SEND_AND_RET(PDELAY_REQ, EVT);
}
/* Pack and send on event multicast ip adress a PDelayResp message */
int msg_issue_pdelay_resp(struct pp_instance *ppi, TimeInternal *time,
MsgHeader *hdr)
{
Timestamp req_rec_tstamp;
from_TimeInternal(time, &req_rec_tstamp);
msg_pack_pdelay_resp(ppi, hdr, &req_rec_tstamp);
MSG_SEND_AND_RET(PDELAY_RESP, EVT);
}
/* Pack and send on event multicast ip adress a DelayResp message */
int msg_issue_delay_resp(struct pp_instance *ppi, TimeInternal *time)
{
Timestamp rcv_tstamp;
from_TimeInternal(time, &rcv_tstamp);
msg_pack_delay_resp(ppi, &ppi->delay_req_hdr, &rcv_tstamp);
MSG_SEND_AND_RET(PDELAY_RESP, GEN);
}
/* Pack and send on event multicast ip adress a DelayResp message */
int msg_issue_pdelay_resp_follow_up(struct pp_instance *ppi, TimeInternal *time)
{
Timestamp resp_orig_tstamp;
from_TimeInternal(time, &resp_orig_tstamp);
msg_pack_pdelay_resp_followup(ppi, &ppi->pdelay_req_hdr,
&resp_orig_tstamp);
MSG_SEND_AND_RET(PDELAY_RESP_FOLLOW_UP, GEN);
}
...@@ -28,8 +28,9 @@ int pp_listening(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -28,8 +28,9 @@ int pp_listening(struct pp_instance *ppi, unsigned char *pkt, int plen)
} }
if (e == 0) if (e == 0)
st_com_execute_slave(ppi); e = st_com_execute_slave(ppi);
else
if (e != 0)
ppi->next_state = PPS_FAULTY; ppi->next_state = PPS_FAULTY;
state_updated: state_updated:
......
...@@ -32,19 +32,28 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -32,19 +32,28 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen)
goto state_updated; goto state_updated;
if (pp_timer_expired(ppi->timers[PP_TIMER_SYNC])) { if (pp_timer_expired(ppi->timers[PP_TIMER_SYNC])) {
/* FIXME diag
DBGV("TODO: event SYNC_INTERVAL_TIMEOUT_EXPIRES\n"); DBGV("TODO: event SYNC_INTERVAL_TIMEOUT_EXPIRES\n");
/* TODO issueSync(rtOpts, ptpClock); */ */
if (msg_issue_sync(ppi) < 0)
goto failure;
} }
if (pp_timer_expired(ppi->timers[PP_TIMER_ANN_INTERVAL])) { if (pp_timer_expired(ppi->timers[PP_TIMER_ANN_INTERVAL])) {
DBGV("TODO: event ANNOUNCE_INTERVAL_TIMEOUT_EXPIRES\n"); /* FIXME diag
/* TODO issueAnnounce(rtOpts, ptpClock); */ DBGV("event ANNOUNCE_INTERVAL_TIMEOUT_EXPIRES\n");
*/
if (msg_issue_announce(ppi) < 0)
goto failure;
} }
if (!ppi->rt_opts->e2e_mode) { if (!ppi->rt_opts->e2e_mode) {
if (pp_timer_expired(ppi->timers[PP_TIMER_PDELAYREQ])) { if (pp_timer_expired(ppi->timers[PP_TIMER_PDELAYREQ])) {
DBGV("TODO: event PDELAYREQ_INTERVAL_TOUT_EXPIRES\n"); /* FIXME diag
/* TODO issuePDelayReq(rtOpts,ptpClock); */ DBGV("event PDELAYREQ_INTERVAL_TOUT_EXPIRES\n");
*/
if (msg_issue_pdelay_req(ppi) < 0)
goto failure;
} }
} }
...@@ -60,8 +69,7 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -60,8 +69,7 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen)
case PPM_DELAY_REQ: case PPM_DELAY_REQ:
msg_copy_header(&ppi->delay_req_hdr, hdr); msg_copy_header(&ppi->delay_req_hdr, hdr);
/*TODO issueDelayResp(time,&ptpClock->delayReqHeader,rtOpts,ptpClock); msg_issue_delay_resp(ppi, &time);
*/
break; break;
case PPM_PDELAY_REQ: case PPM_PDELAY_REQ:
...@@ -78,11 +86,7 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -78,11 +86,7 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen)
add_TimeInternal(&time, &time, add_TimeInternal(&time, &time,
&ppi->rt_opts->outbound_latency); &ppi->rt_opts->outbound_latency);
/* TODO issuePDelayRespFollowUp( e = msg_issue_pdelay_resp_follow_up(ppi,&time);
time,
&ptpClock->PdelayReqHeader,
rtOpts, ptpClock);
*/
break; break;
} }
msg_unpack_pdelay_resp(pkt, &ppi->msg_tmp.presp); msg_unpack_pdelay_resp(pkt, &ppi->msg_tmp.presp);
...@@ -175,6 +179,7 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -175,6 +179,7 @@ int pp_master(struct pp_instance *ppi, unsigned char *pkt, int plen)
break; break;
} }
failure:
if (e == 0) { if (e == 0) {
if (DSDEF(ppi)->slaveOnly || if (DSDEF(ppi)->slaveOnly ||
DSDEF(ppi)->clockQuality.clockClass == 255) DSDEF(ppi)->clockQuality.clockClass == 255)
......
...@@ -38,8 +38,9 @@ int pp_passive(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -38,8 +38,9 @@ int pp_passive(struct pp_instance *ppi, unsigned char *pkt, int plen)
} }
if (e == 0) if (e == 0)
st_com_execute_slave(ppi); e = st_com_execute_slave(ppi);
else
if (e != 0)
ppi->next_state = PPS_FAULTY; ppi->next_state = PPS_FAULTY;
......
...@@ -140,10 +140,7 @@ int pp_slave(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -140,10 +140,7 @@ int pp_slave(struct pp_instance *ppi, unsigned char *pkt, int plen)
if (ppi->is_from_self) { if (ppi->is_from_self) {
add_TimeInternal(&time, &time, add_TimeInternal(&time, &time,
&ppi->rt_opts->outbound_latency); &ppi->rt_opts->outbound_latency);
/* TODO issuePDelayRespFollowUp(time, msg_issue_pdelay_resp_follow_up(ppi, &time);
&ptpClock->PdelayReqHeader,
rtOpts,ptpClock);
*/
break; break;
} }
msg_unpack_pdelay_resp(pkt, msg_unpack_pdelay_resp(pkt,
...@@ -250,8 +247,9 @@ int pp_slave(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -250,8 +247,9 @@ int pp_slave(struct pp_instance *ppi, unsigned char *pkt, int plen)
} }
if (e == 0) if (e == 0)
st_com_execute_slave(ppi); e = st_com_execute_slave(ppi);
else
if (e != 0)
ppi->next_state = PPS_FAULTY; ppi->next_state = PPS_FAULTY;
state_updated: state_updated:
......
...@@ -31,8 +31,9 @@ int pp_uncalibrated(struct pp_instance *ppi, unsigned char *pkt, int plen) ...@@ -31,8 +31,9 @@ int pp_uncalibrated(struct pp_instance *ppi, unsigned char *pkt, int plen)
} }
if (e == 0) if (e == 0)
st_com_execute_slave(ppi); e = st_com_execute_slave(ppi);
else
if (e != 0)
ppi->next_state = PPS_FAULTY; ppi->next_state = PPS_FAULTY;
ppi->next_delay = PP_DEFAULT_NEXT_DELAY_MS; ppi->next_delay = PP_DEFAULT_NEXT_DELAY_MS;
......
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