Annotation of embedaddon/quagga/isisd/include-netbsd/esis.h, revision 1.1.1.1
1.1 misho 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>