Annotation of 43BSD/contrib/enet/net/enet.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.