summaryrefslogtreecommitdiffstats
path: root/src/flow_stat_parser.cpp
diff options
context:
space:
mode:
authorIdo Barnea <ibarnea@cisco.com>2016-04-14 13:06:04 +0300
committerIdo Barnea <ibarnea@cisco.com>2016-04-14 13:06:04 +0300
commite0720b15ec9dc695a8c1799e87cbe41a670cb616 (patch)
tree2d74a2195e6f8df326e90bf585990d019e9cc90b /src/flow_stat_parser.cpp
parent4d311b49e0c283f5cd8b27d00482eb08bd18c201 (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.cpp19
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;