home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / rxrpc / packet.h next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  8.5 KB  |  215 lines

  1. /* packet.h: Rx packet layout and definitions
  2.  *
  3.  * Copyright (C) 2002, 2007 Red Hat, Inc. All Rights Reserved.
  4.  * Written by David Howells (dhowells@redhat.com)
  5.  *
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License
  8.  * as published by the Free Software Foundation; either version
  9.  * 2 of the License, or (at your option) any later version.
  10.  */
  11.  
  12. #ifndef _LINUX_RXRPC_PACKET_H
  13. #define _LINUX_RXRPC_PACKET_H
  14.  
  15. typedef u32    rxrpc_seq_t;    /* Rx message sequence number */
  16. typedef u32    rxrpc_serial_t;    /* Rx message serial number */
  17. typedef __be32    rxrpc_seq_net_t; /* on-the-wire Rx message sequence number */
  18. typedef __be32    rxrpc_serial_net_t; /* on-the-wire Rx message serial number */
  19.  
  20. /*****************************************************************************/
  21. /*
  22.  * on-the-wire Rx packet header
  23.  * - all multibyte fields should be in network byte order
  24.  */
  25. struct rxrpc_header {
  26.     __be32        epoch;        /* client boot timestamp */
  27.  
  28.     __be32        cid;        /* connection and channel ID */
  29. #define RXRPC_MAXCALLS        4            /* max active calls per conn */
  30. #define RXRPC_CHANNELMASK    (RXRPC_MAXCALLS-1)    /* mask for channel ID */
  31. #define RXRPC_CIDMASK        (~RXRPC_CHANNELMASK)    /* mask for connection ID */
  32. #define RXRPC_CIDSHIFT        ilog2(RXRPC_MAXCALLS)    /* shift for connection ID */
  33. #define RXRPC_CID_INC        (1 << RXRPC_CIDSHIFT)    /* connection ID increment */
  34.  
  35.     __be32        callNumber;    /* call ID (0 for connection-level packets) */
  36. #define RXRPC_PROCESS_MAXCALLS    (1<<2)    /* maximum number of active calls per conn (power of 2) */
  37.  
  38.     __be32        seq;        /* sequence number of pkt in call stream */
  39.     __be32        serial;        /* serial number of pkt sent to network */
  40.  
  41.     uint8_t        type;        /* packet type */
  42. #define RXRPC_PACKET_TYPE_DATA        1    /* data */
  43. #define RXRPC_PACKET_TYPE_ACK        2    /* ACK */
  44. #define RXRPC_PACKET_TYPE_BUSY        3    /* call reject */
  45. #define RXRPC_PACKET_TYPE_ABORT        4    /* call/connection abort */
  46. #define RXRPC_PACKET_TYPE_ACKALL    5    /* ACK all outstanding packets on call */
  47. #define RXRPC_PACKET_TYPE_CHALLENGE    6    /* connection security challenge (SRVR->CLNT) */
  48. #define RXRPC_PACKET_TYPE_RESPONSE    7    /* connection secutity response (CLNT->SRVR) */
  49. #define RXRPC_PACKET_TYPE_DEBUG        8    /* debug info request */
  50. #define RXRPC_N_PACKET_TYPES        9    /* number of packet types (incl type 0) */
  51.  
  52.     uint8_t        flags;        /* packet flags */
  53. #define RXRPC_CLIENT_INITIATED    0x01        /* signifies a packet generated by a client */
  54. #define RXRPC_REQUEST_ACK    0x02        /* request an unconditional ACK of this packet */
  55. #define RXRPC_LAST_PACKET    0x04        /* the last packet from this side for this call */
  56. #define RXRPC_MORE_PACKETS    0x08        /* more packets to come */
  57. #define RXRPC_JUMBO_PACKET    0x20        /* [DATA] this is a jumbo packet */
  58. #define RXRPC_SLOW_START_OK    0x20        /* [ACK] slow start supported */
  59.  
  60.     uint8_t        userStatus;    /* app-layer defined status */
  61.     uint8_t        securityIndex;    /* security protocol ID */
  62.     union {
  63.         __be16    _rsvd;        /* reserved */
  64.         __be16    cksum;        /* kerberos security checksum */
  65.     };
  66.     __be16        serviceId;    /* service ID */
  67.  
  68. } __attribute__((packed));
  69.  
  70. #define __rxrpc_header_off(X) offsetof(struct rxrpc_header,X)
  71.  
  72. extern const char *rxrpc_pkts[];
  73.  
  74. /*****************************************************************************/
  75. /*
  76.  * jumbo packet secondary header
  77.  * - can be mapped to read header by:
  78.  *   - new_serial = serial + 1
  79.  *   - new_seq = seq + 1
  80.  *   - new_flags = j_flags
  81.  *   - new__rsvd = j__rsvd
  82.  *   - duplicating all other fields
  83.  */
  84. struct rxrpc_jumbo_header {
  85.     uint8_t        flags;        /* packet flags (as per rxrpc_header) */
  86.     uint8_t        pad;
  87.     __be16        _rsvd;        /* reserved (used by kerberos security as cksum) */
  88. };
  89.  
  90. #define RXRPC_JUMBO_DATALEN    1412    /* non-terminal jumbo packet data length */
  91.  
  92. /*****************************************************************************/
  93. /*
  94.  * on-the-wire Rx ACK packet data payload
  95.  * - all multibyte fields should be in network byte order
  96.  */
  97. struct rxrpc_ackpacket {
  98.     __be16        bufferSpace;    /* number of packet buffers available */
  99.     __be16        maxSkew;    /* diff between serno being ACK'd and highest serial no
  100.                      * received */
  101.     __be32        firstPacket;    /* sequence no of first ACK'd packet in attached list */
  102.     __be32        previousPacket;    /* sequence no of previous packet received */
  103.     __be32        serial;        /* serial no of packet that prompted this ACK */
  104.  
  105.     uint8_t        reason;        /* reason for ACK */
  106. #define RXRPC_ACK_REQUESTED        1    /* ACK was requested on packet */
  107. #define RXRPC_ACK_DUPLICATE        2    /* duplicate packet received */
  108. #define RXRPC_ACK_OUT_OF_SEQUENCE    3    /* out of sequence packet received */
  109. #define RXRPC_ACK_EXCEEDS_WINDOW    4    /* packet received beyond end of ACK window */
  110. #define RXRPC_ACK_NOSPACE        5    /* packet discarded due to lack of buffer space */
  111. #define RXRPC_ACK_PING            6    /* keep alive ACK */
  112. #define RXRPC_ACK_PING_RESPONSE        7    /* response to RXRPC_ACK_PING */
  113. #define RXRPC_ACK_DELAY            8    /* nothing happened since received packet */
  114. #define RXRPC_ACK_IDLE            9    /* ACK due to fully received ACK window */
  115.  
  116.     uint8_t        nAcks;        /* number of ACKs */
  117. #define RXRPC_MAXACKS    255
  118.  
  119.     uint8_t        acks[0];    /* list of ACK/NAKs */
  120. #define RXRPC_ACK_TYPE_NACK        0
  121. #define RXRPC_ACK_TYPE_ACK        1
  122.  
  123. } __attribute__((packed));
  124.  
  125. /*
  126.  * ACK packets can have a further piece of information tagged on the end
  127.  */
  128. struct rxrpc_ackinfo {
  129.     __be32        rxMTU;        /* maximum Rx MTU size (bytes) [AFS 3.3] */
  130.     __be32        maxMTU;        /* maximum interface MTU size (bytes) [AFS 3.3] */
  131.     __be32        rwind;        /* Rx window size (packets) [AFS 3.4] */
  132.     __be32        jumbo_max;    /* max packets to stick into a jumbo packet [AFS 3.5] */
  133. };
  134.  
  135. /*****************************************************************************/
  136. /*
  137.  * Kerberos security type-2 challenge packet
  138.  */
  139. struct rxkad_challenge {
  140.     __be32        version;    /* version of this challenge type */
  141.     __be32        nonce;        /* encrypted random number */
  142.     __be32        min_level;    /* minimum security level */
  143.     __be32        __padding;    /* padding to 8-byte boundary */
  144. } __attribute__((packed));
  145.  
  146. /*****************************************************************************/
  147. /*
  148.  * Kerberos security type-2 response packet
  149.  */
  150. struct rxkad_response {
  151.     __be32        version;    /* version of this reponse type */
  152.     __be32        __pad;
  153.  
  154.     /* encrypted bit of the response */
  155.     struct {
  156.         __be32        epoch;        /* current epoch */
  157.         __be32        cid;        /* parent connection ID */
  158.         __be32        checksum;    /* checksum */
  159.         __be32        securityIndex;    /* security type */
  160.         __be32        call_id[4];    /* encrypted call IDs */
  161.         __be32        inc_nonce;    /* challenge nonce + 1 */
  162.         __be32        level;        /* desired level */
  163.     } encrypted;
  164.  
  165.     __be32        kvno;        /* Kerberos key version number */
  166.     __be32        ticket_len;    /* Kerberos ticket length  */
  167. } __attribute__((packed));
  168.  
  169. /*****************************************************************************/
  170. /*
  171.  * RxRPC-level abort codes
  172.  */
  173. #define RX_CALL_DEAD        -1    /* call/conn has been inactive and is shut down */
  174. #define RX_INVALID_OPERATION    -2    /* invalid operation requested / attempted */
  175. #define RX_CALL_TIMEOUT        -3    /* call timeout exceeded */
  176. #define RX_EOF            -4    /* unexpected end of data on read op */
  177. #define RX_PROTOCOL_ERROR    -5    /* low-level protocol error */
  178. #define RX_USER_ABORT        -6    /* generic user abort */
  179. #define RX_ADDRINUSE        -7    /* UDP port in use */
  180. #define RX_DEBUGI_BADTYPE    -8    /* bad debugging packet type */
  181.  
  182. /*
  183.  * (un)marshalling abort codes (rxgen)
  184.  */
  185. #define    RXGEN_CC_MARSHAL    -450
  186. #define    RXGEN_CC_UNMARSHAL  -451
  187. #define    RXGEN_SS_MARSHAL    -452
  188. #define    RXGEN_SS_UNMARSHAL  -453
  189. #define    RXGEN_DECODE        -454
  190. #define    RXGEN_OPCODE        -455
  191. #define    RXGEN_SS_XDRFREE    -456
  192. #define    RXGEN_CC_XDRFREE    -457
  193.  
  194. /*
  195.  * Rx kerberos security abort codes
  196.  * - unfortunately we have no generalised security abort codes to say things
  197.  *   like "unsupported security", so we have to use these instead and hope the
  198.  *   other side understands
  199.  */
  200. #define RXKADINCONSISTENCY    19270400    /* security module structure inconsistent */
  201. #define RXKADPACKETSHORT    19270401    /* packet too short for security challenge */
  202. #define RXKADLEVELFAIL        19270402    /* security level negotiation failed */
  203. #define RXKADTICKETLEN        19270403    /* ticket length too short or too long */
  204. #define RXKADOUTOFSEQUENCE    19270404    /* packet had bad sequence number */
  205. #define RXKADNOAUTH        19270405    /* caller not authorised */
  206. #define RXKADBADKEY        19270406    /* illegal key: bad parity or weak */
  207. #define RXKADBADTICKET        19270407    /* security object was passed a bad ticket */
  208. #define RXKADUNKNOWNKEY        19270408    /* ticket contained unknown key version number */
  209. #define RXKADEXPIRED        19270409    /* authentication expired */
  210. #define RXKADSEALEDINCON    19270410    /* sealed data inconsistent */
  211. #define RXKADDATALEN        19270411    /* user data too long */
  212. #define RXKADILLEGALLEVEL    19270412    /* caller not authorised to use encrypted conns */
  213.  
  214. #endif /* _LINUX_RXRPC_PACKET_H */
  215.