From b9f29ecd255b4527a5c099d6704e2dccb9581fe0 Mon Sep 17 00:00:00 2001 From: burton Date: Wed, 16 Oct 2002 14:17:56 +0000 Subject: [PATCH] Additional reporting (info.html and textinfo.html) for dns address resolution. Instead of just a (current) queued value, reports "Current Queue", "Maximum Queue" and "Total Queued". These give you visibility into whether DNS resolution is bogging down. Removed "dropped" - it was being reported but no code to count it. Added "DNS responses sniffed" - this is the count of how many DNS resolutions have been sniffed out of other people's DNS responses that ntop has processed. Note that this is the # of responses, NOT the # of UNIQUE addresses. If you have a host that keeps requesting the same address, it will be counted each time! Finally, cleaned up the #ifdef ASYNC_ADDRESS_RESOLUTION stuff. -----Burton (ref 142) --- address.c | 11 ++++++----- globals-core.c | 1 - globals.h | 5 ++--- ntop.c | 7 ++++++- protocols.c | 1 + report.c | 8 ++++---- reportUtils.c | 30 +++++++++++++++--------------- util.c | 8 ++++---- webInterface.c | 30 ++++++++++++++++-------------- 9 files changed, 54 insertions(+), 47 deletions(-) diff --git a/address.c b/address.c index 0bdd7b25..eef55f82 100644 --- a/address.c +++ b/address.c @@ -59,7 +59,7 @@ void updateHostNameInfo(unsigned long numeric, /* Search the instance and update its name */ -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "updateHostNameInfo"); #endif @@ -75,7 +75,7 @@ void updateHostNameInfo(unsigned long numeric, } } -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -402,6 +402,7 @@ static void queueAddress(struct in_addr elem) { if (rc == 0) { myGlobals.addressQueueLen++; + myGlobals.addressQueueCount++; if (myGlobals.addressQueueLen > myGlobals.maxAddressQueueLen) myGlobals.maxAddressQueueLen = myGlobals.addressQueueLen; @@ -632,10 +633,10 @@ void ipaddr2str(struct in_addr hostIpAddress, int actualDeviceId) { if(buf[0] != '\0') { updateHostNameInfo(hostIpAddress.s_addr, buf, actualDeviceId); } else { -#ifndef MULTITHREADED - resolveAddress(&hostIpAddress, 0, actualDeviceId); -#else +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) queueAddress(hostIpAddress); +#else + resolveAddress(&hostIpAddress, 0, actualDeviceId); #endif } } diff --git a/globals-core.c b/globals-core.c index 731d406f..0440437a 100644 --- a/globals-core.c +++ b/globals-core.c @@ -171,7 +171,6 @@ void initNtopGlobals(int argc, char * argv[]) { #ifdef ASYNC_ADDRESS_RESOLUTION for (i = 0; i < MAX_NUM_DEQUEUE_THREADS; i ++) myGlobals.dequeueAddressThreadId[i] = (pthread_t)-1; - myGlobals.droppedAddresses.value = 0; #endif #endif /* MULTITHREADED */ diff --git a/globals.h b/globals.h index b31f0354..971d2b4d 100644 --- a/globals.h +++ b/globals.h @@ -332,9 +332,6 @@ typedef struct ntopGlobals { pthread_t handleWebConnectionsThreadId; -#ifdef ASYNC_ADDRESS_RESOLUTION - TrafficCounter droppedAddresses; -#endif #endif /* MULTITHREADED */ /* SSL support */ @@ -366,7 +363,9 @@ typedef struct ntopGlobals { FlowFilterList *flowsList; /* Address Resolution */ + u_long dnsSniffedCount; #if defined(ASYNC_ADDRESS_RESOLUTION) + u_long addressQueueCount; u_int addressQueueLen, maxAddressQueueLen; #endif diff --git a/ntop.c b/ntop.c index 848338a9..d55599c2 100644 --- a/ntop.c +++ b/ntop.c @@ -48,8 +48,10 @@ void handleSigHup(int signalId _UNUSED_) { printMutexInfo(&myGlobals.gdbmMutex, "myGlobals.gdbmMutex"); printMutexInfo(&myGlobals.packetQueueMutex, "myGlobals.packetQueueMutex"); +#ifdef ASYNC_ADDRESS_RESOLUTION if(myGlobals.numericFlag == 0) printMutexInfo(&myGlobals.addressResolutionMutex, "myGlobals.addressResolutionMutex"); +#endif if(myGlobals.isLsofPresent) printMutexInfo(&myGlobals.lsofMutex, "myGlobals.lsofMutex"); @@ -858,7 +860,10 @@ RETSIGTYPE cleanup(int signo) { #ifdef MULTITHREADED deleteMutex(&myGlobals.packetQueueMutex); - if(myGlobals.numericFlag == 0) deleteMutex(&myGlobals.addressResolutionMutex); +#ifdef ASYNC_ADDRESS_RESOLUTION + if(myGlobals.numericFlag == 0) + deleteMutex(&myGlobals.addressResolutionMutex); +#endif deleteMutex(&myGlobals.hostsHashMutex); deleteMutex(&myGlobals.graphMutex); diff --git a/protocols.c b/protocols.c index 5f3952a1..dfd63c07 100644 --- a/protocols.c +++ b/protocols.c @@ -627,6 +627,7 @@ u_int16_t processDNSPacket(const u_char *packetData, accessMutex(&myGlobals.gdbmMutex, "processDNSPacket"); #endif gdbm_store(myGlobals.gdbm_file, key_data, data_data, GDBM_REPLACE); + myGlobals.dnsSniffedCount++; #ifdef MULTITHREADED releaseMutex(&myGlobals.gdbmMutex); #endif diff --git a/report.c b/report.c index 75840bcc..1e8e4ec3 100644 --- a/report.c +++ b/report.c @@ -3595,11 +3595,11 @@ static int cmpStatsFctn(const void *_a, const void *_b) { */ return(strcasecmp(a->domainHost->fullDomainName, b->domainHost->fullDomainName)); } else { -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "fillDomainName"); #endif rc = strcasecmp(a->domainHost->hostSymIpAddress, b->domainHost->hostSymIpAddress); -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif } @@ -3930,7 +3930,7 @@ void printDomainStats(char* domainName, int sortedColumn, int revertOrder, int p char tmpBuf[64], *hostLink; int blankId; -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "getHostIcon"); #endif @@ -3939,7 +3939,7 @@ void printDomainStats(char* domainName, int sortedColumn, int revertOrder, int p strncpy(tmpBuf, statsEntry->domainHost->hostSymIpAddress, sizeof(tmpBuf)); -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif diff --git a/reportUtils.c b/reportUtils.c index b0fb0078..fdec719f 100644 --- a/reportUtils.c +++ b/reportUtils.c @@ -730,13 +730,13 @@ int sortHostFctn(const void *_a, const void *_b) { switch(myGlobals.columnSort) { case 1: -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "sortHostFctn"); #endif rc = strcasecmp((*a)->hostSymIpAddress[0] != '\0' ? (*a)->hostSymIpAddress : (*a)->ethAddressString, (*b)->hostSymIpAddress[0] != '\0' ? (*b)->hostSymIpAddress : (*b)->ethAddressString); -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -904,7 +904,7 @@ int cmpFctn(const void *_a, const void *_b) { int rc; /* Host name */ -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "cmpFctn"); #endif @@ -919,7 +919,7 @@ int cmpFctn(const void *_a, const void *_b) { } else rc = strcasecmp((*a)->ethAddressString, (*b)->ethAddressString); -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -1389,14 +1389,14 @@ int cmpMulticastFctn(const void *_a, const void *_b) { break; /* NOTREACHED */ default: -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "cmpMulticastFctn"); #endif rc = strcmp((*a)->hostSymIpAddress, /* Host name */ (*b)->hostSymIpAddress); -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -1521,7 +1521,7 @@ int cmpHostsFctn(const void *_a, const void *_b) { break; default: /* Host Name */ -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "cmpHostsFctn"); #endif @@ -1545,7 +1545,7 @@ int cmpHostsFctn(const void *_a, const void *_b) { name_b = (*b)->ethAddressString; } -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -2914,7 +2914,7 @@ void printHostDetailedInfo(HostTraffic *el, int actualDeviceId) { int printedHeader, i; char *dynIp, *multihomed; -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "printAllSessionsHTML"); #endif @@ -2941,7 +2941,7 @@ void printHostDetailedInfo(HostTraffic *el, int actualDeviceId) { BufferTooShort(); } -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -2952,18 +2952,18 @@ void printHostDetailedInfo(HostTraffic *el, int actualDeviceId) { if(el->hostNumIpAddress[0] != '\0') { char *countryIcon, *hostType; -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "printAllSessions-2"); #endif /* Courtesy of Roberto De Luca */ if(strcmp(el->hostNumIpAddress, el->hostSymIpAddress) != 0) { -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif countryIcon = getHostCountryIconURL(el); } else { -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif countryIcon = ""; @@ -3833,7 +3833,7 @@ char* buildHTMLBrowserWindowsLabel(int i, int j) { static char buf[BUF_SIZE]; int idx = i*myGlobals.device[myGlobals.actualReportDeviceId].numHosts + j; -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "buildHTMLBrowserWindowsLabel"); #endif @@ -3871,7 +3871,7 @@ char* buildHTMLBrowserWindowsLabel(int i, int j) { BufferTooShort(); } -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif diff --git a/util.c b/util.c index 10adf23a..3cb67195 100644 --- a/util.c +++ b/util.c @@ -2484,7 +2484,7 @@ void fillDomainName(HostTraffic *el) { || (el->hostSymIpAddress == NULL)) return; -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "fillDomainName"); #endif @@ -2495,7 +2495,7 @@ void fillDomainName(HostTraffic *el) { isdigit(el->hostSymIpAddress[0]))) { /* NOTE: theDomainHasBeenComputed(el) = 0 */ el->fullDomainName = el->dotDomainName = ""; -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -2541,7 +2541,7 @@ void fillDomainName(HostTraffic *el) { el->fullDomainName = el->dotDomainName = ""; } -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -2564,7 +2564,7 @@ void fillDomainName(HostTraffic *el) { /* traceEvent(TRACE_INFO, "'%s'\n", el->domainName); */ -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif diff --git a/webInterface.c b/webInterface.c index 710f37aa..0825997e 100644 --- a/webInterface.c +++ b/webInterface.c @@ -350,7 +350,7 @@ char* makeHostLink(HostTraffic *el, short mode, bufIdx = (bufIdx+1)%5; -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "makeHostLink"); #endif @@ -367,7 +367,7 @@ char* makeHostLink(HostTraffic *el, short mode, if(snprintf(buf[bufIdx], BUF_SIZE, fmt, el->hostSymIpAddress) < 0) BufferTooShort(); -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -404,7 +404,7 @@ char* makeHostLink(HostTraffic *el, short mode, usedEthAddress = 1; } -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -524,7 +524,7 @@ char* getHostName(HostTraffic *el, short cutName) { bufIdx = (bufIdx+1)%5; -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) accessMutex(&myGlobals.addressResolutionMutex, "getHostName"); #endif @@ -554,7 +554,7 @@ char* getHostName(HostTraffic *el, short cutName) { } else strncpy(buf[bufIdx], el->ethAddressString, 80); -#ifdef MULTITHREADED +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) releaseMutex(&myGlobals.addressResolutionMutex); #endif @@ -2467,7 +2467,13 @@ void printNtopConfigInfo(int textPrintFlag) { if(myGlobals.numericFlag == 0) { if(snprintf(buf, sizeof(buf), "%d", myGlobals.addressQueueLen) < 0) BufferTooShort(); - printFeatureConfigInfo(textPrintFlag, "Queued", buf); + printFeatureConfigInfo(textPrintFlag, "Current Queue", buf); + if(snprintf(buf, sizeof(buf), "%d", myGlobals.maxAddressQueueLen) < 0) + BufferTooShort(); + printFeatureConfigInfo(textPrintFlag, "Maximum Queued", buf); + if(snprintf(buf, sizeof(buf), "%d", myGlobals.addressQueueCount) < 0) + BufferTooShort(); + printFeatureConfigInfo(textPrintFlag, "Total Queued", buf); } #endif @@ -2483,13 +2489,9 @@ void printNtopConfigInfo(int textPrintFlag) { BufferTooShort(); printFeatureConfigInfo(textPrintFlag, "Found in Cache", buf); -#if defined(MULTITHREADED) - if(myGlobals.numericFlag == 0) { - if(snprintf(buf, sizeof(buf), "%d", myGlobals.droppedAddresses) < 0) - BufferTooShort(); - printFeatureConfigInfo(textPrintFlag, "Dropped", buf); - } -#endif + if(snprintf(buf, sizeof(buf), "%d", myGlobals.dnsSniffedCount) < 0) + BufferTooShort(); + printFeatureConfigInfo(textPrintFlag, "DNS responses sniffed", buf); /* **** */ @@ -2849,7 +2851,7 @@ void printNtopConfigInfo(int textPrintFlag) { printMutexStatus(textPrintFlag, &myGlobals.gdbmMutex, "gdbmMutex"); printMutexStatus(textPrintFlag, &myGlobals.packetQueueMutex, "packetQueueMutex"); -#ifdef ASYNC_ADDRESS_RESOLUTION +#if defined(MULTITHREADED) && defined(ASYNC_ADDRESS_RESOLUTION) if(myGlobals.numericFlag == 0) printMutexStatus(textPrintFlag, &myGlobals.addressResolutionMutex, "addressResolutionMutex"); #endif