/* $NetBSD: esis.h,v 1.11 1997/11/03 15:01:19 is Exp $ */ | |
/*- | |
* Copyright (c) 1991, 1993 | |
* The Regents of the University of California. All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions | |
* are met: | |
* 1. Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* 2. Redistributions in binary form must reproduce the above copyright | |
* notice, this list of conditions and the following disclaimer in the | |
* documentation and/or other materials provided with the distribution. | |
* 3. All advertising materials mentioning features or use of this software | |
* must display the following acknowledgement: | |
* This product includes software developed by the University of | |
* California, Berkeley and its contributors. | |
* 4. Neither the name of the University nor the names of its contributors | |
* may be used to endorse or promote products derived from this software | |
* without specific prior written permission. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
* SUCH DAMAGE. | |
* | |
* @(#)esis.h 8.1 (Berkeley) 6/10/93 | |
*/ | |
/*********************************************************** | |
Copyright IBM Corporation 1987 | |
All Rights Reserved | |
Permission to use, copy, modify, and distribute this software and its | |
documentation for any purpose and without fee is hereby granted, | |
provided that the above copyright notice appear in all copies and that | |
both that copyright notice and this permission notice appear in | |
supporting documentation, and that the name of IBM not be | |
used in advertising or publicity pertaining to distribution of the | |
software without specific, written prior permission. | |
IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING | |
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL | |
IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR | |
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | |
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | |
SOFTWARE. | |
******************************************************************/ | |
/* | |
* ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison | |
*/ | |
#include <machine/endian.h> | |
#define SNPAC_AGE 60 /* seconds */ | |
#define ESIS_CONFIG 60 /* seconds */ | |
#define ESIS_HT (ESIS_CONFIG * 2) | |
/* | |
* Fixed part of an ESIS header | |
*/ | |
struct esis_fixed { | |
u_char esis_proto_id; /* network layer protocol identifier */ | |
u_char esis_hdr_len; /* length indicator (octets) */ | |
u_char esis_vers; /* version/protocol identifier | |
* extension */ | |
u_char esis_res1; /* reserved */ | |
u_char esis_type; /* type code */ | |
/* technically, type should be &='d 0x1f */ | |
#define ESIS_ESH 0x02 /* End System Hello */ | |
#define ESIS_ISH 0x04 /* Intermediate System Hello */ | |
#define ESIS_RD 0x06 /* Redirect */ | |
u_char esis_ht_msb; /* holding time (seconds) high byte */ | |
u_char esis_ht_lsb; /* holding time (seconds) low byte */ | |
u_char esis_cksum_msb; /* checksum high byte */ | |
u_char esis_cksum_lsb; /* checksum low byte */ | |
} __attribute__((packed)); | |
/* | |
* Values for ESIS datagram options | |
*/ | |
#define ESISOVAL_NETMASK 0xe1 /* address mask option, RD PDU only */ | |
#define ESISOVAL_SNPAMASK 0xe2 /* snpa mask option, RD PDU only */ | |
#define ESISOVAL_ESCT 0xc6 /* end system conf. timer, ISH PDU | |
* only */ | |
#define ESIS_CKSUM_OFF 0x07 | |
#define ESIS_CKSUM_REQUIRED(pdu)\ | |
((pdu->esis_cksum_msb != 0) || (pdu->esis_cksum_lsb != 0)) | |
#define ESIS_VERSION 1 | |
struct esis_stat { | |
u_short es_nomem; /* insufficient memory to send hello */ | |
u_short es_badcsum; /* incorrect checksum */ | |
u_short es_badvers; /* incorrect version number */ | |
u_short es_badtype; /* unknown pdu type field */ | |
u_short es_toosmall; /* packet too small */ | |
u_short es_eshsent; /* ESH sent */ | |
u_short es_eshrcvd; /* ESH rcvd */ | |
u_short es_ishsent; /* ISH sent */ | |
u_short es_ishrcvd; /* ISH rcvd */ | |
u_short es_rdsent; /* RD sent */ | |
u_short es_rdrcvd; /* RD rcvd */ | |
}; | |
#ifdef _KERNEL | |
struct esis_stat esis_stat; | |
struct socket; | |
struct mbuf; | |
struct snpa_hdr; | |
struct clnp_optidx; | |
struct iso_addr; | |
struct rtentry; | |
struct sockaddr_dl; | |
void esis_init __P((void)); | |
int esis_usrreq __P((struct socket *, int, struct mbuf *, struct mbuf *, | |
struct mbuf *, struct proc *)); | |
void esis_input __P((struct mbuf *, ...)); | |
void esis_rdoutput __P((struct snpa_hdr *, struct mbuf *, struct clnp_optidx *, | |
struct iso_addr *, struct rtentry *)); | |
int esis_insert_addr __P((caddr_t *, int *, struct iso_addr *, struct mbuf *, | |
int)); | |
void esis_eshinput __P((struct mbuf *, struct snpa_hdr *)); | |
void esis_ishinput __P((struct mbuf *, struct snpa_hdr *)); | |
void esis_rdinput __P((struct mbuf *, struct snpa_hdr *)); | |
void esis_config __P((void *)); | |
void esis_shoutput __P((struct ifnet *, int, int, caddr_t, int, | |
struct iso_addr *)); | |
void isis_input __P((struct mbuf *, ...)); | |
int isis_output __P((struct mbuf *, ...)); | |
void *esis_ctlinput __P((int, struct sockaddr *, void *)); | |
#endif /* _KERNEL */ |