On Wed, Nov 14, 2018 at 02:10:10PM -0800, Vedang Patel wrote: > diff --git a/port.c b/port.c > index 4c845358f612..015766103e05 100644 > --- a/port.c > +++ b/port.c > @@ -1591,6 +1591,7 @@ int port_initialize(struct port *p) > p->logMinDelayReqInterval = config_get_int(cfg, p->name, > "logMinDelayReqInterval"); > p->peerMeanPathDelay = 0; > p->logAnnounceInterval = config_get_int(cfg, p->name, > "logAnnounceInterval"); > + p->initialLogAnnounceInterval = p->logAnnounceInterval;
This is backwards. You want: p->initialLogAnnounceInterval = config_get_int(cfg, p->name, "logAnnounceInterval"); p->logAnnounceInterval = p->initialLogAnnounceInterval; > p->inhibit_announce = config_get_int(cfg, p->name, > "inhibit_announce"); > p->ignore_source_id = config_get_int(cfg, p->name, > "ignore_source_id"); > p->announceReceiptTimeout = config_get_int(cfg, p->name, > "announceReceiptTimeout"); > @@ -1600,6 +1601,7 @@ int port_initialize(struct port *p) > p->match_transport_specific = !config_get_int(cfg, p->name, > "ignore_transport_specific"); > p->localPriority = config_get_int(cfg, p->name, > "G.8275.portDS.localPriority"); > p->logSyncInterval = config_get_int(cfg, p->name, > "logSyncInterval"); > + p->initialLogSyncInterval = p->logSyncInterval; also backwards. > p->logMinPdelayReqInterval = config_get_int(cfg, p->name, > "logMinPdelayReqInterval"); > p->logPdelayReqInterval = p->logMinPdelayReqInterval; > p->neighborPropDelayThresh = config_get_int(cfg, p->name, > "neighborPropDelayThresh"); > @@ -185,5 +187,10 @@ enum fsm_event process_sync(struct port *p, struct > ptp_message *m); > int source_pid_eq(struct ptp_message *m1, struct ptp_message *m2); > void ts_add(tmv_t *ts, Integer64 correction); > int port_capable(struct port *p); > +int port_tx_signaling(struct port *p, > + Integer8 announceInterval, > + Integer8 timeSyncInterval, > + Integer8 linkDelayInterval); This is poorly named. You make it sound like it is a generic transmit function for signaling message, but it isn't. Also, please keep the prototypes in alphabetical order. > @@ -61,6 +65,48 @@ struct ptp_message *port_unicast_construct(struct port *p, > return msg; > } > > +static void set_interval(int8_t *current_interval, > + int8_t new_interval, > + int8_t initial_interval) > +{ > + switch (new_interval) { > + case SIGNAL_NO_CHANGE: > + break; > + case SIGNAL_SET_INITIAL: > + *current_interval = initial_interval; > + break; > + default: > + *current_interval = new_interval; > + break; > + } Ugh. Just return current_interval: static int8_t set_interval(int8_t new_interval, int8_t initial_interval); > +} > + > +static int process_interval_request(struct port *p, > + struct tlv_extra *extra) > +{ > + struct msg_interval_req_tlv *r; > + > + r = (struct msg_interval_req_tlv *) extra->tlv; You need to check the length of the TLV, in tlv.c:org_post_recv(). > + > + if (r->subtype[2] != 2) { But you didn't even bother to check the ID! > + return -EBADMSG; > + } > + > + set_interval(&p->logAnnounceInterval, > + r->announceInterval, > + p->initialLogAnnounceInterval); > + > + set_interval(&p->logSyncInterval, > + r->timeSyncInterval, > + p->initialLogSyncInterval); > + > + set_interval(&p->logPdelayReqInterval, > + r->linkDelayInterval, > + p->logMinPdelayReqInterval); > + > + return 0; > +} > + > int process_signaling(struct port *p, struct ptp_message *m) > { > struct tlv_extra *extra; > @@ -109,7 +155,59 @@ int process_signaling(struct port *p, struct ptp_message > *m) > > case TLV_ACKNOWLEDGE_CANCEL_UNICAST_TRANSMISSION: > break; > + > + case TLV_ORGANIZATION_EXTENSION: You need to check .id and .subtype, and then dispatch your helper function. It isn't an error if those two fields are unknown. > + err = process_interval_request(p, extra); > + break; > } > } > return err; > } > + > +int port_tx_signaling(struct port *p, > + Integer8 announceInterval, > + Integer8 timeSyncInterval, > + Integer8 linkDelayInterval) > +{ > + int err; > + struct ptp_message *msg; > + struct tlv_extra *extra; > + struct msg_interval_req_tlv *mir; Please use reverse Christmas tree style. > + struct PortIdentity tpid = {0}; This won't compile on older gcc. > + tpid.portNumber = 0xFF; This is silly to set after clearing. Instead you want: struct PortIdentity tpid; if (!port_capable(p)) { return 0; } memset(&tpid.clockIdentity, 0, sizeof(tpid.clockIdentity)); tpid.portNumber = 0xFF; > + msg = port_signaling_construct(p, &tpid); > + if (!msg) { > + return -1; > + } > + Drop newline please here > + extra = msg_tlv_append(msg, sizeof(*mir)); > + if (!extra) { > + err = -1; > + goto out; > + } > + and here. Thanks, Richard _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel