diff options
author | Ido Barnea <ibarnea@cisco.com> | 2016-04-14 13:06:04 +0300 |
---|---|---|
committer | Ido Barnea <ibarnea@cisco.com> | 2016-04-14 13:06:04 +0300 |
commit | e0720b15ec9dc695a8c1799e87cbe41a670cb616 (patch) | |
tree | 2d74a2195e6f8df326e90bf585990d019e9cc90b /src/flow_stat_parser.cpp | |
parent | 4d311b49e0c283f5cd8b27d00482eb08bd18c201 (diff) |
Support for flow stat for vlan packets on 82599 card using --vlan option
Diffstat (limited to 'src/flow_stat_parser.cpp')
-rw-r--r-- | src/flow_stat_parser.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
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; |