Implements One-Way traffic filter for hosts

Implements #2091
This commit is contained in:
Simone Mainardi 2018-10-12 12:56:52 +02:00
parent de4e996ffc
commit 57e035ed2f
10 changed files with 105 additions and 34 deletions

View file

@ -3443,6 +3443,7 @@ struct flowHostRetriever {
bool sourceMacsOnly, dhcpMacsOnly;
char *country;
int ndpi_proto; /* Not used in flow_search_walker */
TrafficType traffic_type; /* Not used in flow_search_walker */
sortField sorter;
LocationPolicy location; /* Not used in flow_search_walker */
u_int8_t ipVersionFilter; /* Not used in flow_search_walker */
@ -3687,7 +3688,9 @@ static bool host_search_walker(GenericHashEntry *he, void *user_data, bool *matc
(r->country && strlen(r->country) && strcmp(h->get_country(buf, sizeof(buf)), r->country)) ||
(r->osFilter && strlen(r->osFilter) && (!h->get_os() || strcmp(h->get_os(), r->osFilter))) ||
(r->blacklistedHosts && !h->isBlacklisted()) ||
(r->hideTopHidden && h->isHiddenFromTop()) ||
(r->hideTopHidden && h->isHiddenFromTop()) ||
(r->traffic_type == traffic_type_one_way && !h->isOneWayTraffic()) ||
(r->traffic_type == traffic_type_bidirectional && h->isOneWayTraffic()) ||
#ifdef NTOPNG_PRO
(r->filteredHosts && !h->hasBlockedTraffic()) ||
#endif
@ -4318,6 +4321,7 @@ int NetworkInterface::sortHosts(u_int32_t *begin_slot,
u_int16_t pool_filter, bool filtered_hosts,
bool blacklisted_hosts, bool hide_top_hidden,
u_int8_t ipver_filter, int proto_filter,
TrafficType traffic_type_filter,
char *sortColumn) {
u_int32_t maxHits;
u_int8_t macAddr[6];
@ -4343,13 +4347,14 @@ int NetworkInterface::sortHosts(u_int32_t *begin_slot,
retriever->country = countryFilter, retriever->vlan_id = vlan_id,
retriever->osFilter = osFilter, retriever->asnFilter = asnFilter,
retriever->networkFilter = networkFilter, retriever->actNumEntries = 0,
retriever->poolFilter = pool_filter, retriever->bridge_iface_idx = 0;
retriever->ipVersionFilter = ipver_filter;
retriever->filteredHosts = filtered_hosts;
retriever->blacklistedHosts = blacklisted_hosts;
retriever->hideTopHidden = hide_top_hidden;
retriever->ndpi_proto = proto_filter;
retriever->maxNumEntries = maxHits;
retriever->poolFilter = pool_filter, retriever->bridge_iface_idx = 0,
retriever->ipVersionFilter = ipver_filter,
retriever->filteredHosts = filtered_hosts,
retriever->blacklistedHosts = blacklisted_hosts,
retriever->hideTopHidden = hide_top_hidden,
retriever->ndpi_proto = proto_filter,
retriever->traffic_type = traffic_type_filter,
retriever->maxNumEntries = maxHits;
retriever->elems = (struct flowHostRetrieveList*)calloc(sizeof(struct flowHostRetrieveList), retriever->maxNumEntries);
if(retriever->elems == NULL) {
@ -4579,6 +4584,7 @@ int NetworkInterface::getActiveHostsList(lua_State* vm,
u_int16_t pool_filter, bool filtered_hosts,
bool blacklisted_hosts, bool hide_top_hidden,
u_int8_t ipver_filter, int proto_filter,
TrafficType traffic_type_filter,
char *sortColumn, u_int32_t maxHits,
u_int32_t toSkip, bool a2zSortOrder) {
struct flowHostRetriever retriever;
@ -4595,7 +4601,9 @@ int NetworkInterface::getActiveHostsList(lua_State* vm,
&retriever, bridge_iface_idx,
allowed_hosts, host_details, location,
countryFilter, mac_filter, vlan_id, osFilter,
asnFilter, networkFilter, pool_filter, filtered_hosts, blacklisted_hosts, hide_top_hidden, ipver_filter, proto_filter,
asnFilter, networkFilter, pool_filter, filtered_hosts, blacklisted_hosts, hide_top_hidden,
ipver_filter, proto_filter,
traffic_type_filter,
sortColumn) < 0) {
enablePurge(false);
return -1;
@ -4737,6 +4745,7 @@ int NetworkInterface::getActiveHostsGroup(lua_State* vm,
osFilter, asnFilter, networkFilter, pool_filter,
filtered_hosts, false /* no blacklisted hosts filter */, false,
ipver_filter, -1 /* no protocol filter */,
traffic_type_all /* no traffic type filter */,
groupColumn) < 0 ) {
enablePurge(false);
return -1;