3 * ===================================
4 * HARP | Host ATM Research Platform
5 * ===================================
8 * This Host ATM Research Platform ("HARP") file (the "Software") is
9 * made available by Network Computing Services, Inc. ("NetworkCS")
10 * "AS IS". NetworkCS does not provide maintenance, improvements or
11 * support of any kind.
13 * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED,
14 * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
15 * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE
16 * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE.
17 * In no event shall NetworkCS be responsible for any damages, including
18 * but not limited to consequential damages, arising from or relating to
19 * any use of the Software or related support.
21 * Copyright 1994-1998 Network Computing Services, Inc.
23 * Copies of this Software may be made, however, the above copyright
24 * notice must be reproduced on all copies.
31 * Server Cache Synchronization Protocol (SCSP) Support
32 * ----------------------------------------------------
34 * SCSP message formats
38 #ifndef _SCSP_SCSP_MSG_H
39 #define _SCSP_SCSP_MSG_H
45 #define ARP_ATMFORUM 19
46 #define ARP_TL_TMASK 0x40 /* Type mask */
47 #define ARP_TL_NSAPA 0x00 /* Type = ATM Forum NSAPA */
48 #define ARP_TL_E164 0x40 /* Type = E.164 */
49 #define ARP_TL_LMASK 0x3f /* Length mask */
62 #define SCSP_CSU_REQ_MSG 2
63 #define SCSP_CSU_REPLY_MSG 3
64 #define SCSP_CSUS_MSG 4
65 #define SCSP_HELLO_MSG 5
69 * SCSP Client Protocol IDs
71 #define SCSP_PROTO_ATMARP 1
72 #define SCSP_PROTO_NHRP 2
73 #define SCSP_PROTO_MARS 3
74 #define SCSP_PROTO_DHCP 4
75 #define SCSP_PROTO_LNNI 5
81 #define SCSP_EXT_END 0
82 #define SCSP_EXT_AUTH 1
83 #define SCSP_EXT_VENDOR 2
86 * Sequence number bounds
88 #define SCSP_CSA_SEQ_MIN 0x80000001
89 #define SCSP_CSA_SEQ_MAX 0x7FFFFFFF
93 * Sender, Receiver, or Originator ID lengths
95 #define SCSP_ATMARP_ID_LEN 4
96 #define SCSP_NHRP_ID_LEN 4
97 #define SCSP_MAX_ID_LEN 4
103 #define SCSP_ATMARP_KEY_LEN 4
104 #define SCSP_NHRP_KEY_LEN 4
105 #define SCSP_MAX_KEY_LEN 4
112 u_char sh_ver; /* SCSP version */
113 u_char sh_type; /* Message type */
114 u_short sh_len; /* Message length */
115 u_short sh_checksum; /* IP checksum over message */
116 u_short sh_ext_off; /* Offset of first extension */
121 * Mandatory common part
124 u_short sm_pid; /* Protocol ID */
125 u_short sm_sgid; /* Server group ID */
126 u_short sm_fill_0; /* Unused */
127 u_short sm_flags; /* Flags--see below */
128 u_char sm_sid_len; /* Sender ID length */
129 u_char sm_rid_len; /* Receiver ID length */
130 u_short sm_rec_cnt; /* Number of records */
132 /* Variable length fields */
133 u_char sm_sid[]; /* Sender ID (variable) */
134 u_char sm_rid[]; /* Receiver ID (variable) */
143 u_short se_type; /* Extension type */
144 u_short se_len; /* Length */
146 /* Variable length fields */
147 u_char se_value[]; /* Extension value */
153 * Cache State Advertisement record or
154 * Cache State Advertisement Summary record
157 u_short scs_hop_cnt; /* Hop count */
158 u_short scs_len; /* Record length */
159 u_char scs_ck_len; /* Cache key length */
160 u_char scs_oid_len; /* Originator ID length */
161 u_short scs_nfill; /* Null bit and filler */
162 long scs_seq; /* Sequence number */
164 /* Variable length fields */
165 u_char scs_ckey[]; /* Cache key */
166 u_char scs_oid[]; /* Originator ID */
167 u_char scs_proto[]; /* Protocol-specific (in CSA) */
171 #define SCSP_CSAS_NULL 0x8000
175 * Cache Alignment message
178 long sca_seq; /* Sequence number */
179 struct scsp_nmcp sca_mcp; /* Mandatory common */
181 /* Variable length fields */
182 struct scsp_ncsa sca_rec[]; /* CSASs */
186 #define SCSP_CA_M 0x8000 /* Master/Slave bit */
187 #define SCSP_CA_I 0x4000 /* Initialization bit */
188 #define SCSP_CA_O 0x2000 /* More bit */
192 * Cache State Update Request, Cache State Update Reply, or
193 * Cache State Update Solicit message
195 struct scsp_ncsu_msg {
196 struct scsp_nmcp scr_mcp; /* Mandatory common */
198 /* Variable length fields */
199 struct scsp_ncsa scr_rec[]; /* CSAs */
208 u_short sch_hi; /* Hello interval */
209 u_short sch_df; /* Dead factor */
210 u_short sch_fill_0; /* Unused */
211 u_short sch_fid; /* Family ID */
212 struct scsp_nmcp sch_mcp; /* Mandatory common */
214 /* Variable-length fields */
215 struct scsp_nrid sch_rid[]; /* Receiver IDs */
221 * ATMARP-specific Cache State Advertisement record
223 struct scsp_atmarp_ncsa {
224 u_short sa_hrd; /* Hardware type -- 0x0013 */
225 u_short sa_pro; /* Protocol type -- 0x0800 */
226 u_char sa_shtl; /* Src ATM addr type/len */
227 u_char sa_sstl; /* Src ATM subaddr type/len */
228 u_char sa_state; /* State */
229 u_char sa_fill1; /* Unused */
230 u_char sa_spln; /* Src proto addr type */
231 u_char sa_thtl; /* Tgt ATM addr type/len */
232 u_char sa_tstl; /* Tgt ATM subaddr type/len */
233 u_char sa_tpln; /* Tgt proto addr len */
235 /* Variable-length fields */
236 u_char sa_sha[]; /* Source ATM addr */
237 u_char sa_ssa[]; /* Source ATM subaddr */
238 u_char sa_spa[]; /* Source IP addr */
239 u_char sa_tha[]; /* Target ATM addr */
240 u_char sa_tsa[]; /* Target ATM subaddr */
241 u_char sa_tpa[]; /* Target IP addr */
247 * NHRP-specific Cache State Advertisement record
249 struct scsp_nhrp_ncsa {
250 u_short sn_af; /* Address family */
251 u_short sn_pro; /* NHRP protocol type */
252 u_char sn_snap[5]; /* SNAP header */
253 u_char sn_ver; /* NHRP version no. */
254 u_short sn_flags; /* Flags */
255 u_long sn_rid; /* Request ID */
256 u_char sn_state; /* State */
257 u_char sn_pln; /* Prefix length */
258 u_short sn_fill1; /* Unused */
259 u_short sn_mtu; /* MTU */
260 u_short sn_hold; /* Holding time */
261 u_char sn_csatl; /* Client addr type/len */
262 u_char sn_csstl; /* Client subaddr type/len */
263 u_char sn_cpln; /* Client proto addr len */
264 u_char sn_pref; /* Preference for next hop */
266 /* Variable-length fields */
267 u_char sn_csa[]; /* Client subnetwork addr */
268 u_char sn_css[]; /* Client subnetwork subaddr */
269 u_char sn_cpa[]; /* Client protocol addr */
275 * SCSP messages in internal format
278 * Fixed message header
281 u_char msg_type; /* Message type */
283 typedef struct scsp_hdr Scsp_hdr;
287 * Sender or Receiver ID structure
290 struct scsp_id *next; /* Next ID */
291 u_char id_len; /* ID length */
292 u_char id[SCSP_MAX_ID_LEN]; /* ID */
294 typedef struct scsp_id Scsp_id;
298 * Cacke Key structure
301 u_char key_len; /* Cache key length */
302 u_char key[SCSP_MAX_KEY_LEN]; /* Cache key */
304 typedef struct scsp_ckey Scsp_ckey;
308 * Mandatory common part
311 u_short pid; /* Protocol ID */
312 u_short sgid; /* Server group ID */
313 u_short flags; /* Flags */
314 u_short rec_cnt; /* No. of records attached */
315 Scsp_id sid; /* Sender ID */
316 Scsp_id rid; /* Receiver ID */
318 typedef struct scsp_mcp Scsp_mcp;
325 struct scsp_ext *next; /* Next extension */
326 u_short type; /* Extension type */
327 u_short len; /* Length */
329 /* Variable length fields */
330 u_char value[]; /* Extension value */
333 typedef struct scsp_ext Scsp_ext;
337 * Cache State Advertisement record or
338 * Cache State Advertisement Summary record
341 struct scsp_csa *next; /* Next CSAS record */
342 u_short hops; /* Hop count */
343 u_char null; /* Null flag */
344 u_long seq; /* CSA seq. no. */
345 Scsp_ckey key; /* Cache key */
346 Scsp_id oid; /* Originator ID */
347 int trans_ct; /* No. of times CSA sent */
348 struct scsp_atmarp_csa *atmarp_data; /* ATMARP data */
350 struct scsp_nhrp_csa *nhrp_data; /* NHRP data */
353 typedef struct scsp_csa Scsp_csa;
356 * Macro to free a CSA and any associated protocol-specific data
358 #define SCSP_FREE_CSA(c) \
360 if ((c)->atmarp_data) \
361 free((c)->atmarp_data); \
367 * Cache Alignment message
370 long ca_seq; /* CA msg sequence no. */
371 u_char ca_m; /* Master/slave bit */
372 u_char ca_i; /* Initialization bit */
373 u_char ca_o; /* More bit */
374 Scsp_mcp ca_mcp; /* Mandatory common part */
375 Scsp_csa *ca_csa_rec; /* Ptr. to CSAS records */
377 typedef struct scsp_ca Scsp_ca;
381 * Cache State Update Request, Cache State Update Reply, or
382 * Cache State Update Solicit message
384 struct scsp_csu_msg {
385 Scsp_mcp csu_mcp; /* Mandatory common part */
386 Scsp_csa *csu_csa_rec; /* Ptr. to CSA records */
388 typedef struct scsp_csu_msg Scsp_csu_msg;
395 u_short hello_int; /* Hello interval */
396 u_short dead_factor; /* When is DCS dead? */
397 u_short family_id; /* Family ID */
398 Scsp_mcp hello_mcp; /* Mandatory common part */
400 typedef struct scsp_hello Scsp_hello;
404 * NHRP-specific Cache State Advertisement record
406 struct scsp_nhrp_csa {
407 u_char req_id; /* Request ID */
408 u_char state; /* State */
409 u_char pref_len; /* Prefix length */
410 u_short flags; /* See below */
411 u_short mtu; /* Maximim transmission unit */
412 u_short hold_time; /* Entry holding time */
413 u_char caddr_tlen; /* Client addr type/length */
414 u_char csaddr_tlen; /* Client subaddr type/length */
415 u_char cproto_len; /* Client proto addr length */
416 u_char pref; /* Preference */
417 Atm_addr caddr; /* Client address */
418 Atm_addr csaddr; /* Client subaddress */
419 struct in_addr cproto_addr; /* Client protocol address */
421 typedef struct scsp_nhrp Scsp_nhrp;
423 #define SCSP_NHRP_UNIQ 0x8000
424 #define SCSP_NHRP_ARP 0x4000
428 * ATMARP-specific Cache State Advertisement record
430 struct scsp_atmarp_csa {
431 u_char sa_state; /* State */
432 Atm_addr sa_sha; /* Source ATM addr */
433 Atm_addr sa_ssa; /* Source ATM subaddr */
434 struct in_addr sa_spa; /* Source IP addr */
435 Atm_addr sa_tha; /* Target ATM addr */
436 Atm_addr sa_tsa; /* Target ATM subaddr */
437 struct in_addr sa_tpa; /* Target IP addr */
439 typedef struct scsp_atmarp_csa Scsp_atmarp_csa;
449 Scsp_csu_msg *sc_u_csu_msg;
450 Scsp_hello *sc_u_hello;
454 typedef struct scsp_msg Scsp_msg;
456 #define sc_msg_type sc_hdr.msg_type
457 #define sc_ca sc_msg_u.sc_u_ca
458 #define sc_csu_msg sc_msg_u.sc_u_csu_msg
459 #define sc_hello sc_msg_u.sc_u_hello
461 #endif /* _SCSP_SCSP_MSG_H */