Signed-off-by: Ciprian Barbu <[email protected]> --- platform/linux-netmap/README | 22 +++++++++++++--------- platform/linux-netmap/odp_packet_netmap.c | 7 +++++-- platform/linux-netmap/odp_packet_netmap.h | 4 ++-- 3 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/platform/linux-netmap/README b/platform/linux-netmap/README index 64ee3bd..5148091 100644 --- a/platform/linux-netmap/README +++ b/platform/linux-netmap/README @@ -25,20 +25,18 @@ at runtime. 2.1 Building netmap -------------------- -Netmap is currently hosted on https://code.google.com/p/netmap/ but -ODP only works at this point with netmap API version 10 so you will need -a specific revision of netmap. +Netmap is currently hosted on https://code.google.com/p/netmap/ git clone https://code.google.com/p/netmap/ cd netmap - git reset --hard 1f462ef + git co v11.1 Netmap consists of a core kernel module (netmap_lin.ko) and optional modified device drivers. Netmap builds as an out-of-tree kernel module, you need matching kernel sources to compile it. General build instructions can be found in the packet README: -http://code.google.com/p/netmap/source/browse/README +https://code.google.com/p/netmap/source/browse/LINUX/README 2.1.1 Building netmap on Ubuntu with stock kernel @@ -56,12 +54,14 @@ You will need to locate it and extract it to a convenient place. Now compile netmap: cd LINUX - make SRC=<path_to_kernel_source> + ./configure --kernel-sources=<path_to_kernel_src> + make 2.1.2 Building netmap for kernel built from sources cd LINUX - make KSRC=<path_to_kernel_source> + ./configure --kernel-dir=<path_to_kernel_tree> + make 2.2 Building ODP ---------------- @@ -69,13 +69,17 @@ Now compile netmap: The default platform is linux-netmap, if you want linux-generic you need to specify it to configure --with-platform. +ODP works with the latest release version of netmap, which is currently at API +version 11.1. There is one problem though, the default CFLAGS that ODP is built +with contains -Werror=cast-qual. A temporary fix would be to disable this flag. + The --with-sdk-install-path can be used to point to the netmap sources. ./bootstrap - ./configure + ./configure CFLAGS='-Wno-cast-qual' or - ./configure --with-sdk-install-path=<netmap> + ./configure --with-sdk-install-path=<netmap> CFLAGS='-Wno-cast-qual' To configure ODP for linux-generic: ./configure --with-platform=linux-generic diff --git a/platform/linux-netmap/odp_packet_netmap.c b/platform/linux-netmap/odp_packet_netmap.c index 6b9b120..2e35aec 100644 --- a/platform/linux-netmap/odp_packet_netmap.c +++ b/platform/linux-netmap/odp_packet_netmap.c @@ -142,8 +142,11 @@ int setup_pkt_netmap(pkt_netmap_t * const pkt_nm, const char *netdev, else ringid = nm_params->ringid; - strncpy(pkt_nm->ifname, netdev, sizeof(pkt_nm->ifname)); - snprintf(ifname, sizeof(ifname), "netmap:%s", netdev); + snprintf(pkt_nm->ifname, sizeof(pkt_nm->ifname), "%s", netdev); + if (nm_params->netmap_mode == ODP_NETMAP_RING_SW) + snprintf(ifname, sizeof(ifname), "netmap:%s^", netdev); + else + snprintf(ifname, sizeof(ifname), "netmap:%s", netdev); pkt_nm->nm_desc = nm_open(ifname, NULL, ringid, 0); if (pkt_nm->nm_desc == NULL) { diff --git a/platform/linux-netmap/odp_packet_netmap.h b/platform/linux-netmap/odp_packet_netmap.h index 4b66d3d..4334b9e 100644 --- a/platform/linux-netmap/odp_packet_netmap.h +++ b/platform/linux-netmap/odp_packet_netmap.h @@ -32,14 +32,14 @@ typedef struct { size_t frame_offset; /**< frame start offset from start of pkt buf */ size_t buf_size; /**< size of buffer payload in 'pool' */ int netmap_mode; - struct nm_desc_t *nm_desc; + struct nm_desc *nm_desc; uint32_t begin; uint32_t end; struct netmap_ring *rxring; struct netmap_ring *txring; odp_queue_t tx_access; /* Used for exclusive access to send packets */ uint32_t if_flags; - char ifname[32]; + char ifname[IFNAMSIZ]; } pkt_netmap_t; /** -- 1.8.3.2 _______________________________________________ lng-odp mailing list [email protected] http://lists.linaro.org/mailman/listinfo/lng-odp
