-trunc:
- ND_PRINT("[|rerr]");
-}
-
-static void
-aodv_v6_draft_01_rreq(netdissect_options *ndo, const u_char *dat, u_int length)
-{
- u_int i;
- const struct aodv_rreq6_draft_01 *ap = (const struct aodv_rreq6_draft_01 *)dat;
-
- ND_TCHECK_SIZE(ap);
- if (length < sizeof(*ap))
- goto trunc;
- ND_PRINT(" rreq %u %s%s%s%s%shops %u id 0x%08x\n"
- "\tdst %s seq %u src %s seq %u", length,
- EXTRACT_U_1(ap->rreq_type) & RREQ_JOIN ? "[J]" : "",
- EXTRACT_U_1(ap->rreq_type) & RREQ_REPAIR ? "[R]" : "",
- EXTRACT_U_1(ap->rreq_type) & RREQ_GRAT ? "[G]" : "",
- EXTRACT_U_1(ap->rreq_type) & RREQ_DEST ? "[D]" : "",
- EXTRACT_U_1(ap->rreq_type) & RREQ_UNKNOWN ? "[U] " : " ",
- EXTRACT_U_1(ap->rreq_hops),
- EXTRACT_BE_U_4(ap->rreq_id),
- ip6addr_string(ndo, ap->rreq_da),
- EXTRACT_BE_U_4(ap->rreq_ds),
- ip6addr_string(ndo, ap->rreq_oa),
- EXTRACT_BE_U_4(ap->rreq_os));
- i = length - sizeof(*ap);
- if (i >= sizeof(struct aodv_ext))
- aodv_extension(ndo, (const struct aodv_ext *)(dat + sizeof(*ap)), i);
- return;
-
-trunc:
- ND_PRINT(" [|rreq");
-}
-
-static void
-aodv_v6_draft_01_rrep(netdissect_options *ndo, const u_char *dat, u_int length)
-{
- u_int i;
- const struct aodv_rrep6_draft_01 *ap = (const struct aodv_rrep6_draft_01 *)dat;
-
- ND_TCHECK_SIZE(ap);
- if (length < sizeof(*ap))
- goto trunc;
- ND_PRINT(" rrep %u %s%sprefix %u hops %u\n"
- "\tdst %s dseq %u src %s %u ms", length,
- EXTRACT_U_1(ap->rrep_type) & RREP_REPAIR ? "[R]" : "",
- EXTRACT_U_1(ap->rrep_type) & RREP_ACK ? "[A] " : " ",
- EXTRACT_U_1(ap->rrep_ps) & RREP_PREFIX_MASK,
- EXTRACT_U_1(ap->rrep_hops),
- ip6addr_string(ndo, ap->rrep_da),
- EXTRACT_BE_U_4(ap->rrep_ds),
- ip6addr_string(ndo, ap->rrep_oa),
- EXTRACT_BE_U_4(ap->rrep_life));
- i = length - sizeof(*ap);
- if (i >= sizeof(struct aodv_ext))
- aodv_extension(ndo, (const struct aodv_ext *)(dat + sizeof(*ap)), i);
- return;
-
-trunc:
- ND_PRINT(" [|rreq");
-}
-
-static void
-aodv_v6_draft_01_rerr(netdissect_options *ndo, const u_char *dat, u_int length)
-{
- u_int i, dc;
- const struct aodv_rerr *ap = (const struct aodv_rerr *)dat;
- const struct rerr_unreach6_draft_01 *dp6;
-
- ND_TCHECK_SIZE(ap);
- if (length < sizeof(*ap))
- goto trunc;
- ND_PRINT(" rerr %s [items %u] [%u]:",
- EXTRACT_U_1(ap->rerr_flags) & RERR_NODELETE ? "[D]" : "",
- EXTRACT_U_1(ap->rerr_dc), length);
- dp6 = (const struct rerr_unreach6_draft_01 *)(const void *)(ap + 1);
- i = length - sizeof(*ap);
- for (dc = EXTRACT_U_1(ap->rerr_dc); dc != 0; dc--) {
- ND_TCHECK_SIZE(dp6);
- if (i < sizeof(*dp6))
- goto trunc;
- ND_PRINT(" {%s}(%u)", ip6addr_string(ndo, dp6->u_da),
- EXTRACT_BE_U_4(dp6->u_ds));
- dp6++;
- i -= sizeof(*dp6);
- }
- return;
-
-trunc:
- ND_PRINT("[|rerr]");