00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00026 #ifndef __WCCP_V1_PROTO_H__
00027 #define __WCCP_V1_PROTO_H__ 1
00028
00029 #include "types.h"
00030
00031
00032
00033
00034
00035
00037 #define WCCP1_PORT 2048
00038
00040 #define WCCP1_PROTO_VERSION_MIN 3
00041
00042 #define WCCP1_PROTO_VERSION_MAX 4
00043
00044 #define WCCP1_HASH_REVISION 0
00045
00047 enum WCCPV1_TYPES {
00049 WCCP1_HERE_I_AM = 7,
00051 WCCP1_I_SEE_YOU = 8,
00053 WCCP1_ASSIGN_BUCKET = 9
00054 };
00055
00057 #define WCCP1_HERE_I_AM_T 10
00058
00059 #define WCCP1_HERE_I_AM_TIMEOUT (3 * WCCP1_HERE_I_AM_T)
00060
00061 #define WCCP1_MAX_CACHES 32
00062
00064 #define WCCP1_MAX_PACKET_SIZE (sizeof(WCCP1_ASSIGN_BUCKET_MSG) + \
00065 (sizeof(u_int32) * WCCP1_MAX_CACHES) + \
00066 sizeof(WCCP1_ASSIGN_BUCKET_HASHINFO))
00067
00068
00069
00070
00071
00072
00073
00074
00076 typedef u_int32 WCCP1_HINFO [8];
00077
00079 typedef struct {
00081 u_int32 type;
00083 u_int32 version;
00085 u_int32 hrev;
00087 WCCP1_HINFO hinfo;
00088 #if defined(WORDS_BIGENDIAN)
00089
00090 u_int32 u:1,
00092 reserved:31;
00093 #else
00094 u_int32 reserved:1,
00095 u:31;
00096 #endif
00097
00098 u_int32 rid;
00099 } WCCP1_HERE_I_AM_MSG;
00100
00107 typedef struct {
00109 u_int32 type;
00111 u_int32 version;
00113 u_int32 chgnbr;
00115 u_int32 rid;
00117 u_int32 wccount;
00118
00119 } WCCP1_I_SEE_YOU_MSG;
00120
00122 typedef struct {
00124 u_int32 ip;
00126 u_int32 hrev;
00128 WCCP1_HINFO hinfo;
00129 #if defined(WORDS_BIGENDIAN)
00130
00131 u_int32 u:1,
00133 reserved:31;
00134 #else
00135 u_int32 reserved:1,
00136 u:31;
00137 #endif
00138 } WCCP1_I_SEE_YOU_WC_ENTRY;
00139
00147 typedef struct {
00149 u_int32 type;
00151 u_int32 rid;
00153 u_int32 wccount;
00154
00155
00156 } WCCP1_ASSIGN_BUCKET_MSG;
00157
00164 typedef struct {
00166 u_int8 bucket [256];
00167 } WCCP1_ASSIGN_BUCKET_HASHINFO;
00168
00169 #endif