print-ether.c (127675) | print-ether.c (146778) |
---|---|
1/* 2 * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that: (1) source code distributions 7 * retain the above copyright notice and this paragraph in its entirety, (2) 8 * distributions including binary code include the above copyright notice and --- 4 unchanged lines hidden (view full) --- 13 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 14 * the University nor the names of its contributors may be used to endorse 15 * or promote products derived from this software without specific prior 16 * written permission. 17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 20 * | 1/* 2 * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2000 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that: (1) source code distributions 7 * retain the above copyright notice and this paragraph in its entirety, (2) 8 * distributions including binary code include the above copyright notice and --- 4 unchanged lines hidden (view full) --- 13 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 14 * the University nor the names of its contributors may be used to endorse 15 * or promote products derived from this software without specific prior 16 * written permission. 17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 20 * |
21 * $FreeBSD: head/contrib/tcpdump/print-ether.c 127675 2004-03-31 14:57:24Z bms $ | 21 * $FreeBSD: head/contrib/tcpdump/print-ether.c 146778 2005-05-29 19:09:28Z sam $ |
22 */ 23#ifndef lint 24static const char rcsid[] _U_ = | 22 */ 23#ifndef lint 24static const char rcsid[] _U_ = |
25 "@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.82.2.3 2003/12/29 22:42:21 hannes Exp $ (LBL)"; | 25 "@(#) $Header: /tcpdump/master/tcpdump/print-ether.c,v 1.95 2005/04/06 21:32:39 mcr Exp $ (LBL)"; |
26#endif 27 28#ifdef HAVE_CONFIG_H 29#include "config.h" 30#endif 31 32#include <tcpdump-stdinc.h> 33 34#include <stdio.h> 35#include <pcap.h> 36 37#include "interface.h" 38#include "addrtoname.h" 39#include "ethertype.h" 40 41#include "ether.h" | 26#endif 27 28#ifdef HAVE_CONFIG_H 29#include "config.h" 30#endif 31 32#include <tcpdump-stdinc.h> 33 34#include <stdio.h> 35#include <pcap.h> 36 37#include "interface.h" 38#include "addrtoname.h" 39#include "ethertype.h" 40 41#include "ether.h" |
42#include "llc.h" |
|
42 | 43 |
43const u_char *snapend; 44 | |
45const struct tok ethertype_values[] = { | 44const struct tok ethertype_values[] = { |
45 /* not really ethertypes but PIDs that are used 46 in the SNAP printer - its more convenient 47 to put them into a single tokentable */ 48 { PID_RFC2684_ETH_FCS, "Ethernet + FCS" }, 49 { PID_RFC2684_ETH_NOFCS, "Ethernet no FCS" }, 50 { PID_RFC2684_802_4_FCS, "802.4 + FCS" }, 51 { PID_RFC2684_802_4_NOFCS, "w/o FCS" }, 52 { PID_RFC2684_802_5_FCS, "Tokenring + FCS" }, 53 { PID_RFC2684_802_5_NOFCS, "Tokenring no FCS" }, 54 { PID_RFC2684_FDDI_FCS, "FDDI + FCS" }, 55 { PID_RFC2684_FDDI_NOFCS, "FDDI no FCS" }, 56 { PID_RFC2684_802_6_FCS, "802.6 + FCS" }, 57 { PID_RFC2684_802_6_NOFCS, "802.6 no FCS" }, 58 { PID_RFC2684_BPDU, "BPDU" }, 59 /* the real Ethertypes */ |
|
46 { ETHERTYPE_IP, "IPv4" }, 47 { ETHERTYPE_MPLS, "MPLS unicast" }, 48 { ETHERTYPE_MPLS_MULTI, "MPLS multicast" }, 49 { ETHERTYPE_IPV6, "IPv6" }, 50 { ETHERTYPE_8021Q, "802.1Q" }, 51 { ETHERTYPE_VMAN, "VMAN" }, 52 { ETHERTYPE_PUP, "PUP" }, 53 { ETHERTYPE_ARP, "ARP"}, --- 12 unchanged lines hidden (view full) --- 66 { ETHERTYPE_VEXP, "VEXP" }, 67 { ETHERTYPE_VPROD, "VPROD" }, 68 { ETHERTYPE_ATALK, "Appletalk" }, 69 { ETHERTYPE_AARP, "Appletalk ARP" }, 70 { ETHERTYPE_IPX, "IPX" }, 71 { ETHERTYPE_PPP, "PPP" }, 72 { ETHERTYPE_PPPOED, "PPPoE D" }, 73 { ETHERTYPE_PPPOES, "PPPoE S" }, | 60 { ETHERTYPE_IP, "IPv4" }, 61 { ETHERTYPE_MPLS, "MPLS unicast" }, 62 { ETHERTYPE_MPLS_MULTI, "MPLS multicast" }, 63 { ETHERTYPE_IPV6, "IPv6" }, 64 { ETHERTYPE_8021Q, "802.1Q" }, 65 { ETHERTYPE_VMAN, "VMAN" }, 66 { ETHERTYPE_PUP, "PUP" }, 67 { ETHERTYPE_ARP, "ARP"}, --- 12 unchanged lines hidden (view full) --- 80 { ETHERTYPE_VEXP, "VEXP" }, 81 { ETHERTYPE_VPROD, "VPROD" }, 82 { ETHERTYPE_ATALK, "Appletalk" }, 83 { ETHERTYPE_AARP, "Appletalk ARP" }, 84 { ETHERTYPE_IPX, "IPX" }, 85 { ETHERTYPE_PPP, "PPP" }, 86 { ETHERTYPE_PPPOED, "PPPoE D" }, 87 { ETHERTYPE_PPPOES, "PPPoE S" }, |
88 { ETHERTYPE_EAPOL, "EAPOL" }, 89 { ETHERTYPE_JUMBO, "Jumbo" }, |
|
74 { ETHERTYPE_LOOPBACK, "Loopback" }, | 90 { ETHERTYPE_LOOPBACK, "Loopback" }, |
91 { ETHERTYPE_ISO, "OSI" }, 92 { ETHERTYPE_GRE_ISO, "GRE-OSI" }, |
|
75 { 0, NULL} 76}; 77 78static inline void 79ether_hdr_print(register const u_char *bp, u_int length) 80{ 81 register const struct ether_header *ep; 82 ep = (const struct ether_header *)bp; --- 65 unchanged lines hidden (view full) --- 148 if (!xflag && !qflag) 149 default_print(p, caplen); 150 } 151} 152 153/* 154 * This is the top level routine of the printer. 'p' points 155 * to the ether header of the packet, 'h->ts' is the timestamp, | 93 { 0, NULL} 94}; 95 96static inline void 97ether_hdr_print(register const u_char *bp, u_int length) 98{ 99 register const struct ether_header *ep; 100 ep = (const struct ether_header *)bp; --- 65 unchanged lines hidden (view full) --- 166 if (!xflag && !qflag) 167 default_print(p, caplen); 168 } 169} 170 171/* 172 * This is the top level routine of the printer. 'p' points 173 * to the ether header of the packet, 'h->ts' is the timestamp, |
156 * 'h->length' is the length of the packet off the wire, and 'h->caplen' | 174 * 'h->len' is the length of the packet off the wire, and 'h->caplen' |
157 * is the number of bytes actually captured. 158 */ 159u_int 160ether_if_print(const struct pcap_pkthdr *h, const u_char *p) 161{ 162 ether_print(p, h->len, h->caplen); 163 164 return (ETHER_HDRLEN); --- 16 unchanged lines hidden (view full) --- 181 u_int length, u_int caplen, u_short *extracted_ether_type) 182{ 183 recurse: 184 *extracted_ether_type = ether_type; 185 186 switch (ether_type) { 187 188 case ETHERTYPE_IP: | 175 * is the number of bytes actually captured. 176 */ 177u_int 178ether_if_print(const struct pcap_pkthdr *h, const u_char *p) 179{ 180 ether_print(p, h->len, h->caplen); 181 182 return (ETHER_HDRLEN); --- 16 unchanged lines hidden (view full) --- 199 u_int length, u_int caplen, u_short *extracted_ether_type) 200{ 201 recurse: 202 *extracted_ether_type = ether_type; 203 204 switch (ether_type) { 205 206 case ETHERTYPE_IP: |
189 ip_print(p, length); | 207 ip_print(gndo, p, length); |
190 return (1); 191 192#ifdef INET6 193 case ETHERTYPE_IPV6: 194 ip6_print(p, length); 195 return (1); 196#endif /*INET6*/ 197 198 case ETHERTYPE_ARP: 199 case ETHERTYPE_REVARP: | 208 return (1); 209 210#ifdef INET6 211 case ETHERTYPE_IPV6: 212 ip6_print(p, length); 213 return (1); 214#endif /*INET6*/ 215 216 case ETHERTYPE_ARP: 217 case ETHERTYPE_REVARP: |
200 arp_print(p, length, caplen); | 218 arp_print(gndo, p, length, caplen); |
201 return (1); 202 203 case ETHERTYPE_DN: 204 decnet_print(p, length, caplen); 205 return (1); 206 207 case ETHERTYPE_ATALK: 208 if (vflag) --- 36 unchanged lines hidden (view full) --- 245 ether_hdr_print(p - 18, length + 4); 246 } 247 248 if (!xflag && !qflag) 249 default_print(p - 18, caplen + 4); 250 251 return (1); 252 | 219 return (1); 220 221 case ETHERTYPE_DN: 222 decnet_print(p, length, caplen); 223 return (1); 224 225 case ETHERTYPE_ATALK: 226 if (vflag) --- 36 unchanged lines hidden (view full) --- 263 ether_hdr_print(p - 18, length + 4); 264 } 265 266 if (!xflag && !qflag) 267 default_print(p - 18, caplen + 4); 268 269 return (1); 270 |
271 case ETHERTYPE_JUMBO: 272 ether_type = ntohs(*(u_int16_t *)(p)); 273 p += 2; 274 length -= 2; 275 caplen -= 2; 276 277 if (ether_type > ETHERMTU) { 278 if (eflag) 279 printf("ethertype %s, ", 280 tok2str(ethertype_values,"0x%04x", ether_type)); 281 goto recurse; 282 } 283 284 *extracted_ether_type = 0; 285 286 if (llc_print(p, length, caplen, p - 16, p - 10, 287 extracted_ether_type) == 0) { 288 ether_hdr_print(p - 16, length + 2); 289 } 290 291 if (!xflag && !qflag) 292 default_print(p - 16, caplen + 2); 293 294 return (1); 295 296 case ETHERTYPE_ISO: 297 isoclns_print(p+1, length-1, length-1); 298 return(1); 299 |
|
253 case ETHERTYPE_PPPOED: 254 case ETHERTYPE_PPPOES: 255 case ETHERTYPE_PPPOED2: 256 case ETHERTYPE_PPPOES2: 257 pppoe_print(p, length); 258 return (1); 259 | 300 case ETHERTYPE_PPPOED: 301 case ETHERTYPE_PPPOES: 302 case ETHERTYPE_PPPOED2: 303 case ETHERTYPE_PPPOES2: 304 pppoe_print(p, length); 305 return (1); 306 |
307 case ETHERTYPE_EAPOL: 308 eap_print(gndo, p, length); 309 return (1); 310 |
|
260 case ETHERTYPE_PPP: 261 if (length) { 262 printf(": "); 263 ppp_print(p, length); 264 } 265 return (1); 266 267 case ETHERTYPE_LOOPBACK: --- 8 unchanged lines hidden (view full) --- 276 case ETHERTYPE_SCA: 277 case ETHERTYPE_MOPRC: 278 case ETHERTYPE_MOPDL: 279 /* default_print for now */ 280 default: 281 return (0); 282 } 283} | 311 case ETHERTYPE_PPP: 312 if (length) { 313 printf(": "); 314 ppp_print(p, length); 315 } 316 return (1); 317 318 case ETHERTYPE_LOOPBACK: --- 8 unchanged lines hidden (view full) --- 327 case ETHERTYPE_SCA: 328 case ETHERTYPE_MOPRC: 329 case ETHERTYPE_MOPDL: 330 /* default_print for now */ 331 default: 332 return (0); 333 } 334} |
335 336 337/* 338 * Local Variables: 339 * c-style: whitesmith 340 * c-basic-offset: 8 341 * End: 342 */ 343 |
|