summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2014-05-27flowtop: Constify function parameter in walk_process()Tobias Klauser1-1/+1
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-05-23netsniff-nf: proto_ipv6: Remove unused #include "csum.h"Tobias Klauser1-1/+0
This module doesn't use the checksum functions, thus we don't need to include csum.h. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-05-12bpf: Zero out socket filter in bpf_parse_rules()Tobias Klauser2-7/+2
Instead of memsetting the struct sock_filter every time before we call bpf_parse_rules(), do it there directly. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-05-09ring: Merge common ring_{rx,tx} initialization into own functionTobias Klauser7-78/+39
Instead of having to perform the individual steps to initialize a ring and open coding them in multiple places, provide convenience functions to do all at once. This has the nice side effect of allowing to make most of these *_{rx,tx}_ring() functions static in their respective module. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-05-09netsniff-ng: Move function scope variablesTobias Klauser1-8/+9
Move some variables from the function scipe to the block where they're used solely. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-05-09trafgen: Remove unnecessary initialization of ct.reserve_sizeTobias Klauser1-1/+0
It will be set later on depending on command line option (or panic() out) and it is initialized to 0 by a memset() before anyways. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-05-09netsniff-ng: Remove unnecessary memset of struct pollfdTobias Klauser1-2/+0
rx_poll will be passed to prepare_polling() which already zeros the struct, so no need to do it before. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-05-09netsniff-ng: Remove unnecessary initialization of struct ctx membersTobias Klauser1-4/+0
These will be set later on depending on command line option (or panic() out) and they're set to 0 by init_ctx() anyways. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-05-03doc: Fix typos in mausezahn and trafgen manpagesKartik Mistry2-2/+2
Fixed typos in mausezahn.8 and trafgen.8 [tklauser: Slightly edited commit message] Signed-off-by: Kartik Mistry <kartik.mistry@gmail.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-05-03all: Use macros for printf/scanf format specifiersJames McCoy9-55/+62
Any types that are fixed width should use the standard format specifier macros (PRI... for printf-type functions, SCN... for scanf-type functions) to ensure proper data access. Prior to this ifpps was crashing in 32-bit environments due to the following call mvwprintw(screen, (*voff)++, 2, "%s,%s %s (%s%s), t=%lums, cpus=%u%s/%u" " ", uts.release, machine, ifname, drvinf.driver, buff, ms_interval, top_cpus, top_cpus > 0 && top_cpus < cpus ? "+1" : "", cpus); since ms_interval is a uint64_t but %lu expects an unsigned long, which is only 32 bits. Signed-off-by: James McCoy <vega.james@gmail.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-30build: Do not add PREFIX to ETCDIRKartik Mistry1-1/+1
This will fix issue of installation of configuration files to /usr/local/etc (or /usr/etc for distribution builds) instead of /etc. [tklauser: extended description a bit] Signed-off-by: Kartik Mistry <kartik.mistry@gmail.com>
2014-04-30netsniff-ng/ring: Make verbose flag boolTobias Klauser5-7/+7
Change type of verbose flag from int to bool. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-30netsniff-ng: Use while() instead of empty forTobias Klauser1-2/+2
Instead of using a foor loop with empty initialization and afterthought, just use a while loop with the same condition. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-30ring: Consistently use size_t to specify ring sizeTobias Klauser7-15/+21
The mm_len member of struct ring is of type size_t, but in the code paths leading to set it, unsigned int is used. In circumstances where unsigned int is 32 bit and size_t is 64 bit, this could lead to an integer overflow, which causes an improper ring size being mmap()'ed in mmap_ring_generic(). In order to prevent this, consistently use size_t to store the ring size, since this is also what mmap() takes as its `length' parameter. This now allows to specify ring sizes larger than 4 GiB for both netsniff-ng and trafgen (fixes #90). Reported-by: Jon Schipp <jonschipp@gmail.com> Reported-by: Michał Purzyński <michalpurzynski1@gmail.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-30trafgen: Don't expose -k/--kernel-pull anymore and warn if it still usedTobias Klauser3-9/+3
The -k/--kernel-pull option got useless with commit c139e80 ("trafgen: remove timer-based trigger model"). Instead of entirely removing it and thus possibly breaking people's scripts, still accept it as an option, but warn the user about it. We might want to remove the option in a future release. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-30netsniff-ng: Fix whitespacesTobias Klauser1-3/+3
Remove some leading/trailing whitespaces. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-30trafgen: Use strtoul() instead of strtol() for unsigned longTobias Klauser1-1/+1
If setting an unsigned long variable, use strtoul() instead of strtol(). Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-29netsniff-ng 0.5.8v0.5.8Tobias Klauser1-1/+1
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-28netsniff-ng: Remove locally declared labelsTobias Klauser1-13/+4
These usually only make sense for complex macros which are expanded moree than once. The label for `out' doesn't make sense anyhow as it is declared on function level. Also don't indent the labels, so they're clearer to spot. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-27trafgen: performance regression at 10G due to smaller ring buffer sizeJesper Dangaard Brouer1-1/+1
commit c10621e ("trafgen: keep a small initial ring buffer size to reduce cache-misses") reduced default ring buffer size to 196KiB, but on my big machines with 10Gbit/s this size is too small. Increase default ring-size to 512 KiB, yield the best results, without increasing ring buffer size too much, this fixes #120. Single CPU results from my E5-2630 CPU with intel ixgbe/82599. (Cmd: trafgen --cpp --dev eth8 --conf udp_example01.trafgen --cpu 1) * 769,440 pkts/sec -- default ring-size 196 KiB * 1,417,908 pkts/sec -- ring-size 500 KiB Going above CPUs L3 cache size which is (15Mb) * 1,236,580 pkts/sec -- ring-size 20000KiB The mmap'ed ring buffer is now faster than using sendto(). For comparison, not using the ring-buffer, by using option "-t0": * 1,381,364 (with qdisc bypass) And using the qdisc code path in the kernel (enable via parameter "--qdisc-path") * 1,227,772 pkts/sec (with --qdisc-path) Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2014-04-27build: Also use proper previous tag for people listTobias Klauser1-2/+3
Follow up for commit 311d4376 ("build: Make sure we get the correct previous tag for the changelog"). Move getting the previous tag into an own command and use it where appropriate. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-27conf: oui: update oui.confTobias Klauser1-15/+147
Update oui.conf using oui-update.py Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-27build: Make sure we get the correct previous tag for the changelogTobias Klauser1-1/+1
When going from an -rc release to a stable release (e.g. v0.5.8 ;-) the generated shortlog will not be generated from the latest -rc tag but from the second to last due to the sort order of the tag list: 0.5.5 0.5.6 0.5.7 v0.5.8 <-- newest tag v0.5.8-rc1 v0.5.8-rc2 v0.5.8-rc3 v0.5.8-rc4 v0.5.8-rc5 <-- second newest tag Thus use 'git describe' to get the proper previous tag. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-25ifpps: Fix coding styleTobias Klauser1-4/+6
Fix spacing and move a pointer increment out of the for loop initializer. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-25ifpps: fix matching wrong interface/deviceJesper Dangaard Brouer1-1/+7
There were a bug in ifpps, that would match the first occurance of a device/interface name in /proc/net/dev, because it located the device based on a substring. If the device name were starting with the same characters, e.g. having a device named eth4 and a VLAN device named eth4.100. If specifying --dev eth4, then depending on the order of /proc/net/dev the wrong device could be choosen for stats. (Note kernel does not guarantee the order of devices in proc file) Fix the bug, by matching with a colon ':' appended to the device name, as the kernel proc format prints a ':' behind the device name. Fixes #119 Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2014-04-22doc: AUTHORS: Add Oliver Smith to contributorsTobias Klauser1-0/+1
Oliver contributed a patch to astraceroute back in August 2013, but he was never properly credited in AUTHORS. Do that now. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-22conf: Use configuration file path from Makefile instead of hardcoded pathsTobias Klauser7-17/+16
Currently, the path to the configuration files is hardcoded to $PREFIX/etc/netsniff-ng. If we want to keep the configuration files outside of prefix (e.g. during development), we need to pass the complete path as specified in $ETCDIRE (and $ETCDIR respectively, which could e.g. be overriden on the command line during build install) as a preprocessor define. This way, we can e.g. install the configuration files to /etc while installing the binaries in /usr/local with: $ make PREFIX=/usr/local ETCDIR=/etc $ make PREFIX=/usr/local ETCDIR=/etc install Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-22bpf: Remove unncessary #include <xmalloc.h> from bpf.hTobias Klauser1-1/+1
Only die.h is needed in the header for panic(). Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-22built_in: Remove unnecessary #include <built_in.h> from several headersTobias Klauser4-5/+0
These are not needed in the headers themselves and are pulled in in the .c file where necessary. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-22man: astraceroute: Fix closing quotation markTobias Klauser1-1/+1
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-14dissector: Get rid of header dependency on pcap_io.hTobias Klauser4-24/+35
The dissector only needs the LINKTYPE_* #defines from pcap_io.h. Instead of pulling in this rather large header just for this, move the LINKTYPE_* #defines to an own header and include it where needed. Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
2014-04-12built_in: changed RUNTIME_PAGE_SIZE to use sysconf(_SC_PAGE_SIZE) instead of ↵Christian Wiese1-1/+1
getpagesize() getpagesize(2) is considered legacy and has been dropped with POSIX.1-2001. See discussion: https://github.com/netsniff-ng/netsniff-ng/pull/112 Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-12built_in: changed to use RUNTIME_PAGE_SIZE instead of PAGE_SIZEChristian Wiese8-15/+13
References: https://github.com/netsniff-ng/netsniff-ng/commit/453f6eb9d79dd5aa2812ef956b22723f0a493086 https://github.com/netsniff-ng/netsniff-ng/pull/112 Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-12build: fixed PREFIX usageChristian Wiese1-4/+4
This change fixes the use of PREFIX by not hard wiring /usr into the path. Besides that if no PREFIX is provided by the user, it is set to /usr/local now which is considered to be the right location for most LSB conforming distros if the user is compiling from sources to not interfere with the package management for binary packages which are build using /usr as prefix in most of the cases. current behavior without setting PREFIX will most likely interfere with most distro package managers when building from source: ------------------------------------------------------------------------ $ sudo make uninstall RM /usr/sbin/netsniff-ng RM /usr/share/man/man8/netsniff-ng.8.gz RM /usr/sbin/trafgen RM /usr/share/man/man8/trafgen.8.gz RM /usr/sbin/astraceroute RM /usr/share/man/man8/astraceroute.8.gz RM /usr/sbin/ifpps RM /usr/share/man/man8/ifpps.8.gz RM /usr/sbin/bpfc RM /usr/share/man/man8/bpfc.8.gz RM /usr/sbin/curvetun RM /usr/share/man/man8/curvetun.8.gz ------------------------------------------------------------------------ current behavior when setting PREFIX=/usr/local looks kind of weird because of the hard wired /usr: ------------------------------------------------------------------------ $ sudo make PREFIX=/usr/local uninstall RM /usr/local/usr/sbin/netsniff-ng RM /usr/local/usr/share/man/man8/netsniff-ng.8.gz RM /usr/local/usr/sbin/trafgen RM /usr/local/usr/share/man/man8/trafgen.8.gz RM /usr/local/usr/sbin/astraceroute RM /usr/local/usr/share/man/man8/astraceroute.8.gz RM /usr/local/usr/sbin/ifpps RM /usr/local/usr/share/man/man8/ifpps.8.gz RM /usr/local/usr/sbin/bpfc RM /usr/local/usr/share/man/man8/bpfc.8.gz RM /usr/local/usr/sbin/curvetun RM /usr/local/usr/share/man/man8/curvetun.8.gz ------------------------------------------------------------------------ using the proposed fix without setting PREFIX: ------------------------------------------------------------------------ $ sudo make uninstall RM /usr/local/sbin/netsniff-ng RM /usr/local/share/man/man8/netsniff-ng.8.gz RM /usr/local/sbin/trafgen RM /usr/local/share/man/man8/trafgen.8.gz RM /usr/local/sbin/astraceroute RM /usr/local/share/man/man8/astraceroute.8.gz RM /usr/local/sbin/ifpps RM /usr/local/share/man/man8/ifpps.8.gz RM /usr/local/sbin/bpfc RM /usr/local/share/man/man8/bpfc.8.gz RM /usr/local/sbin/curvetun RM /usr/local/share/man/man8/curvetun.8.gz ------------------------------------------------------------------------ Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-11doc: add Christian to AUTHORS fileDaniel Borkmann1-0/+1
For Christian Wiese's contributions, add him to AUTHORS. Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-11doc: curvetun: add documentation how to use libsodium instead of libnaclChristian Wiese1-1/+19
Add information to INSTALL on how to build with libsodium. Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-11build: curvetun: add NACL_LIB variable to configure to be able to set an ↵Christian Wiese2-1/+6
alternative lib This way one can simply set an alternative lib like libsodium for linking the curvetun binary. The current default linking against libnacl is preserved! To link curvetun against libsodium you can set NACL_LIB=sodium Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-11built_in: changed to not unconditionally define PAGE_SIZEChristian Wiese1-1/+3
When building against musl libc I encountered following issue: --------------------------------------------------------------------------- In file included from xmalloc.h:6:0, from xmalloc.c:17: built_in.h:181:0: warning: "PAGE_SIZE" redefined [enabled by default] In file included from /usr/include/limits.h:8:0 --------------------------------------------------------------------------- According to the POSIX standard PAGE_SIZE should be defined in <limits.h> [1] which is the case with musl libc if for example _GNU_SOURCE or _BSD_SOURCE are defined which both is the case in netsniff-ng sources. On my i686 test build the interesting part of <bits/limits.h> which itself gets included by <limits.h> looks like this: --------------------------------------------------------------------------- #if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #define PAGE_SIZE 4096 #define LONG_BIT 64 #endif --------------------------------------------------------------------------- Note: Besides that I noticed that currently getpagesize(2) is used, which is considered legacy and has been dropped with POSIX.1-2001 [2]. According to getpagesize(2) [2] portable applications should use sysconf(3) [3] By using getpagesize(2) unconditionally the intention was maybe to always use the run time configuration value of PAGE_SIZE as returned by the kernel. At least in the case of musl libc and applying this change this would not be the case anymore as the static PAGE_SIZE value from the header would be used! References: [1] http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html [2] http://man7.org/linux/man-pages/man2/getpagesize.2.html [3] http://man7.org/linux/man-pages/man3/sysconf.3.html Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-10doc: fix make help for CROSS_COMPILE optionChristian Wiese1-1/+1
One doesn't need to specify a path for the CROSS_COMPILE option but a prefix identifying the target architecture. Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-10doc: add documentation of DESTDIR usage in INSTALL and make helpChristian Wiese2-0/+9
Document the newly introduced DESTDIR option. Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-10poll: changed to include <poll.h> instead of <sys/poll.h>Christian Wiese3-3/+2
This is a very cosmetic change but I think it is good to be standards compliant. The standard defines <poll.h> and not <sys/poll.h>: http://pubs.opengroup.org/onlinepubs/009696799/basedefs/poll.h.html When building against musl libc it silences some annoying cpp warnings like this: ----------------------------------------------------------------------- warning: #warning redirecting incorrect #include <sys/poll.h> to <poll.h> [-Wcpp] ----------------------------------------------------------------------- Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-10docs: be more precise on readme with experimental toolsDaniel Borkmann1-5/+6
Just improve the note on tools that are still experimental. Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-10built_in: improved to define DEFFILEMODE if not provided by the libcChristian Wiese1-0/+4
musl libc doesn't provide the non-standard macros for common mode bit masks, which other libc implementations like glibc define in <sys/stat.h>. Compile time error when building against musl libc: -------------------------------------------------------------------------- netsniff-ng.c: In function 'read_pcap': netsniff-ng.c:592:33: error: 'DEFFILEMODE' undeclared (first use in this function) -------------------------------------------------------------------------- This change improves built_in.h to check if DEFFILEMODE is defined and if not it defines it to be available internally. Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-10build: add DESTDIR supportChristian Wiese3-6/+10
This change implements support for specifying an alternative installation destination directory by setting DESTDIR when calling 'make install'. Example: make DESTDIR=/alternative-rootfs install It is particularly useful when cross-compiling and installing in a dedicated directory where for example the rootfs or a build sandbox for the target architecture is mounted. By using DESTDIR you can avoid to mess with PREFIX to include the alternative installation directory! Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-10link: fixed to include <sys/types.h> for caddr_tChristian Wiese1-0/+1
When building against musl libc compiling bails out because of caddr_t not being declared: -------------------------------------------------------------------------- link.c: In function 'wireless_sigqual': link.c:41:24: error: 'caddr_t' undeclared (first use in this function) -------------------------------------------------------------------------- As caddr_t is declared in <sys/types.h> this header needs to be included. Signed-off-by: Christian Wiese <chris@opensde.org> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-10dissector: display packet direction for tap'ing on netlink devices (nlmon)Daniel Borkmann2-6/+16
Linux kernel provides nlmon device (ARPHRD_NETLINK) driver that can tap on netlink traffic, e.g.: Setup: modprobe nlmon ip link add type nlmon ip link set nlmon0 up Capture: netsniff-ng -i nlmon0 ... (or -i any) Teardown: ip link set nlmon0 down ip link del dev nlmon0 rmmod nlmon Provide information about the packet direction (user space or kernel space), so that dissector will show that properly. Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-04-07pcap_io: fill sll when reading pcapDaniel Borkmann2-3/+26
When reading from a pcap in Kuznetsov/netsniff-ng format, we currently do not fill out sll. Do so so that users can see pkttype and the interface. Reported-by: Flavio Leitner <fbl@redhat.com> Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-03-26trafgen: keep a small initial ring buffer size to reduce cache-missesDaniel Borkmann1-0/+3
Heavily reduce the initial ring buffer size for trafgen to just 196KiB, so that we can heavily reduce the number of cache-misses related to cache references. People can still overwrite this setting later on via command line option for their specific architecture if they wish. Perhaps the RX_RING should be checked as well in netsniff-ng though the use case there is slightly different. Before: Performance counter stats for 'trafgen -i blub -o dummy0 -n100000000': 137,765,493,346 instructions:k # 0.82 insns per cycle 167,438,826,578 cycles:k # 0.000 GHz 59,508,315 branch-misses:k 361 context-switches:k 6 cpu-migrations:k 134,751,541 cache-misses:k # 85.019 % of all cache refs 158,495,358 cache-references:k 755 kmem:kmem_cache_alloc 15.139458202 seconds time elapsed After: Performance counter stats for 'trafgen -i blub -o dummy0 -n100000000': 137,889,782,650 instructions:k # 0.92 insns per cycle 150,239,185,971 cycles:k # 0.000 GHz 71,583,573 branch-misses:k 423 context-switches:k 7 cpu-migrations:k 60,239 cache-misses:k # 0.073 % of all cache refs 82,502,468 cache-references:k 740 kmem:kmem_cache_alloc 12.028787964 seconds time elapsed Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-03-26trafgen: remove timer-based trigger modelDaniel Borkmann1-43/+10
perf reports in mmap case a huge number of kmem_cache_alloc's which seem to stem from triggering signals from kernel to user application, against dummy device: Performance counter stats for 'trafgen -i blub -o dummy0 -n100000000 -k100': <-- mmap case 175,837 kmem:kmem_cache_alloc 14.758900522 seconds time elapsed Performance counter stats for 'trafgen -i blub -o dummy0 -n100000000 -k100 -t0': <-- non-mmap case 707 kmem:kmem_cache_alloc 15.591667364 seconds time elapsed It seems not to case significant number of cache-misses, but it's better to switch to a direct trigger when we cannot fill new frames anymore. After this patch, we see a similar number of kmem_cache_alloc's as in the non-mmap case. This basically renders the kpull interval useless, we can optionally remove it if we don't care about people's scripts. ;-) Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
2014-03-23conf: oui: update oui.confTobias Klauser1-5/+97
Update oui.conf using oui-update.py Signed-off-by: Tobias Klauser <tklauser@distanz.ch>