X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/ca0cfa4f8e014198ad9e1f64b24762ce7366d5b2..0023eaa78f123676bfa9c5fba72ea4b8a59aaa70:/print-ospf.c diff --git a/print-ospf.c b/print-ospf.c index a385d7a1..eae546d9 100644 --- a/print-ospf.c +++ b/print-ospf.c @@ -23,9 +23,7 @@ /* \summary: Open Shortest Path First (OSPF) printer */ -#ifdef HAVE_CONFIG_H #include -#endif #include "netdissect-stdinc.h" @@ -59,8 +57,10 @@ static const struct tok ospf_authtype_values[] = { static const struct tok ospf_rla_flag_values[] = { { RLA_FLAG_B, "ABR" }, { RLA_FLAG_E, "ASBR" }, - { RLA_FLAG_W1, "Virtual" }, - { RLA_FLAG_W2, "W2" }, + { RLA_FLAG_V, "Virtual" }, + { RLA_FLAG_W, "Wildcard" }, + { RLA_FLAG_NT, "Nt" }, + { RLA_FLAG_H, "Host" }, { 0, NULL } }; @@ -533,11 +533,11 @@ ospf_print_lshdr(netdissect_options *ndo, sizeof(struct lsa_hdr)); return(-1); } - ND_PRINT("\n\t Advertising Router %s, seq 0x%08x, age %us, length %u", + ND_PRINT("\n\t Advertising Router %s, seq 0x%08x, age %us, length %zu", GET_IPADDR_STRING(lshp->ls_router), GET_BE_U_4(lshp->ls_seq), GET_BE_U_2(lshp->ls_age), - ls_length - (u_int)sizeof(struct lsa_hdr)); + ls_length - sizeof(struct lsa_hdr)); ls_type = GET_U_1(lshp->ls_type); switch (ls_type) { /* the LSA header for opaque LSAs was slightly changed */ @@ -696,8 +696,7 @@ ospf_print_lsa(netdissect_options *ndo, GET_IPADDR_STRING(lsap->lsa_un.un_nla.nla_mask)); ap = lsap->lsa_un.un_nla.nla_router; while ((const u_char *)ap < ls_end) { - ND_TCHECK_SIZE(ap); - ND_PRINT("\n\t %s", GET_IPADDR_STRING(*ap)); + ND_PRINT("\n\t %s", GET_IPADDR_STRING(ap)); ++ap; } break; @@ -843,6 +842,11 @@ ospf_print_lsa(netdissect_options *ndo, break; } + + /* in OSPF everything has to be 32-bit aligned, including TLVs */ + if (tlv_length % 4) { + tlv_length += (4 - (tlv_length % 4)); + } tptr+=tlv_length; ls_length_remaining-=tlv_length; } @@ -999,8 +1003,7 @@ ospf_decode_v2(netdissect_options *ndo, if ((const u_char *)ap < dataend) ND_PRINT("\n\t Neighbor List:"); while ((const u_char *)ap < dataend) { - ND_TCHECK_SIZE(ap); - ND_PRINT("\n\t %s", GET_IPADDR_STRING(*ap)); + ND_PRINT("\n\t %s", GET_IPADDR_STRING(ap)); ++ap; } break; /* HELLO */ @@ -1067,7 +1070,8 @@ ospf_decode_v2(netdissect_options *ndo, case OSPF_TYPE_LS_ACK: lshp = op->ospf_lsa.lsa_lshdr; - while (ospf_print_lshdr(ndo, lshp) != -1) { + while ((const u_char *)lshp < dataend) { + ospf_print_lshdr(ndo, lshp); ++lshp; } break; @@ -1142,7 +1146,7 @@ ospf_print(netdissect_options *ndo, case OSPF_AUTH_SIMPLE: ND_PRINT("\n\tSimple text password: "); - (void)nd_printzp(ndo, op->ospf_authdata, OSPF_AUTH_SIMPLE_LEN, NULL); + nd_printjnp(ndo, op->ospf_authdata, OSPF_AUTH_SIMPLE_LEN); break; case OSPF_AUTH_MD5: