From owner-freebsd-net@FreeBSD.ORG Mon Apr 15 18:15:51 2013 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id D33D12C6 for ; Mon, 15 Apr 2013 18:15:51 +0000 (UTC) (envelope-from andrnils@gmail.com) Received: from mail-ob0-x229.google.com (mail-ob0-x229.google.com [IPv6:2607:f8b0:4003:c01::229]) by mx1.freebsd.org (Postfix) with ESMTP id A0F7611FD for ; Mon, 15 Apr 2013 18:15:51 +0000 (UTC) Received: by mail-ob0-f169.google.com with SMTP id ta14so1136435obb.14 for ; Mon, 15 Apr 2013 11:15:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=JzpUJDYqDbVz87Qym7fIy/WDya009wh2Ej3JKgJaZ18=; b=F7O1emhIchS1vhvhQoYW1osRFpKMoK1A69Nrjul6J5uisCznVg6zhMc+s3m4odKxmB ptTUwiDXJJKlGl6GdzOTPoQeziYUKoCT8S2kbIcvshm4L8E2jGh50Ga0AjvhkmSFSrwl Era/DnP1DV5ed935ZQl3VIFQ2jkFDAObgGACzgSbhrmLtvf6QaB5ySCjEhY1mKLkOH1E Q5TjpbcB7ugL8rGBkEATV7UtshaW9VILX/kVotqoYhFdYBGStDEe528tu+RhDNeei9TS 0SeG7cv0oRUH/07XTjc4zs0GwSU8IcUIbzRWfmr6MVVzabI5ZnYqbPQpchinVW6LSVsY 8tUg== MIME-Version: 1.0 X-Received: by 10.60.76.234 with SMTP id n10mr7862907oew.63.1366049751156; Mon, 15 Apr 2013 11:15:51 -0700 (PDT) Received: by 10.76.122.81 with HTTP; Mon, 15 Apr 2013 11:15:51 -0700 (PDT) In-Reply-To: References: Date: Mon, 15 Apr 2013 20:15:51 +0200 Message-ID: Subject: Re: using netmap From: Andreas Nilsson To: Sami Halabi Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 Cc: "freebsd-net@freebsd.org" , Luigi Rizzo X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Apr 2013 18:15:51 -0000 On Mon, Apr 15, 2013 at 7:52 PM, Sami Halabi wrote: > Hi, > I would like to start using netmap. > > as a start i copied the example from netmap > page: > #include > #include > #include > #include > > 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