Fixing link-layer handling.

Something had gotten mixed up here.
This commit is contained in:
Robin Sommer 2014-09-06 10:34:24 -07:00
parent 4a66a8e341
commit 5c6dfb2408
2 changed files with 22 additions and 15 deletions

View file

@ -291,8 +291,7 @@ void PktSrc::Process()
&& protocol != 30 ) && protocol != 30 )
{ {
Weird("non_ip_packet_in_null_transport", &current_packet); Weird("non_ip_packet_in_null_transport", &current_packet);
data = 0; goto done;
return;
} }
break; break;
@ -307,12 +306,21 @@ void PktSrc::Process()
{ {
// MPLS carried over the ethernet frame. // MPLS carried over the ethernet frame.
case 0x8847: case 0x8847:
// Remove the data link layer and denote a
// header size of zero before the IP header.
have_mpls = true; have_mpls = true;
data += GetLinkHeaderSize(props.link_type);
pkt_hdr_size = 0;
break; break;
// VLAN carried over the ethernet frame. // VLAN carried over the ethernet frame.
case 0x8100: case 0x8100:
data += GetLinkHeaderSize(props.link_type); data += GetLinkHeaderSize(props.link_type);
// Check for MPLS in VLAN.
if ( ((data[2] << 8) + data[3]) == 0x8847 )
have_mpls = true;
data += 4; // Skip the vlan header data += 4; // Skip the vlan header
pkt_hdr_size = 0; pkt_hdr_size = 0;
@ -337,8 +345,7 @@ void PktSrc::Process()
{ {
// Neither IPv4 nor IPv6. // Neither IPv4 nor IPv6.
Weird("non_ip_packet_in_pppoe_encapsulation", &current_packet); Weird("non_ip_packet_in_pppoe_encapsulation", &current_packet);
data = 0; goto done;
return;
} }
break; break;
} }
@ -352,15 +359,19 @@ void PktSrc::Process()
protocol = (data[2] << 8) + data[3]; protocol = (data[2] << 8) + data[3];
if ( protocol == 0x0281 ) if ( protocol == 0x0281 )
// MPLS Unicast {
// MPLS Unicast. Remove the data link layer and
// denote a header size of zero before the IP header.
have_mpls = true; have_mpls = true;
data += GetLinkHeaderSize(props.link_type);
pkt_hdr_size = 0;
}
else if ( protocol != 0x0021 && protocol != 0x0057 ) else if ( protocol != 0x0021 && protocol != 0x0057 )
{ {
// Neither IPv4 nor IPv6. // Neither IPv4 nor IPv6.
Weird("non_ip_packet_in_ppp_encapsulation", &current_packet); Weird("non_ip_packet_in_ppp_encapsulation", &current_packet);
data = 0; goto done;
return;
} }
break; break;
} }
@ -368,12 +379,6 @@ void PktSrc::Process()
if ( have_mpls ) if ( have_mpls )
{ {
// Remove the data link layer
data += GetLinkHeaderSize(props.link_type);
// Denote a header size of zero before the IP header
pkt_hdr_size = 0;
// Skip the MPLS label stack. // Skip the MPLS label stack.
bool end_of_stack = false; bool end_of_stack = false;
@ -395,6 +400,7 @@ void PktSrc::Process()
else else
net_packet_dispatch(current_packet.ts, current_packet.hdr, data, pkt_hdr_size, this); net_packet_dispatch(current_packet.ts, current_packet.hdr, data, pkt_hdr_size, this);
done:
have_packet = 0; have_packet = 0;
DoneWithPacket(); DoneWithPacket();
} }

View file

@ -3,7 +3,7 @@
#empty_field (empty) #empty_field (empty)
#unset_field - #unset_field -
#path loaded_scripts #path loaded_scripts
#open 2014-08-14-04-31-11 #open 2014-09-06-01-20-32
#fields name #fields name
#types string #types string
scripts/base/init-bare.bro scripts/base/init-bare.bro
@ -43,6 +43,7 @@ scripts/base/init-bare.bro
scripts/base/frameworks/files/magic/__load__.bro scripts/base/frameworks/files/magic/__load__.bro
build/scripts/base/bif/__load__.bro build/scripts/base/bif/__load__.bro
build/scripts/base/bif/broxygen.bif.bro build/scripts/base/bif/broxygen.bif.bro
build/scripts/base/bif/pcap.bif.bro
build/scripts/base/bif/bloom-filter.bif.bro build/scripts/base/bif/bloom-filter.bif.bro
build/scripts/base/bif/cardinality-counter.bif.bro build/scripts/base/bif/cardinality-counter.bif.bro
build/scripts/base/bif/top-k.bif.bro build/scripts/base/bif/top-k.bif.bro
@ -242,4 +243,4 @@ scripts/base/init-default.bro
scripts/base/misc/find-checksum-offloading.bro scripts/base/misc/find-checksum-offloading.bro
scripts/base/misc/find-filtered-trace.bro scripts/base/misc/find-filtered-trace.bro
scripts/policy/misc/loaded-scripts.bro scripts/policy/misc/loaded-scripts.bro
#close 2014-08-14-04-31-11 #close 2014-09-06-01-20-32