From e0720b15ec9dc695a8c1799e87cbe41a670cb616 Mon Sep 17 00:00:00 2001 From: Ido Barnea Date: Thu, 14 Apr 2016 13:06:04 +0300 Subject: Support for flow stat for vlan packets on 82599 card using --vlan option --- src/flow_stat_parser.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/flow_stat_parser.cpp') diff --git a/src/flow_stat_parser.cpp b/src/flow_stat_parser.cpp index e83f8a51..59de7481 100644 --- a/src/flow_stat_parser.cpp +++ b/src/flow_stat_parser.cpp @@ -233,9 +233,28 @@ int C82599Parser::parse(uint8_t *p, uint16_t len) { switch( ether->getNextProtocol() ) { case EthernetHeader::Protocol::IP : + // In 82599 all streams should be with vlan, or without. Can't mix + if (m_vlan_supported) + return -1; m_ipv4 = (IPHeader *)(p + ETH_HDR_LEN); m_stat_supported = true; break; + case EthernetHeader::Protocol::VLAN : + if (!m_vlan_supported) + return -1; + min_len += 4; + if (len < min_len) + return -1; + switch ( ether->getVlanProtocol() ){ + case EthernetHeader::Protocol::IP: + m_ipv4 = (IPHeader *)(p + 18); + m_stat_supported = true; + break; + default: + m_stat_supported = false; + return -1; + } + break; default: m_stat_supported = false; return -1; -- cgit 1.2.3-korg