File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / isisd / include-netbsd / esis.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:26:11 2012 UTC (12 years, 5 months ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, v0_99_22p0, v0_99_22, v0_99_21, v0_99_20_1, v0_99_20, HEAD
quagga

    1: /*	$NetBSD: esis.h,v 1.11 1997/11/03 15:01:19 is Exp $	*/
    2: 
    3: /*-
    4:  * Copyright (c) 1991, 1993
    5:  *	The Regents of the University of California.  All rights reserved.
    6:  *
    7:  * Redistribution and use in source and binary forms, with or without
    8:  * modification, are permitted provided that the following conditions
    9:  * are met:
   10:  * 1. Redistributions of source code must retain the above copyright
   11:  *    notice, this list of conditions and the following disclaimer.
   12:  * 2. Redistributions in binary form must reproduce the above copyright
   13:  *    notice, this list of conditions and the following disclaimer in the
   14:  *    documentation and/or other materials provided with the distribution.
   15:  * 3. All advertising materials mentioning features or use of this software
   16:  *    must display the following acknowledgement:
   17:  *	This product includes software developed by the University of
   18:  *	California, Berkeley and its contributors.
   19:  * 4. Neither the name of the University nor the names of its contributors
   20:  *    may be used to endorse or promote products derived from this software
   21:  *    without specific prior written permission.
   22:  *
   23:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   24:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   25:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   26:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   27:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   28:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   29:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   30:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   31:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   32:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   33:  * SUCH DAMAGE.
   34:  *
   35:  *	@(#)esis.h	8.1 (Berkeley) 6/10/93
   36:  */
   37: 
   38: /***********************************************************
   39: 		Copyright IBM Corporation 1987
   40: 
   41:                       All Rights Reserved
   42: 
   43: Permission to use, copy, modify, and distribute this software and its
   44: documentation for any purpose and without fee is hereby granted,
   45: provided that the above copyright notice appear in all copies and that
   46: both that copyright notice and this permission notice appear in
   47: supporting documentation, and that the name of IBM not be
   48: used in advertising or publicity pertaining to distribution of the
   49: software without specific, written prior permission.
   50: 
   51: IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
   52: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
   53: IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
   54: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
   55: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
   56: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
   57: SOFTWARE.
   58: 
   59: ******************************************************************/
   60: 
   61: /*
   62:  * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison
   63:  */
   64: 
   65: #include <machine/endian.h>
   66: 
   67: #define	SNPAC_AGE		60	/* seconds */
   68: #define	ESIS_CONFIG		60	/* seconds */
   69: #define	ESIS_HT			(ESIS_CONFIG * 2)
   70: 
   71: /*
   72:  *	Fixed part of an ESIS header
   73:  */
   74: struct esis_fixed {
   75: 	u_char          esis_proto_id;	/* network layer protocol identifier */
   76: 	u_char          esis_hdr_len;	/* length indicator (octets) */
   77: 	u_char          esis_vers;	/* version/protocol identifier
   78: 					 * extension */
   79: 	u_char          esis_res1;	/* reserved */
   80: 	u_char          esis_type;	/* type code */
   81: 	/* technically, type should be &='d 0x1f */
   82: #define ESIS_ESH	0x02	/* End System Hello */
   83: #define ESIS_ISH	0x04	/* Intermediate System Hello */
   84: #define ESIS_RD		0x06	/* Redirect */
   85: 	u_char          esis_ht_msb;	/* holding time (seconds) high byte */
   86: 	u_char          esis_ht_lsb;	/* holding time (seconds) low byte */
   87: 	u_char          esis_cksum_msb;	/* checksum high byte */
   88: 	u_char          esis_cksum_lsb;	/* checksum low byte */
   89: } __attribute__((packed));
   90: /*
   91:  * Values for ESIS datagram options
   92:  */
   93: #define ESISOVAL_NETMASK	0xe1	/* address mask option, RD PDU only */
   94: #define ESISOVAL_SNPAMASK	0xe2	/* snpa mask option, RD PDU only */
   95: #define ESISOVAL_ESCT		0xc6	/* end system conf. timer, ISH PDU
   96: 					 * only */
   97: 
   98: 
   99: #define	ESIS_CKSUM_OFF		0x07
  100: #define ESIS_CKSUM_REQUIRED(pdu)\
  101: 	((pdu->esis_cksum_msb != 0) || (pdu->esis_cksum_lsb != 0))
  102: 
  103: #define	ESIS_VERSION	1
  104: 
  105: struct esis_stat {
  106: 	u_short         es_nomem;	/* insufficient memory to send hello */
  107: 	u_short         es_badcsum;	/* incorrect checksum */
  108: 	u_short         es_badvers;	/* incorrect version number */
  109: 	u_short         es_badtype;	/* unknown pdu type field */
  110: 	u_short         es_toosmall;	/* packet too small */
  111: 	u_short         es_eshsent;	/* ESH sent */
  112: 	u_short         es_eshrcvd;	/* ESH rcvd */
  113: 	u_short         es_ishsent;	/* ISH sent */
  114: 	u_short         es_ishrcvd;	/* ISH rcvd */
  115: 	u_short         es_rdsent;	/* RD sent */
  116: 	u_short         es_rdrcvd;	/* RD rcvd */
  117: };
  118: 
  119: #ifdef	_KERNEL
  120: struct esis_stat esis_stat;
  121: struct socket;
  122: struct mbuf;
  123: struct snpa_hdr;
  124: struct clnp_optidx;
  125: struct iso_addr;
  126: struct rtentry;
  127: struct sockaddr_dl;
  128: 
  129: void esis_init __P((void));
  130: int esis_usrreq __P((struct socket *, int, struct mbuf *, struct mbuf *,
  131: 		     struct mbuf *, struct proc *));
  132: void esis_input __P((struct mbuf *, ...));
  133: void esis_rdoutput __P((struct snpa_hdr *, struct mbuf *, struct clnp_optidx *,
  134: 			struct iso_addr *, struct rtentry *));
  135: int esis_insert_addr __P((caddr_t *, int *, struct iso_addr *, struct mbuf *,
  136: 			  int));
  137: void esis_eshinput __P((struct mbuf *, struct snpa_hdr *));
  138: void esis_ishinput __P((struct mbuf *, struct snpa_hdr *));
  139: void esis_rdinput __P((struct mbuf *, struct snpa_hdr *));
  140: void esis_config __P((void *));
  141: void esis_shoutput __P((struct ifnet *, int, int, caddr_t, int,
  142: 	               struct iso_addr *));
  143: void isis_input __P((struct mbuf *, ...));
  144: int isis_output __P((struct mbuf *, ...));
  145: void *esis_ctlinput __P((int, struct sockaddr *, void *));
  146: #endif /* _KERNEL */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>