|
|
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.