Giter Club home page Giter Club logo

netmap's Introduction

Netmap: a framework for fast packet I/O

Introduction

Netmap is a an framework for very fast packet I/O from userspace. VALE is an equally fast in-kernel L2 software switch using the netmap API. Both are implemented as a single kernel module for FreeBSD and Linux. Netmap/VALE can handle tens of millions of packets per second, matching the speed of 10G and 40G ports even with minimum sized frames.

To learn about netmap, you can use the following resources:

This repository contains source code (BSD-Copyright) for FreeBSD, Linux and Windows. Netmap, VALE and related applications are already included in FreeBSD since version 10.x. FreeBSD users should use the code included in the FreeBSD src tree rather than the one in this repository, although the two codebases are mostly aligned.

Why should I use netmap?

Netmap is mostly useful for userspace applications that must deal with raw packets: traffic generators, sinks, monitors, loggers, software switches and routers, generic middleboxes, interconnection of virtual machines.

The apps/ directory includes pkt-gen.c (a fast traffic generator/receiver) and bridge.c, a simple bidirectional interconnect between two ports. The kernel module itself implements a learning ethernet bridge.

More resources are hosted on other repositories. For example https://github.com/luigirizzo/netmap-libpcap contains a netmap-enabled version of libpcap (which is also included in FreeBSD distribution) so you can run any libpcap client on top of netmap at much higher speeds than using bpf. The https://github.com/luigirizzo/netmap-ipfw repository contains a userspace version of ipfw and dummynet which can handle several million packets per second in a single thread

QEMU has native netmap support, so it can interconnect VMs at high speed through netmap ports (e.g., using VALE ports or netmap pipes). For maximum performance, it is also possible to pass-through any netmap port into a QEMU VM, as described here. Also the FreeBSD bhyve hypervisor has native support for netmap.

Netmap alone does not accelerate your TCP. For that you need to implement your own tcp/ip stack probably using some of the techniques indicated below to reduce the processing costs.

Architecture

netmap uses a number of techniques to establish a fast and efficient path between applications and the network. In order of importance:

  • I/O batching
  • efficient device drivers
  • pre-allocated tx/rx buffers
  • memory mapped buffers

Despite the name, memory mapping is NOT the key feature for netmap's speed; systems that do not apply all these techniques do not achieve the same speed and efficiency.

Netmap clients use a select()-able file descriptor to synchronize with the network card/software switch, and exchange multiple packets per system call through device-independent memory mapped buffers and descriptors. Device drivers are completely in the kernel, and the system does not rely on IOMMU or other special mechanisms.

Installation instructions

A single kernel module implements the core Netmap functions, including the VALE switch and access to physical NICS using unmodified device drivers (at the price of much lower performance than netmap-aware drivers).

Netmap-aware device drivers are needed to use netmap at high speed on ethernet ports. To date, we have support for Intel ixgbe (10G), ixl (10/40G), e1000/e1000e/igb (1G), Realtek 8169 (1G) and Nvidia (1G). FreeBSD has also native netmap support in the Chelsio 10/40G cards.

FreeBSD

FreeBSD already includes netmap kernel support by default since version 11. If your kernel configuration does not include netmap, you can enable it by adding a dev netmap line, and rebuilding the kernel. Alternatively, you can build standalone modules (netmap, ixgbe, em, lem, re, igb, ...).

FreeBSD users will find the netmap example applications in src/tools/tools/netmap/ within the FreeBSD src tree.

Linux

The ./configure && make build system in the LINUX/ directory will let you patch device driver sources and build some netmap-enabled device drivers. Please look here for more instructions.

Make sure you have kernel headers matching your installed kernel. The sources for e1000e, igb, ixgbe and i40e will be downloaded from the Intel e1000 project on sourceforce. If you need the netmap enabled drivers for e1000, veth, forcedeth, virtio-net or r8169 you will also need the full kernel sources.

Linux users can find the netmap example applications in the apps/ directory in this repository.

Step 1

Configure netmap. To compile Netmap/VALE and the Intel drivers above:

./configure

(This will also download the Intel driver sources from sourceforce). To compile only Netmap/VALE (using unmodified drivers):

./configure --no-drivers # only netmap, no unmodified drivers

If you need the full kernel sources and you have installed them in /a/b/c/linux-A.B.C/, then you should do

./configure --kernel-dir=/a/b/c/linux-A.B.C/ # netmap+device drivers

You can omit --kernel-dir if your kernel sources are in a standard place.

If you use distribution packages, full sources and headers may be in different places contain headers (e.g., on debian systems). Use

./configure --kernel-sources=/a/b/c/linux-sources-A.B/ --kernel-dir=/a/b/c/linux-headers-A.B/

Step 2

Build kernel modules and sample applications:

make

Step 3

Install the new modules and the applications:

sudo make install

To have the new netmap-enabled driver modules alongside the original ones, you may want to add --driver-suffix=-netmap to the configure command above. The new drivers will then be called e1000e-netmap, ixgbe-netmap, and so on.

Windows

Netmap has been ported to Windows in summer 2015 by Alessio Faina as part of his Master thesis. You may take a look here for details, but please be aware that the port has been left behind for years, and is currently unmantained.

Applications

The directory apps/ contains some programs that use the netmap API

  • pkt-gen.c a packet generator/receiver working at line rate at 10Gbit/s
  • vale-ctl.c utility to configure ports of a VALE switch
  • bridge.c a utility that bridges two interfaces or one interface with the host stack

For libpcap and other applications look at the extra/ directory.

Testing

pkt-gen is a generic test program which can act as a sender or receiver. It has a large number of options, but the simplest form is:

pkt-gen -i ix0 -f rx	# receive and print stats
pkt-gen -i ix0 -f tx -l 60	# send a stream of 60-byte packets

(replace ix0 with the name of the interface or VALE port). This should be able to work at line rate (up to 14.88 Mpps on 10 Gbit/interfaces, even higher on VALE) but note the following

Operating Speed

Netmap is able to send packets at very high rates, and for simple packet transmission and reception, speed generally not limited by the CPU but by other factors (link speed, bus or NIC hw limitations).

For a physical link, the maximum number of packets per second can be computed with the formula:

pps = line_rate / (672 + 8 * pkt_size)

where "line_rate" is the nominal link rate (e.g 10 Gbit/s) and pkt_size is the actual packet size including MAC headers and CRC. The following table summarizes some results (in Mpps)

		LINE RATE
pkt_size 	100M	1G	10G	40G

      64	.1488	1.488	14.88	59.52
     128	.0589	0.589	 5.89	23.58
     256	.0367	0.367	 3.67	14.70
     512	.0209	0.209	 2.09	 8.38
    1024	.0113	0.113	 1.13	 4.51
    1518	.0078	0.078	 0.78	 3.12

On VALE ports, there is no physical link and the throughput is limited by CPU or memory depending on the packet size.

Common problems

Before reporting slow send or receive speed on a physical interface, check ALL of the following:

Cannot set the device in netmap mode:

  • make sure that the netmap module and drivers are correctly loaded and can allocate all the memory they need (check into /var/log/messages or equivalent)
  • check permissions on /dev/netmap
  • make sure the interface is up before invoking pkt-gen

Sender does not transmit

  • some switches/interfaces take a long time to (re)negotiate the link after starting pkt-gen; in case, use the -w N option to increase the initial delay to N seconds;

This may cause inability to transmit, or lost packets for the first few seconds of transmission

Receiver does not receive

  • make sure traffic uses a broadcast MAC addresses, or the UNICAST address of the receiving interface, or the receiving interface is in promiscuous mode (this must be done with ifconfig; pkt-gen does not change the operating mode)

Lower speed than line rate

  • check that your CPUs are running at the maximum clock rate and are not throttled down by the governor/powerd. On Linux:

    lscpu # shows current cpu speed sudo apt-get install cpufrequtils

  • make sure that the sender/receiver interfaces and switch have flow control (FC) disabled (either via sysctl or ethtool). If FC is enabled and the receiving end is unable to cope with the traffic, the driver will try to slow down transmission, sometimes to very low rates.

  • a lot of hardware is not able to sustain line rate. For instance, ixgbe has problems with receiving frames that are not multiple of 64 bytes (with/without CRC depending on the driver); also on transmissions, ixgbe tops at about 12.5 Mpps unless the driver prefetches tx descriptors. igb does line rate in all configurations. e1000/e1000e vary between 1.15 and 1.32 Mpps. re/r8169 is extremely slow in sending (max 4-500 Kpps)

Host rings do not work

  • disable NIC offloads, because netmap does not support them and packets exchanged between netmap and the kernel stack can be dropped because of invalid checksums. On FreeBSD offloads can be disabled with a command like

    sudo ifconfig vtnet0 -txcsum -rxcsum -tso4 -tso6 -lro -txcsum6 -rxcsum6

Check here for the corresponding Linux command.

Credits

Netmap and VALE are projects of the Universita` di Pisa, partially supported by various entities including: Intel Research Berkeley, EU FP7 projects CHANGE and OPENLAB, Netapp/Silicon Valley Community Foundation, ICSI

Authors:

  • Luigi Rizzo

Contributors (https://github.com/netmap-unipi/netmap/graphs/contributors):

  • Giuseppe Lettieri
  • Michio Honda
  • Marta Carbone
  • Gaetano Catalli
  • Matteo Landi
  • Vincenzo Maffione
  • Stefano Garzarella
  • Alessio Faina

References

There are a few academic papers describing netmap, VALE and applications. You can find the papers at http://info.iet.unipi.it/~luigi/research.html

  • Luigi Rizzo, netmap: a novel framework for fast packet I/O, Usenix ATC'12, Boston, June 2012

  • Luigi Rizzo, Revisiting network I/O APIs: the netmap framework, Communications of the ACM 55 (3), 45-51, March 2012

  • Luigi Rizzo, Marta Carbone, Gaetano Catalli, Transparent acceleration of software packet forwarding using netmap, IEEE Infocom 2012, Orlando, March 2012

  • Luigi Rizzo, Giuseppe Lettieri, VALE: a switched ethernet for virtual machines, ACM Conext 2012, Nice, Dec. 2012

  • Luigi Rizzo, Giuseppe Lettieri, Vincenzo Maffione, Speeding up packet I/O in virtual machines, IEEE/ACM ANCS 2013, San Jose, Oct. 2013

  • Stefano Garzarella, Giuseppe Lettieri, Luigi Rizzo, Virtual device passthrough for high speed VM networking IEEE/ACM ANCS 2015, Oakland, May 2015

  • Vincenzo Maffione, Luigi Rizzo, Giuseppe Lettieri, Flexible virtual machine networking using netmap passthrough IEEE Lanman 2016, Rome, June 2016

netmap's People

Contributors

aayla-secura avatar alessio-faina avatar andrewbonney avatar awelzel avatar borislavmatvey avatar brian90013 avatar carlgsmith avatar desbma avatar dusancerhaty avatar funman avatar giuseppelettieri avatar i39 avatar jdarnley avatar jhk098 avatar jibi avatar jlduran avatar jpemartins avatar kierank avatar krishnasrk avatar loos-br avatar luigirizzo avatar mhorne avatar micchie avatar ocochard avatar rbtcollins avatar sethhall avatar sgeto avatar stefano-garzarella avatar stefanoduo avatar vmaffione avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

netmap's Issues

Debian 7.8, e1000e plus netmap build error

What steps will reproduce the problem?
1. Get git clone version of netmap
2. cd netmap/LINUX 
3../configure --kernel-sources=/usr/src/linux-source-3.2 --drivers=e1000e
4. make 

What is the expected output? What do you see instead?

sin3t@bm:/opt/acts_build/netmap/LINUX$ make
make -C /lib/modules/3.2.0-4-amd64/build M=/opt/acts_build/netmap/LINUX 
EXTRA_CFLAGS='-I/opt/acts_build/netmap/LINUX -I/opt/acts_build/netmap/LINUX 
-I/opt/acts_build/netmap/LINUX/../sys -I/opt/acts_build/netmap/LINUX/../sys/dev 
-DCONFIG_NETMAP -Wno-unused-but-set-variable -DCONFIG_NETMAP_GENERIC 
-DCONFIG_NETMAP_MONITOR -DCONFIG_NETMAP_PIPE -DCONFIG_NETMAP_VALE'  modules 
CONFIG_NETMAP=m
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-4-amd64'
  Building modules, stage 2.
  MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-3.2.0-4-amd64'
cp -Rp /usr/src/linux-source-3.2/drivers/net/ethernet/intel/e1000e .
if [ -f patches/diff--e1000e--30100--30400 ]; then patch --posix --quiet 
--force -p1 < patches/diff--e1000e--30100--30400; fi
patch: **** malformed patch at line 48: @@ -3468,6 +3484,10 @@ void 
e1000e_down(struct e1000_adapter *adapter)

make: *** [get-e1000e] Error 2


Also after applying patches by hands,I got the next output.log

What version of the product are you using? On what operating system?
Debian: 7.8
git revision of netmap: 32e06f9d18bf82e40a7c5b6e769c0ca7607913fc
Ethernet controller: Intel Corporation 80003ES2LAN Gigabit Ethernet Controller 


Please provide any additional information below.
I was try'ng to build separately default drivers and 
http://downloadmirror.intel.com/15817/eng/e1000e-3.1.0.2.tar.gz. Both compiled 
in OK state, without netmap patches.




Original issue reported on code.google.com by [email protected] on 10 Mar 2015 at 5:20

Attachments:

netmap support for bnx2 driver

What steps will reproduce the problem?
1. Added netmap support for bnx2 driver
2. wget and ping is working
3.wn_capture.bin (packet capture is not working)

What is the expected output? What do you see instead?
Packet capture is not working

What version of the product are you using? On what operating system?


Please provide any additional information below.

Is this the expected output. Please let me know
bash-3.2#
bash-3.2# dmesg | grep bnx2
[   10.717032] Broadcom NetXtreme II Gigabit Ethernet Driver bnx2 v2.0.2 (Aug 
21, 2009)
[   10.724731] bnx2 0000:03:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[   10.753216] bnx2 0000:03:00.0: setting latency timer to 64
[   10.753346] bnx2 0000:03:00.0: firmware: using built-in firmware 
bnx2/bnx2-mips-09-5.0.0.j3.fw
[   10.772621] bnx2 0000:03:00.0: firmware: using built-in firmware 
bnx2/bnx2-rv2p-09-5.0.0.j3.fw
[   10.805491] 860.805489 bnx2_netmap_attach [361] 1 queues, tx: 117 rx 117 
slots
[   10.812664] bnx2 0000:03:00.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17
[   10.819388] bnx2 0000:03:00.1: setting latency timer to 64
[   10.819514] bnx2 0000:03:00.1: firmware: using built-in firmware 
bnx2/bnx2-mips-09-5.0.0.j3.fw
[   10.828046] bnx2 0000:03:00.1: firmware: using built-in firmware 
bnx2/bnx2-rv2p-09-5.0.0.j3.fw
[   10.860974] 860.860971 bnx2_netmap_attach [361] 1 queues, tx: 117 rx 117 
slots
[  166.402176] bnx2 0000:03:00.0: irq 37 for MSI/MSI-X
[  166.402181] bnx2 0000:03:00.0: irq 38 for MSI/MSI-X
[  166.402184] bnx2 0000:03:00.0: irq 39 for MSI/MSI-X
[  166.402188] bnx2 0000:03:00.0: irq 40 for MSI/MSI-X
[  166.402192] bnx2 0000:03:00.0: irq 41 for MSI/MSI-X
[  166.402195] bnx2 0000:03:00.0: irq 42 for MSI/MSI-X
[  166.402199] bnx2 0000:03:00.0: irq 43 for MSI/MSI-X
[  166.402202] bnx2 0000:03:00.0: irq 44 for MSI/MSI-X
[  166.402205] bnx2 0000:03:00.0: irq 45 for MSI/MSI-X
[  166.443128] bnx2: eth1: using MSIX
[  166.489152] bnx2: eth1 NIC SerDes Link is Up, 1000 Mbps full duplex
bash-3.2#


Original issue reported on code.google.com by [email protected] on 18 Jul 2014 at 11:45

OpenWRT Makefile does not work

Hello!

The OpenWRT Makefile is currently not working with the OpenWRT 14.07 version.
I made some changes in order to work properly. I provide a patch with the 
changes.
I hope you can add them to the tree :)

Carlos Ferreira

Original issue reported on code.google.com by [email protected] on 25 Nov 2014 at 9:48

Attachments:

Is it possible to make netmap kernel version agnostic

What steps will reproduce the problem?
1. We are deploying netmap to various boxes in the lab but being kernel version 
specific we can not update any of the boxes without re-building the netmap and 
associated driver modules. 
2. Is it possible to make it kernel version agnostic or at have a set of 
precompiled libraries against the a set of kernel versions (not down to the 
lower revision numbers). 
3. Or, is it possible to have netmap build against kernel headers vs full 
kernel source?

Original issue reported on code.google.com by [email protected] on 10 Dec 2014 at 8:15

/root/netmap/LINUX/e1000e/netdev.o Error 1 #2



I'm trying to install Netmap in a server with a Intel(R) Xeon(R) CPU E3-1270 V2 
@ 3.50GHz and 16GB of memory and Debian 7.6. My server has a Intel PRO/1000 PT 
Dual Port (EXPI9402PTBLK - 82571GB), and I'm using these driver and patches:
uname -a

Linux clickos 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux
gcc -v

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' 
--with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs 
--enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr 
--program-suffix=-4.7 --enable-shared --enable-linker-build-id 
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext 
--enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 
--libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu 
--enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object 
--enable-plugin --enable-objc-gc --with-arch-32=i586 --with-tune=generic 
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu 
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.7.2 (Debian 4.7.2-5)

#ethtool -i eth0
driver: e1000e
version: 3.1.0.2-NAPI

I'm have kernel-headers and kernel-source and downloaded Netmap from git clone 
https://code.google.com/p/netmap/

I configured "/netmap/LINUX/Makefile" to enable e1000e driver like described in 
README file.

MOD_LIST:= CONFIG_E1000=m CONFIG_E1000E=y \
CONFIG_IXGBE=m CONFIG_IGB=m \
CONFIG_BNX2X=m CONFIG_MLX4=m \
CONFIG_VIRTIO_NET=m

But, when I try to install, I receive this error:

/netmap/LINUX# make
LIN_VER 3023c
---- Building from /lib/modules/3.2.0-4-amd64/build/drivers/net/ethernet
---- copying e1000 e1000e forcedeth.c igb ixgbe r8169.c virtio_net.c ---
From /lib/modules/3.2.0-4-amd64/build/drivers/net/ethernet/nvidia :
-rw-r--r-- 1 root root 183317 Ago 12 16:17 forcedeth.c
From /lib/modules/3.2.0-4-amd64/build/drivers/net/ethernet/realtek :
-rw-r--r-- 1 root root 155222 Ago 12 16:17 r8169.c
From /lib/modules/3.2.0-4-amd64/build/drivers/net/ethernet/intel :
drwxr-xr-x 2 root root 4096 Ago 12 16:17 e1000/
drwxr-xr-x 2 root root 4096 Ago 12 23:33 e1000e/
drwxr-xr-x 2 root root 4096 Ago 12 16:17 igb/
drwxr-xr-x 2 root root 4096 Ago 12 16:17 ixgbe/
From /lib/modules/3.2.0-4-amd64/build/drivers/net/ethernet/broadcom :
-rw-r--r-- 1 root root 8466 Ago 12 16:17 cnic_if.h
From /lib/modules/3.2.0-4-amd64/build/drivers/net/ethernet :
From /lib/modules/3.2.0-4-amd64/build/drivers/net :
-rw-r--r-- 1 root root 30459 Ago 12 16:17 virtio_net.c
** patch with diff--e1000--20620--99999
** patch with diff--e1000e--30100--30400
2 out of 8 hunks FAILED -- saving rejects to file e1000e/netdev.c.rej
** patch with diff--forcedeth.c--20626--99999
** patch with diff--igb--30200--30300
4 out of 11 hunks FAILED -- saving rejects to file igb/igb_main.c.rej
** patch with diff--ixgbe--30200--30400
** patch with diff--r8169.c--30200--30400
** patch with diff--virtio_net.c--20626--30300
1 out of 7 hunks FAILED -- saving rejects to file virtio_net.c.rej
Building the following drivers: e1000 e1000e forcedeth.c igb ixgbe r8169.c 
virtio_net.c
make -C /lib/modules/3.2.0-4-amd64/build M=/root/netmap/LINUX CONFIG_NETMAP=m 
CONFIG_E1000=m CONFIG_E1000E=y CONFIG_IXGBE=m CONFIG_IGB=m CONFIG_BNX2X=m 
CONFIG_MLX4=m CONFIG_VIRTIO_NET=m \
EXTRA_CFLAGS='-I/root/netmap/LINUX -I/root/netmap/LINUX/../sys 
-I/root/netmap/LINUX/../sys/dev -DCONFIG_NETMAP -Wno-unused-but-set-variable' \
O_DRIVERS="e1000/ e1000e/ forcedeth.o igb/ ixgbe/ r8169.o virtio_net.o" modules
make[1]: Entering directory /usr/src/linux-headers-3.2.0-4-amd64' CC [M] 
/root/netmap/LINUX/netmap.o CC [M] /root/netmap/LINUX/netmap_mem2.o CC [M] 
/root/netmap/LINUX/netmap_generic.o CC [M] /root/netmap/LINUX/netmap_mbq.o CC 
[M] /root/netmap/LINUX/netmap_vale.o CC [M] 
/root/netmap/LINUX/netmap_offloadings.o CC [M] /root/netmap/LINUX/netmap_pipe.o 
CC [M] /root/netmap/LINUX/netmap_linux.o LD [M] /root/netmap/LINUX/netmap_lin.o 
CC [M] /root/netmap/LINUX/forcedeth.o CC [M] /root/netmap/LINUX/r8169.o CC [M] 
/root/netmap/LINUX/virtio_net.o In file included from 
/root/netmap/LINUX/virtio_net.c:83:0: /root/netmap/LINUX/virtio_netmap.h: In 
function âvirtio_netmap_txsyncâ: /root/netmap/LINUX/virtio_netmap.h:253:8: 
warning: unused variable âring_nrâ [-Wunused-variable] 
/root/netmap/LINUX/virtio_netmap.h: In function âvirtio_netmap_rxsyncâ: 
/root/netmap/LINUX/virtio_netmap.h:343:8: warning: unused variable âring_nrâ 
[-Wunused-variable] CC [M] /root/netmap/LINUX/e1000/e1000_main.o CC [M] 
/root/netmap/LINUX/e1000/e1000_hw.o CC [M] 
/root/netmap/LINUX/e1000/e1000_ethtool.o CC [M] 
/root/netmap/LINUX/e1000/e1000_param.o LD [M] /root/netmap/LINUX/e1000/e1000.o 
CC [M] /root/netmap/LINUX/e1000e/netdev.o In file included from 
/root/netmap/LINUX/e1000e/netdev.c:464:0: 
/root/netmap/LINUX/if_e1000e_netmap.h:48:2: warning: #warning this driver uses 
extended descriptors [-Wcpp] /root/netmap/LINUX/if_e1000e_netmap.h: In function 
âe1000_netmap_regâ: /root/netmap/LINUX/if_e1000e_netmap.h:88:3: error: too 
few arguments to function âe1000e_downâ In file included from 
/root/netmap/LINUX/e1000e/netdev.c:49:0: 
/root/netmap/LINUX/e1000e/e1000.h:541:13: note: declared here In file included 
from /root/netmap/LINUX/e1000e/netdev.c:464:0: 
/root/netmap/LINUX/if_e1000e_netmap.h: In function âe1000_netmap_txsyncâ: 
/root/netmap/LINUX/if_e1000e_netmap.h:176:3: error: invalid operands to binary 
+ (have âvoid *â and âvoid *â) 
/root/netmap/LINUX/if_e1000e_netmap.h:185:11: error: invalid operands to binary 
+ (have âvoid *â and âvoid *â) /root/netmap/LINUX/if_e1000e_netmap.h: In 
function âe1000_netmap_rxsyncâ: /root/netmap/LINUX/if_e1000e_netmap.h:289:3: 
error: invalid operands to binary + (have âvoid *â and âvoid *â) 
/root/netmap/LINUX/if_e1000e_netmap.h: In function 
âe1000e_netmap_init_buffersâ: /root/netmap/LINUX/if_e1000e_netmap.h:346:2: 
error: invalid operands to binary + (have âvoid *â and âvoid *â) 
/root/netmap/LINUX/e1000e/netdev.c: At top level: 
/root/netmap/LINUX/if_e1000e_netmap.h:312:12: warning: 
âe1000e_netmap_init_buffersâ defined but not used [-Wunused-function] 
make[3]: *** [/root/netmap/LINUX/e1000e/netdev.o] Error 1 make[2]: *** 
[/root/netmap/LINUX/e1000e] Error 2 make[1]: *** [_module_/root/netmap/LINUX] 
Error 2 make[1]: Leaving directory/usr/src/linux-headers-3.2.0-4-amd64'
make: *** [build] Error 2

Somebody knows what can I do?

Thank you.

Original issue reported on code.google.com by [email protected] on 14 Aug 2014 at 12:07

the VM started by launch-qemu.sh has a black qemu window

steps to reproduce:
1.download the 20131019-tinycore-netmap.hdd and dd it into a usb stick
2. plug the usb stick into a physical machine and start the machine from the usb
3. choose the second boot item (slow device waitusb=5), I got a xwindow
4. run pre-taps.sh
5. run launch-qemu.sh kvm --tap 01

I got a back window with title of 'qemu'.


How to get the actual console of the VM and I can set the IP of the VM, run 
netperf or netserver in it?

Thanks
Yong Sheng Gong




Original issue reported on code.google.com by [email protected] on 5 Mar 2014 at 5:42

No packets received no the receiver side in the simple pkt-gen example

What steps will reproduce the problem?
1. Run pkt-gen tx and rx on the same 10G NIC with ixgbe driver
2. Sender: sudo ./pkt-gen -i data0 -f tx -l 60
3. Receiver: sudo ./pkt-gen -i data0 -f rx

What is the expected output? What do you see instead?

Expected: receiver receiving all the packets

Actual output: (no packet received by the receiver..)
Sender side:

sudo ./pkt-gen -i data0 -f tx -l 60
403.691907 main [1649] interface is data0
403.692335 extract_ip_range [287] range is 10.0.0.1:0 to 10.0.0.1:0
403.692413 extract_ip_range [287] range is 10.1.0.1:0 to 10.1.0.1:0
403.696465 main [1840] mapped 334980KB at 0x7fe966c77000
Sending on netmap:data0: 16 queues, 1 threads and 1 cpus.
10.0.0.1 -> 10.1.0.1 (00:00:00:00:00:00 -> ff:ff:ff:ff:ff:ff)
403.696574 main [1924] Sending 512 packets every  0.000000000 s
403.696588 main [1926] Wait 2 secs for phy reset
405.696804 main [1928] Ready...
405.696891 nm_open [456] overriding ifname data0 ringid 0x0 flags 0x1
405.700996 sender_body [1014] start, fd 4 main_fd 3
405.734669 sender_body [1083] drop copy
406.701921 main_thread [1446] 12985190 pps (12998292 pkts in 1001009 usec)
407.702948 main_thread [1446] 13327892 pps (13341580 pkts in 1001027 usec)
408.703975 main_thread [1446] 13329503 pps (13343192 pkts in 1001027 usec)
409.704999 main_thread [1446] 13331019 pps (13344670 pkts in 1001024 usec)
410.706026 main_thread [1446] 13330164 pps (13343854 pkts in 1001027 usec)
411.707054 main_thread [1446] 13330441 pps (13344145 pkts in 1001028 usec)
412.708093 main_thread [1446] 13330230 pps (13344080 pkts in 1001039 usec)
413.709117 main_thread [1446] 13329526 pps (13343175 pkts in 1001024 usec)
414.710139 main_thread [1446] 13329604 pps (13343227 pkts in 1001022 usec)
415.711161 main_thread [1446] 13332207 pps (13345833 pkts in 1001022 usec)
416.712187 main_thread [1446] 13331628 pps (13345306 pkts in 1001026 usec)
417.713228 main_thread [1446] 13329125 pps (13343001 pkts in 1001041 usec)
418.714288 main_thread [1446] 13330291 pps (13344421 pkts in 1001060 usec)
419.715321 main_thread [1446] 13329012 pps (13342768 pkts in 1001032 usec)
^C420.243534 main_thread [1446] 13329840 pps (7041008 pkts in 528214 usec)

Receiver side: (No packets received..)
sudo ./pkt-gen -i data0 -f rx
393.285152 main [1649] interface is data0
393.285498 extract_ip_range [287] range is 10.0.0.1:0 to 10.0.0.1:0
393.285507 extract_ip_range [287] range is 10.1.0.1:0 to 10.1.0.1:0
394.150326 main [1840] mapped 334980KB at 0x7f241cf1f000
Receiving from netmap:data0: 16 queues, 1 threads and 1 cpus.
394.150507 main [1926] Wait 2 secs for phy reset
396.150773 main [1928] Ready...
396.150899 nm_open [456] overriding ifname data0 ringid 0x0 flags 0x1
396.155260 receiver_body [1183] reading from netmap:data0 fd 4 main_fd 3
397.156288 main_thread [1446] 0 pps (0 pkts in 1001131 usec)
397.156300 receiver_body [1190] waiting for initial packets, poll returns 0 0
398.157800 receiver_body [1190] waiting for initial packets, poll returns 0 0
398.157855 main_thread [1446] 0 pps (0 pkts in 1001567 usec)
399.159259 receiver_body [1190] waiting for initial packets, poll returns 0 0
399.159310 main_thread [1446] 0 pps (0 pkts in 1001455 usec)
400.160451 main_thread [1446] 0 pps (0 pkts in 1001141 usec)
400.160467 receiver_body [1190] waiting for initial packets, poll returns 0 0
401.161625 main_thread [1446] 0 pps (0 pkts in 1001175 usec)
401.161917 receiver_body [1190] waiting for initial packets, poll returns 0 0
402.163058 main_thread [1446] 0 pps (0 pkts in 1001433 usec)
402.163074 receiver_body [1190] waiting for initial packets, poll returns 0 0
403.164242 main_thread [1446] 0 pps (0 pkts in 1001184 usec)
403.164531 receiver_body [1190] waiting for initial packets, poll returns 0 0
404.165667 main_thread [1446] 0 pps (0 pkts in 1001424 usec)
404.165685 receiver_body [1190] waiting for initial packets, poll returns 0 0
405.166839 main_thread [1446] 0 pps (0 pkts in 1001173 usec)
405.166855 receiver_body [1190] waiting for initial packets, poll returns 0 0
406.167862 main_thread [1446] 0 pps (0 pkts in 1001022 usec)
406.167973 receiver_body [1190] waiting for initial packets, poll returns 0 0
407.168903 main_thread [1446] 0 pps (0 pkts in 1001042 usec)
407.169058 receiver_body [1190] waiting for initial packets, poll returns 0 0
408.169930 main_thread [1446] 0 pps (0 pkts in 1001026 usec)
408.170140 receiver_body [1190] waiting for initial packets, poll returns 0 0
409.170977 main_thread [1446] 0 pps (0 pkts in 1001048 usec)
409.171772 receiver_body [1190] waiting for initial packets, poll returns 0 0
410.171998 main_thread [1446] 0 pps (0 pkts in 1001021 usec)
410.172904 receiver_body [1190] waiting for initial packets, poll returns 0 0
411.173024 main_thread [1446] 0 pps (0 pkts in 1001026 usec)
411.174095 receiver_body [1190] waiting for initial packets, poll returns 0 0
412.174047 main_thread [1446] 0 pps (0 pkts in 1001023 usec)
412.175155 receiver_body [1190] waiting for initial packets, poll returns 0 0
413.175102 main_thread [1446] 0 pps (0 pkts in 1001055 usec)
413.176537 receiver_body [1190] waiting for initial packets, poll returns 0 0
414.176125 main_thread [1446] 0 pps (0 pkts in 1001022 usec)
414.178481 receiver_body [1190] waiting for initial packets, poll returns 0 0
415.177154 main_thread [1446] 0 pps (0 pkts in 1001030 usec)
415.179875 receiver_body [1190] waiting for initial packets, poll returns 0 0
416.178181 main_thread [1446] 0 pps (0 pkts in 1001027 usec)
416.180993 receiver_body [1190] waiting for initial packets, poll returns 0 0
417.179209 main_thread [1446] 0 pps (0 pkts in 1001027 usec)
417.182422 receiver_body [1190] waiting for initial packets, poll returns 0 0
418.180232 main_thread [1446] 0 pps (0 pkts in 1001023 usec)
418.183990 receiver_body [1190] waiting for initial packets, poll returns 0 0
419.181252 main_thread [1446] 0 pps (0 pkts in 1001021 usec)
419.185100 receiver_body [1190] waiting for initial packets, poll returns 0 0
420.182282 main_thread [1446] 0 pps (0 pkts in 1001030 usec)
420.187022 receiver_body [1190] waiting for initial packets, poll returns 0 0
421.183461 main_thread [1446] 0 pps (0 pkts in 1001179 usec)
421.188311 receiver_body [1190] waiting for initial packets, poll returns 0 0
422.184647 main_thread [1446] 0 pps (0 pkts in 1001186 usec)
422.189588 receiver_body [1190] waiting for initial packets, poll returns 0 0
423.185673 main_thread [1446] 0 pps (0 pkts in 1001025 usec)
423.191108 receiver_body [1190] waiting for initial packets, poll returns 0 0


What version of the product are you using? On what operating system?
netmap: the most recent version, downloaded on Dec. 23, 2014
OS: ubuntu 12.04, kernel: 3.2.0-74-generic

Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 24 Dec 2014 at 8:32

Receiving more packets then sent + plus kring error, when pkt-gen use multiple threads

What steps will reproduce the problem?
1. ixgbe-3.21.2 source is downloaded, patched with "diff--ixgbe--30500--30900" 
in the netmap source, and new driver ixgbe.ko is compiled without error, loaded.
2. insmod netmap/LINUX/netmap_lin.ko
3. insmod ixgbe-3.21.2/src/ixgbe.ko allow_unsupported_sfp=1,1 LRO=0,0
4. ./pkt-gen -i eth3 -f rx -c 4 -p 4 
   ...
   Receiving from netmap:eth3:24 queues 4 threads and 4 CPUs.
   ... 

What is the expected output? What do you see instead?

I sent 20 M packets exactly ( from another server connected to eth3 via cross 
cable )
When sending operation is finished and pkt-gen main_thread continously reports 
"0 pps" I press "Ctrl+C" and netmap reported 20,4 M packets received. There are 
400K packets received by multiple threads.

In addition, /var/log/messages continously reported "nm_rxsync_prologue kring 
error: hwcur ..." 

What version of the product are you using? On what operating system?

I'm using Oracle Linux. uname -a:
"3.8.13-16.2.1.el6uek.x86_64"

lspci:

24:00.0 Intel Corporation 82599ES 10 Gigabit SFI/SFP Network connection ( rev 
01 )
24:00.1 Intel Corporation 82599ES 10 Gigabit SFI/SFP Network connection ( rev 
01 )

Please provide any additional information below.

There is no problem if I run pkt-gen with only single thread.
A simple question: How can I guarantee such that netmap uses modified driver ? 
If I load ixgbe driver before loading netmap_lin.ko, does netmap run in 
modified driver mode ?  

Original issue reported on code.google.com by [email protected] on 15 Oct 2014 at 2:49

pkt-gen -frx -p8 gets stuck with many "kring error" messages

What steps will reproduce the problem?
1. install two 10Gb NICs, connect them with a patch cord
2. start a receiver: ./pkt-gen -frx -ip4p1 -p8
3. start a transmitter: ./pkt-gen -ftx -ip1p1 -R8000000
4. stop the transmitter
5. stop the receiver

What is the expected output? What do you see instead?
Steady reception of about 8e6 pps is expected.
Instead, the receiver soon starts printing "0 pps" and many "kring error" 
messages are seen with dmesg.
The receiver works just fine with "-p1", the problem only appears with more 
than one thread.

What version of the product are you using? On what operating system?
$ git clone https://code.google.com/p/netmap/
...
$ uname -a
Linux dc.avp.ru 3.14.9-200.fc20.x86_64 #1 SMP Thu Jun 26 21:40:51 UTC 2014 
x86_64 x86_64 x86_64 GNU/Linux

Please provide any additional information below.
$ lspci
...
01:00.0 Ethernet controller: Intel Corporation 82598EB 10-Gigabit AF Network 
Connection (rev 01)
05:00.0 Ethernet controller: Intel Corporation 82598EB 10-Gigabit AF Network 
Connection (rev 01)

Original issue reported on code.google.com by [email protected] on 4 Jul 2014 at 11:43

Attachments:

pkt-gen.c : nmd is copied but not used + multi-queue in pkt-gen

Please directly see this commit :
https://github.com/MappaM/netmap/commit/f2d683633fd16cb80132d2c9da7d9521aea85714

You say "copy, we overwrite ringid" as a comment but you don't use the copy.

So the threaded version of pkt-gen is not working as the nr_ringid is never 
taken into account (it is set in the unused copy).

If I may, I don't understand how we should use the new interface naming 
convention with multiqueue/multithread in pkt-gen. Looking to the code :

if (g->nthreads > 1) {
      if (nmd.req.nr_flags != NR_REG_ALL_NIC) {
            D("invalid nthreads mode %d", nmd.req.nr_flags);
                                continue;
}

The interface parameter should have no suffix to be put in NR_REG_ALL_NIC mode. 
But in that case, the first nm_open() effectively register for all NICs and the 
POLL IN on the "per-queue" threads is never notified.

So my workaround when using pktgen with multi-thread and POLLIN is to use the 
"^" suffix to attach the interface to the host only, and change pkt-gen to 
accept it :
https://github.com/MappaM/netmap/commit/787fe7ccdf2f8a6e9efea3dce10b89ff2fbee9d7


Thanks,
Tom Barbette <[email protected]>

Original issue reported on code.google.com by [email protected] on 22 Apr 2014 at 2:35

LICENSE Information

I'm looking at creating an openembedded recipe for netmap, but I bumped into 
the issue of licensing. Each oe recipe should point to a LICENSE file inside 
the source package, when the licensing type is GPL or BSD.

Our opendataplane project has something similar:
https://git.linaro.org/lng/odp.git/blob/HEAD:/LICENSE

Any chance getting a LICENSE file some time soon?

Original issue reported on code.google.com by [email protected] on 17 Nov 2014 at 2:38

examples/bridge to pass from stack to nic does not work on e1000e

What steps will reproduce the problem?
1. clone repo and checkout commit e0aaedfadb...
2. compile and insert modules
3. compile examples/bridge
4. sudo ./bridge -i eth0

What is the expected output? What do you see instead?
Packets are not passed between the host stack and the interface. I used gdb and 
I could see that nm_ring_space(txring) - in this case the hw ring - always 
returns 0.


What version of the product are you using? On what operating system?
Ubuntu 12.04.3 LTS, kernel 3.5.0-43-generic. I updated to latest but the 
problem can be seen starting from the commit indicate above. My machine is a HP 
ProBook 6560b, intel i3-2350M and an e1000e NIC.


Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 21 Jan 2014 at 6:02

[PATCH] Allow use of pipes in pkt-gen through "-E"

All is in the title I think... It would be great to have a "contribute" address 
or something for Netmap. (Or maybe I didn't find it?).

Maybe it's on purpose but the help for "-e" is missing, you could add at line 
1335 :
        "\t-e buffers       number of extra buffers to allocate\n"
But maybe -e was only for testing purpose...

Tom

---
From: Tom Barbette <[email protected]>
Date: Wed, 3 Dec 2014 14:52:40 +0100
Subject: [PATCH] Allow use of pipes in pkt-gen through "-E"

---
 examples/pkt-gen.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/examples/pkt-gen.c b/examples/pkt-gen.c
index 1b23b79..06d31b6 100644
--- a/examples/pkt-gen.c
+++ b/examples/pkt-gen.c
@@ -199,6 +199,7 @@ struct glob_arg {
    char *nmr_config;
    int dummy_send;
    int virt_header;    /* send also the virt_header */
+   int extra_pipes;    /* goes in nr_arg1 */
    int extra_bufs;     /* goes in nr_arg3 */
 };
 enum dev_type { DEV_NONE, DEV_NETMAP, DEV_PCAP, DEV_TAP };
@@ -1327,9 +1328,10 @@ usage(void)
        "\t-T report_ms     milliseconds between reports\n"
        "\t-P           use libpcap instead of netmap\n"
        "\t-w wait_for_link_time    in seconds\n"
-       "\t-R rate      in packets per second\n"
+       "\t-R rate          in packets per second\n"
        "\t-X           dump payload\n"
-       "\t-H len       add empty virtio-net-header with size 'len'\n"
+       "\t-H len           add empty virtio-net-header with size 'len'\n"
+       "\t-E pipes     allocate extra space for a number of pipes\n"
        "",
        cmd);

@@ -1601,7 +1603,7 @@ main(int arc, char **argv)
    g.virt_header = 0;

    while ( (ch = getopt(arc, argv,
-           "a:f:F:n:i:Il:d:s:D:S:b:c:o:p:T:w:WvR:XC:H:e:m:")) != -1) {
+           "a:f:F:n:i:Il:d:s:D:S:b:c:o:p:T:w:WvR:XC:H:e:E:m:")) != -1) {
        struct sf *fn;

        switch(ch) {
@@ -1735,6 +1737,9 @@ main(int arc, char **argv)
        case 'e': /* extra bufs */
            g.extra_bufs = atoi(optarg);
            break;
+       case 'E':
+           g.extra_pipes = atoi(optarg);
+           break;
        case 'm':
            if (strcmp(optarg, "tx") == 0) {
                g.options |= OPT_MONITOR_TX;
@@ -1823,6 +1828,9 @@ main(int arc, char **argv)
    if (g.extra_bufs) {
        base_nmd.nr_arg3 = g.extra_bufs;
    }
+   if (g.extra_pipes) {
+       base_nmd.nr_arg1 = g.extra_pipes;
+   }

    /*
     * Open the netmap device using nm_open().
-- 
1.9.3

Original issue reported on code.google.com by [email protected] on 3 Dec 2014 at 2:01

Run Netmap in a Fedora VM running in VirtualBox

What steps will reproduce the problem?
1. install Fedora 20
2. install VirtualBox
3. create a VirtualBox Fedora20 VM with 3 vNICs e1000 (Virtual Box vNIC Intel 
PRO/1000 T Server(82543GC), install Xen and try install Netmap from git.
4. install Netmap:
- cd netmap-release/LINUX
- ./configure
- make
Until now, every works well.

What is the expected output? What do you see instead?
I need to load new e1000 driver with "rmmod 1000" and insmod "./e1000/e1000.ko" 
command, but I receive this error:

insmod: ERROR: could not insert module ./e1000/e1000.ko: Unknown symbol in 
module

and dmesg

e1000: Unknown symbol netmap_enable_all_rings (err 0)
e1000: Unknown symbol netmap_reset (err 0)
e1000: Unknown symbol netmap_disable_all_rings (err 0)
e1000: Unknown symbol netmap_detach (err 0)
e1000: Unknown symbol netmap_ring_reinit (err 0)
e1000: Unknown symbol netmap_no_pendintr (err 0)
e1000: Unknown symbol nm_rxsync_prologue (err 0)
e1000: Unknown symbol netmap_rx_irq (err 0)
e1000: Unknown symbol netmap_attach (err 0)


What version of the product are you using? On what operating system?
Fedora20, kernel 3.17.4-200.fc20.x86_64

ethtool -i p2p1
driver:e1000
version: 7.3.21-k8-NAPI


Original issue reported on code.google.com by [email protected] on 12 Dec 2014 at 5:34

Two instances of netmap not working on tcpreplay

What steps will reproduce the problem?
1. compile tcpreplay with netmap capability
2. compile tcpdump with netmap libpcap support
3. try to run both simultaneously

What is the expected output? What do you see instead?
both should work simultaneously

What version of the product are you using? On what operating system?
tcpreplay goes to 100% CPU

Please provide any additional information below.
I am maintainer of Tcpreplay, but have not been able to resolve this. Issue was 
reported here .. https://github.com/appneta/tcpreplay/issues/120. It seems 
similar to https://github.com/appneta/tcpreplay/issues/79

Original issue reported on code.google.com by [email protected] on 15 Aug 2014 at 5:28

make file is saying patches directory does not exist

What steps will reproduce the problem?
1. I am following following Fred Klassens instructions on his Youtube video at 
https://www.youtube.com/watch?v=hswh90iIw9s&list=PLFjjcN5EvTP0Hsxq1AEh7FhvaFH__V
d83&index=2 
2. I am using Ubuntu 14 with Netmap 3ccdadad7d80
3. I extract the tar in my home directory (~).
4. I cd to the netmap directory that is created.
5. I cd to the LINUX directory and run make.
6. I receive a bunch of errors stating that there is no "patch" folder under 
the LINUX directory.
7. When I do the ll command in the LINUX folder I also do not see a "patch" 
folder

What is the expected output? 
As per the youtube, I expected to see the folders created under the LINUX 
folder that contain the patched netmap compatible ethernet drivers.

What do you see instead?
Instead I receive errors that the patch folder does not exist under the LINUX 
folder.

What version of the product are you using? On what operating system?
I am using Ubuntu 14 with Netmap 3ccdadad7d80

Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 14 Aug 2014 at 9:09

Unclear usage of NM_OPEN_NO_MMAP

Doing a search through the repo for NM_OPEN_NO_MMAP I can't find where it is 
actually used. In fact the effect it's supposed to have is determined entirely 
by nr_arg2 in the nm_req structure. As long as the parent desc has the same 
nr_arg2 req.nr_arg2, even 0, the mmap address is used.

This should be revised, it's in the public API and it's confusing.


Original issue reported on code.google.com by [email protected] on 11 Nov 2014 at 1:27

Here a question about netmap old version

We are interested in netmap, netmap is a pioneering work.
In the new year, after update the main page , and change the source repository 
to Google code. 
I can’t find the milestone version from Google code. SO how can I get the old 
version about netmap(like 20131218)? Is there have a link to get them ?

Original issue reported on code.google.com by [email protected] on 19 Feb 2014 at 7:24

build on linux 3.16 error

In file included from /home/sjp/env/c/push/netmap/LINUX/virtio_net.c:148:
/home/sjp/env/c/push/netmap/LINUX/virtio_netmap.h:180: error:
In function ‘virtio_netmap_free_rx_unused_bufs' ‘struct receive_queue' has 
no members
'num'


Original issue reported on code.google.com by [email protected] on 16 Sep 2014 at 3:07

FreeBSD kernel panic

What steps will reproduce the problem?
1. Install FreeBSD 10/amd 64
2. Compile latest netmap module
3. Start bridge example: ./bridge -v -i netmap:igb0 -i netmap:igb1
4. pull out cables from igb0 & igb1, wait 5 seconds and insert cables back
5. repeat stet 4 for 3-4 times
6. try sshing to a FreeBSD box
7. get a kernel panic message 

What is the expected output? What do you see instead?
Kernel panic message

What version of the product are you using? On what operating system?
FreeBSD 10/amd64, latest netmap module gited from 
https://code.google.com/p/netmap

Please provide any additional information below.
Linux netmap on the same box works fine in this situation.


Original issue reported on code.google.com by [email protected] on 24 Jun 2014 at 3:19

Running multiple pkt-gen applications for receiving packets

What steps will reproduce the problem?
1. netmap and ixgbe driver is loaded succesfully.
2. When 40M packets are sent from another server, single pkt-gen application 
can receive packets without packet loss.
3. When I try to run two independant pkt-gen application to receive packets, 
neither one can capture the packets; both capture a few hundred packets.

What is the expected output? What do you see instead?

I expect each pkt-gen to receive its own copy of packets, near 40M packet with 
packet loss. Is there a way to run netmap mechanism such that I can run 
multiple independent pkt-gen applications and each pkt-gen application will 
receive a copy of incoming traffic without interfering others.  

What version of the product are you using? 

A patched version according to the guidance in "ISSUE 23". 

On what operating system?

x86_64 Redhat Linux with 3.8.11 kernel version.

Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 21 Nov 2014 at 7:57

Build netmap fails with CentOS 6.5

What steps will reproduce the problem?
1.git clone netmap on centOS.65
2.proceed to make
3.errors 

What is the expected output? What do you see instead?
make should succeed

What version of the product are you using? On what operating system?
centOS 6.5
last version of netmap from git

Please provide any additional information below.

  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_common.o
/home/devuser/Documents/netmap/LINUX/../sys/dev/netmap/netmap.c: In function 
‘netmap_attach’:
/home/devuser/Documents/netmap/LINUX/../sys/dev/netmap/netmap.c:2689: error: 
‘struct ethtool_ops’ has no member named ‘set_channels’
make[2]: *** [/home/devuser/Documents/netmap/LINUX/netmap_common.o] Error 1
make[1]: *** [_module_/home/devuser/Documents/netmap/LINUX] Error 2
make[1]: Leaving directory 
`/home/devuser/rpmbuild/BUILD/kernel-2.6.32-431.20.3.el6/linux-2.6.32-431.20.3.e
l6.x86_64'
make: *** [netmap] Error 2

Original issue reported on code.google.com by [email protected] on 16 Oct 2014 at 12:04

Is it possible to add support for buffering netmap-libpcap

What steps will reproduce the problem?
1.Currently, netmap-libpcap is not initializing the libpcap buffers using the 
"-B" command if the interface its in netmap mode
2.The buffer itself it interface independent
3.Using buffering can greatly enhance performance when using tcpdump for 
capturing and filtering packets

What is the expected output? What do you see instead?
"-B 2000000" should allocate up to 2GB of memory for PF_PACKET sockets

What version of the product are you using? On what operating system?
netmap - latest master branch (as of 10-27-2014)
netmap-libpcap latest master branch (as of 10-27-2014)

Please provide any additional information below.

I am not terribly familiar with the netmap-libpcap patch, but is it possible to 
add in support for "-B" in netmap mode?

Original issue reported on code.google.com by [email protected] on 27 Oct 2014 at 10:22

kring error: hwcur 17 rcur 17 hwtail 18 head 18 cur 17 tail 18

Hello again!

I run netmap in my linux box with Intel 82599 but hit very strange issue:
/usr/src/netmap/examples/pkt-gen -i eth3 -f rx -p 8
068.342571 main [1624] interface is eth3
068.342807 extract_ip_range [275] range is 10.0.0.1:0 to 10.0.0.1:0
068.342812 extract_ip_range [275] range is 10.1.0.1:0 to 10.1.0.1:0
068.591115 main [1807] mapped 334980KB at 0x7f620e688000
Receiving from netmap:eth3: 8 queues, 8 threads and 1 cpus.
068.591150 main [1887] Wait 2 secs for phy reset
070.591210 main [1889] Ready...
070.591258 nm_open [457] overriding ifname eth3 ringid 0x0 flags 0x1
070.591326 nm_open [457] overriding ifname eth3 ringid 0x0 flags 0x1
070.591349 nm_open [457] overriding ifname eth3 ringid 0x0 flags 0x1
070.591369 nm_open [457] overriding ifname eth3 ringid 0x0 flags 0x1
070.591397 nm_open [457] overriding ifname eth3 ringid 0x0 flags 0x1
070.591424 nm_open [457] overriding ifname eth3 ringid 0x0 flags 0x1
070.591453 nm_open [457] overriding ifname eth3 ringid 0x0 flags 0x1
070.591481 nm_open [457] overriding ifname eth3 ringid 0x0 flags 0x1
071.592511 main_thread [1421] 130833 pps (130964 pkts in 1001004 usec)
072.593532 main_thread [1421] 121625 pps (121749 pkts in 1001020 usec)
073.594558 main_thread [1421] 124048 pps (124175 pkts in 1001027 usec)
074.595584 main_thread [1421] 128057 pps (128188 pkts in 1001026 usec)
075.596594 main_thread [1421] 128582 pps (128712 pkts in 1001010 usec)
076.597607 main_thread [1421] 126655 pps (126783 pkts in 1001013 usec)
077.598497 main_thread [1421] 132176 pps (132294 pkts in 1000890 usec)
078.599508 main_thread [1421] 131634 pps (131767 pkts in 1001010 usec)
079.600521 main_thread [1421] 128732 pps (128863 pkts in 1001014 usec)
080.601544 main_thread [1421] 133364 pps (133500 pkts in 1001023 usec)
081.604340 main_thread [1421] 127227 pps (127583 pkts in 1002796 usec)
082.605351 main_thread [1421] 137244 pps (137383 pkts in 1001011 usec)
083.606365 main_thread [1421] 142815 pps (142960 pkts in 1001013 usec)
084.607385 main_thread [1421] 125526 pps (125654 pkts in 1001021 usec)
085.608397 main_thread [1421] 0 pps (0 pkts in 1001012 usec)
086.609408 main_thread [1421] 0 pps (0 pkts in 1001010 usec)
087.610419 main_thread [1421] 0 pps (0 pkts in 1001011 usec)
088.611431 main_thread [1421] 0 pps (0 pkts in 1001013 usec)
089.612441 main_thread [1421] 0 pps (0 pkts in 1001010 usec)

As you can see from some moment all traffic was dropped (but will exists on 
interface).

And I got following messages in dmesg:
[391294.336358] 139.602658 [1398] netmap_ring_reinit        called for eth3
[391294.346908] 139.613234 [1373] nm_rxsync_prologue        kring error: hwcur 
255 rcur 255 hwtail 256 head 256 cur 255 tail 256
[391294.348009] 139.614342 [1398] netmap_ring_reinit        called for eth3
[391294.356373] 139.622726 [1373] nm_rxsync_prologue        kring error: hwcur 
446 rcur 446 hwtail 448 head 448 cur 446 tail 448
[391294.357458] 139.623817 [1398] netmap_ring_reinit        called for eth3
[391294.370475] 139.636871 [1373] nm_rxsync_prologue        kring error: hwcur 
245 rcur 244 hwtail 245 head 244 cur 244 tail 245
[391294.371550] 139.637950 [1398] netmap_ring_reinit        called for eth3
[391294.383473] 139.649904 [1398] netmap_ring_reinit        called for eth3
[391294.399922] 139.666403 [1398] netmap_ring_reinit        called for eth3
[391294.403495] 139.669983 [1398] netmap_ring_reinit        called for eth3
[391294.407691] 139.674194 [1398] netmap_ring_reinit        called for eth3
[391294.418766] 139.685300 [1398] netmap_ring_reinit        called for eth3
[391295.319042] 140.588149 [1373] nm_rxsync_prologue        kring error: hwcur 
185 rcur 185 hwtail 186 head 186 cur 185 tail 186
[391295.320174] 140.589287 [1398] netmap_ring_reinit        called for eth3
[391295.344051] 140.613228 [1373] nm_rxsync_prologue        kring error: hwcur 
273 rcur 273 hwtail 275 head 275 cur 273 tail 275
[391295.345158] 140.614342 [1398] netmap_ring_reinit        called for eth3
[391295.348072] 140.617259 [1373] nm_rxsync_prologue        kring error: hwcur 
119 rcur 119 hwtail 120 head 120 cur 119 tail 120
[391295.349180] 140.618376 [1398] netmap_ring_reinit        called for eth3
[391295.358263] 140.627483 [1373] nm_rxsync_prologue        kring error: hwcur 
121 rcur 121 hwtail 122 head 122 cur 121 tail 122
[391295.359375] 140.628600 [1398] netmap_ring_reinit        called for eth3
[391295.405420] 140.674772 [1373] nm_rxsync_prologue        kring error: hwcur 
260 rcur 260 hwtail 261 head 261 cur 260 tail 261
[391295.406509] 140.675869 [1398] netmap_ring_reinit        called for eth3
[391295.407519] 140.676881 [1398] netmap_ring_reinit        called for eth3
[391295.407850] 140.677212 [1398] netmap_ring_reinit        called for eth3
[391295.418148] 140.687541 [1398] netmap_ring_reinit        called for eth3
[391295.431216] 140.700645 [1398] netmap_ring_reinit        called for eth3
[391295.440787] 140.710242 [1398] netmap_ring_reinit        called for eth3
[391296.330430] 141.602426 [1373] nm_rxsync_prologue        kring error: hwcur 
408 rcur 408 hwtail 409 head 409 cur 408 tail 409
[391296.331513] 141.603518 [1398] netmap_ring_reinit        called for eth3
[391296.340486] 141.612515 [1373] nm_rxsync_prologue        kring error: hwcur 
372 rcur 372 hwtail 373 head 373 cur 372 tail 373
[391296.341551] 141.613585 [1398] netmap_ring_reinit        called for eth3
[391296.345355] 141.617389 [1373] nm_rxsync_prologue        kring error: hwcur 
434 rcur 434 hwtail 435 head 435 cur 434 tail 435
[391296.346690] 141.618737 [1398] netmap_ring_reinit        called for eth3
[391296.361698] 141.633785 [1373] nm_rxsync_prologue        kring error: hwcur 
118 rcur 118 hwtail 119 head 119 cur 118 tail 119
[391296.362781] 141.634876 [1398] netmap_ring_reinit        called for eth3
[391296.364596] 141.636694 [1373] nm_rxsync_prologue        kring error: hwcur 
229 rcur 229 hwtail 230 head 230 cur 229 tail 230
[391296.365658] 141.637760 [1398] netmap_ring_reinit        called for eth3
[391296.366671] 141.638775 [1398] netmap_ring_reinit        called for eth3
[391296.374807] 141.646933 [1398] netmap_ring_reinit        called for eth3
[391296.395417] 141.667602 [1398] netmap_ring_reinit        called for eth3
[391296.432846] 141.705138 [1398] netmap_ring_reinit        called for eth3
[391296.436222] 141.708524 [1398] netmap_ring_reinit        called for eth3
[391297.309841] 142.584641 [1373] nm_rxsync_prologue        kring error: hwcur 
445 rcur 445 hwtail 446 head 446 cur 445 tail 446
[391297.310885] 142.585691 [1398] netmap_ring_reinit        called for eth3
[391297.354334] 142.629261 [1373] nm_rxsync_prologue        kring error: hwcur 
58 rcur 58 hwtail 59 head 59 cur 58 tail 59
[391297.355512] 142.630444 [1398] netmap_ring_reinit        called for eth3
[391297.379930] 142.654931 [1373] nm_rxsync_prologue        kring error: hwcur 
171 rcur 171 hwtail 173 head 173 cur 171 tail 173
[391297.380997] 142.656002 [1398] netmap_ring_reinit        called for eth3
[391297.382836] 142.657843 [1373] nm_rxsync_prologue        kring error: hwcur 
405 rcur 405 hwtail 406 head 406 cur 405 tail 406
[391297.383946] 142.658959 [1398] netmap_ring_reinit        called for eth3
[391297.386143] 142.661159 [1373] nm_rxsync_prologue        kring error: hwcur 
17 rcur 17 hwtail 18 head 18 cur 17 tail 18
[391297.387224] 142.662248 [1398] netmap_ring_reinit        called for eth3
[391297.388722] 142.663749 [1398] netmap_ring_reinit        called for eth3
[391297.401513] 142.676577 [1398] netmap_ring_reinit        called for eth3
[391297.407089] 142.682168 [1398] netmap_ring_reinit        called for eth3
[391297.410863] 142.685951 [1398] netmap_ring_reinit        called for eth3
[391297.422376] 142.697499 [1398] netmap_ring_reinit        called for eth3

Original issue reported on code.google.com by pavel.odintsov on 29 Oct 2014 at 1:30

netmap_if's size (1096) exceeds its object size (1024)

What steps will reproduce the problem?
1. In a Linux box, Load netmap.ko and ixgbe/ixgbe.ko
2. run 'pkt-gen -i <netif> -f rx'

What is the expected output? What do you see instead?
Rather than normally starting, it failed to run with the kernel message:
[ 1029.613780] 092.131683 [ 501] netmap_obj_malloc         netmap_if request 
size 1096 (objsize=1024) too large

What version of the product are you using? On what operating system?
Using a recent commit as of 04 Nov 2014 (7e9e5e7602f5c620ade)
Linux kernel version 3.14
Ubuntu 12.04 LTS

Please provide any additional information below.
I am actually using it by applying the following patch:
diff --git a/sys/dev/netmap/netmap_mem2.c b/sys/dev/netmap/netmap_mem2.c
index e869bf9..474d06e 100644
--- a/sys/dev/netmap/netmap_mem2.c
+++ b/sys/dev/netmap/netmap_mem2.c
@@ -164,7 +164,7 @@ netmap_mem_get_bufsize(struct netmap_mem_d *nmd)

 struct netmap_obj_params netmap_params[NETMAP_POOLS_NR] = {
        [NETMAP_IF_POOL] = {
-               .size = 1024,
+               .size = 2048,
                .num  = 100,
        },
        [NETMAP_RING_POOL] = {


Original issue reported on code.google.com by [email protected] on 4 Nov 2014 at 5:38

A bug about we use flag NR_REG_ONE_NIC in nm_open()

In file: netmap_user.h:
line: 511.

508        } else if (nr_flags == NR_REG_ONE_NIC) {
509     /* XXX check validity */
510     d->first_tx_ring = d->last_tx_ring =
511     d->first_rx_ring = d->last_rx_ring = nr_ringid;
512 } else { /* pipes */

If we use NETMAP_NO_TX_POLL or/and NETMAP_DO_RX_POLL on nr_ringid, there is an 
error.So, the ring way is:

508        } else if (nr_flags == NR_REG_ONE_NIC) {
509     /* XXX check validity */
510     d->first_tx_ring = d->last_tx_ring =
511     d->first_rx_ring = d->last_rx_ring = (nr_ringid & NETMAP_RING_MASK);
512 } else { /* pipes */

PS: I have sent an email to  rizzo##iet.unipi.it, but there is no any response 
to me. Please reply an email to me(dubingo201##hotmail.com). Thank you.


Original issue reported on code.google.com by [email protected] on 30 Apr 2014 at 2:32

Linux 3.16 build fix

hi, the macro SET_ETHTOOL_OPS was eliminated. Obvious patch follows:

diff --git a/sys/dev/netmap/netmap_kern.h b/sys/dev/netmap/netmap_kern.h
index fd84e70..0c140cd 100644
--- a/sys/dev/netmap/netmap_kern.h
+++ b/sys/dev/netmap/netmap_kern.h
@@ -789,7 +789,7 @@ nm_set_native_flags(struct netmap_adapter *na)
        na->if_transmit = (void *)ifp->netdev_ops;
        ifp->netdev_ops = &((struct netmap_hw_adapter *)na)->nm_ndo;
        ((struct netmap_hw_adapter *)na)->save_ethtool = ifp->ethtool_ops;
-       SET_ETHTOOL_OPS(ifp, &((struct netmap_hw_adapter*)na)->nm_eto);
+       ifp->ethtool_ops = &((struct netmap_hw_adapter*)na)->nm_eto;
 #endif
 }

@@ -803,7 +803,7 @@ nm_clear_native_flags(struct netmap_adapter *na)
        ifp->if_transmit = na->if_transmit;
 #else
        ifp->netdev_ops = (void *)na->if_transmit;
-       SET_ETHTOOL_OPS(ifp, ((struct netmap_hw_adapter*)na)->save_ethtool);
+       ifp->ethtool_ops = ((struct netmap_hw_adapter*)na)->save_ethtool;
 #endif
        na->na_flags &= ~(NAF_NATIVE_ON | NAF_NETMAP_ON);
 #ifdef IFCAP_NETMAP /* or FreeBSD ? */

Original issue reported on code.google.com by [email protected] on 28 Sep 2014 at 1:35

  • Merged into: #18

Randomly nothing works after reboot

What steps will reproduce the problem?
1. Patch FreeBSD 10 kernel with HEAD revision updating:
  * sys/net/netmap.h
  * sys/net/netmap_user.h
  * sys/dev/netmap
  * sys/modules/netmap
  * sys/dev/ixgbe
  * sys/dev/e1000
  * sys/dev/re
2.Make and Make install
3.Reboot system 
4.compile examples folder 

What is the expected output? What do you see instead?

Many times when I reboot system none of the examples (pkt-gen, bridge, etc) 
works. No error is reported but no packets are send or received using pktgen 
and also bridge does not receive any packets. Rebooting many times but this is 
not solved. I must turn of system wait some time until all the capacitors get 
discharged and then start system. 

Nothing irregular found in /var/log/messages or dmesg. Also when this error 
happens tcpdump works fine even when bridge app is running.  


What version of the product are you using? On what operating system?

rev d39c4411a212, FreeBSD 10.0 Release

Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 31 May 2014 at 10:07

Something wrong with Netmap bridge

What steps will reproduce the problem?
1.[sjm@isms examples]./bridge -i netmap:eth0 -i netmap:eth1
now everythings ok.

2.pull out eth1's cable ,then insert it back to eth1.
now the bridge has been broken.

3.then "ifdown eth1" and "ifup eth1",the bridge works well again.


What is the expected output? What do you see instead?
--On FreeBSD, it works well ,when i insert the cable back ,the bridge works fine

What version of the product are you using? On what operating system?
--I think it is the latest version. I download it from here at the day before 
yesterday (Dec. 23 2014)
I use it on Centos 6.5 ,kernel version is 3.0.88.
FreeBSD version is 10.1
My ethernet device is Intel Corporation 82583V Gigabit Network Connection
Drivers are  e1000e(linux) and em(FreeBSD).

Please provide any additional information below.
--When I try to add some debug print,i find a strange thing.
if I add some print code like D("just test"); into the function 
"netmap_common_irq",the bridge works again! But it is unstable,not every packet 
was transmited.

code like this:
2995         } else { /* TX path */
2996                 if (q >= na->num_tx_rings)
2997                         return; // not a physical queue
2998                 kring = na->tx_rings + q;
2999                 na->nm_notify(na, q, NR_TX, 0);
3000         }
3001 //      D("SJM:just test\n");
3002 } /* netmap common irq*/
the file is $SRC/netmap/sys/dev/netmap/netmap.c

Original issue reported on code.google.com by [email protected] on 25 Dec 2014 at 9:28

Netmap on CentOS 7 work abnormally

I installed CentOS 7 in a VMware hypervisor. I used this 
http://wiki.centos.org/HowTos/I_need_the_Kernel_Source link to get the CentOS 
source.
Then when I install netmap, I get 2 errors:

if [ -f patches/diff--virtio_net.c--30800--30b00 ]; then patch --posix --quiet 
--force -p1 < patches/diff--virtio_net.c--30800--30b00; fi
1 out of 7 hunks FAILED -- saving rejects to file virtio_net.c.rej
make: *** [get-virtio_net.c] Error 1

cp -Rp 
/home/liuwf/rpmbuild/BUILD/kernel-3.10.0-123.13.2.el7/linux-3.10.0-123.13.2.el7.
x86_64/drivers/net/ethernet/intel/igb .
if [ -f patches/diff--igb--30800--30b00 ]; then patch --posix --quiet --force 
-p1 < patches/diff--igb--30800--30b00; fi
3 out of 10 hunks FAILED -- saving rejects to file igb/igb_main.c.rej
make: *** [get-igb] Error 1

I removed those two patches and then compiled successfully.

Then I rmmod and insmod the proper modules, the lsmod output is:
e1000                 149676  0 
netmap                114630  1 e1000

When I use 'sudo ./pkt-gen -i ens33 -f rx -v' to test the performance, I get 
this output:
843.396558 main [1649] interface is ens33
843.396886 extract_ip_range [239] extract IP range from 10.0.0.1
843.396918 extract_ip_range [287] range is 10.0.0.1:0 to 10.0.0.1:0
843.396926 extract_ip_range [239] extract IP range from 10.1.0.1
843.396933 extract_ip_range [287] range is 10.1.0.1:0 to 10.1.0.1:0
843.396941 extract_mac_range [295] extract MAC range from 00:00:00:00:00:00
843.396957 extract_mac_range [311] 00:00:00:00:00:00 starts at 0:0:0:0:0:0
843.396967 extract_mac_range [295] extract MAC range from ff:ff:ff:ff:ff:ff
843.396972 extract_mac_range [311] ff:ff:ff:ff:ff:ff starts at ff:ff:ff:ff:ff:ff
860.190305 main [1840] mapped 334980KB at 0x7f13a1b64000
860.190326 main [1860] nifp at offset 0, 1 tx 1 rx region 1
860.190329 main [1864]    TX0 at 0x0x19000 slots 256
860.190332 main [1864]    TX1 at 0x0x22000 slots 256
860.190336 main [1869]    RX0 at 0x0x2b000 slots 256
860.190338 main [1869]    RX1 at 0x0x34000 slots 256
Receiving from netmap:ens33: 1 queues, 1 threads and 1 cpus.
860.190359 main [1926] Wait 2 secs for phy reset
862.190472 main [1928] Ready...
862.190626 nm_open [456] overriding ifname ens33 ringid 0x0 flags 0x1
886.024061 receiver_body [1183] reading from netmap:ens33 fd 4 main_fd 3

then I lost the ssh connection, the dmesg shows:
[  292.869866] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.870083] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.870301] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.870535] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.870756] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.870974] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.871193] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.871427] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.871648] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.871867] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.872085] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.872304] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.872538] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.872767] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.872987] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.873206] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.873448] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.873683] DMA: Out of SW-IOMMU space for 2048 bytes at device 0000:02:01.0
[  292.886834] DMA: Out of SW-IOMMU space for 246 bytes at device 0000:02:00.0
[  292.886945] e1000 0000:02:00.0: TX DMA map failed

Any help will be appreciated.


Original issue reported on code.google.com by [email protected] on 24 Dec 2014 at 4:40

Build failed on linux-3.16 due to SET_ETHTOOL_OPS()

Patch Here (Not sure if compatible with older kernel):
--- sys/dev/netmap/netmap_kern.h.bak    2014-08-18 17:40:02.072733330 +0800
+++ sys/dev/netmap/netmap_kern.h    2014-08-18 17:40:46.040731481 +0800
@@ -789,7 +789,7 @@ nm_set_native_flags(struct netmap_adapte
    na->if_transmit = (void *)ifp->netdev_ops;
    ifp->netdev_ops = &((struct netmap_hw_adapter *)na)->nm_ndo;
    ((struct netmap_hw_adapter *)na)->save_ethtool = ifp->ethtool_ops;
-   SET_ETHTOOL_OPS(ifp, &((struct netmap_hw_adapter*)na)->nm_eto);
+   ifp->ethtool_ops = &((struct netmap_hw_adapter*)na)->nm_eto;
 #endif
 }

@@ -803,7 +803,7 @@ nm_clear_native_flags(struct netmap_adap
    ifp->if_transmit = na->if_transmit;
 #else
    ifp->netdev_ops = (void *)na->if_transmit;
-   SET_ETHTOOL_OPS(ifp, ((struct netmap_hw_adapter*)na)->save_ethtool);
+   ifp->ethtool_ops = ((struct netmap_hw_adapter*)na)->save_ethtool;
 #endif
    na->na_flags &= ~(NAF_NATIVE_ON | NAF_NETMAP_ON);
 #ifdef IFCAP_NETMAP /* or FreeBSD ? */



Original issue reported on code.google.com by [email protected] on 18 Aug 2014 at 9:52

Attachments:

Unable to build master with Linux kernel 3.10.33 (used to work)

What steps will reproduce the problem?
1. Install Linux 3.10.33
2. Clone netmap repository
3. make

What is the expected output? What do you see instead?
build succeeds

What version of the product are you using? On what operating system?
build fails

Please provide any additional information below

fklassen@jltm9-ubuntu:~/git/netmap/LINUX$ make
LIN_VER 30a21
---- Building from /lib/modules/3.10.33-ani05/build/drivers/net/ethernet
---- copying e1000 e1000e forcedeth.c igb ixgbe virtio_net.c ---
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet/nvidia :
    -rw-r--r-- 1 fklassen fklassen 194454 2014-03-06 21:58 forcedeth.c
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet/realtek :
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet/intel :
    drwxr-xr-x 3 fklassen fklassen 4096 2014-08-15 16:38 e1000/
    drwxr-xr-x 4 fklassen fklassen 4096 2014-08-15 16:38 e1000e/
    drwxr-xr-x 2 fklassen fklassen 4096 2014-08-15 16:38 igb/
    drwxr-xr-x 4 fklassen fklassen 4096 2014-08-15 16:38 ixgbe/
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet/broadcom :
    -rw-r--r-- 1 fklassen fklassen 8951 2014-03-06 21:58 cnic_if.h
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet :
  From /lib/modules/3.10.33-ani05/build/drivers/net :
    -rw-r--r-- 1 fklassen fklassen 45068 2014-03-06 21:58 virtio_net.c
** patch with diff--e1000--20620--99999
** patch with diff--e1000e--30900--99999
** patch with diff--forcedeth.c--20626--99999
** patch with diff--igb--30800--30b00
** patch with diff--ixgbe--30a00--99999
** patch with diff--virtio_net.c--30800--30b00
1 out of 7 hunks FAILED -- saving rejects to file virtio_net.c.rej
Building the following drivers: e1000 e1000e forcedeth.c igb ixgbe virtio_net.c
make -C /lib/modules/3.10.33-ani05/build M=/home/fklassen/git/netmap/LINUX 
CONFIG_NETMAP=m CONFIG_E1000=m CONFIG_E1000E=m CONFIG_IXGBE=m CONFIG_IGB=m 
CONFIG_BNX2X=m CONFIG_MLX4=m CONFIG_VIRTIO_NET=m \
        EXTRA_CFLAGS='-I/home/fklassen/git/netmap/LINUX -I/home/fklassen/git/netmap/LINUX/../sys -I/home/fklassen/git/netmap/LINUX/../sys/dev -DCONFIG_NETMAP -Wno-unused-but-set-variable'         \
        O_DRIVERS="e1000/ e1000e/ forcedeth.o igb/ ixgbe/ virtio_net.o" modules
make[1]: Entering directory 
`/home/fklassen/git/pvc-appliance/Appliances/Common64/Kernel-3.10/linux-3.10.33'
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_mem2.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_generic.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_mbq.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_vale.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_offloadings.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_pipe.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_linux.o
  LD [M]  /home/fklassen/git/netmap/LINUX/netmap_lin.o
  CC [M]  /home/fklassen/git/netmap/LINUX/forcedeth.o
  CC [M]  /home/fklassen/git/netmap/LINUX/virtio_net.o
scripts/Makefile.build:473: /home/fklassen/git/netmap/LINUX/e1000/.e1000.o.cmd: 
No such file or directory
make[3]: *** No rule to make target 
`/home/fklassen/git/netmap/LINUX/e1000/.e1000.o.cmd'.  Stop.
make[2]: *** [/home/fklassen/git/netmap/LINUX/e1000] Error 2
make[1]: *** [_module_/home/fklassen/git/netmap/LINUX] Error 2
make[1]: Leaving directory 
`/home/fklassen/git/pvc-appliance/Appliances/Common64/Kernel-3.10/linux-3.10.33'
make: *** [build] Error 2
fklassen@jltm9-ubuntu:~/git/netmap/LINUX$ gcc -v
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 
4.4.3-4ubuntu5.1' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs 
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared 
--enable-multiarch --enable-linker-build-id --with-system-zlib 
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix 
--with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls 
--enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc 
--disable-werror --with-arch-32=i486 --with-tune=generic 
--enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu 
--target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1) 
fklassen@jltm9-ubuntu:~/git/netmap/LINUX$ uname -a
Linux jltm9-ubuntu 3.10.33-ani05 #1 SMP Fri May 23 11:08:23 PDT 2014 x86_64 
GNU/Linux
fklassen@jltm9-ubuntu:~/git/netmap/LINUX$ 


NOTE: this is what I get if I try to build next branch:

fklassen@jltm9-ubuntu:~/git/netmap$ git st
# On branch master
nothing to commit (working directory clean)
fklassen@jltm9-ubuntu:~/git/netmap$ git checkout next
Switched to branch 'next'
fklassen@jltm9-ubuntu:~/git/netmap$ cd LINUX/
fklassen@jltm9-ubuntu:~/git/netmap/LINUX$ make
rm: cannot remove `/home/fklassen/git/netmap/LINUX/patches': No such file or 
directory
LIN_VER 30a21
---- Building from /lib/modules/3.10.33-ani05/build/drivers/net/ethernet
---- copying e1000 e1000e forcedeth.c igb ixgbe virtio_net.c ---
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet/nvidia :
    -rw-r--r-- 1 fklassen fklassen 194454 2014-03-06 21:58 forcedeth.c
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet/realtek :
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet/intel :
    drwxr-xr-x 3 fklassen fklassen 4096 2014-08-15 16:38 e1000/
    drwxr-xr-x 4 fklassen fklassen 4096 2014-08-15 16:38 e1000e/
    drwxr-xr-x 2 fklassen fklassen 4096 2014-08-15 16:38 igb/
    drwxr-xr-x 4 fklassen fklassen 4096 2014-08-15 16:38 ixgbe/
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet/broadcom :
    -rw-r--r-- 1 fklassen fklassen 8951 2014-03-06 21:58 cnic_if.h
  From /lib/modules/3.10.33-ani05/build/drivers/net/ethernet :
  From /lib/modules/3.10.33-ani05/build/drivers/net :
    -rw-r--r-- 1 fklassen fklassen 45068 2014-03-06 21:58 virtio_net.c
** patch with diff--e1000--20620--99999
** patch with diff--e1000e--30900--30f00
** patch with diff--forcedeth.c--20626--99999
** patch with diff--igb--30800--30b00
** patch with diff--ixgbe--30a00--30f00
** patch with diff--virtio_net.c--30800--30b00
1 out of 7 hunks FAILED -- saving rejects to file virtio_net.c.rej
Building the following drivers: e1000 e1000e forcedeth.c igb ixgbe virtio_net.c
make -C /lib/modules/3.10.33-ani05/build M=/home/fklassen/git/netmap/LINUX 
CONFIG_NETMAP=m CONFIG_E1000=m CONFIG_E1000E=m CONFIG_IXGBE=m CONFIG_IGB=m 
CONFIG_BNX2X=m CONFIG_MLX4=m CONFIG_VIRTIO_NET=m \
        EXTRA_CFLAGS='-I/home/fklassen/git/netmap/LINUX -I/home/fklassen/git/netmap/LINUX/../sys -I/home/fklassen/git/netmap/LINUX/../sys/dev -DCONFIG_NETMAP -Wno-unused-but-set-variable'         \
        O_DRIVERS="e1000/ e1000e/ forcedeth.o igb/ ixgbe/ virtio_net.o" modules
make[1]: Entering directory 
`/home/fklassen/git/pvc-appliance/Appliances/Common64/Kernel-3.10/linux-3.10.33'
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_mem2.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_generic.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_mbq.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_vale.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_offloadings.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_pipe.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_monitor.o
  CC [M]  /home/fklassen/git/netmap/LINUX/netmap_linux.o
  LD [M]  /home/fklassen/git/netmap/LINUX/netmap_lin.o
  CC [M]  /home/fklassen/git/netmap/LINUX/forcedeth.o
  CC [M]  /home/fklassen/git/netmap/LINUX/virtio_net.o
In file included from /home/fklassen/git/netmap/LINUX/virtio_net.c:135:
/home/fklassen/git/netmap/LINUX/virtio_netmap.h: In function 
‘virtio_netmap_reg’:
/home/fklassen/git/netmap/LINUX/virtio_netmap.h:197: warning: unused variable 
‘hwna’
At top level:
cc1: warning: unrecognized command line option "-Wno-unused-but-set-variable"
scripts/Makefile.build:473: /home/fklassen/git/netmap/LINUX/e1000/.e1000.o.cmd: 
No such file or directory
make[3]: *** No rule to make target 
`/home/fklassen/git/netmap/LINUX/e1000/.e1000.o.cmd'.  Stop.
make[2]: *** [/home/fklassen/git/netmap/LINUX/e1000] Error 2
make[1]: *** [_module_/home/fklassen/git/netmap/LINUX] Error 2
make[1]: Leaving directory 
`/home/fklassen/git/pvc-appliance/Appliances/Common64/Kernel-3.10/linux-3.10.33'
make: *** [build] Error 2


Original issue reported on code.google.com by [email protected] on 17 Aug 2014 at 3:43

Could not patch drivers for linux-3.15

Trying to build netmap for linux-3.15.3, I got messages about rejected chunks 
in the patches for e1000e and igb. Also, ixgbe_main.c had been messed up and cc 
produced a couple of warnings.

I have cooked new patches for e1000e, igb and ixgbe, and a small mod for 
if_e1000e_netmap.h (e1000e_down() got an extra argument since 3.15).
Hope you'll find them useful.

Original issue reported on code.google.com by [email protected] on 9 Jul 2014 at 11:37

Attachments:

Conflict with Boost Threads, patch provided

Hello, folks!

You use macro define which conflicts with Boost Threads library because you use 
D() name which already used in Boost Threads.

I got follow error:
g++ netmap.cpp -I/usr/src/fastnetmon/tests/netmap_includes -lthread
In file included from /usr/include/boost/smart_ptr/shared_ptr.hpp:32:0,
                 from /usr/include/boost/shared_ptr.hpp:17,
                 from /usr/include/boost/thread/pthread/thread_data.hpp:10,
                 from /usr/include/boost/thread/thread.hpp:17,
                 from /usr/include/boost/thread.hpp:13,
                 from netmap.cpp:8:
/usr/include/boost/smart_ptr/detail/shared_count.hpp: In constructor 
‘boost::detail::shared_count::shared_count(P, 
boost::detail::sp_inplace_tag<D>)’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:164:16: error: expected 
‘;’ before ‘(’ token
/usr/include/boost/smart_ptr/detail/shared_count.hpp: In constructor 
‘boost::detail::shared_count::shared_count(P, 
boost::detail::sp_inplace_tag<D>, A)’:
/usr/include/boost/smart_ptr/detail/shared_count.hpp:250:16: error: expected 
‘;’ before ‘(’ token

I prepared patch for fixing this issue. Please apply it: 
https://raw.githubusercontent.com/FastVPSEestiOu/fastnetmon/master/patches/0001-
Fix-netmap-code-for-compatibility-with-C-boost.patch

Original issue reported on code.google.com by pavel.odintsov on 2 Mar 2015 at 12:56

Kernel oops when trying to open netmap with incrorrect hardware RING number

I have Intel 82599 10GE Nic with 4 hardware queues enabled and Debian 7 Wheezy.

cat /proc/interrupts |grep eth4
  74:  808231153          0          0          0   PCI-MSI-edge      eth4-TxRx-0
  75:        469  906003549          0          0   PCI-MSI-edge      eth4-TxRx-1
  76:        427          0  817517321          0   PCI-MSI-edge      eth4-TxRx-2
  77:        289          0          0 1341880240   PCI-MSI-edge      eth4-TxRx-3
  78:          5        102          0          0   PCI-MSI-edge      eth4

When I try to open incorrect ring id with: netmap@eth4-5 I got bunch of kernel 
errors:

[79384.241993] ixgbe 0000:0a:00.0: eth4: NIC Link is Up 10 Gbps, Flow Control: 
RX/TX
[79384.425352] ixgbe 0000:0d:00.0: eth6: NIC Link is Up 10 Gbps, Flow Control: 
RX/TX
[80285.103007] 360.585717 [1758] netmap_interp_ringid      invalid ring id 4
[80285.301151] BUG: unable to handle kernel NULL pointer dereference at 
0000000000000598
[80285.301198] IP: [<ffffffffa03be12f>] mbq_safe_dequeue+0x54/0x54 [netmap]
[80285.301233] PGD 85d3b9067 PUD 85db31067 PMD 0 
[80285.301267] Oops: 0000 [#1] SMP 
[80285.301296] CPU 0 
[80285.301302] Modules linked in: ixgbe(O) mdio netmap(O) bridge stp 
cpufreq_userspace cpufreq_conservative cpufreq_powersave cpufreq_stats 
binfmt_misc loop snd_pcm snd_page_alloc snd_timer snd iTCO_wdt coretemp 
crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 aes_generic cryptd 
soundcore hpwdt iTCO_vendor_support sb_edac hpilo psmouse serio_raw joydev 
pcspkr button container ioatdma acpi_power_meter edac_core evdev ext4 crc16 
jbd2 mbcache dm_mod mperf 3w_9xxx 3w_xxxx raid10 raid456 async_raid6_recov 
async_memcpy async_pq async_xor xor async_tx raid6_pq raid1 raid0 md_mod ahci 
libahci sata_nv sata_sil sata_via libata usbhid hid sg sd_mod crc_t10dif 
uhci_hcd aacraid scsi_mod thermal ehci_hcd usbcore usb_common igb(O) ptp 
pps_core dca processor thermal_sys [last unloaded: ixgbe]
[80285.309688] 
[80285.309708] Pid: 4155, comm: kipfw Tainted: G           O 3.2.0-4-amd64 #1 
Debian 3.2.63-2+deb7u1 HP ProLiant DL380e Gen8
[80285.309756] RIP: 0010:[<ffffffffa03be12f>]  [<ffffffffa03be12f>] 
mbq_safe_dequeue+0x54/0x54 [netmap]
[80285.309800] RSP: 0018:ffff880857c63e40  EFLAGS: 00010246
[80285.309822] RAX: ffff88085af76780 RBX: 0000000000000598 RCX: 00000000c0000100
[80285.309847] RDX: 0000000000000001 RSI: 0000000000000000 RDI: 0000000000000598
[80285.309872] RBP: 0000000000000000 R08: ffff880857c62000 R09: ffff880859450000
[80285.309896] R10: ffffffff81600000 R11: ffff880859450000 R12: ffff88085c94ad80
[80285.309921] R13: ffff88085c94ad80 R14: ffff88087e6540c0 R15: ffff88085ac16bd0
[80285.309946] FS:  00007f75c07cb700(0000) GS:ffff88087ee00000(0000) 
knlGS:0000000000000000
[80285.309983] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[80285.310006] CR2: 0000000000000598 CR3: 000000083ee35000 CR4: 00000000000406f0
[80285.310031] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[80285.310055] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[80285.310080] Process kipfw (pid: 4155, threadinfo ffff880857c62000, task 
ffff88085af76780)
[80285.310117] Stack:
[80285.310135]  ffffffffa03be170 0000000000000001 ffff88085b00e800 
0000000000000598
[80285.310187]  ffffffffa03c4726 ffff88085db054c0 ffff88085db054c0 
ffff88085b00e800
[80285.310238]  ffffffffa03c3df1 ffffffff81036618 ffffffff8134f64c 
0000000000000246
[80285.310289] Call Trace:
[80285.310311]  [<ffffffffa03be170>] ? __mbq_purge+0x1b/0x2e [netmap]
[80285.310338]  [<ffffffffa03c4726>] ? netmap_hw_krings_delete+0x23/0x36 
[netmap]
[80285.310376]  [<ffffffffa03c3df1>] ? netmap_do_unregif+0x7b/0x100 [netmap]
[80285.310404]  [<ffffffff81036618>] ? should_resched+0x5/0x23
[80285.310431]  [<ffffffff8134f64c>] ? _cond_resched+0x7/0x1c
[80285.310456]  [<ffffffffa03c6786>] ? netmap_dtor_locked+0xf/0x1e [netmap]
[80285.310482]  [<ffffffffa03c67af>] ? netmap_dtor+0x1a/0x47 [netmap]
[80285.310508]  [<ffffffffa03c700d>] ? linux_nm_vi_change_mtu+0x3/0x3 [netmap]
[80285.310534]  [<ffffffffa03c701f>] ? linux_netmap_release+0x12/0x16 [netmap]
[80285.310563]  [<ffffffff810fbf45>] ? fput+0xf9/0x1a1
[80285.310586]  [<ffffffff810f9c70>] ? filp_close+0x62/0x6a
[80285.310609]  [<ffffffff810f9d06>] ? sys_close+0x8e/0xcb
[80285.310635]  [<ffffffff81355a92>] ? system_call_fastpath+0x16/0x1b
[80285.310658] Code: 45 00 75 08 48 c7 45 08 00 00 00 00 ff 4d 10 49 c7 04 24 
00 00 00 00 48 8b 75 20 48 89 df e8 e2 28 f9 e0 5b 5d 4c 89 e0 41 5c c3 <48> 8b 
07 48 85 c0 74 1d 48 8b 10 48 85 d2 48 89 17 75 08 48 c7 
[80285.310973] RIP  [<ffffffffa03be12f>] mbq_safe_dequeue+0x54/0x54 [netmap]
[80285.311003]  RSP <ffff880857c63e40>
[80285.311022] CR2: 0000000000000598
[80285.311427] ---[ end trace b39b220e2fbeae09 ]---
[80285.399608] ixgbe 0000:0a:00.0: eth4: detected SFP+: 3
[80286.208247] ixgbe 0000:0a:00.0: eth4: NIC Link is Up 10 Gbps, Flow Control: 
RX/TX


And my server become crazy and I should reboot it. 

Please add checks about number of rings in user space.

Original issue reported on code.google.com by pavel.odintsov on 5 Mar 2015 at 9:21

question netmap-libpcap timestamp

First, I apologize for double posting for I've posted this question on 
netmap-libpcap. But I decided posted here as there are more contributors on 
this project email list.  

What steps will reproduce the problem?
1.Run tcpdump with netmap mode enabled (with high traffic 10G over 
ixgbe(withnetmap patch))
2.Run tcpdump without netmap (with high traffic 10 over ixgbe)
3.Compare timestamp, under high traffic, netmap mode captured packets exhibits 
signs of "batch timestamp"

What is the expected output? What do you see instead?
Expected timestamp is to be be per packet, it seems netmap is time stamping the 
entire ring buffer with the same value

What version of the product are you using? On what operating system?
OS: Ubuntu 14.04 64bit (3.13.0-36-generic)
netmap git HEAD: 3ccdadad7d80bb1bc569d1f72ba3ece902350f65
netmap-libpcap git HEAD: 0890b993dae48767af172b693f2d664181dbe943
tcpdump: version 4.5.1

Please provide any additional information below.

Below are captured at 10G rate (at 1500 bytes), below is tcpdump without netmap 
(shows micro-level differences between each packet)

14:26:37.475718 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462
14:26:37.475726 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462
14:26:37.475727 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462
14:26:37.475728 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462
14:26:37.475729 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462

However, on the netmap mode capture, groups of packets had the same timestamp

14:15:19.931624 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462
14:15:19.931624 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462
14:15:19.931624 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462
14:15:19.931624 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462
14:15:19.931624 IP 192.85.1.4 > 193.85.1.4:  ip-proto-253 1462


Examining the code, I found this under /bpf/net/netmap_user.h

#define D(_fmt, ...)                                            \
        do {                                                    \
                struct timeval t0;                              \
                gettimeofday(&t0, NULL);                        \
                fprintf(stderr, "%03d.%06d %s [%d] " _fmt "\n", \
                    (int)(t0.tv_sec % 1000), (int)t0.tv_usec,   \
                    __FUNCTION__, __LINE__, ##__VA_ARGS__);     \
        } while (0)

/* Rate limited version of "D", lps indicates how many per second */
#define RD(lps, format, ...)                                    \
    do {                                                        \
        static int t0, __cnt;                                   \
        struct timeval __xxts;                                  \
        gettimeofday(&__xxts, NULL);                            \
        if (t0 != __xxts.tv_sec) {                              \
            t0 = __xxts.tv_sec;                                 \
            __cnt = 0;                                          \
        }                                                       \
        if (__cnt++ < lps) {                                    \
            D(format, ##__VA_ARGS__);                           \
        }                                                       \
    } while (0)
#endif

It seems to be an intended design, but I wanted to check with the netmap team 
on this. The downside of batch timestamping is we are observing out of order 
packets. 

Thank you for looking into this and again I'm sorry for double posting

Original issue reported on code.google.com by [email protected] on 30 Sep 2014 at 7:19

betmap-libpcap crashes with jumbo packets set in "/sys/modules/netmap_lin/parameters/buff_size"

What steps will reproduce the problem?
1. Set "buff_size" to 9000 bytes
echo 9000 >  /sys/module/netmap_lin/parameters/buf_size
2. Launch tcpdump using netmap-libpcap
sudo taskset -c 0  sudo tcpdump -s 0 -nei netmap:eth5 -B 2000000 -w 
/mnt/tmpfs/t.pcap

What is the expected output? What do you see instead?
tcpdump should allow packet capture with jumbo frames. Instead, tcpdump exits 
and the following errors are logged in dmesg

dmesg
[85444.661950] 549.216701 [1518] netmap_set_ringid         eth5: tx [0,12) rx 
[0,12) id 0
[85444.746468] 549.301141 [2466] netmap_reset              eth5 TX0 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.751170] 549.305849 [2466] netmap_reset              eth5 TX1 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.755895] 549.310561 [2466] netmap_reset              eth5 TX2 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.759668] 549.314344 [2466] netmap_reset              eth5 TX3 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.763666] 549.318339 [2466] netmap_reset              eth5 TX4 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.767676] 549.322346 [2466] netmap_reset              eth5 TX5 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.769695] 549.324363 [2466] netmap_reset              eth5 TX6 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.771715] 549.326381 [2466] netmap_reset              eth5 TX7 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.773735] 549.328399 [2466] netmap_reset              eth5 TX8 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.775753] 549.330416 [2466] netmap_reset              eth5 TX9 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.777773] 549.332434 [2466] netmap_reset              eth5 TX10 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.779793] 549.334453 [2466] netmap_reset              eth5 TX11 hwofs 0 -> 
0, hwtail 511 -> 511
[85444.781840] 549.336499 [2466] netmap_reset              eth5 RX0 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.783871] 549.338528 [2466] netmap_reset              eth5 RX1 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.785904] 549.340560 [2466] netmap_reset              eth5 RX2 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.787939] 549.342593 [2466] netmap_reset              eth5 RX3 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.789972] 549.344624 [2466] netmap_reset              eth5 RX4 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.792007] 549.346657 [2466] netmap_reset              eth5 RX5 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.794041] 549.348690 [2466] netmap_reset              eth5 RX6 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.796074] 549.350722 [2466] netmap_reset              eth5 RX7 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.798107] 549.352753 [2466] netmap_reset              eth5 RX8 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.800142] 549.354786 [2466] netmap_reset              eth5 RX9 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.802175] 549.356817 [2466] netmap_reset              eth5 RX10 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.804210] 549.358851 [2466] netmap_reset              eth5 RX11 hwofs 0 -> 
0, hwtail 0 -> 0
[85444.979932] ixgbe 0000:06:00.1 eth5: detected SFP+: 6
[85444.980177] 549.534683 [2516] netmap_common_irq         received TX queue 1
[85445.010700] 549.565183 [2516] netmap_common_irq         received RX queue 1
[85445.039196] 549.593657 [2516] netmap_common_irq         received TX queue 11
[85445.065636] 549.620077 [2516] netmap_common_irq         received RX queue 11
[85445.091867] 549.646287 [2516] netmap_common_irq         received TX queue 0
[85445.185822] tcpdump[3734]: segfault at 17 ip 00007fb9e224d384 sp 
00007fffe8f264e0 error 4 in libpcap.so.1.6.0-PRE-GIT[7fb9e223c000+3f000]
[85445.236048] ixgbe 0000:06:00.1 eth5: NIC Link is Up 10 Gbps, Flow Control: RX
[85445.314795] 549.869041 [ 710] netmap_do_unregif         deleting last 
instance for eth5
[85445.572375] 550.126420 [1362] netmap_mem_global_deref   refcount = 0
[85445.668471] ixgbe 0000:06:00.1 eth5: detected SFP+: 6
[85445.796483] ixgbe 0000:06:00.1 eth5: NIC Link is Up 10 Gbps, Flow Control: RX

What version of the product are you using? On what operating system?
netmap master
netmap-libpcap master
tcpdump 4.6.2
Ubuntu 14.04


Original issue reported on code.google.com by [email protected] on 21 Oct 2014 at 10:17

Can't seem to set to TX/RX slots for modified IXGBE driver (with netmap patch)

What steps will reproduce the problem?
1. Load the netmap enabled IXGBE driver
2. Run the following ethtool commands (no errors from running that)
ethtool -G eth2 rx 32768
ethtool -G eth2 tx 32768

3. Run tcpreplay with netmap enabled (4.0.4)

What is the expected output? What do you see instead?

tcpreplay will hang, see attached for dmesg (with netmap verbose enabled)

What version of the product are you using? On what operating system?
latest netmap, ubuntu 14.04 (ixgbe driver is 3.15.1-k)

I also noticed that ixgbe driver with netmap does not recognize the RSS 
options, is that expected behavior as well?




Original issue reported on code.google.com by [email protected] on 9 Sep 2014 at 6:05

Attachments:

Makefile for Linux-3.14 doesn't find patches (and drivers)

Makefile for Linux-3.14 doesn't find patches (and drivers)

It seems this code doesn't work with linux version 30e04

  cd $(PWD)/patches; ls diff--* | awk -v v=$(LIN_VER) -F -- \
  '{ if ((!$$3 || $$3 <= v) && (!$$4 || v < $$4)) print $$0; }')


In shell:

ls diff--* | awk -v v=30e04 -F -- '{ if ((!$3 || $3 <= v) && (!$4 || v < $4)) 
print $0; }'

returns nothing

Original issue reported on code.google.com by [email protected] on 17 Jun 2014 at 3:41

Extremely big system load

Hello!

I tried to run pktget in receive mode on small loaded link with about 150 kpps 
and was amazed by extremely big server load

pkt-gen -i eth3 -f rx -p 8

Please look at atatched image.

Maybe this issue related with broken patch ixgbe which I patched manually? If 
it possible please check this code: 
https://github.com/pavel-odintsov/ixgbe-linux-netmap/blob/master/ixgbe_main.c

I run PF_RING on same server with same load but it eat many times smaller 
resources.

Thank you!

Original issue reported on code.google.com by pavel.odintsov on 29 Oct 2014 at 1:35

Attachments:

netmap crash on ubuntu 14.04 after weeks of continuous use

What steps will reproduce the problem?
1.Run tcpreplay (4.0.5) using netmap and ixgbe continuously
2.Issue could take a long time (weeks) to reproduce
3.Eventually, stack traces can be seen in syslog, any applications invoking 
netmap would hang

What is the expected output? What do you see instead?


What version of the product are you using? On what operating system?
OS: Ubuntu 14.04
Netmap: latest primary repo

Please provide any additional information below.

Stack trace attached 

Original issue reported on code.google.com by [email protected] on 5 Jan 2015 at 11:44

Attachments:

Can't build ixgbe driver for Debian 7 Wheezy

Hello, folks!

I trying to use netmap but can't build it on my system.


Build netmap on Debian 7 Wheezy with ixgbe 10GE NIC (82599):

Get kernel sources:
cd /usr/src
apt-get source  linux-image-3.2.0-4-amd64
cd /usr/src/linux-3.2.65

cd /usr/src
git clone https://code.google.com/p/netmap/ 
cd netmap/LINUX/

./configure --kernel-sources=/usr/src/linux-3.2.65 --drivers=ixgbe
make
make install

Load modules:
insmod ./netmap.ko 
insmod ixgbe/ixgbe.ko

And we got error in dmesg:
[  903.973212] ixgbe: Unknown symbol mdio_mii_ioctl (err 0)
[  903.973564] ixgbe: Unknown symbol mdio45_probe (err 0)

Could you help me?

Original issue reported on code.google.com by pavel.odintsov on 2 Mar 2015 at 3:37

get-drivers: awk fails to detect hex numbers

What steps will reproduce the problem?
This happened when trying to compile netmap for linux-3.14.21.

What is the expected output? What do you see instead?
I was expecting to get patched drivers, because there are patches that have 
upper number 99999. Instead make prints:

LIN_VER 30e15
-- NO DRIVERS --


What version of the product are you using? On what operating system?
I'm using latest netmap, commit 3ccdada on Ubuntu 13.10 with linux-3.14.21. 
I've installed kernel image and headers from here:
http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.14.21-utopic/

I took the kernel source from kernel.org because Ubuntu doesn't have specific 
patches for this kernel version:
https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.21.tar.xz


Please provide any additional information below.

I installed the deb images and started Ubuntu 13.10 with kernel 3.14.21, 
everything works fine from what I can see. I build netmap with:
make SRC=<path_to_extracted_3.14.21_sources>

The problem seems to be with awk thinking that 30exx is a number in scientific 
notation. Take this example:
echo 30e03 99999 | awk '{ print ($1 < $2) ? "true" : "false" }'
prints true
echo 30e04 99999 | awk '{ print ($1 < $2) ? "true" : "false" }'
prints false

To fix this I used the patch attached, which basically adds "0x" in front of 
the numbers to let awk know they are hex numbers.

Original issue reported on code.google.com by [email protected] on 28 Oct 2014 at 2:05

Attachments:

get in touch

is very hard to get in touch with netmap creator/developers, but i'm very 
interested to know and work with, if is possible we can chat about something.

Thanks

Ivan 
[email protected]

Original issue reported on code.google.com by [email protected] on 11 Mar 2015 at 4:55

Problems installing Netmap on ARM (Nvidia Jetson TK1)

I'm trying to install Netmap on my Nvidia Jetson TK1 Development kit. It uses 
an Nvidia Tegra k1 SoC (4 core cortex A15 arm) and are running Ubuntu 12.04. 
The problem is that I can't run make in netmap/LINUX without errors...

What steps will reproduce the problem?
1.Buy NVIDIA jetson TK1
2.Download kernel source
3.cd netmap_dir/LINUX
4../configure
make

What is the expected output? What do you see instead?
Expectation is that the build should succeed.

First error i get is this:
make -C /lib/modules/3.10.40netmap/build M=/home/ubuntu/netmap/LINUX 
EXTRA_CFLAGS='-I/home/ubuntu/netmap/LINUX -I/home/ubuntu/netmap/LINUX 
-I/home/ubuntu/netmap/LINUX/../sys -I/home/ubuntu/netmap/LINUX/../sys/dev 
-DCONFIG_NETMAP -Wno-unused-but-set-variable -DCONFIG_NETMAP_GENERIC 
-DCONFIG_NETMAP_MONITOR -DCONFIG_NETMAP_PIPE -DCONFIG_NETMAP_VALE'  modules 
CONFIG_NETMAP=m
make[1]: Entering directory `/usr/src/kernel'
  CC [M]  /home/ubuntu/netmap/LINUX/netmap_mem2.o
/home/ubuntu/netmap/LINUX/../sys/dev/netmap/netmap_mem2.c: In function 
‘netmap_reset_obj_allocator’:
/home/ubuntu/netmap/LINUX/../sys/dev/netmap/netmap_mem2.c:750:3: error: 
implicit declaration of function ‘vfree’ 
[-Werror=implicit-function-declaration]
...

This can be fixed by simply adding #include <linux/vmalloc.h> in 
/sys/dev/netmap/netmap_mem2.c
But then i get this error instead:

make
make -C /lib/modules/3.10.40netmap/build M=/home/ubuntu/netmap/LINUX 
EXTRA_CFLAGS='-I/home/ubuntu/netmap/LINUX -I/home/ubuntu/netmap/LINUX 
-I/home/ubuntu/netmap/LINUX/../sys -I/home/ubuntu/netmap/LINUX/../sys/dev 
-DCONFIG_NETMAP -Wno-unused-but-set-variable -DCONFIG_NETMAP_GENERIC 
-DCONFIG_NETMAP_MONITOR -DCONFIG_NETMAP_PIPE -DCONFIG_NETMAP_VALE'  modules 
CONFIG_NETMAP=m
make[1]: Entering directory `/usr/src/kernel'
  CC [M]  /home/ubuntu/netmap/LINUX/netmap_mem2.o
  CC [M]  /home/ubuntu/netmap/LINUX/netmap_mbq.o
  CC [M]  /home/ubuntu/netmap/LINUX/netmap_vale.o
/home/ubuntu/netmap/LINUX/../sys/dev/netmap/netmap_vale.c: In function 
‘nm_find_bridge’:
/home/ubuntu/netmap/LINUX/../sys/dev/netmap/netmap_vale.c:350:3: error: 
implicit declaration of function ‘NM_BNS_GET’ 
[-Werror=implicit-function-declaration]
   NM_BNS_GET(b);
...

This seems to be an macro in netmap/LINUX/bsd_glue.h that isn't defined unless 
there is an "#define CONFIG_NET_NS" somewhere. I tried to put that row in 
netmap_vale.c but it seems to brake other things and probably isn't a good 
solution anyway...

What version of the product are you using? On what operating system?
Whatever verion you get when doing a git clone 17 February 2015 
Ubuntu 12.04 (Linux for Tegra release 21.2)
Linux kernel 3.10.40


Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 20 Feb 2015 at 1:18

Examples fail to compile, patch attached

What steps will reproduce the problem?
1. Clone current source.
2. Go to examples.
3. Run `make`

What is the expected output? What do you see instead?
I expect examples to compile, instead I get a build error.

What version of the product are you using? On what operating system?
Linux, latest master

Patch is attached, it was unused `min` function in one of the examples.


Original issue reported on code.google.com by [email protected] on 25 Feb 2014 at 2:20

Attachments:

netmap_if request size 1208 too large with ixgbe

Hello!

I tried to use netmap for my tool https://github.com/FastVPSEestiOu/fastnetmon 
but I can't run netmap on my server.

Debian 7 with 3.2.0-4-amd64

I tried with upstream ixgbe driver, patch it (partly manually) and run.

And after this I run it:
modprobe ixgbe RSS=1
insmod /usr/src/netmap/LINUX/netmap_lin.ko

But when I run test tool:
./pkt-gen -i eth3

And got error:
[386328.259539] 159.325204 [1049] netmap_mem_global_config  reconfiguring
[386328.294497] 159.360262 [ 385] netmap_obj_malloc         netmap_if request 
size 1208 too large
[386328.295880] 159.361649 [ 753] generic_netmap_dtor       Restored native NA  
         (null)

This error was fixed by ifconfig eth3 up but can't you add sanity checks and 
more understandable error message for this case?

Original issue reported on code.google.com by pavel.odintsov on 29 Oct 2014 at 12:14

wrong information in README.images

I want to follow the steps
in https://code.google.com/p/netmap/source/browse/README.images,
but failed to follow it:
1. I downloaded 20131019-tinycore-netmap.hdd, dd it into my usb and booted it.
2. I cannot find the vale-ctl command, cannot run kvm command
3. and l2* commands and pkt-gen are also cannot be found
4. the netperf software which is said to be installed, cannot be found either.


I am very upset about the information in the README.images


could you please tell me where I can get a running image?

regards
Yong sheng gong


Original issue reported on code.google.com by [email protected] on 4 Mar 2014 at 9:33

P2NMD discards const qualifier from pointer target type

What steps will reproduce the problem?
1. Open examples/GNUMakefile
2. Add -Werror=cast-qual to CFLAGS
3. make bridge

What is the expected output? What do you see instead?

I get:

cc -O2 -pipe -Werror -Wall -Wunused-function -Werror=cast-qual -I ../sys  
-Wextra -DNO_PCAP   -c -o bridge.o bridge.c
In file included from bridge.c:14:0:
../sys/net/netmap_user.h: In function ‘nm_open’:
../sys/net/netmap_user.h:234:20: error: cast discards 
‘__attribute__((const))’ qualifier from pointer target type 
[-Werror=cast-qual]
 #define P2NMD(p)  ((struct nm_desc *)(p))



What version of the product are you using? On what operating system?

I'm using v11.1, but the issue has been present for a while it seems.

Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 30 Oct 2014 at 10:07

running netmap-libpcap linked tcpdump slows pkt-gen and drops packets

What steps will reproduce the problem?
1. Ubuntu 3.13.0-32 x64 virtual machine running on ESXi 5.5, which is running 
on a Dell R720 with a 2 port Intel X540-AT2 10Gig network card directly 
attached to the VM with DirectPath I/O.

2. I have git cloned netmap and netmap-libpcap and built both successfully. 
Downloaded tcpdump-4.6.2 and linked it to the netmap-libpcap, verified by:
./tcpdump -V
tcpdump version 4.6.2
libpcap version 1.6.0-PRE-GIT_2015_02_19

I have turned off flow control with:

ethtool -A eth1 autoneg off rx off
ethtool -A eth2 autoneg off rx off

3. In 1 terminal I run: 

./pkt-gen -i eth1 -f tx -l 60 -S <mac of eth1> -D <mac of eth2> -n 500111222

In another terminal I run:

./tcpdump -ni eth2 -s 0 -w test.cap

What is the expected output? What do you see instead?

pkt-gen output averages around 7Mpps. During pkt-gen sending packets I 
terminate the tcpdump process, and pkt-gen output changes to around 12Mpps 
(around the limit for the ixgbe driver as I understand).  The output of the 
cancelled tcpdump command states lots of packets dropped by kernel and lots of 
packets dropped by interface.

I would expect, for tcpdump linked with netmap-libpcap to drop minimal or no 
packets.
Any help gratefully received.

Please provide any additional information below.

I run top during this process and pkt-gen cpu usage goes between 10-50%, 
tcpdump is constantly around 70%.

Original issue reported on code.google.com by [email protected] on 19 Feb 2015 at 8:11

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.