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