Hi Eitan,
Thank your for your response.
the ioctl is the example was in Luigi netmap page... maybe Luigi can help
here???????

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"

Reply via email to