]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.sbin/atm/scspd/scsp_var.h
This commit was generated by cvs2svn to compensate for changes in r171577,
[FreeBSD/FreeBSD.git] / usr.sbin / atm / scspd / scsp_var.h
1 /*
2  *
3  * ===================================
4  * HARP  |  Host ATM Research Platform
5  * ===================================
6  *
7  *
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.
12  *
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.
20  *
21  * Copyright 1994-1998 Network Computing Services, Inc.
22  *
23  * Copies of this Software may be made, however, the above copyright
24  * notice must be reproduced on all copies.
25  *
26  *      @(#) $FreeBSD$
27  *
28  */
29
30 /*
31  * Server Cache Synchronization Protocol (SCSP) Support
32  * ----------------------------------------------------
33  *
34  * SCSP message formats
35  *
36  */
37
38 #ifndef _SCSP_SCSP_VAR_H
39 #define _SCSP_SCSP_VAR_H
40
41
42 /*
43  * Protocol constants
44  */
45 #define SCSP_Open_Interval      30
46 #define SCSP_HELLO_Interval     3
47 #define SCSP_HELLO_DF           3
48 #define SCSP_CAReXmitInterval   3
49 #define SCSP_CSUSReXmitInterval 3
50 #define SCSP_CSA_HOP_CNT        3
51 #define SCSP_CSUReXmitInterval  2
52 #define SCSP_CSUReXmitMax       5
53
54
55 /*
56  * Operational constants
57  */
58 #define SCSPD_CONFIG    "/etc/scspd.conf"
59 #define SCSPD_DIR       "/tmp"
60 #define SCSPD_DUMP      "/tmp/scspd.dump"
61 #define SCSP_HASHSZ     19
62 #define SCSPD_SOCK_NAME "SCSPD"
63
64
65 /*
66  * HELLO finite state machine states
67  */
68 #define SCSP_HFSM_DOWN          0
69 #define SCSP_HFSM_WAITING       1
70 #define SCSP_HFSM_UNI_DIR       2
71 #define SCSP_HFSM_BI_DIR        3
72 #define SCSP_HFSM_STATE_CNT     SCSP_HFSM_BI_DIR + 1
73
74
75 /*
76  * HELLO finite state machine events
77  */
78 #define SCSP_HFSM_VC_ESTAB      0
79 #define SCSP_HFSM_VC_CLOSED     1
80 #define SCSP_HFSM_HELLO_T       2
81 #define SCSP_HFSM_RCV_T         3
82 #define SCSP_HFSM_RCVD          4
83 #define SCSP_HFSM_EVENT_CNT     SCSP_HFSM_RCVD + 1
84
85
86 /*
87  * Cache Alignment finite state machine states
88  */
89 #define SCSP_CAFSM_DOWN         0
90 #define SCSP_CAFSM_NEG          1
91 #define SCSP_CAFSM_MASTER       2
92 #define SCSP_CAFSM_SLAVE        3
93 #define SCSP_CAFSM_UPDATE       4
94 #define SCSP_CAFSM_ALIGNED      5
95 #define SCSP_CAFSM_STATE_CNT    SCSP_CAFSM_ALIGNED + 1
96
97
98 /*
99  * Cache Alignment finite state machine events
100  */
101 #define SCSP_CAFSM_HELLO_UP     0
102 #define SCSP_CAFSM_HELLO_DOWN   1
103 #define SCSP_CAFSM_CA_MSG       2
104 #define SCSP_CAFSM_CSUS_MSG     3
105 #define SCSP_CAFSM_CSU_REQ      4
106 #define SCSP_CAFSM_CSU_REPLY    5
107 #define SCSP_CAFSM_CA_T         6
108 #define SCSP_CAFSM_CSUS_T       7
109 #define SCSP_CAFSM_CSU_T        8
110 #define SCSP_CAFSM_CACHE_UPD    9
111 #define SCSP_CAFSM_CACHE_RSP    10
112 #define SCSP_CAFSM_EVENT_CNT    SCSP_CAFSM_CACHE_RSP + 1
113
114
115 /*
116  * Client Interface finite state machine states
117  */
118 #define SCSP_CIFSM_NULL         0
119 #define SCSP_CIFSM_SUM          1
120 #define SCSP_CIFSM_UPD          2
121 #define SCSP_CIFSM_ALIGN        3
122 #define SCSP_CIFSM_STATE_CNT            SCSP_CIFSM_ALIGN + 1
123
124
125 /*
126  * Client Interface finite state machine events
127  */
128 #define SCSP_CIFSM_CA_DOWN      0
129 #define SCSP_CIFSM_CA_SUMM      1
130 #define SCSP_CIFSM_CA_UPD       2
131 #define SCSP_CIFSM_CA_ALIGN     3
132 #define SCSP_CIFSM_SOL_RSP      4
133 #define SCSP_CIFSM_UPD_REQ      5
134 #define SCSP_CIFSM_UPD_RSP      6
135 #define SCSP_CIFSM_CSU_REQ      7
136 #define SCSP_CIFSM_CSU_REPLY    8
137 #define SCSP_CIFSM_CSU_SOL      9
138 #define SCSP_CIFSM_EVENT_CNT    SCSP_CIFSM_CSU_SOL + 1
139
140
141 /*
142  * Server connection states (not part of any FSM)
143  */
144 #define SCSP_SS_NULL    0
145 #define SCSP_SS_CFG     1
146 #define SCSP_SS_ACTIVE  2
147
148
149 /*
150  * Hash a cache key
151  *
152  *      key     pointer to an Scsp_ckey structure
153  */
154 #define SCSP_HASH(key)  scsp_hash((key))
155
156
157 /*
158  * Add a cache summary entry to a client's cache summary
159  *
160  *      cpp     pointer to a server control block
161  *      key     pointer to an Scsp_cse structure
162  */
163 #define SCSP_ADD(cpp, key)                                      \
164 {                                                               \
165         Scsp_cse        **c;                                    \
166         c = &(cpp)->ss_cache[SCSP_HASH(&(key)->sc_key)];        \
167         LINK2TAIL((key), Scsp_cse, *c, sc_next);                \
168 }
169
170
171 /*
172  * Delete a cache summary entry from a client's cache summary
173  *
174  *      cpp     pointer to a server control block
175  *      s       pointer to an Scsp_cse structure
176  */
177 #define SCSP_DELETE(cpp, s)                             \
178 {                                                       \
179         Scsp_cse        **c;                            \
180         c = &(cpp)->ss_cache[SCSP_HASH(&(s)->sc_key)];  \
181         UNLINK((s), Scsp_cse, *c, sc_next);             \
182 }
183
184
185 /*
186  * Search a client's cache summary for a given key
187  *
188  *      cpp     pointer to a server control block
189  *      key     pointer to an Scsp_ckey structure to find
190  *      s       Scsp_cse structure pointer to be set
191  */
192 #define SCSP_LOOKUP(cpp, key, s)                                \
193 {                                                               \
194         for ((s) = (cpp)->ss_cache[SCSP_HASH(key)];             \
195                         (s);                                    \
196                         (s) = (s)->sc_next) {                   \
197                 if (scsp_cmp_key((key), &(s)->sc_key) == 0)     \
198                         break;                                  \
199         }                                                       \
200 }
201
202
203 /*
204  * SCSP pending connection control block
205  *
206  * The pending connection block is used to keep track of server
207  * connections which are open but haven't been identified yet.
208  */
209 struct scsp_pending {
210         struct scsp_pending     *sp_next;
211         int                     sp_sock;
212 };
213 typedef struct scsp_pending     Scsp_pending;
214
215
216 /*
217  * SCSP Server instance control block
218  */
219 struct scsp_server {
220         struct scsp_server      *ss_next;       /* Server chain */
221         char            *ss_name;               /* Server name */
222         char            ss_intf[IFNAMSIZ];      /* Interface */
223         Atm_media       ss_media;       /* Physical comm medium */
224         char            ss_state;       /* Server connection state */
225         u_long          ss_pid;         /* Protocol ID */
226         int             ss_id_len;      /* ID length */
227         int             ss_ckey_len;    /* Cache key length */
228         u_long          ss_sgid;        /* Server group ID */
229         u_long          ss_fid;         /* Family ID */
230         int             ss_sock;        /* Socket to client */
231         int             ss_dcs_lsock;   /* DCS listen socket */
232         Scsp_id         ss_lsid;        /* Local Server ID */
233         Atm_addr        ss_addr;        /* Local ATM addr */
234         Atm_addr        ss_subaddr;     /* Local ATM subaddr */
235         int             ss_mtu;         /* Interface MTU */
236         int             ss_mark;
237         struct scsp_dcs *ss_dcs;        /* Ptr to list of DCSs */
238         struct scsp_cse *ss_cache[SCSP_HASHSZ]; /* Client's cache */
239 };
240 typedef struct scsp_server      Scsp_server;
241
242
243 /*
244  * SCSP client cache summary entry control block
245  */
246 struct scsp_cse {
247         struct scsp_cse *sc_next;       /* Next on chain */
248         long            sc_seq;         /* CSA sequence no */
249         Scsp_ckey       sc_key;         /* Cache key */
250         Scsp_id         sc_oid;         /* Origin ID */
251 };
252 typedef struct scsp_cse Scsp_cse;
253
254
255 /*
256  * CSU Request retransmission control block
257  */
258 struct scsp_csu_rexmt {
259         struct scsp_csu_rexmt   *sr_next;       /* Next rexmit block */
260         struct scsp_dcs         *sr_dcs;        /* DCS block */
261         Scsp_csa                *sr_csa;        /* CSAs for rexmit */
262         Harp_timer              sr_t;           /* Rexmit timer */
263 };
264 typedef struct scsp_csu_rexmt   Scsp_csu_rexmt;
265
266
267 /*
268  * SCSP DCS control block
269  */
270 struct scsp_dcs {
271         struct scsp_dcs *sd_next;       /* DCS chain */
272         Scsp_server     *sd_server;     /* Local server */
273         Scsp_id         sd_dcsid;       /* DCS ID */
274         Atm_addr        sd_addr;        /* DCS ATM address */
275         Atm_addr        sd_subaddr;     /* DCS ATM subaddress */
276         int             sd_sock;        /* Socket to DCS */
277         Harp_timer      sd_open_t;      /* Open VCC retry timer */
278         int             sd_hello_state; /* Hello FSM state */
279         int             sd_hello_int;   /* Hello interval */
280         int             sd_hello_df;    /* Hello dead factor */
281         int             sd_hello_rcvd;  /* Hello msg received */
282         Harp_timer      sd_hello_h_t;   /* Hello timer */
283         Harp_timer      sd_hello_rcv_t; /* Hello receive timer */
284         int             sd_ca_state;    /* CA FSM state */
285         long            sd_ca_seq;      /* CA sequence number */
286         int             sd_ca_rexmt_int;        /* CA rexmit interval */
287         Scsp_msg        *sd_ca_rexmt_msg;       /* Saved CA msg */
288         Scsp_cse        *sd_ca_csas;            /* CSAS still to send */
289         Harp_timer      sd_ca_rexmt_t;          /* CA rexmit timer */
290         int             sd_csus_rexmt_int;      /* CSUS rexmit int */
291         Scsp_csa        *sd_crl;                /* Cache req list */
292         Scsp_msg        *sd_csus_rexmt_msg;     /* Saved CSUS msg */
293         Harp_timer      sd_csus_rexmt_t;        /* CSUS rexmit timer */
294         int             sd_hops;                /* CSA hop count */
295         Scsp_csa        *sd_csu_ack_pend;       /* CSUs to be ACKed */
296         Scsp_csa        *sd_csu_ack;            /* CSUs ACKed */
297         int             sd_csu_rexmt_int;       /* CSU Req rxmt time */
298         int             sd_csu_rexmt_max;       /* CSU Req rxmt limit */
299         Scsp_csu_rexmt  *sd_csu_rexmt;          /* CSU Req rxmt queue */
300         int             sd_client_state;        /* Client I/F state */
301 };
302 typedef struct scsp_dcs Scsp_dcs;
303
304 /*
305  * Trace options
306  */
307 #define SCSP_TRACE_HFSM         1       /* Trace the Hello FSM */
308 #define SCSP_TRACE_CAFSM        2       /* Trace the CA FSM */
309 #define SCSP_TRACE_CFSM         4       /* Trace the server I/F FSM */
310 #define SCSP_TRACE_HELLO_MSG    8       /* Trace Hello protocol msgs */
311 #define SCSP_TRACE_CA_MSG       16      /* Trace CA protocol msgs */
312 #define SCSP_TRACE_IF_MSG       32      /* Trace server I/F msgs */
313
314
315 /*
316  * Global variables
317  */
318 extern char             *prog;
319 extern FILE             *cfg_file;
320 extern int              parse_line;
321 extern char             *scsp_config_file;
322 extern FILE             *scsp_log_file;
323 extern int              scsp_log_syslog;
324 extern Scsp_server      *scsp_server_head;
325 extern Scsp_pending     *scsp_pending_head;
326 extern int              scsp_max_socket;
327 extern int              scsp_debug_mode;
328 extern int              scsp_trace_mode;
329 extern FILE             *scsp_trace_file;
330
331
332 /*
333  * Executable functions
334  */
335 /* scsp_cafsm.c */
336 extern int      scsp_cafsm(Scsp_dcs *, int, void *);
337
338 /* scsp_config.c */
339 extern int      scsp_config(char *);
340 extern int      start_dcs(void);
341 extern int      finish_dcs(void);
342 extern int      set_dcs_addr(char *, char *);
343 extern int      set_dcs_ca_rexmit(int);
344 extern int      set_dcs_csus_rexmit(int);
345 extern int      set_dcs_csu_rexmit(int);
346 extern int      set_dcs_csu_rexmit_max(int);
347 extern int      set_dcs_hello_df(int);
348 extern int      set_dcs_hello_int(int);
349 extern int      set_dcs_hops(int);
350 extern int      set_dcs_id(char *);
351 extern int      set_intf(char *);
352 extern int      set_protocol(int);
353 extern int      set_server_group(int);
354 extern int      start_server(char *);
355 extern int      finish_server(void);
356 extern int      set_log_file(char *);
357
358 /* scsp_config_lex.c */
359 extern int      yylex(void);
360
361 /* scsp_config_parse.y */
362 #if __STDC__
363 extern void     parse_error(const char *, ...);
364 #else
365 extern void     parse_error(char *, va_alist);
366 #endif
367
368 /* scsp_hfsm.c */
369 extern int      scsp_hfsm(Scsp_dcs *, int, Scsp_msg *);
370
371 /* scsp_if.c */
372 extern int      scsp_cfsm(Scsp_dcs *, int, Scsp_msg *, Scsp_if_msg *);
373
374 /* scsp_input.c */
375 extern void     scsp_free_msg(Scsp_msg *);
376 extern Scsp_msg *scsp_parse_msg(char *, int);
377
378 /* scsp_log.c */
379 #if __STDC__
380 extern void     scsp_log(const int, const char *, ...);
381 extern void     scsp_trace(const char *, ...);
382 #else
383 extern void     scsp_log(int, char *, va_alist);
384 extern void     scsp_trace(const char *, va_alist);
385 #endif
386 extern void     scsp_open_trace();
387 extern void     scsp_trace_msg(Scsp_dcs *, Scsp_msg *, int);
388 extern void     scsp_mem_err(char *);
389
390 /* scsp_msg.c */
391 extern void     scsp_csus_ack(Scsp_dcs *, Scsp_msg *);
392 extern int      scsp_send_ca(Scsp_dcs *);
393 extern int      scsp_send_csus(Scsp_dcs *);
394 extern int      scsp_send_csu_req(Scsp_dcs *, Scsp_csa *);
395 extern int      scsp_send_csu_reply(Scsp_dcs *, Scsp_csa *);
396 extern int      scsp_send_hello(Scsp_dcs *);
397
398 /* scsp_output.c */
399 extern int      scsp_format_msg(Scsp_dcs *, Scsp_msg *, char **);
400 extern int      scsp_send_msg(Scsp_dcs *, Scsp_msg *);
401
402 /* scsp_print.c */
403 extern char     *format_hfsm_state(int);
404 extern char     *format_hfsm_event(int);
405 extern char     *format_cafsm_state(int);
406 extern char     *format_cafsm_event(int);
407 extern char     *format_cifsm_state(int);
408 extern char     *format_cifsm_event(int);
409 extern void     print_scsp_cse(FILE *, Scsp_cse *);
410 extern void     print_scsp_msg(FILE *, Scsp_msg *);
411 extern void     print_scsp_if_msg(FILE *, Scsp_if_msg *);
412 extern void     print_scsp_pending(FILE *, Scsp_pending *);
413 extern void     print_scsp_server(FILE *, Scsp_server *);
414 extern void     print_scsp_dcs(FILE *, Scsp_dcs *);
415 extern void     print_scsp_dump();
416
417 /* scsp_socket.c */
418 extern Scsp_dcs *       scsp_find_dcs(int);
419 extern Scsp_server *    scsp_find_server(int);
420 extern int              scsp_dcs_connect(Scsp_dcs *);
421 extern int              scsp_dcs_listen(Scsp_server *);
422 extern Scsp_dcs *       scsp_dcs_accept(Scsp_server *);
423 extern int              scsp_dcs_read(Scsp_dcs *);
424 extern int              scsp_server_listen();
425 extern int              scsp_server_accept(int);
426 extern Scsp_if_msg *    scsp_if_sock_read(int);
427 extern int              scsp_if_sock_write(int, Scsp_if_msg *);
428 extern int              scsp_server_read(Scsp_server *);
429 extern int              scsp_send_cache_ind(Scsp_server *);
430 extern int              scsp_pending_read(Scsp_pending *);
431
432 /* scsp_subr.c */
433 extern int              scsp_hash(Scsp_ckey *);
434 extern int              scsp_cmp_id(Scsp_id *, Scsp_id *);
435 extern int              scsp_cmp_key(Scsp_ckey *, Scsp_ckey *);
436 extern int              scsp_is_atmarp_server(char *);
437 extern Scsp_cse *       scsp_dup_cse(Scsp_cse *);
438 extern Scsp_csa *       scsp_dup_csa(Scsp_csa *);
439 extern Scsp_csa *       scsp_cse2csas(Scsp_cse *);
440 extern void             scsp_dcs_cleanup(Scsp_dcs *);
441 extern void             scsp_dcs_delete(Scsp_dcs *);
442 extern void             scsp_server_shutdown(Scsp_server *);
443 extern void             scsp_server_delete(Scsp_server *);
444 extern int              scsp_get_server_info(Scsp_server *);
445 extern void             scsp_process_ca(Scsp_dcs *, Scsp_ca *);
446 extern void             scsp_process_cache_rsp(Scsp_server *, Scsp_if_msg *);
447 extern int              scsp_propagate_csa( Scsp_dcs *, Scsp_csa *);
448 extern void             scsp_update_cache( Scsp_dcs *, Scsp_csa *);
449 extern void             scsp_reconfigure();
450
451 /* scsp_timer.c */
452 extern void     scsp_open_timeout(Harp_timer *);
453 extern void     scsp_hello_timeout(Harp_timer *);
454 extern void     scsp_hello_rcv_timeout(Harp_timer *);
455 extern void     scsp_ca_retran_timeout(Harp_timer *);
456 extern void     scsp_csus_retran_timeout(Harp_timer *);
457 extern void     scsp_csu_req_retran_timeout(Harp_timer *);
458
459
460
461 #endif  /* _SCSP_SCSP_VAR_H */