#include "netdissect-stdinc.h"
#include "netdissect.h"
#include "extract.h"
-#include <string.h>
/*
* PTP header
ND_PRINT("(%s)", tok2str(ptp_msg_type, "unknown", e)); \
}
-const char *p_porigin_ts = "preciseOriginTimeStamp";
-const char *p_origin_ts = "originTimeStamp";
-const char *p_recv_ts = "receiveTimeStamp";
+static const char *p_porigin_ts = "preciseOriginTimeStamp";
+static const char *p_origin_ts = "originTimeStamp";
+static const char *p_recv_ts = "receiveTimeStamp";
#define PTP_VER_1 0x1
#define PTP_VER_2 0x2
static void
ptp_print_1(netdissect_options *ndo)
{
- ND_PRINT("ptp version 1: not implemented\n");
+ ND_PRINT(" (not implemented)");
}
-static void ptp_print_2(netdissect_options *ndo, const u_char *bp, u_int length)
+static void
+ptp_print_2(netdissect_options *ndo, const u_char *bp, u_int length)
{
u_int len = length;
- uint16_t msg_len, flags, seq_id;
- uint8_t foct, domain_no, msg_type, v1_compat, rsvd1, port_id, lm_int, control;
+ uint16_t msg_len, flags, port_id, seq_id;
+ uint8_t foct, domain_no, msg_type, v1_compat, rsvd1, lm_int, control;
uint32_t ns_corr, sns_corr, rsvd2;
uint64_t clk_id;
len -= 2; bp += 2; msg_len = GET_BE_U_2(bp); ND_PRINT(", length : %u", msg_len);
/* domain */
- len -= 2; bp += 2; domain_no = GET_BE_U_2(bp) & PTP_DOMAIN_MASK; ND_PRINT(", domain : %u", domain_no);
+ len -= 2; bp += 2; domain_no = (GET_BE_U_2(bp) & PTP_DOMAIN_MASK) >> 8; ND_PRINT(", domain : %u", domain_no);
/* rsvd 1*/
rsvd1 = GET_BE_U_2(bp) & PTP_RSVD1_MASK;
* PTP general message
*/
void
-ptp_print(netdissect_options *ndo, const u_char *bp, u_int len)
+ptp_print(netdissect_options *ndo, const u_char *bp, u_int length)
{
u_int vers;
ndo->ndo_protocol = "ptp";
- if (len < PTP_HDR_LEN) {
- goto trunc;
- }
+ ND_LCHECK_U(length, PTP_HDR_LEN);
vers = GET_BE_U_2(bp) & PTP_VERS_MASK;
ND_PRINT("PTPv%u",vers);
switch(vers) {
ptp_print_1(ndo);
break;
case PTP_VER_2:
- ptp_print_2(ndo, bp, len);
+ ptp_print_2(ndo, bp, length);
break;
default:
//ND_PRINT("ERROR: unknown-version\n");
}
return;
-trunc:
- nd_print_trunc(ndo);
- return;
+invalid:
+ nd_print_invalid(ndo);
}
static void
ND_PRINT(", %s :", stype);
/* sec time stamp 6 bytes */
- secs = GET_BE_U_2(bp) + GET_BE_U_4(bp+2);
+ secs = GET_BE_U_6(bp);
ND_PRINT(" %"PRIu64" seconds,", secs);
*len -= 6;
bp += 6;
ND_PRINT(", %s :", ttype);
/* sec time stamp 6 bytes */
- secs = GET_BE_U_2(bp) + GET_BE_U_4(bp+2);
+ secs = GET_BE_U_6(bp);
ND_PRINT(" %"PRIu64" seconds,", secs);
*len -= 6;
bp += 6;
ND_PRINT(", %s :", p_origin_ts);
/* sec time stamp 6 bytes */
- secs = GET_BE_U_2(bp) + GET_BE_U_4(bp+2);
+ secs = GET_BE_U_6(bp);
ND_PRINT(" %"PRIu64" seconds", secs);
*len -= 6;
bp += 6;