Annotation of 43BSDReno/sys/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 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.