|
|
1.1 root 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 */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.