2000-01-30 00:45:58 +00:00
|
|
|
/*
|
|
|
|
* Rx protocol format
|
|
|
|
*
|
2001-04-03 07:45:48 +00:00
|
|
|
* $Id: rx.h,v 1.3 2000/10/03 02:55:02 itojun Exp $
|
2000-01-30 00:45:58 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#define FS_RX_PORT 7000
|
|
|
|
#define CB_RX_PORT 7001
|
|
|
|
#define PROT_RX_PORT 7002
|
|
|
|
#define VLDB_RX_PORT 7003
|
|
|
|
#define KAUTH_RX_PORT 7004
|
|
|
|
#define VOL_RX_PORT 7005
|
|
|
|
#define ERROR_RX_PORT 7006 /* Doesn't seem to be used */
|
|
|
|
#define BOS_RX_PORT 7007
|
|
|
|
|
|
|
|
#ifndef AFSNAMEMAX
|
|
|
|
#define AFSNAMEMAX 256
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef AFSOPAQUEMAX
|
|
|
|
#define AFSOPAQUEMAX 1024
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define PRNAMEMAX 64
|
|
|
|
#define VLNAMEMAX 65
|
|
|
|
#define KANAMEMAX 64
|
|
|
|
#define BOSNAMEMAX 256
|
|
|
|
|
|
|
|
#define PRSFS_READ 1 /* Read files */
|
|
|
|
#define PRSFS_WRITE 2 /* Write files */
|
|
|
|
#define PRSFS_INSERT 4 /* Insert files into a directory */
|
|
|
|
#define PRSFS_LOOKUP 8 /* Lookup files into a directory */
|
|
|
|
#define PRSFS_DELETE 16 /* Delete files */
|
|
|
|
#define PRSFS_LOCK 32 /* Lock files */
|
|
|
|
#define PRSFS_ADMINISTER 64 /* Change ACL's */
|
|
|
|
|
|
|
|
struct rx_header {
|
|
|
|
u_int32_t epoch;
|
|
|
|
u_int32_t cid;
|
|
|
|
u_int32_t callNumber;
|
|
|
|
u_int32_t seq;
|
|
|
|
u_int32_t serial;
|
2001-04-03 07:45:48 +00:00
|
|
|
u_int8_t type;
|
2000-01-30 00:45:58 +00:00
|
|
|
#define RX_PACKET_TYPE_DATA 1
|
|
|
|
#define RX_PACKET_TYPE_ACK 2
|
|
|
|
#define RX_PACKET_TYPE_BUSY 3
|
|
|
|
#define RX_PACKET_TYPE_ABORT 4
|
|
|
|
#define RX_PACKET_TYPE_ACKALL 5
|
|
|
|
#define RX_PACKET_TYPE_CHALLENGE 6
|
|
|
|
#define RX_PACKET_TYPE_RESPONSE 7
|
|
|
|
#define RX_PACKET_TYPE_DEBUG 8
|
|
|
|
#define RX_PACKET_TYPE_PARAMS 9
|
|
|
|
#define RX_PACKET_TYPE_VERSION 13
|
2001-04-03 07:45:48 +00:00
|
|
|
u_int8_t flags;
|
2000-01-30 00:45:58 +00:00
|
|
|
#define RX_CLIENT_INITIATED 1
|
|
|
|
#define RX_REQUEST_ACK 2
|
|
|
|
#define RX_LAST_PACKET 4
|
|
|
|
#define RX_MORE_PACKETS 8
|
|
|
|
#define RX_FREE_PACKET 16
|
2001-04-03 07:45:48 +00:00
|
|
|
u_int8_t userStatus;
|
|
|
|
u_int8_t securityIndex;
|
|
|
|
u_int16_t spare; /* How clever: even though the AFS */
|
|
|
|
u_int16_t serviceId; /* header files indicate that the */
|
2000-01-30 00:45:58 +00:00
|
|
|
}; /* serviceId is first, it's really */
|
|
|
|
/* encoded _after_ the spare field */
|
|
|
|
/* I wasted a day figuring that out! */
|
|
|
|
|
|
|
|
#define NUM_RX_FLAGS 5
|
2001-04-03 07:45:48 +00:00
|
|
|
|
|
|
|
#define RX_MAXACKS 255
|
|
|
|
|
|
|
|
struct rx_ackPacket {
|
|
|
|
u_int16_t bufferSpace; /* Number of packet buffers available */
|
|
|
|
u_int16_t maxSkew; /* Max diff between ack'd packet and */
|
|
|
|
/* highest packet received */
|
|
|
|
u_int32_t firstPacket; /* The first packet in ack list */
|
|
|
|
u_int32_t previousPacket; /* Previous packet recv'd (obsolete) */
|
|
|
|
u_int32_t serial; /* # of packet that prompted the ack */
|
|
|
|
u_int8_t reason; /* Reason for acknowledgement */
|
|
|
|
u_int8_t nAcks; /* Number of acknowledgements */
|
|
|
|
u_int8_t acks[RX_MAXACKS]; /* Up to RX_MAXACKS acknowledgements */
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Values for the acks array
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define RX_ACK_TYPE_NACK 0 /* Don't have this packet */
|
|
|
|
#define RX_ACK_TYPE_ACK 1 /* I have this packet */
|