if_atm.h revision 117627
125603Skjc/*      $NetBSD: if_atm.h,v 1.7 1996/11/09 23:02:27 chuck Exp $       */
255205Speter/* $FreeBSD: head/sys/net/if_atm.h 117627 2003-07-15 10:26:34Z harti $ */
325603Skjc
425603Skjc/*
525603Skjc *
625603Skjc * Copyright (c) 1996 Charles D. Cranor and Washington University.
725603Skjc * All rights reserved.
825603Skjc *
925603Skjc * Redistribution and use in source and binary forms, with or without
1025603Skjc * modification, are permitted provided that the following conditions
1125603Skjc * are met:
1225603Skjc * 1. Redistributions of source code must retain the above copyright
1325603Skjc *    notice, this list of conditions and the following disclaimer.
1425603Skjc * 2. Redistributions in binary form must reproduce the above copyright
1525603Skjc *    notice, this list of conditions and the following disclaimer in the
1625603Skjc *    documentation and/or other materials provided with the distribution.
1725603Skjc * 3. All advertising materials mentioning features or use of this software
1825603Skjc *    must display the following acknowledgement:
1925603Skjc *      This product includes software developed by Charles D. Cranor and
2025603Skjc *	Washington University.
2125603Skjc * 4. The name of the author may not be used to endorse or promote products
2225603Skjc *    derived from this software without specific prior written permission.
2325603Skjc *
2425603Skjc * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2525603Skjc * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2625603Skjc * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2725603Skjc * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2825603Skjc * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2925603Skjc * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3025603Skjc * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3125603Skjc * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3225603Skjc * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
3325603Skjc * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3425603Skjc */
3525603Skjc
3625603Skjc/*
3725603Skjc * net/if_atm.h
3825603Skjc */
3925603Skjc
40114739Sharti/*
41114739Sharti * Classification of ATM cards.
42114739Sharti */
43116523Sharti#define	ATM_DEVICE_UNKNOWN	0
44116523Sharti#define	ATM_DEVICE_PCA200E	1	/* Fore/Marconi PCA200-E */
45116523Sharti#define	ATM_DEVICE_HE155	2	/* Fore/Marconi HE155 */
46116523Sharti#define	ATM_DEVICE_HE622	3	/* Fore/Marconi HE622 */
47116523Sharti#define	ATM_DEVICE_ENI155P	4	/* Efficient networks 155p */
48116523Sharti#define	ATM_DEVICE_ADP155P	5	/* Adaptec 155p */
49116441Sharti#define	ATM_DEVICE_FORELE25	6	/* ForeRunnerLE 25 */
50116441Sharti#define	ATM_DEVICE_FORELE155	7	/* ForeRunnerLE 155 */
51116523Sharti#define	ATM_DEVICE_NICSTAR25	8	/* other 77211 25.6MBit */
52116441Sharti#define	ATM_DEVICE_NICSTAR155	9	/* other 77211 155MBit */
53114739Sharti
54114739Sharti/* map to strings and vendors */
55116523Sharti#define	ATM_DEVICE_NAMES						\
56116441Sharti	{ "Unknown",		"Unknown" },				\
57116441Sharti	{ "PCA200-E",		"Fore/Marconi" },			\
58116441Sharti	{ "HE155",		"Fore/Marconi" },			\
59116441Sharti	{ "HE622",		"Fore/Marconi" },			\
60116441Sharti	{ "ENI155p",		"Efficient Networks" },			\
61116441Sharti	{ "ADP155p",		"Adaptec" },				\
62116441Sharti	{ "ForeRunnerLE25",	"Fore/Marconi" },			\
63116441Sharti	{ "ForeRunnerLE155",	"Fore/Marconi" },			\
64116441Sharti	{ "IDT77211/25",	"IDT" },				\
65116441Sharti	{ "IDT77211/155",	"IDT" },
66114739Sharti
67114739Sharti/*
68114739Sharti * This is the common link layer MIB for all ATM interfaces. Much of the
69114739Sharti * information here is needed for ILMI. This will be augmented by statistics
70114739Sharti * at some point.
71114739Sharti */
72114739Shartistruct ifatm_mib {
73114739Sharti	/* configuration data */
74114739Sharti	uint8_t		device;		/* type of card */
75114739Sharti	u_char		esi[6];		/* end system identifier (MAC) */
76114739Sharti	uint32_t	serial;		/* card serial number */
77114739Sharti	uint32_t	hw_version;	/* card version */
78114739Sharti	uint32_t	sw_version;	/* firmware version (if any) */
79114739Sharti	uint32_t	pcr;		/* supported peak cell rate */
80114739Sharti	uint32_t	media;		/* physical media */
81114739Sharti	uint8_t		vpi_bits;	/* number of used bits in VPI field */
82114739Sharti	uint8_t		vci_bits;	/* number of used bits in VCI field */
83114739Sharti	uint16_t	max_vpcs;	/* maximum number of VPCs */
84114739Sharti	uint32_t	max_vccs;	/* maximum number of VCCs */
85114739Sharti};
86114739Sharti
87114739Sharti/*
88116441Sharti * Traffic parameters for ATM connections. This contains all parameters
89116441Sharti * to accomodate UBR, UBR+MCR, CBR, VBR and ABR connections.
90116441Sharti *
91116441Sharti * Keep in sync with ng_atm.h
92116441Sharti */
93116441Shartistruct atmio_tparam {
94116441Sharti	uint32_t	pcr;	/* 24bit: Peak Cell Rate */
95116441Sharti	uint32_t	scr;	/* 24bit: VBR Sustainable Cell Rate */
96116441Sharti	uint32_t	mbs;	/* 24bit: VBR Maximum burst size */
97116441Sharti	uint32_t	mcr;	/* 24bit: ABR/VBR/UBR+MCR MCR */
98116441Sharti	uint32_t	icr;	/* 24bit: ABR ICR */
99116441Sharti	uint32_t	tbe;	/* 24bit: ABR TBE (1...2^24-1) */
100116441Sharti	uint8_t		nrm;	/*  3bit: ABR Nrm */
101116441Sharti	uint8_t		trm;	/*  3bit: ABR Trm */
102116441Sharti	uint16_t	adtf;	/* 10bit: ABR ADTF */
103116441Sharti	uint8_t		rif;	/*  4bit: ABR RIF */
104116441Sharti	uint8_t		rdf;	/*  4bit: ABR RDF */
105116441Sharti	uint8_t		cdf;	/*  3bit: ABR CDF */
106116441Sharti};
107116441Sharti
108116441Sharti/*
109116441Sharti * VCC parameters
110116441Sharti *
111116441Sharti * Keep in sync with ng_atm.h
112116441Sharti */
113116441Shartistruct atmio_vcc {
114116441Sharti	uint16_t	flags;		/* VCC flags */
115116441Sharti	uint16_t	vpi;
116116441Sharti	uint16_t	vci;
117116441Sharti	uint16_t	rmtu;		/* maximum receive PDU */
118116441Sharti	uint16_t	tmtu;		/* maximum transmit PDU */
119116441Sharti	uint8_t		aal;		/* aal type */
120116441Sharti	uint8_t		traffic;	/* traffic type */
121116441Sharti	struct atmio_tparam tparam;	/* traffic parameters */
122116441Sharti};
123116441Sharti
124116441Sharti/* VCC flags */
125116523Sharti#define	ATMIO_FLAG_LLCSNAP	0x0002	/* same as ATM_PH_LLCSNAP */
126116523Sharti#define	ATMIO_FLAG_NG		0x0010	/* owned by netgraph */
127116523Sharti#define	ATMIO_FLAG_HARP		0x0020	/* owned by HARP */
128116523Sharti#define	ATMIO_FLAG_NORX		0x0100	/* not receiving on this VCC */
129116523Sharti#define	ATMIO_FLAG_NOTX		0x0200	/* not transmitting on this VCC */
130116523Sharti#define	ATMIO_FLAG_PVC		0x0400	/* this is a PVC */
131116523Sharti#define	ATMIO_FLAGS	"\020\2LLCSNAP\5NG\6HARP\11NORX\12NOTX\13PVC"
132116441Sharti
133116523Sharti#define	ATMIO_AAL_0		0	/* pure cells */
134116523Sharti#define	ATMIO_AAL_34		4	/* AAL3 and 4 */
135116523Sharti#define	ATMIO_AAL_5		5	/* AAL5 */
136116523Sharti#define	ATMIO_AAL_RAW		10	/* whatever the card does */
137116441Sharti
138116523Sharti#define	ATMIO_TRAFFIC_UBR	0
139116523Sharti#define	ATMIO_TRAFFIC_CBR	1
140116523Sharti#define	ATMIO_TRAFFIC_ABR	2
141116523Sharti#define	ATMIO_TRAFFIC_VBR	3
142116441Sharti
143116441Sharti/*
144116441Sharti * VCC table
145116441Sharti *
146116441Sharti * Keep in sync with ng_atm.h
147116441Sharti */
148116441Shartistruct atmio_vcctable {
149116441Sharti	uint32_t	count;		/* number of vccs */
150116441Sharti	struct atmio_vcc vccs[0];	/* array of VCCs */
151116441Sharti};
152116441Sharti
153116441Sharti/*
154116441Sharti * Peak cell rates for various physical media. Note, that there are
155116441Sharti * different opinions on what the correct values are.
156116441Sharti */
157116441Sharti#define	ATM_RATE_25_6M		59259
158116523Sharti#define	ATM_RATE_155M		353208
159116523Sharti#define	ATM_RATE_622M		1412830
160116523Sharti#define	ATM_RATE_2_4G		5651320
161116441Sharti
162117625Sharti#ifdef _KERNEL
163116441Sharti/*
164114739Sharti * Common fields for all ATM interfaces. Each driver's softc must start with
165114739Sharti * this structure.
166114739Sharti */
167114739Shartistruct ifatm {
168114739Sharti	struct ifnet	ifnet;		/* required by if_var.h */
169114739Sharti	struct ifatm_mib mib;		/* exported data */
170114739Sharti	void		*phy;		/* usually SUNI */
171114739Sharti	void		*ngpriv;	/* netgraph link */
172114739Sharti};
173117625Sharti#endif
174114739Sharti
175116480Sharti/*
176116480Sharti * Keep structures in sync with ng_atm.h
177116480Sharti *
178116480Sharti * These are used by netgraph/harp to call the driver
179116480Sharti * NATM uses the atm_pseudoioctl instead.
180116480Sharti */
181116480Shartistruct atmio_openvcc {
182116480Sharti	void		*rxhand;	/* handle argument */
183116480Sharti	struct atmio_vcc param;		/* parameters */
184116480Sharti};
185116480Sharti
186116480Shartistruct atmio_closevcc {
187116480Sharti	uint16_t	vpi;
188116480Sharti	uint16_t	vci;
189116480Sharti};
190116480Sharti
19125603Skjc#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__)
192116523Sharti#define	RTALLOC1(A,B)		rtalloc1((A),(B))
19325603Skjc#elif defined(__FreeBSD__)
194116523Sharti#define	RTALLOC1(A,B)		rtalloc1((A),(B),0UL)
19525603Skjc#endif
19625603Skjc
19725603Skjc/*
19825603Skjc * pseudo header for packet transmission
19925603Skjc */
20025603Skjcstruct atm_pseudohdr {
201116523Sharti	uint8_t		atm_ph[4];	/* flags+VPI+VCI1(msb)+VCI2(lsb) */
20225603Skjc};
20325603Skjc
204116523Sharti#define	ATM_PH_FLAGS(X)	((X)->atm_ph[0])
205116523Sharti#define	ATM_PH_VPI(X)	((X)->atm_ph[1])
206116523Sharti#define	ATM_PH_VCI(X)	((((X)->atm_ph[2]) << 8) | ((X)->atm_ph[3]))
207116523Sharti#define	ATM_PH_SETVCI(X,V) { \
20825603Skjc	(X)->atm_ph[2] = ((V) >> 8) & 0xff; \
20925603Skjc	(X)->atm_ph[3] = ((V) & 0xff); \
21025603Skjc}
21125603Skjc
212117627Sharti/* use AAL5? (0 == aal0) */
213117627Sharti#define	ATM_PH_AAL5    0x01
214117627Sharti/* use the LLC SNAP encoding (iff aal5) */
215117627Sharti#define	ATM_PH_LLCSNAP ATMIO_FLAG_LLCSNAP
21625603Skjc
217116523Sharti#define	ATM_PH_DRIVER7  0x40	/* reserve for driver's use */
218116523Sharti#define	ATM_PH_DRIVER8  0x80	/* reserve for driver's use */
21925603Skjc
220116523Sharti#define	ATMMTU		9180	/* ATM MTU size for IP */
22125603Skjc				/* XXX: could be 9188 with LLC/SNAP according
22225603Skjc					to comer */
22325603Skjc
22425603Skjc/* user's ioctl hook for raw atm mode */
225116523Sharti#define	SIOCRAWATM	_IOWR('a', 122, int)	/* set driver's raw mode */
22625603Skjc
22725603Skjc/* atm_pseudoioctl: turns on and off RX VCIs  [for internal use only!] */
22825603Skjcstruct atm_pseudoioctl {
229116523Sharti	struct atm_pseudohdr aph;
230116523Sharti	void		*rxhand;
23125603Skjc};
232116523Sharti#define	SIOCATMENA	_IOWR('a', 123, struct atm_pseudoioctl) /* enable */
233116523Sharti#define	SIOCATMDIS	_IOWR('a', 124, struct atm_pseudoioctl) /* disable */
234116523Sharti#define	SIOCATMGETVCCS	_IOW('a', 125, struct atmio_vcctable)
235116523Sharti#define	SIOCATMOPENVCC	_IOR('a', 126, struct atmio_openvcc)
236116523Sharti#define	SIOCATMCLOSEVCC _IOR('a', 127, struct atmio_closevcc)
23725603Skjc
238116523Sharti#define	SIOCATMGVCCS	_IOWR('i', 230, struct ifreq)
23937939Skjc
24025603Skjc/*
24125603Skjc * XXX forget all the garbage in if_llc.h and do it the easy way
24225603Skjc */
243116523Sharti#define	ATMLLC_HDR "\252\252\3\0\0\0"
24425603Skjcstruct atmllc {
245116523Sharti	uint8_t		llchdr[6];	/* aa.aa.03.00.00.00 */
246116523Sharti	uint8_t		type[2];	/* "ethernet" type */
24725603Skjc};
24825603Skjc
24925603Skjc/* ATM_LLC macros: note type code in host byte order */
250116523Sharti#define	ATM_LLC_TYPE(X) (((X)->type[0] << 8) | ((X)->type[1]))
251116523Sharti#define	ATM_LLC_SETTYPE(X, V) do {		\
252116523Sharti	(X)->type[0] = ((V) >> 8) & 0xff;	\
253116523Sharti	(X)->type[1] = ((V) & 0xff);		\
254116523Sharti    } while (0)
25525603Skjc
25625603Skjc#ifdef _KERNEL
25792725Salfredvoid	atm_ifattach(struct ifnet *);
258114201Shartivoid	atm_ifdetach(struct ifnet *);
25992725Salfredvoid	atm_input(struct ifnet *, struct atm_pseudohdr *,
260116523Sharti	    struct mbuf *, void *);
26192725Salfredint	atm_output(struct ifnet *, struct mbuf *, struct sockaddr *,
262116523Sharti	    struct rtentry *);
26325603Skjc#endif
264