X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/58aeb476df8b659532f6540c09767105a629c6b6..60128eebca8c4975a2f1c6a29e16a76f720cc924:/print-ospf.c diff --git a/print-ospf.c b/print-ospf.c index 0628832d..8dad2eaa 100644 --- a/print-ospf.c +++ b/print-ospf.c @@ -21,6 +21,8 @@ * OSPF support contributed by Jeffrey Honig (jch@mitchell.cit.cornell.edu) */ +/* \summary: Open Shortest Path First (OSPF) printer */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -64,7 +66,6 @@ static const struct tok ospf_rla_flag_values[] = { }; static const struct tok type2str[] = { - { OSPF_TYPE_UMD, "UMD" }, { OSPF_TYPE_HELLO, "Hello" }, { OSPF_TYPE_DD, "Database Description" }, { OSPF_TYPE_LS_REQ, "LS-Request" }, @@ -575,7 +576,7 @@ static const struct tok ospf_topology_values[] = { /* * Print all the per-topology metrics. */ -static void +static int ospf_print_tos_metrics(netdissect_options *ndo, const union un_tos *tos) { @@ -588,7 +589,8 @@ ospf_print_tos_metrics(netdissect_options *ndo, /* * All but the first metric contain a valid topology id. */ - while (toscount) { + while (toscount > 0) { + ND_TCHECK(*tos); ND_PRINT((ndo, "\n\t\ttopology %s (%u), metric %u", tok2str(ospf_topology_values, "Unknown", metric_count ? tos->metrics.tos_type : 0), @@ -598,6 +600,9 @@ ospf_print_tos_metrics(netdissect_options *ndo, tos++; toscount--; } + return 0; +trunc: + return 1; } /* @@ -671,7 +676,8 @@ ospf_print_lsa(netdissect_options *ndo, return (ls_end); } - ospf_print_tos_metrics(ndo, &rlp->un_tos); + if (ospf_print_tos_metrics(ndo, &rlp->un_tos)) + goto trunc; rlp = (const struct rlalink *)((const u_char *)(rlp + 1) + ((rlp->un_tos.link.link_tos_count) * sizeof(union un_tos))); @@ -981,14 +987,8 @@ ospf_decode_v2(netdissect_options *ndo, switch (op->ospf_type) { - case OSPF_TYPE_UMD: - /* - * Rob Coltun's special monitoring packets; - * do nothing - */ - break; - case OSPF_TYPE_HELLO: + ND_TCHECK(op->ospf_hello.hello_options); ND_PRINT((ndo, "\n\tOptions [%s]", bittok2str(ospf_option_values,"none",op->ospf_hello.hello_options))); @@ -1119,7 +1119,7 @@ ospf_print(netdissect_options *ndo, /* If the type is valid translate it, or just print the type */ /* value. If it's not valid, say so and return */ ND_TCHECK(op->ospf_type); - cp = tok2str(type2str, "unknown LS-type", op->ospf_type); + cp = tok2str(type2str, "unknown LS-type %u", op->ospf_type); ND_PRINT((ndo, "OSPFv%u, %s, length %u", op->ospf_version, cp, length)); if (*cp == 'u') return;