xref: /csrg-svn/sys/netiso/eonvar.h (revision 63222)
149268Sbostic /*-
2*63222Sbostic  * Copyright (c) 1991, 1993
3*63222Sbostic  *	The Regents of the University of California.  All rights reserved.
449268Sbostic  *
549268Sbostic  * %sccs.include.redist.c%
649268Sbostic  *
7*63222Sbostic  *	@(#)eonvar.h	8.1 (Berkeley) 06/10/93
849268Sbostic  */
949268Sbostic 
1036378Ssklower /***********************************************************
1136378Ssklower 		Copyright IBM Corporation 1987
1236378Ssklower 
1336378Ssklower                       All Rights Reserved
1436378Ssklower 
1536378Ssklower Permission to use, copy, modify, and distribute this software and its
1636378Ssklower documentation for any purpose and without fee is hereby granted,
1736378Ssklower provided that the above copyright notice appear in all copies and that
1836378Ssklower both that copyright notice and this permission notice appear in
1936378Ssklower supporting documentation, and that the name of IBM not be
2036378Ssklower used in advertising or publicity pertaining to distribution of the
2136378Ssklower software without specific, written prior permission.
2236378Ssklower 
2336378Ssklower IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
2436378Ssklower ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
2536378Ssklower IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
2636378Ssklower ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
2736378Ssklower WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
2836378Ssklower ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
2936378Ssklower SOFTWARE.
3036378Ssklower 
3136378Ssklower ******************************************************************/
3236378Ssklower 
3336378Ssklower /*
3436378Ssklower  * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
3536378Ssklower  */
3636378Ssklower 
3736378Ssklower #define EON_986_VERSION 0x3
3836378Ssklower #define EON_VERSION 0x1
3936378Ssklower 
4036378Ssklower #define EON_CACHESIZE 30
4136378Ssklower 
4236378Ssklower #define E_FREE 	1
4336378Ssklower #define E_LINK	2
4436378Ssklower #define E_ES 	3
4536378Ssklower #define E_IS 	4
4636378Ssklower 
4736378Ssklower 
4836378Ssklower /*
4936378Ssklower  * this overlays a sockaddr_iso
5036378Ssklower  */
5136378Ssklower 
5236378Ssklower struct sockaddr_eon {
5337469Ssklower 	u_char 			seon_len;	/* Length */
5437469Ssklower 	u_char 			seon_family;	/* AF_ISO */
5537469Ssklower 	u_char			seon_status;	/* overlays session suffixlen */
5636378Ssklower #define EON_ESLINK_UP		0x1
5736378Ssklower #define EON_ESLINK_DOWN		0x2
5836378Ssklower #define EON_ISLINK_UP		0x10
5936378Ssklower #define EON_ISLINK_DOWN		0x20
6036378Ssklower /* no change is neither up or down */
6137469Ssklower 	u_char			seon_pad1;	/* 0, overlays tsfxlen */
6237469Ssklower 	u_char			seon_adrlen;
6336378Ssklower 	u_char			seon_afi;		/* 47 */
6436378Ssklower 	u_char			seon_idi[2];	/* 0006 */
6536378Ssklower 	u_char			seon_vers;		/* 03 */
6637469Ssklower 	u_char			seon_glbnum[2];	/* see RFC 1069 */
6737469Ssklower 	u_char			seon_RDN[2];	/* see RFC 1070 */
6837469Ssklower 	u_char			seon_pad2[3];	/* see RFC 1070 */
6937469Ssklower 	u_char			seon_LAREA[2];	/* see RFC 1070 */
7037469Ssklower 	u_char			seon_pad3[2];	/* see RFC 1070 */
7136378Ssklower 		/* right now ip addr is  aligned  -- be careful --
7236378Ssklower 		 * future revisions may have it u_char[4]
7336378Ssklower 		 */
7436378Ssklower 	u_int			seon_ipaddr;	/* a.b.c.d */
7537469Ssklower 	u_char			seon_protoid;	/* NSEL */
7636378Ssklower };
7736378Ssklower 
7837469Ssklower #ifdef EON_TEMPLATE
7936378Ssklower struct sockaddr_eon eon_template = {
8037469Ssklower 	sizeof (eon_template), AF_ISO, 0, 0, 0x14,
8137469Ssklower 	0x47, 0x0, 0x6, 0x3, 0
8236378Ssklower };
8337469Ssklower #endif
8436378Ssklower 
8536378Ssklower #define DOWNBITS ( EON_ESLINK_DOWN | EON_ISLINK_DOWN )
8636378Ssklower #define UPBITS ( EON_ESLINK_UP | EON_ISLINK_UP )
8736378Ssklower 
8837469Ssklower #define	SIOCSEONCORE _IOWR('i',10, struct iso_ifreq) /* EON core member */
8937469Ssklower #define	SIOCGEONCORE _IOWR('i',11, struct iso_ifreq) /* EON core member */
9037469Ssklower 
9136378Ssklower struct eon_hdr {
9236378Ssklower 	u_char 	eonh_vers; /* value 1 */
9336378Ssklower 	u_char 	eonh_class;  /* address multicast class, below */
9436378Ssklower #define		EON_NORMAL_ADDR		0x0
9536378Ssklower #define		EON_MULTICAST_ES	0x1
9636378Ssklower #define		EON_MULTICAST_IS	0x2
9736378Ssklower #define		EON_BROADCAST		0x3
9836378Ssklower 	u_short eonh_csum;  /* osi checksum (choke)*/
9936378Ssklower };
10040778Ssklower struct eon_iphdr {
10140778Ssklower 	struct	ip	ei_ip;
10240778Ssklower 	struct	eon_hdr	ei_eh;
10340778Ssklower };
10437469Ssklower #define EONIPLEN (sizeof(struct eon_hdr) + sizeof(struct ip))
10536378Ssklower 
10636378Ssklower /* stole these 2 fields of the flags for I-am-ES and I-am-IS */
10736378Ssklower #define	IFF_ES	0x400
10836378Ssklower #define	IFF_IS	0x800
10936378Ssklower 
11036378Ssklower struct eon_stat {
11136378Ssklower 	int	es_in_multi_es;
11236378Ssklower 	int	es_in_multi_is;
11336378Ssklower 	int	es_in_broad;
11436378Ssklower 	int	es_in_normal;
11536378Ssklower 	int	es_out_multi_es;
11636378Ssklower 	int	es_out_multi_is;
11736378Ssklower 	int	es_out_broad;
11836378Ssklower 	int	es_out_normal;
11936378Ssklower 	int	es_ipout;
12036378Ssklower 
12136378Ssklower 	int	es_icmp[PRC_NCMDS];
12236378Ssklower 	/* errors */
12336378Ssklower 	int	es_badcsum;
12436378Ssklower 	int	es_badhdr;
12536378Ssklower } eonstat;
12636378Ssklower 
12736378Ssklower #undef IncStat
12836378Ssklower #define IncStat(xxx) eonstat.xxx++
12937469Ssklower 
13037469Ssklower typedef struct qhdr {
13137469Ssklower 	struct qhdr *link, *rlink;
13237469Ssklower } *queue_t;
13340778Ssklower 
13440778Ssklower struct eon_llinfo {
13540778Ssklower 	struct	qhdr el_qhdr;		/* keep all in a list */
13640778Ssklower 	int	el_flags;		/* cache valid ? */
13742320Ssklower 	int	el_snpaoffset;		/* IP address contained in dst nsap */
13840778Ssklower 	struct	rtentry *el_rt;		/* back pointer to parent route */
13940778Ssklower 	struct	eon_iphdr el_ei;	/* precomputed portion of hdr */
14040778Ssklower 	struct	route el_iproute;	/* if direct route cache IP info */
14140778Ssklower 					/* if gateway, cache secondary route */
14240778Ssklower };
14340778Ssklower #define el_iphdr el_ei.ei_ip
14440778Ssklower #define el_eonhdr el_ei.ei_eh
145