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