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