diff options
Diffstat (limited to 'usr.sbin/atm/atmarpd/atmarp_var.h')
-rw-r--r-- | usr.sbin/atm/atmarpd/atmarp_var.h | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/usr.sbin/atm/atmarpd/atmarp_var.h b/usr.sbin/atm/atmarpd/atmarp_var.h new file mode 100644 index 0000000..e8dfa4b --- /dev/null +++ b/usr.sbin/atm/atmarpd/atmarp_var.h @@ -0,0 +1,224 @@ +/* + * + * =================================== + * HARP | Host ATM Research Platform + * =================================== + * + * + * This Host ATM Research Platform ("HARP") file (the "Software") is + * made available by Network Computing Services, Inc. ("NetworkCS") + * "AS IS". NetworkCS does not provide maintenance, improvements or + * support of any kind. + * + * NETWORKCS MAKES NO WARRANTIES OR REPRESENTATIONS, EXPRESS OR IMPLIED, + * INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE, AS TO ANY ELEMENT OF THE + * SOFTWARE OR ANY SUPPORT PROVIDED IN CONNECTION WITH THIS SOFTWARE. + * In no event shall NetworkCS be responsible for any damages, including + * but not limited to consequential damages, arising from or relating to + * any use of the Software or related support. + * + * Copyright 1994-1998 Network Computing Services, Inc. + * + * Copies of this Software may be made, however, the above copyright + * notice must be reproduced on all copies. + * + * @(#) $Id: atmarp_var.h,v 1.6 1998/08/13 20:11:12 johnc Exp $ + * + */ + +/* + * Server Cache Synchronization Protocol (SCSP) Support + * ---------------------------------------------------- + * + * SCSP-ATMARP server interface: control blocks + * + */ + +#ifndef _ATMARP_ATMARP_VAR_H +#define _ATMARP_ATMARP_VAR_H + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +/* + * Operational constants + */ +#define ATMARP_DIR "/tmp" +#define ATMARP_SOCK_PREFIX "AA_" +#define ATMARP_CACHE_INTERVAL 50 +#define ATMARP_PERM_INTERVAL 600 +#define ATMARP_KEEPALIVE_INTERVAL 5 + + +/* + * Macros for manipulating ATMARP tables and entries + */ +#define ATMARP_HASHSIZ 19 /* Hash table size */ + +#define ATMARP_HASH(ip) ((u_long)(ip) % ATMARP_HASHSIZ) + +#define ATMARP_ADD(ai, aa) \ +{ \ + Atmarp **h; \ + h = &ai->ai_arptbl[ATMARP_HASH((aa)->aa_dstip.s_addr)]; \ + LINK2TAIL((aa), Atmarp, *h, aa_next); \ +} + +#define ATMARP_DELETE(ai, aa) \ +{ \ + Atmarp **h; \ + h = &ai->ai_arptbl[ATMARP_HASH((aa)->aa_dstip.s_addr)]; \ + UNLINK((aa), Atmarp, *h, aa_next); \ +} + +#define ATMARP_LOOKUP(ai, ip, aa) \ +{ \ + for ((aa) = (ai)->ai_arptbl[ATMARP_HASH(ip)]; \ + (aa); (aa) = (aa)->aa_next) { \ + if ((aa)->aa_dstip.s_addr == (ip)) \ + break; \ + } \ +} + + +/* + * Macro to compare originator ID structures + */ +#define OID_EQUAL(id1, id2) \ + (((id1)->id_len == (id2)->id_len) && \ + (bcmp((caddr_t)(id1)->id, \ + (caddr_t)(id2)->id, \ + (id1)->id_len) == 0)) + +#define KEY_EQUAL(key1, key2) \ + (((key1)->key_len == (key2)->key_len) && \ + (bcmp((caddr_t)(key1)->key, \ + (caddr_t)(key2)->key, \ + (key1)->key_len) == 0)) + + +/* + * Interface entry for ATMARP SCSP interface daemon + */ +struct atmarp_intf { + struct atmarp_intf *ai_next; /* Next chained I/F */ + char ai_intf[IFNAMSIZ]; /* Network I/F name */ + struct in_addr ai_ip_addr; /* IP address */ + struct in_addr ai_subnet_mask; /* Subnet mask */ + int ai_mtu; /* IP MTU */ + Atm_addr ai_atm_addr; /* ATM address */ + Atm_addr ai_atm_subaddr; /* ATM subaddress */ + int ai_scsp_sock; /* Socket to SCSP */ + Harp_timer ai_keepalive_t; /* Keepalive timer */ + char *ai_scsp_sockname; /* Socket name */ + u_char ai_state; /* Interface state */ + u_char ai_mark; + struct atmarp *ai_arptbl[ATMARP_HASHSIZ]; /* ARP cache */ +}; +typedef struct atmarp_intf Atmarp_intf; + +#define AI_STATE_NULL 0 +#define AI_STATE_UP 1 + + +/* + * Super-LIS control block for ATMARP server daemon + */ +struct atmarp_slis { + struct atmarp_slis *as_next; /* Next super-LIS */ + char *as_name; /* Name of super-LIS */ + int as_cnt; /* LIS count */ + Atmarp_intf *as_intfs; /* List of intfs */ +}; +typedef struct atmarp_slis Atmarp_slis; + + +/* + * ATMARP cache entry format + */ +struct atmarp { + struct atmarp *aa_next; /* Hash chain link */ + struct in_addr aa_dstip; /* Destination IP addr */ + Atm_addr aa_dstatm; /* Destination ATM addr */ + Atm_addr aa_dstatmsub; /* Destination ATM subaddr */ + struct scsp_ckey aa_key; /* SCSP cache key */ + struct scsp_id aa_oid; /* SCSP originator ID */ + long aa_seq; /* SCSP sequence no. */ + Atmarp_intf *aa_intf; /* Interface for entry */ + u_char aa_flags; /* Flags (see below) */ + u_char aa_origin; /* Entry origin */ + char aa_mark; /* Mark */ +}; +typedef struct atmarp Atmarp; + +/* + * ATMARP Entry Flags + */ +#define AAF_PERM 0x01 /* Entry is permanent */ +#define AAF_SERVER 0x02 /* Entry is for the server */ + + +/* + * Global variables + */ +extern char *prog; +extern int atmarp_debug_mode; +extern int atmarp_max_socket; +extern Atmarp_intf *atmarp_intf_head; +extern Atmarp_slis *atmarp_slis_head; +extern FILE *atmarp_log_file; + + +/* + * Function definitions + */ + +/* atmarp_config.c */ +extern int atmarp_cfg_netif __P((char *)); + +/* atmarp_log.c */ +#if __STDC__ +extern void atmarp_log __P((const int, const char *, ...)); +#else +extern void atmarp_log __P((int, char *, va_alist)); +#endif +extern void atmarp_mem_err __P((char *)); + +/* atmarp_scsp.c */ +extern int atmarp_scsp_cache __P((Atmarp_intf *, Scsp_if_msg *)); +extern int atmarp_scsp_update __P((Atmarp *, int)); +extern int atmarp_scsp_update_in __P((Atmarp_intf *, + Scsp_if_msg *)); +extern int atmarp_scsp_read __P((Atmarp_intf *)); +extern int atmarp_scsp_out __P((Atmarp_intf *, char *, int)); +extern int atmarp_scsp_connect __P((Atmarp_intf *)); +extern void atmarp_scsp_close __P((Atmarp_intf *)); +extern int atmarp_scsp_disconnect __P((Atmarp_intf *)); + +/* atmarp_subr.c */ +extern Atmarp_intf *atmarp_find_intf_sock __P((int)); +extern Atmarp_intf *atmarp_find_intf_name __P((char *)); +extern void atmarp_clear_marks __P(()); +extern int atmarp_is_server __P((Atmarp_intf *)); +extern int atmarp_if_ready __P((Atmarp_intf *)); +extern Atmarp * atmarp_copy_cache_entry __P((struct air_arp_rsp *)); +extern void atmarp_get_updated_cache __P(()); +extern void atmarp_process_cache_entry __P((struct air_arp_rsp *)); +extern void print_atmarp_intf __P((FILE *, Atmarp_intf *)); +extern void print_atmarp_cache __P((FILE *, Atmarp *)); +extern void dump_atmarp_cache __P((FILE *, Atmarp_intf *)); +extern void atmarp_sigint __P((int)); + +/* atmarp_timer.c */ +extern void atmarp_cache_timeout __P((Harp_timer *)); +extern void atmarp_perm_timeout __P((Harp_timer *)); +extern void atmarp_keepalive_timeout __P((Harp_timer *)); + + +#endif /* _ATMARP_ATMARP_VAR_H */ |