Argus with PF_RING DNA clusters
Chris Wakelin
c.d.wakelin at reading.ac.uk
Sun Jul 15 16:48:56 EDT 2012
Hi,
I've been trying to get Argus working with the more advanced versions of
PF_RING. In many ways this is similar to proprietary capture cards
except for being a software solution.
There's details of PF_RING DNA and a zero-copy mechanism called libzero
at http://www.ntop.org/products/pf_ring/libzero-for-dna/.
What it basically does is provide virtual interfaces dnacluster:X at Y
which each get a subset of the traffic. I'm hoping to use something like
-i ind:dnacluster:1 at 0,dnacluster:1 at 1,...,dnacluster:1 at 7 to run a
multithreaded ARGUS.
I needed to make a similar change to that suggested for the Napatech cards:-
> --- ArgusSource.c.orig 2012-06-20 14:11:43.000000000 +0100
> +++ ArgusSource.c 2012-07-09 20:17:17.820122121 +0100
> @@ -4182,7 +4182,7 @@
> if (device == NULL)
> return;
>
> - if (strstr(device->name, "dag") || strstr(device->name, "nap")) {
> + if (strstr(device->name, "dag") || strstr(device->name, "nap") || strstr(device->name, "dna")) { /*CDW* add "dna" */
> for (i = 0; i < src->ArgusInterfaces; i++) {
> if (src->ArgusInterface[i].ArgusPd && (pcap_fileno(src->ArgusInterface[i].ArgusPd) > 0))
> bzero ((char *)&src->ArgusInterface[i].ifr, sizeof(ifr));
> @@ -4223,6 +4223,7 @@
> }
> }
> #else
> +
> src->ArgusInterface[i].ifr.ifr_flags |= IFF_UP;
> setArgusInterfaceStatus(src, 1);
> #endif
and it works so far as capturing traffic is concerned.
However each thread uses 100% CPU, even with no traffic, whereas with
"ordinary" PF_RING (which needs no special tweaks), the usage is normal.
Any idea where to start looking for a cause? Debug output isn't leaving
me any the wiser:
(-D6 with no traffic)
> ArgusOutputProcess() looping
> ArgusOutputProcess() checking for remotes
> ArgusOutputProcess() done checking for remotes
> ArgusOutputProcess() waiting for input list
> ArgusOutputProcess() checking out clients
> ArgusOutputProcess() done with clients
> ArgusOutputProcess() looping
(with traffic)
> ArgusOutputProcess() looping
> ArgusOutputProcess() checking for remotes
> ArgusOutputProcess() done checking for remotes
> ArgusOutputProcess() waiting for input list
> ArgusCalloc (1, 1680) returning 0x7f77a007aad0
> ArgusAddHashEntry (0x7f77a007aad0) returning 0x7f77a007ab10
> ArgusCalloc (1, 1680) returning 0x7f77a007b170
> ArgusAddHashEntry (0x7f77a007b170) returning 0x7f77a007b1b0
> ArgusCalloc (34, 4) returning 0x7f77a007b810
> ArgusCalloc (34, 4) returning 0x7f77a007b8a0
> ArgusCalloc (1, 1680) returning 0x7f77a007b930
> ArgusAddHashEntry (0x7f77a007b930) returning 0x7f77a007b970
> ArgusCalloc (34, 4) returning 0x7f77a007bfd0
> ArgusCreateESPFlow(0xb1e27012) returning 0xb9d460
...
> ArgusOutputProcess() checking out clients
> ArgusOutputProcess() done with clients
> ArgusOutputProcsss() looping
Best Wishes,
Chris
--
--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-
Christopher Wakelin, c.d.wakelin at reading.ac.uk
IT Services Centre, The University of Reading, Tel: +44 (0)118 378 8439
Whiteknights, Reading, RG6 2AF, UK Fax: +44 (0)118 975 3094
More information about the argus
mailing list