BSD 4_3 development
[unix-history] / usr / contrib / enet / net / enet.h
CommitLineData
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 */
62struct 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 */
140struct 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
155struct 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 */