macaddr (-m) option - vx32 - Local 9vx git repository for patches.
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
 (DIR) commit 9e086303c1fae2dfbe462be68343963432fa11ba
 (DIR) parent e559b5801c363a77ddd45dbf9189ef4d6544ce90
 (HTM) Author: Jesus Galan Lopez (yiyus) <yiyu.jgl@gmail.com>
       Date:   Fri,  4 Jun 2010 01:07:52 +0200
       
       macaddr (-m) option
       
       Diffstat:
         src/9vx/etherve.c                   |      25 +++++++++++++++++++++++--
       
       1 file changed, 23 insertions(+), 2 deletions(-)
       ---
 (DIR) diff --git a/src/9vx/etherve.c b/src/9vx/etherve.c
       @@ -21,6 +21,7 @@
        
        #include <pcap.h>
        
       +extern        char        *macaddr;
        extern        char        *netdev;
        static        uvlong        txerrs;
        
       @@ -29,10 +30,29 @@ struct Ctlr {
                pcap_t        *pd;
        };
        
       +static uchar ea[6] = {0x00, 0x48, 0x01, 0x23, 0x45, 0x67};
       +
       +static int
       +eafrom(char *ma)
       +{
       +        int i;
       +        char **nc = &ma;
       +
       +        for(i = 0; i < 6; i++){
       +                if(!ma)
       +                        return -1;
       +                ea[i] = (uchar)strtoul(ma, nc, 16);
       +                ma = *nc+1;
       +        }
       +        return 0;
       +}
       +
        static pcap_t *
        setup(void)
        {
                char        *filter = "ether dst 00:48:01:23:45:67";        /* XXX */
       +        if(macaddr)
       +                *filter = sprintf("ether dst %s", macaddr);        /* XXX */
                char        errbuf[PCAP_ERRBUF_SIZE];
                pcap_t        *pd;
                struct bpf_program prog;
       @@ -45,6 +65,9 @@ setup(void)
                if ((pd = pcap_open_live(netdev, 1514, 1, 1, errbuf)) == nil)
                        return nil;
        
       +        if (macaddr && (eafrom(macaddr) == -1))
       +                panic("cannot read mac address");
       +
                pcap_lookupnet(netdev, &net, &mask, errbuf);
                pcap_compile(pd, &prog, filter, 0, net);
        
       @@ -125,8 +148,6 @@ veattach(Ether* e)
                kproc("verecv", verecvkproc, e);
        }
        
       -static uchar ea[6] = {0x00, 0x48, 0x01, 0x23, 0x45, 0x67};
       -
        static int
        vepnp(Ether* e)
        {