Annotation of Net2/netrmp/rmp_var.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 1988 University of Utah.
        !             3:  * Copyright (c) 1990 The Regents of the University of California.
        !             4:  * All rights reserved.
        !             5:  *
        !             6:  * This code is derived from software contributed to Berkeley by
        !             7:  * the Systems Programming Group of the University of Utah Computer
        !             8:  * Science Department.
        !             9:  *
        !            10:  * Redistribution and use in source and binary forms, with or without
        !            11:  * modification, are permitted provided that the following conditions
        !            12:  * are met:
        !            13:  * 1. Redistributions of source code must retain the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer.
        !            15:  * 2. Redistributions in binary form must reproduce the above copyright
        !            16:  *    notice, this list of conditions and the following disclaimer in the
        !            17:  *    documentation and/or other materials provided with the distribution.
        !            18:  * 3. All advertising materials mentioning features or use of this software
        !            19:  *    must display the following acknowledgement:
        !            20:  *     This product includes software developed by the University of
        !            21:  *     California, Berkeley and its contributors.
        !            22:  * 4. Neither the name of the University nor the names of its contributors
        !            23:  *    may be used to endorse or promote products derived from this software
        !            24:  *    without specific prior written permission.
        !            25:  *
        !            26:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            27:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            28:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            29:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            30:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            31:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            32:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            33:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            34:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            35:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            36:  * SUCH DAMAGE.
        !            37:  *
        !            38:  * from: Utah $Hdr: rmp_var.h 1.3 89/06/07$
        !            39:  *
        !            40:  *     @(#)rmp_var.h   7.1 (Berkeley) 5/8/90
        !            41:  */
        !            42: 
        !            43: /*
        !            44:  *  WARNING: rmp_packet is defined assuming alignment on 16-bit boundaries.
        !            45:  *  Data will be contiguous on HP's (MC68000), but there may be holes if
        !            46:  *  this is used elsewhere (e.g. VAXen).  Or, in other words:
        !            47:  *
        !            48:  *  if (sizeof(struct rmp_packet) != 1504) error("AlignmentProblem");
        !            49:  */
        !            50: 
        !            51: /*
        !            52:  *  Possible values for "rmp_type" fields.
        !            53:  */
        !            54: 
        !            55: #define        RMP_BOOT_REQ    1       /* boot request packet */
        !            56: #define        RMP_BOOT_REPL   129     /* boot reply packet */
        !            57: #define        RMP_READ_REQ    2       /* read request packet */
        !            58: #define        RMP_READ_REPL   130     /* read reply packet */
        !            59: #define        RMP_BOOT_DONE   3       /* boot complete packet */
        !            60: 
        !            61: /*
        !            62:  *  Useful constants.
        !            63:  */
        !            64: 
        !            65: #define RMP_VERSION    2       /* protocol version */
        !            66: #define RMP_TIMEOUT    600     /* timeout connection after ten minutes */
        !            67: #define        RMP_PROBESID    0xffff  /* session ID for probes */
        !            68: #define        RMP_HOSTLEN     13      /* max length of server's name */
        !            69: 
        !            70: /*
        !            71:  *  RMP error codes
        !            72:  */
        !            73: 
        !            74: #define        RMP_E_OKAY      0
        !            75: #define        RMP_E_EOF       2       /* read reply: returned end of file */
        !            76: #define        RMP_E_ABORT     3       /* abort operation */
        !            77: #define        RMP_E_BUSY      4       /* boot reply: server busy */
        !            78: #define        RMP_E_TIMEOUT   5       /* lengthen time out (not implemented) */
        !            79: #define        RMP_E_NOFILE    16      /* boot reply: file does not exist */
        !            80: #define RMP_E_OPENFILE 17      /* boot reply: file open failed */
        !            81: #define        RMP_E_NODFLT    18      /* boot reply: default file does not exist */
        !            82: #define RMP_E_OPENDFLT 19      /* boot reply: default file open failed */
        !            83: #define        RMP_E_BADSID    25      /* read reply: bad session ID */
        !            84: #define RMP_E_BADPACKET        27      /* Bad packet detected */
        !            85: 
        !            86: /*
        !            87:  *  Assorted field sizes.
        !            88:  */
        !            89: 
        !            90: #define        RMPADDRLEN      6       /* size of ethernet address */
        !            91: #define RMPLENGTHLEN   2       /* size of ethernet length field (802.3) */
        !            92: #define        RMPMACHLEN      20      /* length of machine type field */
        !            93: 
        !            94: /*
        !            95:  *  RMPDATALEN is the maximum number of data octets that can be stuffed
        !            96:  *  into an RMP packet.  This excludes the 802.2 LLC w/HP extensions.
        !            97:  */
        !            98: 
        !            99: #define RMPDATALEN     (RMP_MAX_PACKET - (2*RMPADDRLEN + RMPLENGTHLEN + \
        !           100:                                           sizeof(struct hp_llc)) )
        !           101: 
        !           102: /*
        !           103:  *  Define sizes of packets we send.  Boot and Read replies are variable
        !           104:  *  in length depending on the length of `s'.
        !           105:  *
        !           106:  *  Also, define how much space `restofpkt' can take up for outgoing
        !           107:  *  Boot and Read replies.  Boot Request packets are effectively
        !           108:  *  limited to 255 bytes due to the preceding 1-byte length field.
        !           109:  */
        !           110: 
        !           111: #define        RMPBOOTSIZE(s)  (sizeof(struct hp_llc) + sizeof(struct ifnet *) + \
        !           112:                         sizeof(struct rmp_boot_repl) + s - \
        !           113:                         sizeof(restofpkt))
        !           114: #define        RMPREADSIZE(s)  (sizeof(struct hp_llc) + sizeof(struct ifnet *) + \
        !           115:                         sizeof(struct rmp_read_repl) + s - \
        !           116:                         sizeof(restofpkt) - sizeof(u_char))
        !           117: #define        RMPDONESIZE     (sizeof(struct hp_llc) + sizeof(struct ifnet *) + \
        !           118:                         sizeof(struct rmp_boot_done))
        !           119: #define        RMPBOOTDATA     255
        !           120: #define        RMPREADDATA     (RMPDATALEN - \
        !           121:                         (2*sizeof(u_char)+sizeof(u_short)+sizeof(u_long)))
        !           122: 
        !           123: 
        !           124: /*
        !           125:  * This protocol defines some field sizes as "rest of ethernet packet".
        !           126:  * There is no easy way to specify this in C, so we use a one character
        !           127:  * field to denote it, and index past it to the end of the packet.
        !           128:  */
        !           129: 
        !           130: typedef char   restofpkt;
        !           131: 
        !           132: /*
        !           133:  * Packet structures.
        !           134:  */
        !           135: 
        !           136: struct rmp_raw {
        !           137:        u_char  rmp_type;               /* packet type */
        !           138:        u_char  rmp_rawdata[RMPDATALEN-1];
        !           139: };
        !           140: 
        !           141: struct rmp_boot_req {          /* boot request */
        !           142:        u_char  rmp_type;               /* packet type (RMP_BOOT_REQ) */
        !           143:        u_char  rmp_retcode;            /* return code (0) */
        !           144:        u_long  rmp_seqno;              /* sequence number (real time clock) */
        !           145:        u_short rmp_session;            /* session id (normally 0) */
        !           146:        u_short rmp_version;            /* protocol version (RMP_VERSION) */
        !           147:        char    rmp_machtype[RMPMACHLEN];       /* machine type */
        !           148:        u_char  rmp_flnmsize;           /* length of rmp_flnm */
        !           149:        restofpkt rmp_flnm;             /* name of file to be read */
        !           150: };
        !           151: 
        !           152: struct rmp_boot_repl {         /* boot reply */
        !           153:        u_char  rmp_type;               /* packet type (RMP_BOOT_REPL) */
        !           154:        u_char  rmp_retcode;            /* return code (normally 0) */
        !           155:        u_long  rmp_seqno;              /* sequence number (from boot req) */
        !           156:        u_short rmp_session;            /* session id (generated) */
        !           157:        u_short rmp_version;            /* protocol version (RMP_VERSION) */
        !           158:        u_char  rmp_flnmsize;           /* length of rmp_flnm */
        !           159:        restofpkt rmp_flnm;             /* name of file (from boot req) */
        !           160: };
        !           161: 
        !           162: struct rmp_read_req {          /* read request */
        !           163:        u_char  rmp_type;               /* packet type (RMP_READ_REQ) */
        !           164:        u_char  rmp_retcode;            /* return code (0) */
        !           165:        u_long  rmp_offset;             /* file relative byte offset */
        !           166:        u_short rmp_session;            /* session id (from boot repl) */
        !           167:        u_short rmp_size;               /* max no of bytes to send */
        !           168: };
        !           169: 
        !           170: struct rmp_read_repl {         /* read reply */
        !           171:        u_char  rmp_type;               /* packet type (RMP_READ_REPL) */
        !           172:        u_char  rmp_retcode;            /* return code (normally 0) */
        !           173:        u_long  rmp_offset;             /* byte offset (from read req) */
        !           174:        u_short rmp_session;            /* session id (from read req) */
        !           175:        restofpkt rmp_data;             /* data (max size from read req) */
        !           176:        u_char  rmp_unused;             /* padding to 16-bit boundary */
        !           177: };
        !           178: 
        !           179: struct rmp_boot_done {         /* boot complete */
        !           180:        u_char  rmp_type;               /* packet type (RMP_BOOT_DONE) */
        !           181:        u_char  rmp_retcode;            /* return code (0) */
        !           182:        u_long  rmp_unused;             /* not used (0) */
        !           183:        u_short rmp_session;            /* session id (from read repl) */
        !           184: };
        !           185: 
        !           186: struct rmp_packet {
        !           187:        struct ifnet *ifp;      /* ptr to intf packet arrived on */
        !           188:        struct hp_llc hp_llc;
        !           189:        union {
        !           190:                struct rmp_boot_req     rmp_brq;        /* boot request */
        !           191:                struct rmp_boot_repl    rmp_brpl;       /* boot reply */
        !           192:                struct rmp_read_req     rmp_rrq;        /* read request */
        !           193:                struct rmp_read_repl    rmp_rrpl;       /* read reply */
        !           194:                struct rmp_boot_done    rmp_done;       /* boot complete */
        !           195:                struct rmp_raw          rmp_raw;        /* raw data */
        !           196:        } rmp_proto;
        !           197: };
        !           198: 
        !           199: /*
        !           200:  *  Make life easier...
        !           201:  */
        !           202: 
        !           203: #define        r_type  rmp_proto.rmp_raw.rmp_type
        !           204: #define        r_data  rmp_proto.rmp_raw.rmp_data
        !           205: #define        r_brq   rmp_proto.rmp_brq
        !           206: #define        r_brpl  rmp_proto.rmp_brpl
        !           207: #define        r_rrq   rmp_proto.rmp_rrq
        !           208: #define        r_rrpl  rmp_proto.rmp_rrpl
        !           209: #define        r_done  rmp_proto.rmp_done
        !           210: 
        !           211: /*
        !           212:  *  RMP socket address: just family & destination addr.
        !           213:  */
        !           214: 
        !           215: struct sockaddr_rmp {
        !           216:        short   srmp_family;            /* address family (AF_RMP) */
        !           217:        u_char  srmp_dhost[RMPADDRLEN]; /* ethernet destination addr */
        !           218: };

unix.superglobalmegacorp.com

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