summaryrefslogtreecommitdiff
path: root/net/tcptrace/files/patch-ad
blob: 0ed76c9ceda93268f62b6c289226c5ef39837455 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Index: tcpdump.c
===========================================================================
--- tcpdump.c	2004/11/17 22:48:46	#1
+++ tcpdump.c	2004/11/17 22:48:46
@@ -112,6 +112,9 @@
 	{
 		case -1: /* Not an IP packet */
 			return (-1);
+		case EH_SIZE + ETHER_VLAN_ENCAP_LEN:
+			memcpy(&eth_header.ether_type, buf+EH_SIZE+2, 2);
+			/* FALLTHROUGH */
 		case EH_SIZE: /* straight Ethernet encapsulation */
 			memcpy((char *)ip_buf,buf+offset,iplen);
 			callback_plast = ip_buf+iplen-offset-1;
Index: tcpdump.h
===========================================================================
--- tcpdump.h	2004/11/17 22:48:46	#1
+++ tcpdump.h	2004/11/17 22:48:46
@@ -178,7 +178,7 @@
 }
 
 /* This function determine the offset for the IP packet in an Ethernet frame */
-/* We handle two cases : straight Ethernet encapsulation or PPPoE encapsulation */
+/* We handle three cases : straight Ethernet, PPPoE, or .1q VLAN encapsulation */
 /* Written by Yann Samama (ysamama@nortelnetworks.com) on july 18th, 2003 */
 static int find_ip_eth(char* buf)
 {
@@ -191,10 +191,8 @@
 	switch (eth_proto_type)
 	{
 		case ETHERTYPE_IPV6: /* it's pure IPv6 over ethernet */
-			offset = 14;
-			break;
 		case ETHERTYPE_IP: /* it's pure IPv4 over ethernet */
-			offset = 14;
+			offset = sizeof(struct ether_header);
 			break;
 		case ETHERTYPE_PPPOE_SESSION: /* it's a PPPoE session */
 			memcpy(&ppp_proto_type, buf+20, 2);
@@ -202,6 +200,10 @@
 			if (ppp_proto_type == 0x0021) /* it's IP over PPPoE */
 				offset = PPPOE_SIZE;
 			break;
+		case ETHERTYPE_VLAN:
+			offset = sizeof(struct ether_header) +
+			    ETHER_VLAN_ENCAP_LEN;
+			break;
 		default: /* well, this is not an IP packet */
 			offset = -1;
 			break;			
Index: tcptrace.h
===========================================================================
--- tcptrace.h	2004/11/17 22:48:46	#1
+++ tcptrace.h	2004/11/17 22:48:46
@@ -1172,6 +1172,10 @@
 #define ETHERTYPE_VLAN		0x8100
 #endif	/* 802.1Q Virtual LAN */
 
+#ifndef ETHER_VLAN_ENCAP_LEN
+#define ETHER_VLAN_ENCAP_LEN	4
+#endif /* 802.1Q tag header length */
+
 /* support for PPPoE encapsulation added by Yann Samama (ysamama@nortelnetworks.com)*/
 #ifndef ETHERTYPE_PPPOE_SESSION
 #define ETHERTYPE_PPPOE_SESSION	0x8864