]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-ether.c
Rework "Update more link-layer dissectors to void functions"
[tcpdump] / print-ether.c
index e67539466bb94693eb87b4e44d70f1824234961b..7a1b42e0b0c65e9e8fbe03df9bd23a9f0a80b2da 100644 (file)
@@ -133,13 +133,13 @@ ether_type_print(netdissect_options *ndo, uint16_t type)
  * switch chips, and extra encapsulation header information before
  * printing Ethernet header information (such as a LANE ID for ATM LANE).
  */
-static void
+static u_int
 ether_common_print(netdissect_options *ndo, const u_char *p, u_int length,
     u_int caplen,
     void (*print_switch_tag)(netdissect_options *ndo, const u_char *),
     u_int switch_tag_len,
     void (*print_encap_header)(netdissect_options *ndo, const u_char *),
-    const u_char *encap_header_arg, u_int do_incr_ll_hdr_len)
+    const u_char *encap_header_arg)
 {
        const struct ether_header *ehp;
        u_int orig_length;
@@ -151,15 +151,11 @@ ether_common_print(netdissect_options *ndo, const u_char *p, u_int length,
 
        if (caplen < ETHER_HDRLEN + switch_tag_len) {
                nd_print_trunc(ndo);
-               if (do_incr_ll_hdr_len)
-                       ndo->ndo_ll_hdr_len += caplen;
-               return;
+               return caplen;
        }
        if (length < ETHER_HDRLEN + switch_tag_len) {
                nd_print_trunc(ndo);
-               if (do_incr_ll_hdr_len)
-                       ndo->ndo_ll_hdr_len += length;
-               return;
+               return length;
        }
 
        if (print_encap_header != NULL)
@@ -230,14 +226,10 @@ recurse:
                        /* Payload is encrypted; print it as raw data. */
                        if (!ndo->ndo_suppress_default_print)
                                ND_DEFAULTPRINT(p, caplen);
-                       if (do_incr_ll_hdr_len)
-                               ndo->ndo_ll_hdr_len += hdrlen;
-                       return;
+                       return hdrlen;
                } else if (ret > 0) {
                        /* Problem printing the header; just quit. */
-                       if (do_incr_ll_hdr_len)
-                               ndo->ndo_ll_hdr_len += ret;
-                       return;
+                       return ret;
                } else {
                        /*
                         * Keep processing type/length fields.
@@ -266,16 +258,12 @@ recurse:
                if (caplen < 4) {
                        ndo->ndo_protocol = "vlan";
                        nd_print_trunc(ndo);
-                       if (do_incr_ll_hdr_len)
-                               ndo->ndo_ll_hdr_len += hdrlen + caplen;
-                       return;
+                       return hdrlen + caplen;
                }
                if (length < 4) {
                        ndo->ndo_protocol = "vlan";
                        nd_print_trunc(ndo);
-                       if (do_incr_ll_hdr_len)
-                               ndo->ndo_ll_hdr_len += hdrlen + length;
-                       return;
+                       return hdrlen + length;
                }
                if (ndo->ndo_eflag) {
                        uint16_t tag = GET_BE_U_2(p);
@@ -358,15 +346,11 @@ recurse:
        } else if (length_type == ETHERTYPE_ARISTA) {
                if (caplen < 2) {
                        ND_PRINT("[|arista]");
-                       if (do_incr_ll_hdr_len)
-                               ndo->ndo_ll_hdr_len += hdrlen + caplen;
-                       return;
+                       return hdrlen + caplen;
                }
                if (length < 2) {
                        ND_PRINT("[|arista]");
-                       if (do_incr_ll_hdr_len)
-                               ndo->ndo_ll_hdr_len += hdrlen + length;
-                       return;
+                       return hdrlen + length;
                }
                ether_type_print(ndo, length_type);
                ND_PRINT(", length %u: ", orig_length);
@@ -417,9 +401,7 @@ recurse:
                                ND_DEFAULTPRINT(p, caplen);
                }
        }
-       if (do_incr_ll_hdr_len)
-               ndo->ndo_ll_hdr_len += hdrlen;
-       return;
+       return hdrlen;
 }
 
 /*
@@ -431,14 +413,14 @@ recurse:
  *
  * FIXME: caplen can and should be derived from ndo->ndo_snapend and p.
  */
-void
+u_int
 ether_switch_tag_print(netdissect_options *ndo, const u_char *p, u_int length,
     u_int caplen,
     void (*print_switch_tag)(netdissect_options *, const u_char *),
-    u_int switch_tag_len, u_int do_incr_ll_hdr_len)
+    u_int switch_tag_len)
 {
-       ether_common_print(ndo, p, length, caplen, print_switch_tag,
-                          switch_tag_len, NULL, NULL, do_incr_ll_hdr_len);
+       return ether_common_print(ndo, p, length, caplen, print_switch_tag,
+                                 switch_tag_len, NULL, NULL);
 }
 
 /*
@@ -449,15 +431,15 @@ ether_switch_tag_print(netdissect_options *ndo, const u_char *p, u_int length,
  *
  * FIXME: caplen can and should be derived from ndo->ndo_snapend and p.
  */
-void
+u_int
 ether_print(netdissect_options *ndo,
            const u_char *p, u_int length, u_int caplen,
            void (*print_encap_header)(netdissect_options *ndo, const u_char *),
-           const u_char *encap_header_arg, u_int do_incr_ll_hdr_len)
+           const u_char *encap_header_arg)
 {
        ndo->ndo_protocol = "ether";
-       ether_common_print(ndo, p, length, caplen, NULL, 0,
-                          print_encap_header, encap_header_arg, do_incr_ll_hdr_len);
+       return ether_common_print(ndo, p, length, caplen, NULL, 0,
+                                 print_encap_header, encap_header_arg);
 }
 
 /*
@@ -471,9 +453,8 @@ ether_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
               const u_char *p)
 {
        ndo->ndo_protocol = "ether";
-       ndo->ndo_ll_hdr_len += 0;
-
-       ether_print(ndo, p, h->len, h->caplen, NULL, NULL, TRUE);
+       ndo->ndo_ll_hdr_len +=
+               ether_print(ndo, p, h->len, h->caplen, NULL, NULL);
 }
 
 /*
@@ -498,10 +479,11 @@ netanalyzer_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h,
                nd_print_trunc(ndo);
                return;
        }
-       ndo->ndo_ll_hdr_len += 4;
 
        /* Skip the pseudo-header. */
-       ether_print(ndo, p + 4, h->len - 4, h->caplen - 4, NULL, NULL, TRUE);
+       ndo->ndo_ll_hdr_len += 4;
+       ndo->ndo_ll_hdr_len +=
+               ether_print(ndo, p + 4, h->len - 4, h->caplen - 4, NULL, NULL);
 }
 
 /*
@@ -529,10 +511,11 @@ netanalyzer_transparent_if_print(netdissect_options *ndo,
                nd_print_trunc(ndo);
                return;
        }
-       ndo->ndo_ll_hdr_len += 12;
 
        /* Skip the pseudo-header, preamble, and SOF. */
-       ether_print(ndo, p + 12, h->len - 12, h->caplen - 12, NULL, NULL, TRUE);
+       ndo->ndo_ll_hdr_len += 12;
+       ndo->ndo_ll_hdr_len +=
+               ether_print(ndo, p + 12, h->len - 12, h->caplen - 12, NULL, NULL);
 }
 
 /*