FreeBSD/Linux Kernel Cross Reference
sys/netnatm/natm.h
1 /* $NetBSD: natm.h,v 1.1 1996/07/04 03:20:12 chuck Exp $ */
2 /* $FreeBSD: releng/5.4/sys/netnatm/natm.h 141090 2005-01-31 23:27:04Z imp $ */
3
4 /*-
5 *
6 * Copyright (c) 1996 Charles D. Cranor and Washington University.
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed by Charles D. Cranor and
20 * Washington University.
21 * 4. The name of the author may not be used to endorse or promote products
22 * derived from this software without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
25 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
28 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
29 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
33 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 */
35
36 /*
37 * natm.h: native mode atm
38 */
39
40 /*
41 * supported protocols
42 */
43 #define PROTO_NATMAAL0 1
44 #define PROTO_NATMAAL5 2
45
46 /*
47 * sockaddr_natm
48 */
49
50 struct sockaddr_natm {
51 unsigned char snatm_len; /* length */
52 sa_family_t snatm_family; /* AF_NATM */
53 char snatm_if[IFNAMSIZ]; /* interface name */
54 u_int16_t snatm_vci; /* vci */
55 u_int8_t snatm_vpi; /* vpi */
56 };
57
58 #if defined(__FreeBSD__) && defined(_KERNEL)
59
60 #define SPLSOFTNET() splnet()
61
62 #elif defined(__NetBSD__) || defined(__OpenBSD__)
63
64 #define SPLSOFTNET() splsoftnet()
65
66 #endif
67
68 #ifdef _KERNEL
69
70 /*
71 * natm protocol control block
72 */
73 struct natmpcb {
74 LIST_ENTRY(natmpcb) pcblist; /* list pointers */
75 u_int npcb_inq; /* # of our pkts in proto q */
76 struct socket *npcb_socket; /* backpointer to socket */
77 struct ifnet *npcb_ifp; /* pointer to hardware */
78 struct in_addr ipaddr; /* remote IP address, if APCB_IP */
79 u_int16_t npcb_vci; /* VCI */
80 u_int8_t npcb_vpi; /* VPI */
81 u_int8_t npcb_flags; /* flags */
82 };
83
84 /* flags */
85 #define NPCB_FREE 0x01 /* free (not on any list) */
86 #define NPCB_CONNECTED 0x02 /* connected */
87 #define NPCB_IP 0x04 /* used by IP */
88 #define NPCB_DRAIN 0x08 /* destory as soon as inq == 0 */
89
90 /* flag arg to npcb_free */
91 #define NPCB_REMOVE 0 /* remove from global list */
92 #define NPCB_DESTROY 1 /* destroy and be free */
93
94 LIST_HEAD(npcblist, natmpcb);
95
96 /* global data structures */
97
98 extern struct npcblist natm_pcbs; /* global list of pcbs */
99 #define NATM_STAT
100 #ifdef NATM_STAT
101 extern u_int natm_sodropcnt;
102 extern u_int natm_sodropbytes; /* account of droppage */
103 extern u_int natm_sookcnt;
104 extern u_int natm_sookbytes; /* account of ok */
105 #endif
106
107 /* external functions */
108
109 /* natm_pcb.c */
110 struct natmpcb *npcb_alloc(int);
111 void npcb_free(struct natmpcb *, int);
112 struct natmpcb *npcb_add(struct natmpcb *, struct ifnet *, uint16_t, uint8_t);
113
114 /* natm.c */
115 #if defined(__NetBSD__) || defined(__OpenBSD__)
116 int natm_usrreq(struct socket *, int, struct mbuf *,
117 struct mbuf *, struct mbuf *, struct proc *);
118 #elif defined(__FreeBSD__)
119 #if __FreeBSD__ > 2
120 /*
121 * FreeBSD new usrreqs style appeared since 2.2. compatibility to old style
122 * has gone since 3.0.
123 */
124 #define FREEBSD_USRREQS
125 extern struct pr_usrreqs natm_usrreqs;
126 #else /* !( __FreeBSD__ > 2) */
127 int natm_usrreq(struct socket *, int, struct mbuf *,
128 struct mbuf *, struct mbuf *);
129 #endif /* !( __FreeBSD__ > 2) */
130 #endif
131
132 #ifdef SYSCTL_HANDLER_ARGS
133 int natm0_sysctl(SYSCTL_HANDLER_ARGS);
134 int natm5_sysctl(SYSCTL_HANDLER_ARGS);
135 #endif
136
137 void natmintr(struct mbuf *);
138
139 #endif
Cache object: 1b23d23909115030e4c213277f20fd5f
|