From 908b1a17d1b08a8473695316e56eb98f7b005cbd Mon Sep 17 00:00:00 2001 From: Seth Hall Date: Tue, 15 Nov 2011 09:51:02 -0500 Subject: [PATCH] Adding PPPoE support to Bro. - Still needs a small test tracefile and test. --- src/PktSrc.cc | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/PktSrc.cc b/src/PktSrc.cc index 68b9785e6f..d86952a61f 100644 --- a/src/PktSrc.cc +++ b/src/PktSrc.cc @@ -208,16 +208,34 @@ void PktSrc::Process() // Get protocol being carried from the ethernet frame. protocol = (data[12] << 8) + data[13]; - // MPLS carried over the ethernet frame. - if ( protocol == 0x8847 ) - have_mpls = true; - - // VLAN carried over ethernet frame. - else if ( protocol == 0x8100 ) + switch ( protocol ) { - data += get_link_header_size(datalink); - data += 4; // Skip the vlan header - pkt_hdr_size = 0; + // MPLS carried over the ethernet frame. + case 0x8847: + have_mpls = true; + break; + + // VLAN carried over the ethernet frame. + case 0x8100: + data += get_link_header_size(datalink); + data += 4; // Skip the vlan header + pkt_hdr_size = 0; + break; + + // PPPoE carried over the ethernet frame. + case 0x8864: + data += get_link_header_size(datalink); + protocol = (data[6] << 8) + data[7]; + data += 8; // Skip the PPPoE session and PPP header + pkt_hdr_size = 0; + if ( protocol != 0x0021 && protocol != 0x0057 ) + { + // Neither IPv4 nor IPv6. + sessions->Weird("non_ip_packet_in_pppoe_encapsulation", &hdr, data); + data = 0; + return; + } + break; } break;