mirror of
https://github.com/the-tcpdump-group/tcpdump.git
synced 2024-11-28 12:33:47 +08:00
fcc82f451d
compile with Sun C, as "interface.h" isn't being included before the structures are being declared. Furthermore, in the files that Sun C *can* compile, it doesn't cause Sun C to generate code that's safe with unaligned accesses, as "__attribute__" is defined as a do-nothing macro with compilers that don't support it. Therefore, we get rid of that tag on the structures to which it was added, and instead use "EXTRACT_16BIT()" and "EXTRACT_32BIT()" to fetch 16-bit and 32-bit big-endian quantities from packets. We also fix some other references to multi-byte quantities to get rid of code that tries to do unaligned loads on platforms that don't support them. We also throw in a hack that makes those macros use "__attribute__((packed))" on structures containing only one 16-bit or 32-bit integer to get the compiler to generate unaligned-safe code rather than doing it by hand. (GCC on SPARC produces the same code that doing it by hand does; I don't know if GCC on any other big-endian strict-alignment processor generates better code for that case. On little-endian processors, as "ntohs()" and "ntohl()" might be functions, that might actually produce worse code.) Fix some places to use "%u" rather than "%d" to print unsigned quantities.
114 lines
3.5 KiB
C
114 lines
3.5 KiB
C
/*
|
|
* 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 */
|