}
static bool decode_netflow_v9(const unsigned char* data, uint16_t size,
- const Packet* p, const NetflowConfig* cfg)
+ const Packet* p, const NetflowRules* p_rules)
{
Netflow9Hdr header;
const Netflow9Hdr *pheader;
header.unix_secs = ntohl(pheader->unix_secs);
header.unix_secs -= header.sys_uptime;
- const NetflowRules* p_rules = nullptr;
- auto d = cfg->device_rule_map.find(*p->ptrs.ip_api.get_src());
-
- if ( d != cfg->device_rule_map.end() )
- p_rules = &(d->second);
-
- if ( p_rules == nullptr )
- return false;
-
const int zone = p->pkth->ingress_index;
data += sizeof(Netflow9Hdr);
}
static bool decode_netflow_v5(const unsigned char* data, uint16_t size,
- const Packet* p, const NetflowConfig* cfg)
+ const Packet* p, const NetflowRules* p_rules)
{
Netflow5Hdr header;
const Netflow5Hdr *pheader;
if( header.flow_count < NETFLOW_MIN_COUNT or header.flow_count > NETFLOW_MAX_COUNT )
return false;
- const NetflowRules* p_rules = nullptr;
- auto d = cfg->device_rule_map.find(*p->ptrs.ip_api.get_src());
- if ( d != cfg->device_rule_map.end() )
- p_rules = &(d->second);
-
- if ( p_rules == nullptr )
- return false;
const int zone = p->pkth->ingress_index;
data += sizeof(Netflow5Hdr);
return true;
}
-static bool validate_netflow(const Packet* p, const NetflowConfig* cfg)
+static bool validate_netflow(const Packet* p, const NetflowRules* p_rules)
{
uint16_t size = p->dsize;
const unsigned char* data = p->data;
if( version == 5 )
{
- retval = decode_netflow_v5(data, size, p, cfg);
+ retval = decode_netflow_v5(data, size, p, p_rules);
if ( retval )
{
++netflow_stats.packets;
}
else if ( version == 9 )
{
- retval = decode_netflow_v9(data, size, p, cfg);
+ retval = decode_netflow_v9(data, size, p, p_rules);
if ( retval )
{
++netflow_stats.packets;
assert((p->is_udp() and p->dsize and p->data));
assert(netflow_cache);
- if ( ! validate_netflow(p, config) )
- ++netflow_stats.invalid_netflow_record;
+ auto d = config->device_rule_map.find(*p->ptrs.ip_api.get_src());
+
+ if ( d != config->device_rule_map.end() )
+ {
+ const NetflowRules* p_rules = &(d->second);
+
+ if ( ! validate_netflow(p, p_rules) )
+ ++netflow_stats.invalid_netflow_record;
+ }
}
void NetflowInspector::tinit()