using netmap

Sami Halabi sodynet1 at gmail.com
Thu Apr 25 21:48:37 UTC 2013


Okay,
i figured out the includes, now it runs and seg faults:

root at fbsd1:~/netmap # ./n
Starting...
em0 registered...
sysctl passed
mem mapped...
nifp mapped...32766
rx ring def...
rx ring start...
Segmentation fault (core dumped)
root at 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 at gmail.com> wrote:

>
>
>
> On Mon, Apr 15, 2013 at 7:52 PM, Sami Halabi <sodynet1 at 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 at 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 at 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 at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-net
>> To unsubscribe, send any mail to "freebsd-net-unsubscribe at 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


More information about the freebsd-net mailing list