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

unix.superglobalmegacorp.com

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