* PGM header (RFC 3208)
*/
struct pgm_header {
- uint16_t pgm_sport;
- uint16_t pgm_dport;
- uint8_t pgm_type;
- uint8_t pgm_options;
- uint16_t pgm_sum;
- uint8_t pgm_gsid[6];
- uint16_t pgm_length;
+ nd_uint16_t pgm_sport;
+ nd_uint16_t pgm_dport;
+ nd_uint8_t pgm_type;
+ nd_uint8_t pgm_options;
+ nd_uint16_t pgm_sum;
+ nd_byte pgm_gsid[6];
+ nd_uint16_t pgm_length;
};
struct pgm_spm {
- uint32_t pgms_seq;
- uint32_t pgms_trailseq;
- uint32_t pgms_leadseq;
- uint16_t pgms_nla_afi;
- uint16_t pgms_reserved;
+ nd_uint32_t pgms_seq;
+ nd_uint32_t pgms_trailseq;
+ nd_uint32_t pgms_leadseq;
+ nd_uint16_t pgms_nla_afi;
+ nd_uint16_t pgms_reserved;
/* ... uint8_t pgms_nla[0]; */
/* ... options */
};
struct pgm_nak {
- uint32_t pgmn_seq;
- uint16_t pgmn_source_afi;
- uint16_t pgmn_reserved;
+ nd_uint32_t pgmn_seq;
+ nd_uint16_t pgmn_source_afi;
+ nd_uint16_t pgmn_reserved;
/* ... uint8_t pgmn_source[0]; */
/* ... uint16_t pgmn_group_afi */
/* ... uint16_t pgmn_reserved2; */
};
struct pgm_ack {
- uint32_t pgma_rx_max_seq;
- uint32_t pgma_bitmap;
+ nd_uint32_t pgma_rx_max_seq;
+ nd_uint32_t pgma_bitmap;
/* ... options */
};
struct pgm_poll {
- uint32_t pgmp_seq;
- uint16_t pgmp_round;
- uint16_t pgmp_reserved;
+ nd_uint32_t pgmp_seq;
+ nd_uint16_t pgmp_round;
+ nd_uint16_t pgmp_reserved;
/* ... options */
};
struct pgm_polr {
- uint32_t pgmp_seq;
- uint16_t pgmp_round;
- uint16_t pgmp_subtype;
- uint16_t pgmp_nla_afi;
- uint16_t pgmp_reserved;
+ nd_uint32_t pgmp_seq;
+ nd_uint16_t pgmp_round;
+ nd_uint16_t pgmp_subtype;
+ nd_uint16_t pgmp_nla_afi;
+ nd_uint16_t pgmp_reserved;
/* ... uint8_t pgmp_nla[0]; */
/* ... options */
};
struct pgm_data {
- uint32_t pgmd_seq;
- uint32_t pgmd_trailseq;
+ nd_uint32_t pgmd_seq;
+ nd_uint32_t pgmd_trailseq;
/* ... options */
};
const struct pgm_header *pgm;
const struct ip *ip;
char ch;
+ uint8_t pgm_type;
uint16_t sport, dport;
u_int nla_afnum;
char nla_buf[INET6_ADDRSTRLEN];
else
ip6 = NULL;
ch = '\0';
- if (!ND_TTEST(pgm->pgm_dport)) {
+ if (!ND_TTEST_2(pgm->pgm_dport)) {
if (ip6) {
ND_PRINT((ndo, "%s > %s: [|pgm]",
ip6addr_string(ndo, &ip6->ip6_src),
return;
}
- sport = EXTRACT_BE_U_2(&pgm->pgm_sport);
- dport = EXTRACT_BE_U_2(&pgm->pgm_dport);
+ sport = EXTRACT_BE_U_2(pgm->pgm_sport);
+ dport = EXTRACT_BE_U_2(pgm->pgm_dport);
if (ip6) {
if (EXTRACT_U_1(ip6->ip6_nxt) == IPPROTO_PGM) {
ND_TCHECK(*pgm);
- ND_PRINT((ndo, "PGM, length %u", EXTRACT_BE_U_2(&pgm->pgm_length)));
+ ND_PRINT((ndo, "PGM, length %u", EXTRACT_BE_U_2(pgm->pgm_length)));
if (!ndo->ndo_vflag)
return;
+ pgm_type = EXTRACT_U_1(pgm->pgm_type);
ND_PRINT((ndo, " 0x%02x%02x%02x%02x%02x%02x ",
pgm->pgm_gsid[0],
pgm->pgm_gsid[1],
pgm->pgm_gsid[3],
pgm->pgm_gsid[4],
pgm->pgm_gsid[5]));
- switch (pgm->pgm_type) {
+ switch (pgm_type) {
case PGM_SPM: {
const struct pgm_spm *spm;
ND_TCHECK(*spm);
bp = (const u_char *) (spm + 1);
- switch (EXTRACT_BE_U_2(&spm->pgms_nla_afi)) {
+ switch (EXTRACT_BE_U_2(spm->pgms_nla_afi)) {
case AFNUM_INET:
ND_TCHECK_LEN(bp, sizeof(struct in_addr));
addrtostr(bp, nla_buf, sizeof(nla_buf));
}
ND_PRINT((ndo, "SPM seq %u trail %u lead %u nla %s",
- EXTRACT_BE_U_4(&spm->pgms_seq),
- EXTRACT_BE_U_4(&spm->pgms_trailseq),
- EXTRACT_BE_U_4(&spm->pgms_leadseq),
+ EXTRACT_BE_U_4(spm->pgms_seq),
+ EXTRACT_BE_U_4(spm->pgms_trailseq),
+ EXTRACT_BE_U_4(spm->pgms_leadseq),
nla_buf));
break;
}
poll_msg = (const struct pgm_poll *)(pgm + 1);
ND_TCHECK(*poll_msg);
ND_PRINT((ndo, "POLL seq %u round %u",
- EXTRACT_BE_U_4(&poll_msg->pgmp_seq),
- EXTRACT_BE_U_2(&poll_msg->pgmp_round)));
+ EXTRACT_BE_U_4(poll_msg->pgmp_seq),
+ EXTRACT_BE_U_2(poll_msg->pgmp_round)));
bp = (const u_char *) (poll_msg + 1);
break;
}
ND_TCHECK(*polr);
bp = (const u_char *) (polr + 1);
- switch (EXTRACT_BE_U_2(&polr->pgmp_nla_afi)) {
+ switch (EXTRACT_BE_U_2(polr->pgmp_nla_afi)) {
case AFNUM_INET:
ND_TCHECK_LEN(bp, sizeof(struct in_addr));
addrtostr(bp, nla_buf, sizeof(nla_buf));
bp += sizeof(uint32_t);
ND_PRINT((ndo, "POLR seq %u round %u nla %s ivl %u rnd 0x%08x "
- "mask 0x%08x", EXTRACT_BE_U_4(&polr->pgmp_seq),
- EXTRACT_BE_U_2(&polr->pgmp_round), nla_buf, ivl, rnd, mask));
+ "mask 0x%08x", EXTRACT_BE_U_4(polr->pgmp_seq),
+ EXTRACT_BE_U_2(polr->pgmp_round), nla_buf, ivl, rnd, mask));
break;
}
case PGM_ODATA: {
odata = (const struct pgm_data *)(pgm + 1);
ND_TCHECK(*odata);
ND_PRINT((ndo, "ODATA trail %u seq %u",
- EXTRACT_BE_U_4(&odata->pgmd_trailseq),
- EXTRACT_BE_U_4(&odata->pgmd_seq)));
+ EXTRACT_BE_U_4(odata->pgmd_trailseq),
+ EXTRACT_BE_U_4(odata->pgmd_seq)));
bp = (const u_char *) (odata + 1);
break;
}
rdata = (const struct pgm_data *)(pgm + 1);
ND_TCHECK(*rdata);
ND_PRINT((ndo, "RDATA trail %u seq %u",
- EXTRACT_BE_U_4(&rdata->pgmd_trailseq),
- EXTRACT_BE_U_4(&rdata->pgmd_seq)));
+ EXTRACT_BE_U_4(rdata->pgmd_trailseq),
+ EXTRACT_BE_U_4(rdata->pgmd_seq)));
bp = (const u_char *) (rdata + 1);
break;
}
* Skip past the source, saving info along the way
* and stopping if we don't have enough.
*/
- switch (EXTRACT_BE_U_2(&nak->pgmn_source_afi)) {
+ switch (EXTRACT_BE_U_2(nak->pgmn_source_afi)) {
case AFNUM_INET:
ND_TCHECK_LEN(bp, sizeof(struct in_addr));
addrtostr(bp, source_buf, sizeof(source_buf));
/*
* Options decoding can go here.
*/
- switch (pgm->pgm_type) {
+ switch (pgm_type) {
case PGM_NAK:
ND_PRINT((ndo, "NAK "));
break;
break;
}
ND_PRINT((ndo, "(%s -> %s), seq %u",
- source_buf, group_buf, EXTRACT_BE_U_4(&nak->pgmn_seq)));
+ source_buf, group_buf, EXTRACT_BE_U_4(nak->pgmn_seq)));
break;
}
ack = (const struct pgm_ack *)(pgm + 1);
ND_TCHECK(*ack);
ND_PRINT((ndo, "ACK seq %u",
- EXTRACT_BE_U_4(&ack->pgma_rx_max_seq)));
+ EXTRACT_BE_U_4(ack->pgma_rx_max_seq)));
bp = (const u_char *) (ack + 1);
break;
}
break;
default:
- ND_PRINT((ndo, "UNKNOWN type 0x%02x", pgm->pgm_type));
+ ND_PRINT((ndo, "UNKNOWN type 0x%02x", pgm_type));
break;
}
- if (pgm->pgm_options & PGM_OPT_BIT_PRESENT) {
+ if (EXTRACT_U_1(pgm->pgm_options) & PGM_OPT_BIT_PRESENT) {
/*
* make sure there's enough for the first option header
ND_PRINT((ndo, "[Bad total option length %u < 4]", opts_len));
return;
}
- ND_PRINT((ndo, " OPTS LEN %d", opts_len));
+ ND_PRINT((ndo, " OPTS LEN %u", opts_len));
opts_len -= 4;
while (opts_len) {
opt_len, PGM_OPT_LENGTH_LEN));
return;
}
- ND_PRINT((ndo, " OPTS LEN (extra?) %d", EXTRACT_BE_U_2(bp)));
+ ND_PRINT((ndo, " OPTS LEN (extra?) %u", EXTRACT_BE_U_2(bp)));
bp += 2;
opts_len -= PGM_OPT_LENGTH_LEN;
break;
break;
case PGM_OPT_PATH_NLA:
- ND_PRINT((ndo, " PATH_NLA [%d]", opt_len));
+ ND_PRINT((ndo, " PATH_NLA [%u]", opt_len));
bp += opt_len;
opts_len -= opt_len;
break;
break;
default:
- ND_PRINT((ndo, " OPT_%02X [%d] ", opt_type, opt_len));
+ ND_PRINT((ndo, " OPT_%02X [%u] ", opt_type, opt_len));
bp += opt_len;
opts_len -= opt_len;
break;
ND_PRINT((ndo, " [%u]", length));
if (ndo->ndo_packettype == PT_PGM_ZMTP1 &&
- (pgm->pgm_type == PGM_ODATA || pgm->pgm_type == PGM_RDATA))
+ (pgm_type == PGM_ODATA || pgm_type == PGM_RDATA))
zmtp1_datagram_print(ndo, bp,
- EXTRACT_BE_U_2(&pgm->pgm_length));
+ EXTRACT_BE_U_2(pgm->pgm_length));
return;