xref: /csrg-svn/sys/netiso/eonvar.h (revision 42320)
136378Ssklower /***********************************************************
236378Ssklower 		Copyright IBM Corporation 1987
336378Ssklower 
436378Ssklower                       All Rights Reserved
536378Ssklower 
636378Ssklower Permission to use, copy, modify, and distribute this software and its
736378Ssklower documentation for any purpose and without fee is hereby granted,
836378Ssklower provided that the above copyright notice appear in all copies and that
936378Ssklower both that copyright notice and this permission notice appear in
1036378Ssklower supporting documentation, and that the name of IBM not be
1136378Ssklower used in advertising or publicity pertaining to distribution of the
1236378Ssklower software without specific, written prior permission.
1336378Ssklower 
1436378Ssklower IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
1536378Ssklower ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
1636378Ssklower IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
1736378Ssklower ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
1836378Ssklower WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
1936378Ssklower ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
2036378Ssklower SOFTWARE.
2136378Ssklower 
2236378Ssklower ******************************************************************/
2336378Ssklower 
2436378Ssklower /*
2536378Ssklower  * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
26*42320Ssklower  *	@(#)eonvar.h	7.4 (Berkeley) 05/24/90
2736378Ssklower  */
2836378Ssklower 
2936378Ssklower #define EON_986_VERSION 0x3
3036378Ssklower #define EON_VERSION 0x1
3136378Ssklower 
3236378Ssklower #define EON_CACHESIZE 30
3336378Ssklower 
3436378Ssklower #define E_FREE 	1
3536378Ssklower #define E_LINK	2
3636378Ssklower #define E_ES 	3
3736378Ssklower #define E_IS 	4
3836378Ssklower 
3936378Ssklower 
4036378Ssklower /*
4136378Ssklower  * this overlays a sockaddr_iso
4236378Ssklower  */
4336378Ssklower 
4436378Ssklower struct sockaddr_eon {
4537469Ssklower 	u_char 			seon_len;	/* Length */
4637469Ssklower 	u_char 			seon_family;	/* AF_ISO */
4737469Ssklower 	u_char			seon_status;	/* overlays session suffixlen */
4836378Ssklower #define EON_ESLINK_UP		0x1
4936378Ssklower #define EON_ESLINK_DOWN		0x2
5036378Ssklower #define EON_ISLINK_UP		0x10
5136378Ssklower #define EON_ISLINK_DOWN		0x20
5236378Ssklower /* no change is neither up or down */
5337469Ssklower 	u_char			seon_pad1;	/* 0, overlays tsfxlen */
5437469Ssklower 	u_char			seon_adrlen;
5536378Ssklower 	u_char			seon_afi;		/* 47 */
5636378Ssklower 	u_char			seon_idi[2];	/* 0006 */
5736378Ssklower 	u_char			seon_vers;		/* 03 */
5837469Ssklower 	u_char			seon_glbnum[2];	/* see RFC 1069 */
5937469Ssklower 	u_char			seon_RDN[2];	/* see RFC 1070 */
6037469Ssklower 	u_char			seon_pad2[3];	/* see RFC 1070 */
6137469Ssklower 	u_char			seon_LAREA[2];	/* see RFC 1070 */
6237469Ssklower 	u_char			seon_pad3[2];	/* see RFC 1070 */
6336378Ssklower 		/* right now ip addr is  aligned  -- be careful --
6436378Ssklower 		 * future revisions may have it u_char[4]
6536378Ssklower 		 */
6636378Ssklower 	u_int			seon_ipaddr;	/* a.b.c.d */
6737469Ssklower 	u_char			seon_protoid;	/* NSEL */
6836378Ssklower };
6936378Ssklower 
7037469Ssklower #ifdef EON_TEMPLATE
7136378Ssklower struct sockaddr_eon eon_template = {
7237469Ssklower 	sizeof (eon_template), AF_ISO, 0, 0, 0x14,
7337469Ssklower 	0x47, 0x0, 0x6, 0x3, 0
7436378Ssklower };
7537469Ssklower #endif
7636378Ssklower 
7736378Ssklower #define DOWNBITS ( EON_ESLINK_DOWN | EON_ISLINK_DOWN )
7836378Ssklower #define UPBITS ( EON_ESLINK_UP | EON_ISLINK_UP )
7936378Ssklower 
8037469Ssklower #define	SIOCSEONCORE _IOWR('i',10, struct iso_ifreq) /* EON core member */
8137469Ssklower #define	SIOCGEONCORE _IOWR('i',11, struct iso_ifreq) /* EON core member */
8237469Ssklower 
8336378Ssklower struct eon_hdr {
8436378Ssklower 	u_char 	eonh_vers; /* value 1 */
8536378Ssklower 	u_char 	eonh_class;  /* address multicast class, below */
8636378Ssklower #define		EON_NORMAL_ADDR		0x0
8736378Ssklower #define		EON_MULTICAST_ES	0x1
8836378Ssklower #define		EON_MULTICAST_IS	0x2
8936378Ssklower #define		EON_BROADCAST		0x3
9036378Ssklower 	u_short eonh_csum;  /* osi checksum (choke)*/
9136378Ssklower };
9240778Ssklower struct eon_iphdr {
9340778Ssklower 	struct	ip	ei_ip;
9440778Ssklower 	struct	eon_hdr	ei_eh;
9540778Ssklower };
9637469Ssklower #define EONIPLEN (sizeof(struct eon_hdr) + sizeof(struct ip))
9736378Ssklower 
9836378Ssklower /* stole these 2 fields of the flags for I-am-ES and I-am-IS */
9936378Ssklower #define	IFF_ES	0x400
10036378Ssklower #define	IFF_IS	0x800
10136378Ssklower 
10236378Ssklower struct eon_stat {
10336378Ssklower 	int	es_in_multi_es;
10436378Ssklower 	int	es_in_multi_is;
10536378Ssklower 	int	es_in_broad;
10636378Ssklower 	int	es_in_normal;
10736378Ssklower 	int	es_out_multi_es;
10836378Ssklower 	int	es_out_multi_is;
10936378Ssklower 	int	es_out_broad;
11036378Ssklower 	int	es_out_normal;
11136378Ssklower 	int	es_ipout;
11236378Ssklower 
11336378Ssklower 	int	es_icmp[PRC_NCMDS];
11436378Ssklower 	/* errors */
11536378Ssklower 	int	es_badcsum;
11636378Ssklower 	int	es_badhdr;
11736378Ssklower } eonstat;
11836378Ssklower 
11936378Ssklower #undef IncStat
12036378Ssklower #define IncStat(xxx) eonstat.xxx++
12137469Ssklower 
12237469Ssklower typedef struct qhdr {
12337469Ssklower 	struct qhdr *link, *rlink;
12437469Ssklower } *queue_t;
12540778Ssklower 
12640778Ssklower struct eon_llinfo {
12740778Ssklower 	struct	qhdr el_qhdr;		/* keep all in a list */
12840778Ssklower 	int	el_flags;		/* cache valid ? */
129*42320Ssklower 	int	el_snpaoffset;		/* IP address contained in dst nsap */
13040778Ssklower 	struct	rtentry *el_rt;		/* back pointer to parent route */
13140778Ssklower 	struct	eon_iphdr el_ei;	/* precomputed portion of hdr */
13240778Ssklower 	struct	route el_iproute;	/* if direct route cache IP info */
13340778Ssklower 					/* if gateway, cache secondary route */
13440778Ssklower };
13540778Ssklower #define el_iphdr el_ei.ei_ip
13640778Ssklower #define el_eonhdr el_ei.ei_eh
137