538
538
/* Check if a host can be potentially added the host matrix */
539
539
int isMatrixHost(HostTraffic *host, int actualDeviceId) {
540
540
if((host->hostIpAddress.hostFamily == AF_INET) /* Only IPv4 addresses are used in the matrix */
541
&& (deviceLocalAddress(&host->hostIpAddress, actualDeviceId) || multicastHost(host))
541
&& (deviceLocalAddress(&host->hostIpAddress, actualDeviceId, NULL, NULL) || multicastHost(host))
542
542
&& (!broadcastHost(host)))
731
/* ********************************** */
733
char* findHostCommunity(u_int32_t host_ip, char *buf, u_short buf_len) {
735
int len = strlen(COMMUNITY_PREFIX);
738
key = gdbm_firstkey(myGlobals.prefsFile);
740
char val[256], localAddresses[1024], *communityName;
741
u_int32_t localNetworks[MAX_NUM_NETWORKS][4]; /* [0]=network, [1]=mask, [2]=broadcast, [3]=mask_v6 */
742
u_short numLocalNetworks = 0, i;
744
if((fetchPrefsValue(key.dptr, val, sizeof(val)) == 0)
745
&& (!strncmp(key.dptr, COMMUNITY_PREFIX, len))) {
746
localAddresses[0] = '\0';
747
communityName = (char*)&key.dptr[len];
749
handleAddressLists(val, localNetworks, &numLocalNetworks,
750
localAddresses, sizeof(localAddresses),
751
CONST_HANDLEADDRESSLISTS_COMMUNITY);
753
// traceEvent(CONST_TRACE_WARNING, "--> Community %s has %d entries", communityName, numLocalNetworks);
754
for(i=0; i<numLocalNetworks; i++) {
755
if((host_ip & localNetworks[i][1]) == localNetworks[i][0]) {
756
//traceEvent(CONST_TRACE_WARNING, "--> Found community %s [%d]", communityName, numLocalNetworks);
757
snprintf(buf, buf_len, "%s", communityName);
763
nextkey = gdbm_nextkey(myGlobals.prefsFile, key);
771
/* ********************************** */
773
void setHostCommunity(HostTraffic *el) {
774
char *community, buf[64];
776
if((el == NULL) || (el->hostIpAddress.hostFamily != AF_INET))
777
return; /* Only IPv4 is supported */
778
else if(el->community != NULL)
779
return; /* Already set */
781
community = findHostCommunity(el->hostIpAddress.addr._hostIp4Address.s_addr,
785
el->community = strdup(community);