Deleted Added
full compact
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