• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright: (c) 2000 United States Government as represented by the
3  *	Secretary of the Navy. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  *   1. Redistributions of source code must retain the above copyright
10  *      notice, this list of conditions and the following disclaimer.
11  *   2. Redistributions in binary form must reproduce the above copyright
12  *      notice, this list of conditions and the following disclaimer in
13  *      the documentation and/or other materials provided with the
14  *      distribution.
15  *   3. The names of the authors may not be used to endorse or promote
16  *      products derived from this software without specific prior
17  *      written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
20  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22  */
23 /*
24  * Rx protocol format
25  *
26  * $Id: rx.h,v 1.8 2002-12-11 07:14:11 guy Exp $
27  */
28 
29 #define FS_RX_PORT	7000
30 #define CB_RX_PORT	7001
31 #define PROT_RX_PORT	7002
32 #define VLDB_RX_PORT	7003
33 #define KAUTH_RX_PORT	7004
34 #define VOL_RX_PORT	7005
35 #define ERROR_RX_PORT	7006		/* Doesn't seem to be used */
36 #define BOS_RX_PORT	7007
37 
38 #ifndef AFSNAMEMAX
39 #define AFSNAMEMAX 256
40 #endif
41 
42 #ifndef AFSOPAQUEMAX
43 #define AFSOPAQUEMAX 1024
44 #endif
45 
46 #define PRNAMEMAX 64
47 #define VLNAMEMAX 65
48 #define KANAMEMAX 64
49 #define BOSNAMEMAX 256
50 
51 #define	PRSFS_READ		1 /* Read files */
52 #define	PRSFS_WRITE		2 /* Write files */
53 #define	PRSFS_INSERT		4 /* Insert files into a directory */
54 #define	PRSFS_LOOKUP		8 /* Lookup files into a directory */
55 #define	PRSFS_DELETE		16 /* Delete files */
56 #define	PRSFS_LOCK		32 /* Lock files */
57 #define	PRSFS_ADMINISTER	64 /* Change ACL's */
58 
59 struct rx_header {
60 	u_int32_t epoch;
61 	u_int32_t cid;
62 	u_int32_t callNumber;
63 	u_int32_t seq;
64 	u_int32_t serial;
65 	u_int8_t type;
66 #define RX_PACKET_TYPE_DATA		1
67 #define RX_PACKET_TYPE_ACK		2
68 #define RX_PACKET_TYPE_BUSY		3
69 #define RX_PACKET_TYPE_ABORT		4
70 #define RX_PACKET_TYPE_ACKALL		5
71 #define RX_PACKET_TYPE_CHALLENGE	6
72 #define RX_PACKET_TYPE_RESPONSE		7
73 #define RX_PACKET_TYPE_DEBUG		8
74 #define RX_PACKET_TYPE_PARAMS		9
75 #define RX_PACKET_TYPE_VERSION		13
76 	u_int8_t flags;
77 #define RX_CLIENT_INITIATED	1
78 #define RX_REQUEST_ACK		2
79 #define RX_LAST_PACKET		4
80 #define RX_MORE_PACKETS		8
81 #define RX_FREE_PACKET		16
82 #define RX_SLOW_START_OK	32
83 #define RX_JUMBO_PACKET		32
84 	u_int8_t userStatus;
85 	u_int8_t securityIndex;
86 	u_int16_t spare;		/* How clever: even though the AFS */
87 	u_int16_t serviceId;		/* header files indicate that the */
88 };					/* serviceId is first, it's really */
89 					/* encoded _after_ the spare field */
90 					/* I wasted a day figuring that out! */
91 
92 #define NUM_RX_FLAGS 7
93 
94 #define RX_MAXACKS 255
95 
96 struct rx_ackPacket {
97 	u_int16_t bufferSpace;		/* Number of packet buffers available */
98 	u_int16_t maxSkew;		/* Max diff between ack'd packet and */
99 					/* highest packet received */
100 	u_int32_t firstPacket;		/* The first packet in ack list */
101 	u_int32_t previousPacket;	/* Previous packet recv'd (obsolete) */
102 	u_int32_t serial;		/* # of packet that prompted the ack */
103 	u_int8_t reason;		/* Reason for acknowledgement */
104 	u_int8_t nAcks;			/* Number of acknowledgements */
105 	u_int8_t acks[RX_MAXACKS];	/* Up to RX_MAXACKS acknowledgements */
106 };
107 
108 /*
109  * Values for the acks array
110  */
111 
112 #define RX_ACK_TYPE_NACK	0	/* Don't have this packet */
113 #define RX_ACK_TYPE_ACK		1	/* I have this packet */
114