]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/nusb/ether/dat.h
nusb/ether: fix ethertype filtering
[plan9front.git] / sys / src / cmd / nusb / ether / dat.h
1 typedef struct Block Block;
2 struct Block
3 {
4         Block   *next;
5
6         uchar   *rp;
7         uchar   *wp;
8         uchar   *lim;
9
10         uchar   base[];
11 };
12
13 #define BLEN(s) ((s)->wp - (s)->rp)
14
15 Block*  allocb(int size);
16 Block*  copyblock(Block*, int);
17 #define freeb(b) free(b)
18
19 enum {
20         Eaddrlen=       6,
21         ETHERHDRSIZE=   14,             /* size of an ethernet header */
22         Maxpkt=         2000,
23 };
24
25 typedef struct Macent Macent;
26 struct Macent
27 {
28         uchar   ea[Eaddrlen];
29         ushort  port;
30 };
31
32 typedef struct Etherpkt Etherpkt;
33 struct Etherpkt
34 {
35         uchar   d[Eaddrlen];
36         uchar   s[Eaddrlen];
37         uchar   type[2];
38         uchar   data[1500];
39 };
40
41 enum
42 {
43         Cdcunion = 6,
44         Scether = 6,
45         Fnether = 15,
46 };
47
48 int debug;
49 int setmac;
50
51 int nprom;
52 int nmulti;
53 uchar multiaddr[32][Eaddrlen];
54
55 /* to be filled in by *init() */
56 uchar macaddr[Eaddrlen];
57
58 Macent mactab[127];
59
60 void    etheriq(Block*);
61
62 int     (*epreceive)(Dev*);
63 void    (*eptransmit)(Dev*, Block*);
64 int     (*eppromiscuous)(Dev*, int);
65 int     (*epmulticast)(Dev*, uchar*, int);