FreeBSD/contrib/tcpdump/print-cip.c
/*
 * This is the top level routine of the printer.  'p' points
 * to the LLC/SNAP or raw header of the packet, 'h->ts' is the timestamp,
 * 'h->len' is the length of the packet off the wire, and 'h->caplen'
 * is the number of bytes actually captured.
 */
This is the top level routine of the printer.
This is the top level routine of the printer .
u_int
cip_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *p)
{
	u_int caplen = h->caplen;
	u_int length = h->len;
	u_short extracted_ethertype;
	if (memcmp(rfcllc, p, sizeof(rfcllc))==0 && caplen < RFC1483LLC_LEN) {
		ND_PRINT((ndo, "[|cip]"));
		return (0);
	}
	if (ndo->ndo_eflag)
		cip_print(ndo, length);
	if (memcmp(rfcllc, p, sizeof(rfcllc)) == 0) {
		if (llc_print(ndo, p, length, caplen, NULL, NULL,
		    &extracted_ethertype) == 0) {
			if (!ndo->ndo_eflag)
				cip_print(ndo, length);
			if (extracted_ethertype) {
				ND_PRINT((ndo, "(LLC %s) ",
			       etherproto_string(htons(extracted_ethertype))));
			}
			if (!ndo->ndo_suppress_default_print)
				ND_DEFAULTPRINT(p, caplen);
		}
	} else {
		ip_print(ndo, p, length);
	}
	return (0);
}
u_int cip_if_print ( netdissect_options * ndo , const struct pcap_pkthdr * h , const u_char * p ) { u_int caplen = h -> caplen ; u_int length = h -> len ; u_short extracted_ethertype ; if ( memcmp ( rfcllc , p , sizeof ( rfcllc ) ) == 0 && caplen < RFC1483LLC_LEN ) { ND_PRINT ( ( ndo , " " ) ) ; return ( 0 ) ; } if ( ndo -> ndo_eflag ) cip_print ( ndo , length ) ; if ( memcmp ( rfcllc , p , sizeof ( rfcllc ) ) == 0 ) { if ( llc_print ( ndo , p , length , caplen , NULL , NULL , & extracted_ethertype ) == 0 ) { if ( ! ndo -> ndo_eflag ) cip_print ( ndo , length ) ; if ( extracted_ethertype ) { ND_PRINT ( ( ndo , " " , etherproto_string ( htons ( extracted_ethertype ) ) ) ) ; } if ( ! ndo -> ndo_suppress_default_print ) ND_DEFAULTPRINT ( p , caplen ) ; } } else { ip_print ( ndo , p , length ) ; } return ( 0 ) ; }
This is the top level routine of the printer.
This is the top level routine of the printer .
/*
		 * LLC header is present.  Try to print it & higher layers.
		 */ /* ether_type not known, print raw packet */ /*
		 * LLC header is absent; treat it as just IP.
		 */