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