| /* |
| * Copyright: (c) 2000 United States Government as represented by the |
| * Secretary of the Navy. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * 3. The names of the authors may not be used to endorse or promote |
| * products derived from this software without specific prior |
| * written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR |
| * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
| */ |
| /* |
| * Rx protocol format |
| * |
| * $Id: rx.h,v 1.8 2002-12-11 07:14:11 guy Exp $ |
| */ |
| |
| #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; |
| u_int8_t type; |
| #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 |
| u_int8_t flags; |
| #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 |
| #define RX_SLOW_START_OK 32 |
| #define RX_JUMBO_PACKET 32 |
| 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 */ |
| }; /* serviceId is first, it's really */ |
| /* encoded _after_ the spare field */ |
| /* I wasted a day figuring that out! */ |
| |
| #define NUM_RX_FLAGS 7 |
| |
| #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 */ |