From 7d32a4bce7cc9ffe43f3d24dedd71611471f891a Mon Sep 17 00:00:00 2001 From: Richard Cochran Date: Sat, 28 Jul 2012 19:14:04 +0200 Subject: [PATCH] Convert TLV type and length to host byte order on transmit. Signed-off-by: Richard Cochran --- msg.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/msg.c b/msg.c index 6ded539..8558ccd 100644 --- a/msg.c +++ b/msg.c @@ -168,6 +168,22 @@ static int suffix_post_recv(uint8_t *ptr, int len) return cnt; } +static void suffix_pre_send(uint8_t *ptr, int cnt) +{ + int i; + struct TLV *tlv; + + if (!ptr) + return; + + for (i = 0; i < cnt; i++) { + tlv = (struct TLV *) ptr; + ptr += sizeof(struct TLV) + tlv->length; + tlv->type = htons(tlv->type); + tlv->length = htons(tlv->length); + } +} + static void timestamp_post_recv(struct ptp_message *m, struct Timestamp *ts) { uint32_t lsb = ntohl(ts->seconds_lsb); @@ -319,6 +335,7 @@ int msg_post_recv(struct ptp_message *m, int cnt) int msg_pre_send(struct ptp_message *m) { int type; + uint8_t *suffix = NULL; if (hdr_pre_send(&m->header)) return -1; @@ -338,24 +355,33 @@ int msg_pre_send(struct ptp_message *m) break; case FOLLOW_UP: timestamp_pre_send(&m->follow_up.preciseOriginTimestamp); + suffix = m->follow_up.suffix; break; case DELAY_RESP: timestamp_pre_send(&m->delay_resp.receiveTimestamp); m->delay_resp.requestingPortIdentity.portNumber = htons(m->delay_resp.requestingPortIdentity.portNumber); + suffix = m->delay_resp.suffix; break; case PDELAY_RESP_FOLLOW_UP: timestamp_pre_send(&m->pdelay_resp_fup.responseOriginTimestamp); port_id_pre_send(&m->pdelay_resp_fup.requestingPortIdentity); + suffix = m->pdelay_resp_fup.suffix; break; case ANNOUNCE: announce_pre_send(&m->announce); + suffix = m->announce.suffix; break; case SIGNALING: + suffix = m->signaling.suffix; + break; case MANAGEMENT: + suffix = m->management.suffix; + break; default: return -1; } + suffix_pre_send(suffix, m->tlv_count); return 0; }