]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-udp.c
Makefile.in: don't remove configure and config.h.in in make distclean.
[tcpdump] / print-udp.c
index b315f1e77fea6fb8faf57a9dba45d10579415556..aa132678c6371d5676e2394aa7234d9ffbf1c77a 100644 (file)
@@ -369,10 +369,7 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length,
        if (ndo->ndo_packettype != PT_RPC)
                udpipaddr_print(ndo, ip, sport, dport);
 
-       if (length < sizeof(struct udphdr)) {
-               ND_PRINT("undersized-udp %u", length);
-               goto invalid;
-       }
+       ND_ICHECKMSG_ZU("undersized-udp", length, <, sizeof(struct udphdr));
        ulen = GET_BE_U_2(up->uh_ulen);
        udp_sum = GET_BE_U_2(up->uh_sum);
        /*
@@ -382,10 +379,8 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length,
         */
        if (ulen == 0 && length > 65535)
                ulen = length;
-       if (ulen < sizeof(struct udphdr)) {
-               ND_PRINT("undersized-udplength %u", ulen);
-               goto invalid;
-       }
+       ND_ICHECKMSG_ZU("undersized-udplength", ulen, <,
+                       sizeof(struct udphdr));
        ulen -= sizeof(struct udphdr);
        length -= sizeof(struct udphdr);
        if (ulen < length)
@@ -469,6 +464,9 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length,
                        /* over_tcp: FALSE, is_mdns: FALSE */
                        domain_print(ndo, cp, length, FALSE, FALSE);
                        break;
+               case PT_QUIC:
+                       quic_print(ndo, cp, length);
+                       break;
                }
                return;
        }
@@ -630,8 +628,11 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length,
                else if (dport == BFD_CONTROL_PORT ||
                         dport == BFD_MULTIHOP_PORT ||
                         dport == BFD_LAG_PORT ||
+                        dport == SBFD_PORT ||
                         dport == BFD_ECHO_PORT )
                        bfd_print(ndo, cp, length, dport);
+               else if (sport == SBFD_PORT)
+                       bfd_print(ndo, cp, length, sport);
                else if (IS_SRC_OR_DST_PORT(LMP_PORT))
                        lmp_print(ndo, cp, length);
                else if (IS_SRC_OR_DST_PORT(VQP_PORT))
@@ -672,6 +673,9 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length,
                        ptp_print(ndo, cp, length);
                } else if (IS_SRC_OR_DST_PORT(SOMEIP_PORT))
                        someip_print(ndo, cp, length);
+               else if (IS_SRC_OR_DST_PORT(HTTPS_PORT) &&
+                        quic_detect(ndo, cp, length))
+                       quic_print(ndo, cp, length);
                else {
                        if (ulen > length && !fragmented)
                                ND_PRINT("UDP, bad length %u > %u",