Date: Fri, 26 Apr 2013 00:48:36 +0300 From: Sami Halabi <sodynet1@gmail.com> To: Andreas Nilsson <andrnils@gmail.com> Cc: "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>, Luigi Rizzo <rizzo@iet.unipi.it> Subject: Re: using netmap Message-ID: <CAEW%2BogZo7Se1CcGz%2BXwK5v80ns0vrUif=WTwNwTGxv2jVaY1=Q@mail.gmail.com> In-Reply-To: <CAPS9%2BSufmM7MM2wVs6hM8xipEess2PB3t-i39_S1XUo7aCosEA@mail.gmail.com> References: <CAEW%2BogbOG1E8i88v%2B9ChJGHbstx6JQXMg82cEPqbbFvfDztM4A@mail.gmail.com> <CAPS9%2BSufmM7MM2wVs6hM8xipEess2PB3t-i39_S1XUo7aCosEA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Okay, i figured out the includes, now it runs and seg faults: root@fbsd1:~/netmap # ./n Starting... em0 registered... sysctl passed mem mapped... nifp mapped...32766 rx ring def... rx ring start... Segmentation fault (core dumped) root@fbsd1:~/netmap # so apparently it faults at the initialization ring = NETMAP_RXRING(nifp, 0); any ideas? here is the new code: int main() { struct netmap_if *nifp = NULL; struct nmreq req; int i, len, fd; char *buf, *mem, *txt; printf("Starting...\n"); fd = open("/dev/netmap", 0); strcpy(req.nr_name, "em0"); // register the interface printf("em0 registered...\n"); ioctl(fd, NIOCREGIF, &req); // offset of the structure printf("sysctl passed\n"); mem = mmap(NULL, req.nr_memsize, PROT_READ|PROT_WRITE, 0, fd, 0); printf("mem mapped...\n"); nifp = NETMAP_IF(mem, req.nr_offset); printf("nifp mapped...%u\n",(long)nifp); for (;;) { struct pollfd x[1]; printf("rx ring def...\n"); struct netmap_ring *ring; printf("rx ring start...\n"); ring = NETMAP_RXRING(nifp, 0); printf("rx ring polled...\n"); x[0].fd = fd; x[0].events = POLLIN; poll(x, 1, 1000); for ( ; ring->avail > 0 ; ring->avail--) { i = ring->cur; printf("i=%d\n",&i); buf = NETMAP_BUF(ring, i); printf("buff read...\n"); //use_data(buf, ring->slot[i].len); txt = malloc(sizeof(char) * ring->slot[i].len +1); strncpy(txt,buf,ring->slot[i].len); txt[ring->slot[i].len]='\0'; printf("len is: %d\n",&ring->slot[i].len); ring->cur = NETMAP_RING_NEXT(ring, i); } } return 0; } On Mon, Apr 15, 2013 at 9:15 PM, Andreas Nilsson <andrnils@gmail.com> wrote: > > > > On Mon, Apr 15, 2013 at 7:52 PM, Sami Halabi <sodynet1@gmail.com> wrote: > >> Hi, >> I would like to start using netmap. >> >> as a start i copied the example from netmap >> <http://info.iet.unipi.it/~luigi/netmap/>page: >> >> #include <stdio.h> >> #include <stdlib.h> >> #include <net/netmap_user.h> >> #include <net/netmap.h> >> >> int main() { >> >> struct netmap_if *nifp; >> struct nmreq req; >> int i, len; >> char *buf; >> FILE* fd; >> >> fd = open("/dev/netmap", 0); >> strcpy(req.nr_name, "em1"); // register the interface >> ioctl(fd, NIOCREG, &req); // offset of the structure >> mem = mmap(NULL, req.nr_memsize, PROT_READ|PROT_WRITE, 0, fd, 0); >> nifp = NETMAP_IF(mem, req.nr_offset); >> for (;;) { >> struct pollfd x[1]; >> struct netmap_ring *ring = NETMAP_RX_RING(nifp, 0); >> >> x[0].fd = fd; >> x[0].events = POLLIN; >> poll(x, 1, 1000); >> for ( ; ring->avail > 0 ; ring->avail--) { >> i = ring->cur; >> buf = NETMAP_BUF(ring, i); >> use_data(buf, ring->slot[i].len); >> ring->cur = NETMAP_NEXT(ring, i); >> } >> } >> >> return 0; >> } >> >> >> and tried to compile: >> root@fbsd1:~/netmap # gcc -O2 -pipe -Werror -Wall -I ../sys -Wextra -c >> n.c >> In file included from n.c:4: >> /usr/include/net/netmap.h:139: error: expected specifier-qualifier-list >> before 'uint32_t' >> /usr/include/net/netmap.h:228: error: expected ':', ',', ';', '}' or >> '__attribute__' before 'num_slots' >> /usr/include/net/netmap.h:255: error: 'IFNAMSIZ' undeclared here (not in a >> function) >> /usr/include/net/netmap.h:256: error: expected ':', ',', ';', '}' or >> '__attribute__' before 'ni_version' >> /usr/include/net/netmap.h:292: error: expected specifier-qualifier-list >> before 'uint32_t' >> cc1: warnings being treated as errors >> n.c: In function 'main': >> n.c:14: warning: implicit declaration of function 'open' >> n.c:14: warning: assignment makes pointer from integer without a cast >> n.c:15: warning: implicit declaration of function 'strcpy' >> n.c:15: warning: incompatible implicit declaration of built-in function >> 'strcpy' >> n.c:16: warning: implicit declaration of function 'ioctl' >> n.c:16: error: 'NIOCREG' undeclared (first use in this function) >> n.c:16: error: (Each undeclared identifier is reported only once >> n.c:16: error: for each function it appears in.) >> n.c:17: error: 'mem' undeclared (first use in this function) >> n.c:17: error: 'struct nmreq' has no member named 'nr_memsize' >> n.c:17: error: 'PROT_READ' undeclared (first use in this function) >> n.c:17: error: 'PROT_WRITE' undeclared (first use in this function) >> n.c:17: warning: passing argument 5 of 'mmap' makes integer from pointer >> without a cast >> n.c:18: error: 'struct nmreq' has no member named 'nr_offset' >> n.c:20: error: array type has incomplete element type >> n.c:21: warning: implicit declaration of function 'NETMAP_RX_RING' >> n.c:21: warning: initialization makes pointer from integer without a cast >> n.c:24: error: 'POLLIN' undeclared (first use in this function) >> n.c:25: warning: implicit declaration of function 'poll' >> n.c:26: error: 'struct netmap_ring' has no member named 'avail' >> n.c:26: error: 'struct netmap_ring' has no member named 'avail' >> n.c:27: error: 'struct netmap_ring' has no member named 'cur' >> n.c:28: error: 'struct netmap_ring' has no member named 'nr_buf_size' >> n.c:29: warning: implicit declaration of function 'use_data' >> n.c:29: error: 'struct netmap_ring' has no member named 'slot' >> n.c:30: error: 'struct netmap_ring' has no member named 'cur' >> n.c:30: warning: implicit declaration of function 'NETMAP_NEXT' >> n.c:20: warning: unused variable 'x' >> n.c:10: warning: unused variable 'len' >> root@fbsd1:~/netmap # >> >> >> can you help me figure it out? >> >> Thanks in advance, >> >> -- >> Sami Halabi >> Information Systems Engineer >> NMS Projects Expert >> FreeBSD SysAdmin Expert >> _______________________________________________ >> freebsd-net@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-net >> To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" >> > > Hello Sami, > > First, I'm by no means an expert on NETMAP, but the url you provided says > that it's a snapshot, not a ready progam. There are a few fully working > examples in tools/tools/netmap/ subdir of at least 9-STABLE and 10-CURRENT. > Maybe you can find an example to start with there instead? > > Quite a few of the errors are from regular syscalls, and each of them have > a manpage that says which files to include, and compiling stuff with > -Werror assumes you can deal with "picky" compilers. > > Hope you come up with a working example. > > Best regards > Andreas > -- Sami Halabi Information Systems Engineer NMS Projects Expert FreeBSD SysAdmin Expert
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAEW%2BogZo7Se1CcGz%2BXwK5v80ns0vrUif=WTwNwTGxv2jVaY1=Q>