]> The Tcpdump Group git mirrors - tcpdump/blobdiff - print-cip.c
Default to first interface from pcap_findalldevs()
[tcpdump] / print-cip.c
index 23f6178808d5d38e6d57bba58bd4984371cd4777..2ea50bc040952e202ac736fcbbb0e6686a9e798f 100644 (file)
@@ -26,9 +26,9 @@
 
 #include <string.h>
 
-#include <tcpdump-stdinc.h>
+#include <netdissect-stdinc.h>
 
-#include "interface.h"
+#include "netdissect.h"
 #include "addrtoname.h"
 
 #define RFC1483LLC_LEN 8
@@ -61,6 +61,7 @@ cip_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char
 {
        u_int caplen = h->caplen;
        u_int length = h->len;
+       int llc_hdrlen;
 
        if (memcmp(rfcllc, p, sizeof(rfcllc))==0 && caplen < RFC1483LLC_LEN) {
                ND_PRINT((ndo, "[|cip]"));
@@ -74,18 +75,22 @@ cip_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char
                /*
                 * LLC header is present.  Try to print it & higher layers.
                 */
-               if (llc_print(ndo, p, length, caplen, NULL, NULL) == 0) {
+               llc_hdrlen = llc_print(ndo, p, length, caplen, NULL, NULL);
+               if (llc_hdrlen < 0) {
+                       /* packet type not known, print raw packet */
                        if (!ndo->ndo_suppress_default_print)
                                ND_DEFAULTPRINT(p, caplen);
+                       llc_hdrlen = -llc_hdrlen;
                }
        } else {
                /*
                 * LLC header is absent; treat it as just IP.
                 */
+               llc_hdrlen = 0;
                ip_print(ndo, p, length);
        }
 
-       return (0);
+       return (llc_hdrlen);
 }