Commit | Line | Data |
---|---|---|
2c0ded8a MA |
1 | /* enet.h Stanford 25 April 1983 */ |
2 | ||
3 | /* | |
4 | * Ethernet definitions needed for user processes | |
5 | * | |
6 | ********************************************************************** | |
7 | * HISTORY | |
8 | * 7 October 1985 Jeff Mogul Stanford | |
9 | * Added EIOCMFREE ioctl to indicate # of free minor devices; | |
10 | * may or may not be useful. | |
11 | * 17 October 1984 Jeff Mogul Stanford | |
12 | * Added ENF_CAND, ENF_COR, ENF_CNAND, and ENF_CNOR, short-circuit | |
13 | * operators, to make filters run faster. | |
14 | * All evaluate "(*sp++ == *sp++)": | |
15 | * ENF_CAND: returns false immediately if result is false, otherwise | |
16 | * continue | |
17 | * ENF_COR: returns true immediately if result is true, otherwise | |
18 | * continue | |
19 | * ENF_CNAND: returns true immediately if result is false, otherwise | |
20 | * continue | |
21 | * ENF_CNOR: returns false immediately if result is true, otherwise | |
22 | * continue | |
23 | * Also added ENF_NEQ to complement ENF_EQ | |
24 | * | |
25 | * 10 November 1983 Jeffrey Mogul Stanford | |
26 | * Slight restructuring for support of 10mb ethers; | |
27 | * added the EIOCDEVP ioctl and associated definitions | |
28 | * and removed the EIOCMTU ioctl (subsumed by EIOCDEVP) | |
29 | * | |
30 | * 25-Apr-83 Jeffrey Mogul Stanford | |
31 | * Began conversion to 4.2BSD. This involves removing all | |
32 | * references to the actual hardware. | |
33 | * Incompatible change: ioctl encodings! | |
34 | * Added EIOCMTU ioctl to get MTU (max packet size). | |
35 | * Most previous history comments removed. | |
36 | * Definitions of interest only to kernel now are in enetdefs.h | |
37 | * | |
38 | * 10-Aug-82 Mike Accetta (mja) at Carnegie-Mellon University | |
39 | * Added EIOCMBIS and EIOCMBIC definitions, and new ENHOLDSIG mode | |
40 | * bit and ENPRIVMODES defintions (V3.05e). [Last change before | |
41 | * 4.2BSD conversion starts.] | |
42 | * | |
43 | * 22-Feb-80 Rick Rashid (rfr) at Carnegie-Mellon University | |
44 | * Rewritten for multiple simultaneous opens with filters (V1.05). | |
45 | * | |
46 | * 18-Jan-80 Mike Accetta (mja) at Carnegie-Mellon University | |
47 | * Created (V1.00). | |
48 | * | |
49 | ********************************************************************** | |
50 | */ | |
51 | #ifdef KERNEL | |
52 | #include "ioctl.h" | |
53 | #else | |
54 | #include <sys/ioctl.h> | |
55 | #endif KERNEL | |
56 | ||
57 | #define ENMAXFILTERS 40 /* maximum filter short words */ | |
58 | ||
59 | /* | |
60 | * filter structure for SETF | |
61 | */ | |
62 | struct enfilter | |
63 | { | |
64 | u_char enf_Priority; /* priority of filter */ | |
65 | u_char enf_FilterLen; /* length of filter command list */ | |
66 | u_short enf_Filter[ENMAXFILTERS]; /* the filter command list */ | |
67 | }; | |
68 | ||
69 | /* set/get parameters, set filter ioctl commands */ | |
70 | #define EIOCSETP _IOW(E,100, struct eniocb) | |
71 | #define EIOCGETP _IOR(E,101, struct eniocb) | |
72 | #define EIOCSETF _IOW(E,102, struct enfilter) | |
73 | #define EIOCENBS _IOW(E,103, int) | |
74 | #define EIOCINHS _IO(E,104) | |
75 | #define EIOCSETW _IOW(E,105, u_int) | |
76 | #define EIOCFLUSH _IO(E,106) | |
77 | #define EIOCALLOCP _IO(E,107) | |
78 | #define EIOCDEALLOCP _IO(E,108) | |
79 | #define EIOCMBIS _IOW(E,109, u_short) | |
80 | #define EIOCMBIC _IOW(E,110, u_short) | |
81 | #define EIOCDEVP _IOR(E,111, struct endevp) | |
82 | #define EIOCMFREE _IOR(E,112, int) | |
83 | ||
84 | /* | |
85 | * Bits in mode word modified by EIOCMBIS and EIOCMBIC. | |
86 | */ | |
87 | #define ENHOLDSIG (0x0001) /* don't disable signal after sending */ | |
88 | #define ENPRIVMODES (~(ENHOLDSIG)) | |
89 | ||
90 | /* | |
91 | * We now allow specification of up to MAXFILTERS (short) words of a filter | |
92 | * command list to be applied to incoming packets to determine if | |
93 | * those packets should be given to a particular open ethernet file. | |
94 | * | |
95 | * Each open enet file specifies the filter command list via iocontrl. | |
96 | * Each filter command list specifies a sequences of actions which leave a | |
97 | * boolean value on the top of an internal stack. Each word of the | |
98 | * command list specifies an action from the set {PUSHLIT, PUSHZERO, | |
99 | * PUSHWORD+N} which respectively push the next word of the stack, zero, | |
100 | * or word N of the incoming packet on the stack, and a binary operator | |
101 | * from the set {EQ, LT, LE, GT, GE, AND, OR, XOR} which operates on the | |
102 | * top two elements of the stack and replaces them with its result. The | |
103 | * special action NOPUSH and the special operator NOP can be used to only | |
104 | * perform the binary operation or to only push a value on the stack. | |
105 | * | |
106 | * If the final value of the filter operation is true, then the packet is | |
107 | * accepted for the open file which specified the filter. | |
108 | * | |
109 | */ | |
110 | ||
111 | /* these must sum to 16! */ | |
112 | #define ENF_NBPA 10 /* # bits / action */ | |
113 | #define ENF_NBPO 6 /* # bits / operator */ | |
114 | ||
115 | /* binary operators */ | |
116 | #define ENF_NOP (0<<ENF_NBPA) | |
117 | #define ENF_EQ (1<<ENF_NBPA) | |
118 | #define ENF_LT (2<<ENF_NBPA) | |
119 | #define ENF_LE (3<<ENF_NBPA) | |
120 | #define ENF_GT (4<<ENF_NBPA) | |
121 | #define ENF_GE (5<<ENF_NBPA) | |
122 | #define ENF_AND (6<<ENF_NBPA) | |
123 | #define ENF_OR (7<<ENF_NBPA) | |
124 | #define ENF_XOR (8<<ENF_NBPA) | |
125 | #define ENF_COR (9<<ENF_NBPA) | |
126 | #define ENF_CAND (10<<ENF_NBPA) | |
127 | #define ENF_CNOR (11<<ENF_NBPA) | |
128 | #define ENF_CNAND (12<<ENF_NBPA) | |
129 | #define ENF_NEQ (13<<ENF_NBPA) | |
130 | ||
131 | /* stack actions */ | |
132 | #define ENF_NOPUSH 0 | |
133 | #define ENF_PUSHLIT 1 | |
134 | #define ENF_PUSHZERO 2 | |
135 | #define ENF_PUSHWORD 16 | |
136 | ||
137 | /* | |
138 | * parameter buffer structure for GETP and SETP | |
139 | */ | |
140 | struct eniocb | |
141 | { | |
142 | u_char en_addr; /* ethernet address (RO) */ | |
143 | u_char en_maxfilters; /* max filter words available (RO) */ | |
144 | u_char en_maxwaiting; /* max queued input packets (RO) */ | |
145 | u_char en_maxpriority; /* max filter priority for this file (RO) */ | |
146 | long en_rtout; /* receive timeout in (jiffies) (RW) */ | |
147 | }; | |
148 | ||
149 | /* | |
150 | * parameter structure for EIOCDEVP (get device parameters) | |
151 | */ | |
152 | ||
153 | #define EN_MAX_ADDR_LEN 8 /* maximum bytes in a hardware address */ | |
154 | ||
155 | struct endevp { | |
156 | u_char end_dev_type; /* device type, codes below */ | |
157 | u_char end_addr_len; /* length (bytes) of a hardware address */ | |
158 | u_short end_hdr_len; /* length of a hardware packet header */ | |
159 | u_short end_MTU; /* maximum packet size (bytes) */ | |
160 | u_char end_addr[EN_MAX_ADDR_LEN]; | |
161 | /* hardware address for this unit */ | |
162 | u_char end_broadaddr[EN_MAX_ADDR_LEN]; | |
163 | /* hardware-supported broadcast address */ | |
164 | }; | |
165 | ||
166 | /* Ethernet Device Type codes */ | |
167 | ||
168 | #define ENDT_3MB 3 /* Xerox Experimental Ethernet */ | |
169 | #define ENDT_BS3MB 1 /* Xerox Experimental Ethernet/byteswapped */ | |
170 | #define ENDT_10MB 2 /* Xerox-DEC-Intel Standard Ethernet */ | |
171 | ||
172 | #define ENDT_MIN 1 /* minimum defined device type code */ | |
173 | #define ENDT_MAX 3 /* maximum defined device type code */ |