5 17b19538 2008-07-24 rsc #include <u.h>
6 17b19538 2008-07-24 rsc #include <libc.h>
7 17b19538 2008-07-24 rsc #include <ip.h>
8 17b19538 2008-07-24 rsc #include "dat.h"
9 17b19538 2008-07-24 rsc #include "protos.h"
16 17b19538 2008-07-24 rsc OuiEther = 0,
17 17b19538 2008-07-24 rsc OuiCisco = 0xc,
18 17b19538 2008-07-24 rsc OuiCisco90 = 0xf8,
19 17b19538 2008-07-24 rsc OuiRfc2684 = 0x80c2,
20 17b19538 2008-07-24 rsc OuiAppletalk = 0x80007,
23 17b19538 2008-07-24 rsc static Mux p_mux[] =
25 17b19538 2008-07-24 rsc {"ip", 0x0800, } ,
26 17b19538 2008-07-24 rsc {"arp", 0x0806, } ,
27 17b19538 2008-07-24 rsc {"rarp", 0x0806, } ,
28 17b19538 2008-07-24 rsc {"ip6", 0x86dd, } ,
29 17b19538 2008-07-24 rsc {"pppoe_disc", 0x8863, },
30 17b19538 2008-07-24 rsc {"pppoe_sess", 0x8864, },
31 17b19538 2008-07-24 rsc {"eapol", 0x888e, },
35 17b19538 2008-07-24 rsc typedef struct Hdr Hdr;
38 17b19538 2008-07-24 rsc uchar org[3];
42 17b19538 2008-07-24 rsc static Field p_fields[] =
44 17b19538 2008-07-24 rsc { "org", Fnum, Oorg, "org" },
45 17b19538 2008-07-24 rsc { "et", Fnum, Oet, "et" },
50 17b19538 2008-07-24 rsc p_compile(Filter *f)
54 17b19538 2008-07-24 rsc if(f->op == '='){
55 17b19538 2008-07-24 rsc compile_cmp(snap.name, f, p_fields);
58 17b19538 2008-07-24 rsc for(m = p_mux; m->name != nil; m++){
59 17b19538 2008-07-24 rsc if(strcmp(f->s, m->name) == 0){
60 17b19538 2008-07-24 rsc f->pr = m->pr;
61 17b19538 2008-07-24 rsc f->ulv = m->val;
62 17b19538 2008-07-24 rsc f->subop = Oet;
66 17b19538 2008-07-24 rsc sysfatal("unknown snap field or protocol: %s", f->s);
70 17b19538 2008-07-24 rsc p_filter(Filter *f, Msg *m)
74 17b19538 2008-07-24 rsc if(m->pe - m->ps < sizeof(Hdr))
76 17b19538 2008-07-24 rsc h = (Hdr*)m->ps;
78 17b19538 2008-07-24 rsc switch(f->subop){
80 17b19538 2008-07-24 rsc return f->ulv == Net3(h->org);
82 17b19538 2008-07-24 rsc return f->ulv == NetS(h->et);
88 17b19538 2008-07-24 rsc p_seprint(Msg *m)
92 17b19538 2008-07-24 rsc if(m->pe - m->ps < sizeof(Hdr))
94 17b19538 2008-07-24 rsc h = (Hdr*)m->ps;
96 17b19538 2008-07-24 rsc demux(p_mux, NetS(h->et), NetS(h->et), m, &dump);
98 17b19538 2008-07-24 rsc m->p = seprint(m->p, m->e, "org=%06x et=%04x", Net3(h->org), NetS(h->et));
102 17b19538 2008-07-24 rsc Proto snap =
111 17b19538 2008-07-24 rsc defaultframer