]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-icmp.c
Use more the ND_TTEST_1() macro
[tcpdump] / print-icmp.c
index fd3c2e33ddf50446b08f9128e7a37bafc4dd62e6..a9a72014fbef7151ee52eed22860449397cd4833 100644 (file)
@@ -336,6 +336,7 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
        const struct ip *ip;
        const char *str, *fmt;
        const struct ip *oip;
+       uint8_t ip_proto;
        const struct udphdr *ouh;
         const uint8_t *obj_tptr;
         uint32_t raw_label;
@@ -359,8 +360,8 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
                (void)snprintf(buf, sizeof(buf), "echo %s, id %u, seq %u",
                                dp->icmp_type == ICMP_ECHO ?
                                "request" : "reply",
-                               EXTRACT_BE_16BITS(&dp->icmp_id),
-                               EXTRACT_BE_16BITS(&dp->icmp_seq));
+                               EXTRACT_BE_U_2(&dp->icmp_id),
+                               EXTRACT_BE_U_2(&dp->icmp_seq));
                break;
 
        case ICMP_UNREACH:
@@ -368,11 +369,11 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
                switch (dp->icmp_code) {
 
                case ICMP_UNREACH_PROTOCOL:
-                       ND_TCHECK(dp->icmp_ip.ip_p);
+                       ND_TCHECK_1(dp->icmp_ip.ip_p);
                        (void)snprintf(buf, sizeof(buf),
                            "%s protocol %d unreachable",
                            ipaddr_string(ndo, &dp->icmp_ip.ip_dst),
-                           dp->icmp_ip.ip_p);
+                           EXTRACT_U_1(dp->icmp_ip.ip_p));
                        break;
 
                case ICMP_UNREACH_PORT:
@@ -381,8 +382,9 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
                        hlen = IP_HL(oip) * 4;
                        ouh = (const struct udphdr *)(((const u_char *)oip) + hlen);
                        ND_TCHECK(ouh->uh_dport);
-                       dport = EXTRACT_BE_16BITS(&ouh->uh_dport);
-                       switch (oip->ip_p) {
+                       dport = EXTRACT_BE_U_2(&ouh->uh_dport);
+                       ip_proto = EXTRACT_U_1(oip->ip_p);
+                       switch (ip_proto) {
 
                        case IPPROTO_TCP:
                                (void)snprintf(buf, sizeof(buf),
@@ -402,16 +404,16 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
                                (void)snprintf(buf, sizeof(buf),
                                        "%s protocol %u port %u unreachable",
                                        ipaddr_string(ndo, &oip->ip_dst),
-                                       oip->ip_p, dport);
+                                       ip_proto, dport);
                                break;
                        }
                        break;
 
                case ICMP_UNREACH_NEEDFRAG:
                    {
-                       register const struct mtu_discovery *mp;
+                       const struct mtu_discovery *mp;
                        mp = (const struct mtu_discovery *)(const u_char *)&dp->icmp_void;
-                       mtu = EXTRACT_BE_16BITS(&mp->nexthopmtu);
+                       mtu = EXTRACT_BE_U_2(&mp->nexthopmtu);
                        if (mtu) {
                                (void)snprintf(buf, sizeof(buf),
                                    "%s unreachable - need to frag (mtu %d)",
@@ -444,8 +446,8 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
 
        case ICMP_ROUTERADVERT:
            {
-               register const struct ih_rdiscovery *ihp;
-               register const struct id_rdiscovery *idp;
+               const struct ih_rdiscovery *ihp;
+               const struct id_rdiscovery *idp;
                u_int lifetime, num, size;
 
                (void)snprintf(buf, sizeof(buf), "router advertisement");
@@ -455,7 +457,7 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
                ND_TCHECK(*ihp);
                (void)strncpy(cp, " lifetime ", sizeof(buf) - (cp - buf));
                cp = buf + strlen(buf);
-               lifetime = EXTRACT_BE_16BITS(&ihp->ird_lifetime);
+               lifetime = EXTRACT_BE_U_2(&ihp->ird_lifetime);
                if (lifetime < 60) {
                        (void)snprintf(cp, sizeof(buf) - (cp - buf), "%u",
                            lifetime);
@@ -486,7 +488,7 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
                        ND_TCHECK(*idp);
                        (void)snprintf(cp, sizeof(buf) - (cp - buf), " {%s %u}",
                            ipaddr_string(ndo, &idp->ird_addr),
-                           EXTRACT_BE_32BITS(&idp->ird_pref));
+                           EXTRACT_BE_U_4(&idp->ird_pref));
                        cp = buf + strlen(buf);
                        ++idp;
                }
@@ -526,29 +528,29 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
        case ICMP_MASKREPLY:
                ND_TCHECK(dp->icmp_mask);
                (void)snprintf(buf, sizeof(buf), "address mask is 0x%08x",
-                   EXTRACT_BE_32BITS(&dp->icmp_mask));
+                   EXTRACT_BE_U_4(&dp->icmp_mask));
                break;
 
        case ICMP_TSTAMP:
                ND_TCHECK(dp->icmp_seq);
                (void)snprintf(buf, sizeof(buf),
                    "time stamp query id %u seq %u",
-                   EXTRACT_BE_16BITS(&dp->icmp_id),
-                   EXTRACT_BE_16BITS(&dp->icmp_seq));
+                   EXTRACT_BE_U_2(&dp->icmp_id),
+                   EXTRACT_BE_U_2(&dp->icmp_seq));
                break;
 
        case ICMP_TSTAMPREPLY:
                ND_TCHECK(dp->icmp_ttime);
                (void)snprintf(buf, sizeof(buf),
                    "time stamp reply id %u seq %u: org %s",
-                               EXTRACT_BE_16BITS(&dp->icmp_id),
-                               EXTRACT_BE_16BITS(&dp->icmp_seq),
-                               icmp_tstamp_print(EXTRACT_BE_32BITS(&dp->icmp_otime)));
+                               EXTRACT_BE_U_2(&dp->icmp_id),
+                               EXTRACT_BE_U_2(&dp->icmp_seq),
+                               icmp_tstamp_print(EXTRACT_BE_U_4(&dp->icmp_otime)));
 
                 (void)snprintf(buf+strlen(buf),sizeof(buf)-strlen(buf),", recv %s",
-                         icmp_tstamp_print(EXTRACT_BE_32BITS(&dp->icmp_rtime)));
+                         icmp_tstamp_print(EXTRACT_BE_U_4(&dp->icmp_rtime)));
                 (void)snprintf(buf+strlen(buf),sizeof(buf)-strlen(buf),", xmit %s",
-                         icmp_tstamp_print(EXTRACT_BE_32BITS(&dp->icmp_ttime)));
+                         icmp_tstamp_print(EXTRACT_BE_U_4(&dp->icmp_ttime)));
                 break;
 
        default:
@@ -557,14 +559,14 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
        }
        ND_PRINT((ndo, "ICMP %s, length %u", str, plen));
        if (ndo->ndo_vflag && !fragmented) { /* don't attempt checksumming if this is a frag */
-               if (ND_TTEST2(*bp, plen)) {
+               if (ND_TTEST_LEN(bp, plen)) {
                        uint16_t sum;
 
                        vec[0].ptr = (const uint8_t *)(const void *)dp;
                        vec[0].len = plen;
                        sum = in_cksum(vec, 1);
                        if (sum != 0) {
-                               uint16_t icmp_sum = EXTRACT_BE_16BITS(&dp->icmp_cksum);
+                               uint16_t icmp_sum = EXTRACT_BE_U_2(&dp->icmp_cksum);
                                ND_PRINT((ndo, " (wrong icmp cksum %x (->%x)!)",
                                             icmp_sum,
                                             in_cksum_shouldbe(icmp_sum, sum)));
@@ -581,8 +583,8 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
                ND_PRINT((ndo, "\n\t"));
                ip = (const struct ip *)bp;
                 snapend_save = ndo->ndo_snapend;
-               ND_TCHECK_16BITS(&ip->ip_len);
-               ip_print(ndo, bp, EXTRACT_BE_16BITS(&ip->ip_len));
+               ND_TCHECK_2(&ip->ip_len);
+               ip_print(ndo, bp, EXTRACT_BE_U_2(&ip->ip_len));
                 ndo->ndo_snapend = snapend_save;
        }
 
@@ -600,7 +602,7 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
              * however not all implementations set the length field proper.
              */
             if (!ext_dp->icmp_length &&
-                ND_TTEST2(ext_dp->icmp_ext_version_res, plen - ICMP_EXTD_MINLEN)) {
+                ND_TTEST_LEN(ext_dp->icmp_ext_version_res, plen - ICMP_EXTD_MINLEN)) {
                 vec[0].ptr = (const uint8_t *)(const void *)&ext_dp->icmp_ext_version_res;
                 vec[0].len = plen - ICMP_EXTD_MINLEN;
                 if (in_cksum(vec, 1)) {
@@ -621,11 +623,11 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
             }
 
             hlen = plen - ICMP_EXTD_MINLEN;
-            if (ND_TTEST2(ext_dp->icmp_ext_version_res, hlen)) {
+            if (ND_TTEST_LEN(ext_dp->icmp_ext_version_res, hlen)) {
                 vec[0].ptr = (const uint8_t *)(const void *)&ext_dp->icmp_ext_version_res;
                 vec[0].len = hlen;
                 ND_PRINT((ndo, ", checksum 0x%04x (%scorrect), length %u",
-                       EXTRACT_BE_16BITS(ext_dp->icmp_ext_checksum),
+                       EXTRACT_BE_U_2(ext_dp->icmp_ext_checksum),
                        in_cksum(vec, 1) ? "in" : "",
                        hlen));
             }
@@ -637,7 +639,7 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
 
                 icmp_mpls_ext_object_header = (const struct icmp_mpls_ext_object_header_t *)obj_tptr;
                 ND_TCHECK(*icmp_mpls_ext_object_header);
-                obj_tlen = EXTRACT_BE_16BITS(icmp_mpls_ext_object_header->length);
+                obj_tlen = EXTRACT_BE_U_2(icmp_mpls_ext_object_header->length);
                 obj_class_num = icmp_mpls_ext_object_header->class_num;
                 obj_ctype = icmp_mpls_ext_object_header->ctype;
                 obj_tptr += sizeof(struct icmp_mpls_ext_object_header_t);
@@ -661,8 +663,8 @@ icmp_print(netdissect_options *ndo, const u_char *bp, u_int plen, const u_char *
                 case 1:
                     switch(obj_ctype) {
                     case 1:
-                        ND_TCHECK2(*obj_tptr, 4);
-                        raw_label = EXTRACT_BE_32BITS(obj_tptr);
+                        ND_TCHECK_4(obj_tptr);
+                        raw_label = EXTRACT_BE_U_4(obj_tptr);
                         ND_PRINT((ndo, "\n\t    label %u, exp %u", MPLS_LABEL(raw_label), MPLS_EXP(raw_label)));
                         if (MPLS_STACK(raw_label))
                             ND_PRINT((ndo, ", [S]"));