156893Sfenner/* 298524Sfenner * Copyright: (c) 2000 United States Government as represented by the 398524Sfenner * Secretary of the Navy. All rights reserved. 498524Sfenner * 598524Sfenner * Redistribution and use in source and binary forms, with or without 698524Sfenner * modification, are permitted provided that the following conditions 798524Sfenner * are met: 8127668Sbms * 998524Sfenner * 1. Redistributions of source code must retain the above copyright 1098524Sfenner * notice, this list of conditions and the following disclaimer. 1198524Sfenner * 2. Redistributions in binary form must reproduce the above copyright 1298524Sfenner * notice, this list of conditions and the following disclaimer in 1398524Sfenner * the documentation and/or other materials provided with the 1498524Sfenner * distribution. 1598524Sfenner * 3. The names of the authors may not be used to endorse or promote 1698524Sfenner * products derived from this software without specific prior 1798524Sfenner * written permission. 18127668Sbms * 1998524Sfenner * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 2098524Sfenner * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 2198524Sfenner * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 2298524Sfenner */ 2398524Sfenner/* 2456893Sfenner * Rx protocol format 2556893Sfenner * 26190207Srpaulo * $Id: rx.h,v 1.8 2002-12-11 07:14:11 guy Exp $ 2756893Sfenner */ 2856893Sfenner 2956893Sfenner#define FS_RX_PORT 7000 3056893Sfenner#define CB_RX_PORT 7001 3156893Sfenner#define PROT_RX_PORT 7002 3256893Sfenner#define VLDB_RX_PORT 7003 3356893Sfenner#define KAUTH_RX_PORT 7004 3456893Sfenner#define VOL_RX_PORT 7005 3556893Sfenner#define ERROR_RX_PORT 7006 /* Doesn't seem to be used */ 3656893Sfenner#define BOS_RX_PORT 7007 3756893Sfenner 3856893Sfenner#ifndef AFSNAMEMAX 3956893Sfenner#define AFSNAMEMAX 256 4056893Sfenner#endif 4156893Sfenner 4256893Sfenner#ifndef AFSOPAQUEMAX 4356893Sfenner#define AFSOPAQUEMAX 1024 4456893Sfenner#endif 4556893Sfenner 4656893Sfenner#define PRNAMEMAX 64 4756893Sfenner#define VLNAMEMAX 65 4856893Sfenner#define KANAMEMAX 64 4956893Sfenner#define BOSNAMEMAX 256 5056893Sfenner 5156893Sfenner#define PRSFS_READ 1 /* Read files */ 5256893Sfenner#define PRSFS_WRITE 2 /* Write files */ 5356893Sfenner#define PRSFS_INSERT 4 /* Insert files into a directory */ 5456893Sfenner#define PRSFS_LOOKUP 8 /* Lookup files into a directory */ 5556893Sfenner#define PRSFS_DELETE 16 /* Delete files */ 5656893Sfenner#define PRSFS_LOCK 32 /* Lock files */ 5756893Sfenner#define PRSFS_ADMINISTER 64 /* Change ACL's */ 5856893Sfenner 5956893Sfennerstruct rx_header { 6056893Sfenner u_int32_t epoch; 6156893Sfenner u_int32_t cid; 6256893Sfenner u_int32_t callNumber; 6356893Sfenner u_int32_t seq; 6456893Sfenner u_int32_t serial; 6575115Sfenner u_int8_t type; 6656893Sfenner#define RX_PACKET_TYPE_DATA 1 6756893Sfenner#define RX_PACKET_TYPE_ACK 2 6856893Sfenner#define RX_PACKET_TYPE_BUSY 3 6956893Sfenner#define RX_PACKET_TYPE_ABORT 4 7056893Sfenner#define RX_PACKET_TYPE_ACKALL 5 7156893Sfenner#define RX_PACKET_TYPE_CHALLENGE 6 7256893Sfenner#define RX_PACKET_TYPE_RESPONSE 7 7356893Sfenner#define RX_PACKET_TYPE_DEBUG 8 7456893Sfenner#define RX_PACKET_TYPE_PARAMS 9 7556893Sfenner#define RX_PACKET_TYPE_VERSION 13 7675115Sfenner u_int8_t flags; 7756893Sfenner#define RX_CLIENT_INITIATED 1 7856893Sfenner#define RX_REQUEST_ACK 2 7956893Sfenner#define RX_LAST_PACKET 4 8056893Sfenner#define RX_MORE_PACKETS 8 8156893Sfenner#define RX_FREE_PACKET 16 8298524Sfenner#define RX_SLOW_START_OK 32 8398524Sfenner#define RX_JUMBO_PACKET 32 8475115Sfenner u_int8_t userStatus; 8575115Sfenner u_int8_t securityIndex; 8675115Sfenner u_int16_t spare; /* How clever: even though the AFS */ 8775115Sfenner u_int16_t serviceId; /* header files indicate that the */ 8856893Sfenner}; /* serviceId is first, it's really */ 8956893Sfenner /* encoded _after_ the spare field */ 9056893Sfenner /* I wasted a day figuring that out! */ 9156893Sfenner 9298524Sfenner#define NUM_RX_FLAGS 7 9375115Sfenner 9475115Sfenner#define RX_MAXACKS 255 9575115Sfenner 9675115Sfennerstruct rx_ackPacket { 9775115Sfenner u_int16_t bufferSpace; /* Number of packet buffers available */ 9875115Sfenner u_int16_t maxSkew; /* Max diff between ack'd packet and */ 9975115Sfenner /* highest packet received */ 10075115Sfenner u_int32_t firstPacket; /* The first packet in ack list */ 10175115Sfenner u_int32_t previousPacket; /* Previous packet recv'd (obsolete) */ 10275115Sfenner u_int32_t serial; /* # of packet that prompted the ack */ 10375115Sfenner u_int8_t reason; /* Reason for acknowledgement */ 10475115Sfenner u_int8_t nAcks; /* Number of acknowledgements */ 10575115Sfenner u_int8_t acks[RX_MAXACKS]; /* Up to RX_MAXACKS acknowledgements */ 10675115Sfenner}; 10775115Sfenner 10875115Sfenner/* 10975115Sfenner * Values for the acks array 11075115Sfenner */ 11175115Sfenner 11275115Sfenner#define RX_ACK_TYPE_NACK 0 /* Don't have this packet */ 11375115Sfenner#define RX_ACK_TYPE_ACK 1 /* I have this packet */ 114