Thank you. I've started using pkt-gen in virtualbox, 2 machines singlwe core-i7 3612QM core, with em cards internal. I see that the sender send about 950 kpps but the receiver is far less (around 200kpps max). Any suggestions why this?
Sami On Apr 26, 2013 11:23 AM, "Luigi Rizzo" <ri...@iet.unipi.it> wrote: > On Fri, Apr 26, 2013 at 09:23:35AM +0300, Sami Halabi wrote: > > Hi Eitan, > > Thank your for your response. > > the ioctl is the example was in Luigi netmap page... maybe Luigi can help > > here??????? > > the thing i suggest is take the pkt-gen source from the FreeBSD tree > > tools/tools/netmap/ > > and start modifying that one. The samples on my web page are > 2 years old, and probably wrong in various ways even then. > They were meant to be something to put on a slide, so a lot of > details were missing. pkt-gen.c, on the other hand, is supposed > to build and be usable. > > As others pointed out, the snippets of code you posted have a lot > of very basic programming errors which suggest that the problems > you are seeing are not related to netmap. > > Of course we may be wrong, but the odds are against you, > so it is better to start from something known-working. > > Try to build your code with "cc -O2 -Wall -Werror" so the > compiler will find at least the most egregious bugs > and abort the compilation until you fix them. > > cheers > luigi > > > can you say why the print's are wrong? > > > > > > i fetched wrking headers from other tools without too much checking, > maybe > > some > > are irrelevant but for my tests i didn't worry about it yet, so here is > it: > > =================================================== > > #include <errno.h> > > #include <signal.h> /* signal */ > > #include <stdlib.h> > > #include <stdio.h> > > #include <inttypes.h> /* PRI* macros */ > > #include <string.h> /* strcmp */ > > #include <fcntl.h> /* open */ > > #include <unistd.h> /* close */ > > #include <ifaddrs.h> /* getifaddrs */ > > > > #include <sys/mman.h> /* PROT_* */ > > #include <sys/ioctl.h> /* ioctl */ > > #include <sys/poll.h> > > #include <sys/socket.h> /* sockaddr.. */ > > #include <arpa/inet.h> /* ntohs */ > > #include <sys/param.h> > > #include <sys/sysctl.h> /* sysctl */ > > #include <sys/time.h> /* timersub */ > > > > #include <net/ethernet.h> > > #include <net/if.h> /* ifreq */ > > > > #include <netinet/in.h> > > #include <netinet/ip.h> > > #include <netinet/udp.h> > > > > #include <net/netmap.h> > > #include <net/netmap_user.h> > > > > #ifndef MY_PCAP /* use the system's pcap if available */ > > > > #ifdef NO_PCAP > > #define PCAP_ERRBUF_SIZE 512 > > typedef void pcap_t; > > struct pcap_pkthdr; > > #define pcap_inject(a,b,c) ((void)a, (void)b, (void)c, -1) > > #define pcap_dispatch(a, b, c, d) (void)c > > #define pcap_open_live(a, b, c, d, e) ((void)e, NULL) > > #else /* !NO_PCAP */ > > #include <pcap/pcap.h> // XXX do we need it ? > > #endif /* !NO_PCAP */ > > > > #endif // XXX hack > > > > #include <pthread.h> /* pthread_* */ > > #include <sys/endian.h> /* le64toh */ > > #include <machine/param.h> > > > > #include <pthread_np.h> /* pthread w/ affinity */ > > #include <sys/cpuset.h> /* cpu_set */ > > #include <net/if_dl.h> /* LLADDR */ > > =================================================== > > > > > > Thanks in advance, > > Sami > > > > > > On Fri, Apr 26, 2013 at 6:43 AM, Eitan Adler <li...@eitanadler.com> > wrote: > > > > > [ please bottom post or reply inline ] > > > > > > On 25 April 2013 17:48, Sami Halabi <sodyn...@gmail.com> wrote: > > > > Okay, > > > > i figured out the includes, now it runs and seg faults: > > > > > > Don't forget to show the working headers ;) > > > > > > > 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 > > > > > > is req fully initialized? > > > > > > I don't think this ioctl is correct. Everything goes wrong after this > > > as a result. > > > > > > > printf("sysctl passed\n"); > > > > > > Things will not always crash if you make a wrong call. Try checking > > > return codes before printing something like this. > > > > > > > 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); > > > > > > this seems wrong: ^^ ^^^^^^ > > > > > > > > > > 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); > > > > > > I think this is wrong. > > > > > > > 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); > > > > > > Also this. > > > > > > > ring->cur = NETMAP_RING_NEXT(ring, i); > > > > } > > > > } > > > > > > > > return 0; > > > > } > > > > > > > > > > > > -- > > > Eitan Adler > > > > > > > > > > > -- > > 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-unsubscr...@freebsd.org" > _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"