[email protected]
[Top] [All Lists]

PERFORCE change 113925 for review

Subject: PERFORCE change 113925 for review
From: "Christian S.J. Peron"
Date: Fri, 2 Feb 2007 23:09:01 GMT
http://perforce.freebsd.org/chv.cgi?CH=113925

Change 113925 by [email protected]_rnd01 on 2007/02/02 23:08:41

        Import testing for new zero copy model

Affected files ...

.. //depot/projects/zcopybpf/utils/bpfnull/bpfnull.c#6 edit

Differences ...

==== //depot/projects/zcopybpf/utils/bpfnull/bpfnull.c#6 (text+ko) ====

@@ -23,6 +23,7 @@
 #include <signal.h>
 #include <err.h>
 #include <pcap.h>
+#include <assert.h>
 
 int            bpf_open(void);
 void           usage(void);
@@ -37,7 +38,14 @@
 static int              wflag;
 static int              vflag;
 static int              zflag;
+static u_char          *bufa, *bufb;
 
+static int
+handle_int(int sig __unused)
+{
+       exit(0);
+}
+
 static void
 bpf_init_dumpfile(void)
 {
@@ -53,16 +61,22 @@
 }
 
 static void
-bpf_process_packets(struct bpf_zbuf *bz)
+bpf_process_packets(struct bpf_zbuf *bz, char *bufname)
 {
        struct pcap_pkthdr phd;
        int clen, hlen;
-       u_char *bp, *ep, *p;
+       u_char *b,*bp, *ep, *p;
+       int i;
 #define bhp ((struct bpf_hdr *)bp)
 
-       bp = bz->bz_bufa;
+       b = bp = bz->bz_bufa;
        ep = bp + bz->bz_buflen;
+       i = 0;
        while (bp < ep) {
+               i++;
+               if (vflag)
+               fprintf(stderr, "%s %d clen=%i hlen=%d dlen=%d bp=%lu pd=%lu 
ep=%lu %lu bytes away from eob %lu bytes into buffer\n",
+                   bufname, i, clen, hlen, bhp->bh_datalen, bp, (u_char *)bp + 
hlen, ep, ep - bp, bp - b);
                clen = bhp->bh_caplen;
                hlen = bhp->bh_hdrlen;
                p = (u_char *)bp + hlen;
@@ -85,6 +99,8 @@
        struct bpf_zbuf bz;
        char *pbuf;
        int n;
+       struct bpf_zbuf_header *bzha, *bzhb;
+       int d;
 
        pbuf = malloc(bflag + 1);
        if (pbuf == NULL)
@@ -93,10 +109,14 @@
         for (;;) {
                r_set = s_set;
                n = select(fd + 1, &r_set, NULL, NULL, NULL);
-               if (n < 0)
+               if (n < 0) {
+                       fprintf(stderr,"owned by select\n");
                        err(1, "select failed");
-               if (!FD_ISSET(fd, &r_set))
+               }
+               if (!FD_ISSET(fd, &r_set)) {
+                       fprintf(stderr, "FD is NOT set\n");
                        continue;
+               }
                if (vflag)
                        (void) fprintf(stderr,
                            "DEBUG: wokeup and bpf is ready to read from\n");
@@ -106,25 +126,31 @@
                                err(1, "read failed");
                        bz.bz_bufa = pbuf;
                        bz.bz_buflen = n;
-               } else
-                       if (ioctl(fd, BIOCGETZNEXT, &bz) < 0)
-                               err(1, "ioctl(BIOCGETZNEXT)");
-               if (wflag)
-                       bpf_process_packets(&bz);
-               if (zflag == 0)
-                       continue;
-               if (ioctl(fd, BIOCACKZBUF, &bz) < 0)
-                       err(1, "ioctl(BIOCACKZBUF)");
+                       if (wflag)
+                               bpf_process_packets(&bz, "W");
+               } else {
+                       bzha = (struct bpf_zbuf_header *)bufa;
+                       bzhb = (struct bpf_zbuf_header *)bufb;
+                       if (bzha->bzh_kernel_gen > bzha->bzh_user_gen) {
+                               bz.bz_bufa = bufa;
+                               bz.bz_bufa += sizeof(struct bpf_zbuf_header);
+                               bz.bz_buflen = bzha->bzh_kernel_len;
+                               if (wflag)
+                                       bpf_process_packets(&bz, "A");
+                               bzha->bzh_user_gen++;
+                       } 
+                       if (bzhb->bzh_kernel_gen > bzhb->bzh_user_gen) {
+                               bz.bz_bufa = bufb;
+                               bz.bz_bufa += sizeof(struct bpf_zbuf_header);
+                               bz.bz_buflen = bzhb->bzh_kernel_len;
+                               if (wflag)
+                                       bpf_process_packets(&bz, "B");
+                               bzhb->bzh_user_gen++;
+                       }
+               }
         }
 }
 
-void *
-handle_int(int sig __unused)
-{
-
-       exit(0);
-}
-
 int
 bpf_open(void)
 {
@@ -154,7 +180,6 @@
 static int
 bpf_zbuf_init(int fd, struct bpf_zbuf *bz)
 {
-       u_char *bufa, *bufb;
        int bmode;
 
        if ((bflag % getpagesize()) != 0)
@@ -166,7 +191,7 @@
                err(1, "mmap(bufa)");
        bufb = mmap(NULL, bz->bz_buflen, PROT_READ | PROT_WRITE,
            MAP_ANON, -1, 0);
-       if (bufa == MAP_FAILED)
+       if (bufb == MAP_FAILED)
                err(1, "mmap(bufb)");
        bz->bz_bufa = bufa;
        bz->bz_bufb = bufb;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/p4-projects
To unsubscribe, send any mail to "[email protected]"

<Prev in Thread] Current Thread [Next in Thread>
  • PERFORCE change 113925 for review, Christian S.J. Peron <=