[oe-commits] Armin Kuster : netmap: add new package

git at git.openembedded.org git at git.openembedded.org
Thu Sep 17 15:04:51 UTC 2015


Module: meta-openembedded.git
Branch: master-next
Commit: 1692d5c3020434404fc1ee6911a60b88287a5efb
URL:    http://git.openembedded.org/?p=meta-openembedded.git&a=commit;h=1692d5c3020434404fc1ee6911a60b88287a5efb

Author: Armin Kuster <akuster at mvista.com>
Date:   Sun Aug  9 05:56:30 2015 +0530

netmap: add new package

this adds netmap, the fast packet I/O framework
http://info.iet.unipi.it/~luigi/netmap/

    - updated to latest version to get kernel 4.1 support
    - fixed printf type issue
    - Fixed manual config options

Signed-off-by: Armin Kuster <akuster at mvista.com>
Signed-off-by: Martin Jansa <Martin.Jansa at gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald at mentor.com>

---

 ...1-testmmap-fix-compile-issue-with-gcc-5.x.patch | 33 ++++++++
 .../netmap/files/makefile_fixup.patch              | 97 ++++++++++++++++++++++
 .../recipes-kernel/netmap/netmap-modules_git.bb    | 57 +++++++++++++
 meta-networking/recipes-kernel/netmap/netmap.inc   | 17 ++++
 .../recipes-kernel/netmap/netmap_git.bb            | 35 ++++++++
 5 files changed, 239 insertions(+)

diff --git a/meta-networking/recipes-kernel/netmap/files/0001-testmmap-fix-compile-issue-with-gcc-5.x.patch b/meta-networking/recipes-kernel/netmap/files/0001-testmmap-fix-compile-issue-with-gcc-5.x.patch
new file mode 100644
index 0000000..ea36b1c
--- /dev/null
+++ b/meta-networking/recipes-kernel/netmap/files/0001-testmmap-fix-compile-issue-with-gcc-5.x.patch
@@ -0,0 +1,33 @@
+Upstream-Status: Pending
+
+From c81bf54d6eb870286662a11d3b4a994717c47696 Mon Sep 17 00:00:00 2001
+From: Armin Kuster <akuster808 at gmail.com>
+Date: Tue, 8 Sep 2015 05:36:27 -0700
+Subject: [PATCH] testmmap: fix compile issue with gcc 5.x
+
+this fixes:
+examples/testmmap.c:540:10: error: format '%ld' expects argument of type 'long int', but argument 3 has type 'ssize_t {aka const int}' [-Werror=format=]
+|    printf("ring_ofs[%d] %ld\n", i, nifp->ring_ofs[i]);
+|           ^
+
+Signed-off-by: Armin Kuster <akuster808 at gmail.com>
+---
+ examples/testmmap.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/examples/testmmap.c b/examples/testmmap.c
+index d7f6acc..934489a 100644
+--- a/examples/testmmap.c
++++ b/examples/testmmap.c
+@@ -537,7 +537,7 @@ do_if()
+ 	for (i = 0; i < 5; i++)
+ 		printf("spare1[%d]  %u\n", i, nifp->ni_spare1[i]);
+ 	for (i = 0; i < (nifp->ni_tx_rings + nifp->ni_rx_rings + 2); i++)
+-		printf("ring_ofs[%d] %ld\n", i, nifp->ring_ofs[i]);
++		printf("ring_ofs[%d] %zd\n", i, nifp->ring_ofs[i]);
+ }
+ 
+ struct netmap_ring *
+-- 
+2.3.5
+
diff --git a/meta-networking/recipes-kernel/netmap/files/makefile_fixup.patch b/meta-networking/recipes-kernel/netmap/files/makefile_fixup.patch
new file mode 100644
index 0000000..b050bf0
--- /dev/null
+++ b/meta-networking/recipes-kernel/netmap/files/makefile_fixup.patch
@@ -0,0 +1,97 @@
+The makefile assumes building locally.
+
+Upstream Status: Inappropriate [Native]
+
+The configure is not auto-make based
+
+Signed-of-by: Armin Kuster <akuster at mvista.com>
+
+Index: LINUX/netmap.mak.in
+===================================================================
+--- a/LINUX/netmap.mak.in
++++ b/LINUX/netmap.mak.in
+@@ -12,10 +12,9 @@ SRCDIR:=@SRCDIR@
+ # The following commands are needed to build the modules as out-of-tree,
+ # in fact the kernel sources path must be specified.
+ 
+-PWD ?= $(CURDIR)
+ 
+ # Additional compile flags (e.g. header location)
+-EXTRA_CFLAGS := -I$(PWD) -I$(SRCDIR) -I$(SRCDIR)/../sys -I$(SRCDIR)/../sys/dev -DCONFIG_NETMAP
++EXTRA_CFLAGS := -I$(SRCDIR) -I$(SRCDIR)/../sys -I$(SRCDIR)/../sys/dev -DCONFIG_NETMAP
+ EXTRA_CFLAGS += -Wno-unused-but-set-variable
+ EXTRA_CFLAGS += $(foreach s,$(SUBSYS),-DCONFIG_NETMAP_$(shell echo $s|tr a-z- A-Z_))
+ 
+Index: LINUX/configure
+===================================================================
+--- a/LINUX/configure
++++ b/LINUX/configure
+@@ -349,52 +349,6 @@ reset_tests() {
+ 	EOF
+ }
+ 
+-# run_tests: run all accumulated tests and exec the pertinent
+-#   success/failure actions for each one.
+-run_tests() {
+-	local t= 	# prevent -EOF to eat the make TAB
+-	cat > $TMPDIR/Makefile <<-EOF
+-		ifneq (\$(KERNELRELEASE),)
+-		obj-m := $TESTOBJS
+-		else
+-		S_DRIVERS := $(drv print)
+-		all: \$(S_DRIVERS:%=get-%)
+-		$t	\$(MAKE) -C $ksrc M=\$\$PWD $kopts
+-
+-		-include $TOPDIR/drivers.mak
+-	EOF
+-	for d in $(drv print); do
+-		cat >> $TMPDIR/Makefile <<-EOF
+-			get-$d:
+-			$t	[ -z "\$($d-src)" ] || cp -Rp \$($d-src) \$(if \$($d-dst),\$($d-dst),.)
+-			$t	touch get-$d
+-		EOF
+-	done
+-	echo endif >> $TMPDIR/Makefile
+-	{
+-		cat <<-EOF
+-##############################################################################
+-## BEGIN RUNNING TESTS: $(date)
+-##############################################################################
+-## Makefile:
+-		EOF
+-		cat $TMPDIR/Makefile
+-		cat <<-EOF
+-##############################################################################
+-		EOF
+-	} >> config.log
+-	(
+-		cd $TMPDIR
+-		make -k -j $(grep -c processor /proc/cpuinfo)
+-	) >> config.log
+-	eval "$TESTPOSTPROC"
+-	cat >> config.log <<-EOF
+-##############################################################################
+-## END RUNNING TESTS: $(date)
+-##############################################################################
+-	EOF
+-}
+-
+ configh=netmap_linux_config.h
+ # succes/failure actions are expected to write some macros
+ # in netma_linux_config.h. The following functions can be
+@@ -619,7 +573,6 @@ configuration. Please check 'config.log'
+ reset_tests
+ rm -f drivers.mak
+ add_test true broken_buildsystem < /dev/null
+-run_tests
+ 
+ drvname2config() {
+ 	local name=$1
+@@ -1280,7 +1233,6 @@ cat > $configh <<-EOF
+ EOF
+ 
+ # the TESTPOSTPROC script will add macros to $configh
+-run_tests
+ 
+ define DRIVER_SUFFIX \"$drvsuffix\"
+ 
diff --git a/meta-networking/recipes-kernel/netmap/netmap-modules_git.bb b/meta-networking/recipes-kernel/netmap/netmap-modules_git.bb
new file mode 100644
index 0000000..f9ac9cc
--- /dev/null
+++ b/meta-networking/recipes-kernel/netmap/netmap-modules_git.bb
@@ -0,0 +1,57 @@
+require netmap.inc
+
+DEPENDS = "virtual/kernel"
+do_configure[depends] += "virtual/kernel:do_shared_workdir"
+
+inherit module
+
+CLEANBROKEN = "1"
+
+export INSTALL_MOD_DIR="kernel/netmap-modules"
+
+EXTRA_OECONF = "--kernel-dir=${STAGING_KERNEL_BUILDDIR} \
+                --kernel-sources=${STAGING_KERNEL_DIR} \
+                --install-mod-path=${D} \
+                --driver-suffix="-netmap" \
+                "
+
+LDFLAGS := "${@'${LDFLAGS}'.replace('-Wl,-O1', '')}"
+LDFLAGS := "${@'${LDFLAGS}'.replace('-Wl,--as-needed', '')}"
+
+do_configure () {
+    cd ${S}/LINUX
+    ./configure ${EXTRA_OECONF}
+}
+
+do_configure_append () {
+    cat >>  ${S}/LINUX/netmap_linux_config.h <<EOF
+#define NETMAP_LINUX_HAVE_HRTIMER_MODE_REL
+#define NETMAP_LINUX_HAVE_HRTIMER_FORWARD_NOW
+#define NETMAP_LINUX_HAVE_PHYS_ADDR_T
+#define NETMAP_LINUX_HAVE_ACCESS_ONCE
+#define NETMAP_LINUX_HAVE_NETDEV_OPS
+#define NETMAP_LINUX_ALLOC_NETDEV_4ARGS
+#define NETMAP_LINUX_HAVE_INIT_NET
+#define NETMAP_LINUX_HAVE_LIVE_ADDR_CHANGE
+#define NETMAP_LINUX_HAVE_TX_SKB_SHARING
+#define NETMAP_LINUX_HAVE_UNLOCKED_IOCTL
+#define NETMAP_LINUX_HAVE_PERNET_OPS_ID
+#define NETMAP_LINUX_VIRTIO_FUNCTIONS
+#define NETMAP_LINUX_VIRTIO_FREE_PAGES
+#define NETMAP_LINUX_VIRTIO_GET_VRSIZE
+#define NETMAP_LINUX_TIMER_RTYPE enum hrtimer_restart
+#define NETMAP_LINUX_VIRTIO_MULTI_QUEUE
+#define NETMAP_LINUX_HAVE_E1000E_EXT_RXDESC
+#define NETMAP_LINUX_HAVE_E1000E_DOWN2
+EOF
+}
+
+do_compile () {
+    cd ${S}/LINUX
+    oe_runmake
+}
+
+do_install () {
+    cd ${S}/LINUX
+    oe_runmake install
+}
diff --git a/meta-networking/recipes-kernel/netmap/netmap.inc b/meta-networking/recipes-kernel/netmap/netmap.inc
new file mode 100644
index 0000000..ab33e76
--- /dev/null
+++ b/meta-networking/recipes-kernel/netmap/netmap.inc
@@ -0,0 +1,17 @@
+SUMMARY = "netmap and VALE - very fast packet I/O from userspace (FreeBSD/Linux)"
+DESCRIPTION= "NETMAP is a framework for very fast packet I/O from userspace.  VALE is an equally fast in-kernel software switch using the netmap API.  Both are implemented as a single kernel module for FreeBSD and Linux, and can deal with line rate on real or emulated 10 Gbit ports."
+SECTION = "networking"
+HOMEPAGE = "http://code.google.com/p/netmap/"
+LICENSE = "GPLv2+"
+
+LIC_FILES_CHKSUM = "file://README;beginline=13;endline=14;md5=56ae0b9c7ba0476ab9098de94c2714d6"
+
+SRCREV = "da9e19e69b84e4f6f8ae125f8d01b42a4abade6a"
+PV = "master+git${SRCPV}"
+
+SRC_URI = "git://github.com/luigirizzo/netmap.git"
+SRC_URI += "file://makefile_fixup.patch"
+
+S = "${WORKDIR}/git"
+
+COMPATIBLE_HOST = '(x86_64|i.86|mips|arm).*-linux'
diff --git a/meta-networking/recipes-kernel/netmap/netmap_git.bb b/meta-networking/recipes-kernel/netmap/netmap_git.bb
new file mode 100644
index 0000000..f15a626
--- /dev/null
+++ b/meta-networking/recipes-kernel/netmap/netmap_git.bb
@@ -0,0 +1,35 @@
+require netmap.inc
+
+DEPENDS = "netmap-modules"
+
+EXTRA_OECONF = "--kernel-dir=${STAGING_KERNEL_BUILDDIR} \
+                --kernel-sources=${STAGING_KERNEL_DIR} \
+                --no-drivers \
+                --disable-generic \
+                --prefix=${prefix} \
+                --destdir=${D} \
+                --cc='${CC}' \
+                --ld='${LD}' \
+                "
+SRC_URI += "file://0001-testmmap-fix-compile-issue-with-gcc-5.x.patch"
+
+do_fetch[depends] += "netmap-modules:do_fetch"
+
+do_configure () {
+    cd ${S}/LINUX
+    ./configure ${EXTRA_OECONF}
+}
+
+do_compile () {
+    cd ${S}/LINUX
+    make apps
+}
+
+do_install () {
+    cd ${S}/LINUX
+    make install-apps DESTDIR=${D}
+}
+
+FILES_${PN} += "${bindir}"
+RDEPENDS_${PN} = "kernel-module-netmap"
+RRECOMMENDS_${PN} = "kernel-module-netmap"



More information about the Openembedded-commits mailing list