diff options
Diffstat (limited to 'sys/netatm/spans/spans_cls.h')
-rw-r--r-- | sys/netatm/spans/spans_cls.h | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/sys/netatm/spans/spans_cls.h b/sys/netatm/spans/spans_cls.h new file mode 100644 index 000000000000..d2cacaca99e5 --- /dev/null +++ b/sys/netatm/spans/spans_cls.h @@ -0,0 +1,188 @@ +/* + * + * =================================== + * 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: spans_cls.h,v 1.6 1998/05/18 19:11:17 mks Exp $ + * + */ + +/* + * SPANS Signalling Manager + * --------------------------- + * + * SPANS Connectionless Datagram Service (CLS) control blocks + * + */ + +#ifndef _SPANS_SPANSCLS_H +#define _SPANS_SPANSCLS_H + +/* + * Protocol constants + */ +#define SPANSARP_AGING (60 * ATM_HZ) /* ARP aging timer */ +#define SPANSARP_RETRY (3 * ATM_HZ) /* ARP retry timer */ +#define SPANSARP_MAXAGE 20 /* Max ARP entry age (minutes)*/ +#define SPANSARP_HASHSIZ 19 /* Hash table size */ + + +/* + * SPANS CLS protocol structure. There will be one such structure for + * each SPANS signalling instance. + */ +struct spanscls { + struct spanscls *cls_next; /* Next attached cls instance */ + u_char cls_state; /* Protocol state (see below) */ + struct spans *cls_spans; /* Spans signalling instance */ + Atm_connection *cls_conn; /* Connection manager token */ + struct ip_nif *cls_ipnif; /* IP network interface */ +}; + +/* + * SPANS CLS Protocol States + */ +#define CLS_CLOSED 1 /* CLS PVC is closed */ +#define CLS_OPEN 2 /* CLS PVC is open */ + + +/* + * Structure for SPANS ARP mappings. Each of these structures will contain + * IP address to SPANS hardware address mappings. There will be one such + * structure for each IP address currently in use. + */ +struct spansarp { + struct arpmap sa_arpmap; /* Common entry header */ + struct spanscls *sa_cls; /* Interface where we learned answer */ + struct spansarp *sa_next; /* Hash chain */ + struct spansarp *sa_rnext; /* Retry chain */ + u_char sa_flags; /* Flags (see below) */ + u_char sa_origin; /* Origin (see below) */ + u_short sa_reftime; /* Entry reference time (minutes) */ + struct ipvcc *sa_ivp; /* IP VCCs waiting for answer */ +}; +#define sa_dstip sa_arpmap.am_dstip +#define sa_dstatm sa_arpmap.am_dstatm +#define sa_dstatmsub sa_arpmap.am_dstatmsub + +/* + * Entry Flags + */ +#define SAF_VALID ARPF_VALID /* Entry is valid */ +#define SAF_REFRESH ARPF_REFRESH /* Entry has been refreshed */ +#define SAF_LOCKED 0x04 /* Entry is locked */ + +/* + * Entry Origin + */ +#define SAO_PERM ARP_ORIG_PERM /* Entry is permanently installed */ +#define SAO_LOOKUP 20 /* Learned via lookup */ + + +/* + * SPANS CLS Packet Header + */ +struct spanscls_hdr { + /* IEEE 802.6 MAC header */ + spans_addr ch_dst; /* Destination SPANS address */ + spans_addr ch_src; /* Source SPANS address */ + u_char ch_proto; /* */ + u_char ch_extlen; /* */ + u_short ch_bridging; /* */ + + /* LLC SNAP header */ + u_char ch_dsap; /* Destination SAP */ + u_char ch_ssap; /* Source SAP */ + u_char ch_ctl; /* Control field */ + u_char ch_oui[3]; /* Organizationally Unique Identifier */ + u_short ch_pid; /* Protocol Identifier */ +}; + +/* + * SPANS ARP Packet Format + */ +struct spansarp_hdr { + u_short ah_hrd; /* Hardware type (see below) */ + u_short ah_pro; /* Protocol type */ + u_char ah_hln; /* Length of hardware address */ + u_char ah_pln; /* Length of protocol address */ + u_short ah_op; /* Operation code (see below) */ + spans_addr ah_sha; /* Source hardware address */ + u_char ah_spa[4]; /* Source protocol address */ + spans_addr ah_tha; /* Target hardware address */ + u_char ah_tpa[4]; /* Target protocol address */ +}; + +/* + * Hardware types + */ +#define ARP_SPANS 0x4040 + +/* + * Operation types + */ +#define ARP_REQUEST 1 /* SPANSARP request */ +#define ARP_REPLY 2 /* SPANSARP response */ + +#define ARP_PACKET_LEN \ + (sizeof(struct spanscls_hdr) + sizeof(struct spansarp_hdr)) + +#ifdef ATM_KERNEL +/* + * Macros for manipulating SPANS ARP tables and entries + */ +#define SPANSARP_HASH(ip) ((u_long)(ip) % SPANSARP_HASHSIZ) + +#define SPANSARP_ADD(sa) \ +{ \ + struct spansarp **h; \ + h = &spansarp_arptab[SPANSARP_HASH((sa)->sa_dstip.s_addr)]; \ + LINK2TAIL((sa), struct spansarp, *h, sa_next); \ +} + +#define SPANSARP_DELETE(sa) \ +{ \ + struct spansarp **h; \ + h = &spansarp_arptab[SPANSARP_HASH((sa)->sa_dstip.s_addr)]; \ + UNLINK((sa), struct spansarp, *h, sa_next); \ +} + +#define SPANSARP_LOOKUP(ip, sa) \ +{ \ + for ((sa) = spansarp_arptab[SPANSARP_HASH(ip)]; \ + (sa); (sa) = (sa)->sa_next) { \ + if ((sa)->sa_dstip.s_addr == (ip)) \ + break; \ + } \ +} + + +/* + * External variables + */ +extern struct spanscls *spanscls_head; +extern struct spanscls_hdr spanscls_hdr; + +#endif /* ATM_KERNEL */ + +#endif /* _SPANS_SPANSCLS_H */ |