fa80014180
PR: ports/80665 Submitted by: Vasil Dimov <vd@datamax.bg> Approved by: maintainer timeout (2 months)
34 lines
1.1 KiB
Diff
34 lines
1.1 KiB
Diff
--- tcpdump.h.orig Thu May 5 18:41:37 2005
|
|
+++ tcpdump.h Thu May 5 18:41:53 2005
|
|
@@ -179,7 +179,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)
|
|
{
|
|
@@ -192,16 +192,19 @@
|
|
switch (eth_proto_type)
|
|
{
|
|
case ETHERTYPE_IPV6: /* it's pure IPv6 over ethernet */
|
|
- offset = 14;
|
|
- break;
|
|
+ /* FALLTHROUGH */
|
|
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);
|
|
ppp_proto_type = ntohs(ppp_proto_type);
|
|
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;
|