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 */