xref: /titanic_53/usr/src/uts/common/sys/dld.h (revision afdda45f890ee5dfc86e5131a30b11b354d51633)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5ba2e4443Sseb  * Common Development and Distribution License (the "License").
6ba2e4443Sseb  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22d62bc4baSyz147064  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate #ifndef	_SYS_DLD_H
277c478bd9Sstevel@tonic-gate #define	_SYS_DLD_H
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate /*
307c478bd9Sstevel@tonic-gate  * Data-Link Driver (public header).
31eae72b5bSSebastien Roy  *
32eae72b5bSSebastien Roy  * Note that the datastructures defined here define an ioctl interface
33eae72b5bSSebastien Roy  * that is shared betwen user and kernel space.  The dld driver thus
34eae72b5bSSebastien Roy  * assumes that the structures have identical layout and size when
35eae72b5bSSebastien Roy  * compiled in either IPL32 or LP64.
367c478bd9Sstevel@tonic-gate  */
377c478bd9Sstevel@tonic-gate 
387c478bd9Sstevel@tonic-gate #include <sys/types.h>
397c478bd9Sstevel@tonic-gate #include <sys/stream.h>
40eae72b5bSSebastien Roy #include <sys/dld_ioc.h>
41d62bc4baSyz147064 #include <sys/conf.h>
42d62bc4baSyz147064 #include <sys/sad.h>
437c478bd9Sstevel@tonic-gate #include <net/if.h>
44e7801d59Ssowmini #include <sys/ddi.h>
45e7801d59Ssowmini #include <sys/sunddi.h>
463fd94f8cSam223141 #include <sys/mac.h>
477c478bd9Sstevel@tonic-gate 
487c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
497c478bd9Sstevel@tonic-gate extern "C" {
507c478bd9Sstevel@tonic-gate #endif
517c478bd9Sstevel@tonic-gate 
527c478bd9Sstevel@tonic-gate /*
537c478bd9Sstevel@tonic-gate  * Data-Link Driver Information (text emitted by modinfo(1m))
547c478bd9Sstevel@tonic-gate  */
554045d941Ssowmini #define	DLD_INFO	"Data-Link Driver"
567c478bd9Sstevel@tonic-gate 
577c478bd9Sstevel@tonic-gate /*
587c478bd9Sstevel@tonic-gate  * Options: To enable an option set the property name to a non-zero value
597c478bd9Sstevel@tonic-gate  *	    in kernel/drv/dld.conf.
607c478bd9Sstevel@tonic-gate  */
617c478bd9Sstevel@tonic-gate 
627c478bd9Sstevel@tonic-gate /*
637c478bd9Sstevel@tonic-gate  * Prevent use of the IP fast-path (direct M_DATA transmit).
647c478bd9Sstevel@tonic-gate  */
657c478bd9Sstevel@tonic-gate #define	DLD_PROP_NO_FASTPATH	"no-fastpath"
667c478bd9Sstevel@tonic-gate 
677c478bd9Sstevel@tonic-gate /*
687c478bd9Sstevel@tonic-gate  * Prevent advertising of the DL_CAPAB_POLL capability.
697c478bd9Sstevel@tonic-gate  */
707c478bd9Sstevel@tonic-gate #define	DLD_PROP_NO_POLL	"no-poll"
717c478bd9Sstevel@tonic-gate 
727c478bd9Sstevel@tonic-gate /*
737c478bd9Sstevel@tonic-gate  * Prevent advertising of the DL_CAPAB_ZEROCOPY capability.
747c478bd9Sstevel@tonic-gate  */
757c478bd9Sstevel@tonic-gate #define	DLD_PROP_NO_ZEROCOPY	"no-zerocopy"
767c478bd9Sstevel@tonic-gate 
777c478bd9Sstevel@tonic-gate /*
789c175129Sja97890  * Prevent advertising of the DL_CAPAB_SOFTRING capability.
799c175129Sja97890  */
809c175129Sja97890 #define	DLD_PROP_NO_SOFTRING	"no-softring"
819c175129Sja97890 
829c175129Sja97890 /*
837c478bd9Sstevel@tonic-gate  * The name of the driver.
847c478bd9Sstevel@tonic-gate  */
857c478bd9Sstevel@tonic-gate #define	DLD_DRIVER_NAME		"dld"
867c478bd9Sstevel@tonic-gate 
877c478bd9Sstevel@tonic-gate /*
887c478bd9Sstevel@tonic-gate  * IOCTL codes and data structures.
897c478bd9Sstevel@tonic-gate  */
90eae72b5bSSebastien Roy #define	DLDIOC_ATTR	DLDIOC(0x03)
917c478bd9Sstevel@tonic-gate 
927c478bd9Sstevel@tonic-gate typedef struct dld_ioc_attr {
93d62bc4baSyz147064 	datalink_id_t	dia_linkid;
94210db224Sericheng 	uint_t		dia_max_sdu;
957c478bd9Sstevel@tonic-gate } dld_ioc_attr_t;
967c478bd9Sstevel@tonic-gate 
97eae72b5bSSebastien Roy #define	DLDIOC_VLAN_ATTR	DLDIOC(0x04)
98d62bc4baSyz147064 typedef struct dld_ioc_vlan_attr {
99d62bc4baSyz147064 	datalink_id_t	div_vlanid;
100d62bc4baSyz147064 	uint16_t	div_vid;
101d62bc4baSyz147064 	datalink_id_t	div_linkid;
102d62bc4baSyz147064 	boolean_t	div_force;
103d62bc4baSyz147064 	boolean_t	div_implicit;
104d62bc4baSyz147064 } dld_ioc_vlan_attr_t;
105210db224Sericheng 
106eae72b5bSSebastien Roy #define	DLDIOC_PHYS_ATTR	DLDIOC(0x05)
107e7801d59Ssowmini #define	DLPI_LINKNAME_MAX	32
108e7801d59Ssowmini 
109d62bc4baSyz147064 typedef struct dld_ioc_phys_attr {
110d62bc4baSyz147064 	datalink_id_t	dip_linkid;
111d62bc4baSyz147064 	/*
112d62bc4baSyz147064 	 * Whether this physical link supports vanity naming. Note that
113d62bc4baSyz147064 	 * physical links whose media type is not supported by GLDv3
114d62bc4baSyz147064 	 * can not support vanity naming.
115d62bc4baSyz147064 	 */
116d62bc4baSyz147064 	boolean_t	dip_novanity;
117d62bc4baSyz147064 	char		dip_dev[MAXLINKNAMELEN];
118d62bc4baSyz147064 } dld_ioc_phys_attr_t;
119f4b3ec61Sdh155122 
1200ba2cbe9Sxc151355 /*
1210ba2cbe9Sxc151355  * Secure objects ioctls
1220ba2cbe9Sxc151355  */
1230ba2cbe9Sxc151355 typedef enum {
124a399b765Szf162725 	DLD_SECOBJ_CLASS_WEP = 1,
125a399b765Szf162725 	DLD_SECOBJ_CLASS_WPA
1260ba2cbe9Sxc151355 } dld_secobj_class_t;
1270ba2cbe9Sxc151355 
1280ba2cbe9Sxc151355 #define	DLD_SECOBJ_OPT_CREATE	0x00000001
1290ba2cbe9Sxc151355 #define	DLD_SECOBJ_NAME_MAX	32
1300ba2cbe9Sxc151355 #define	DLD_SECOBJ_VAL_MAX	256
1310ba2cbe9Sxc151355 typedef struct dld_secobj {
1320ba2cbe9Sxc151355 	char			so_name[DLD_SECOBJ_NAME_MAX];
1330ba2cbe9Sxc151355 	dld_secobj_class_t	so_class;
1340ba2cbe9Sxc151355 	uint8_t			so_val[DLD_SECOBJ_VAL_MAX];
1350ba2cbe9Sxc151355 	uint_t			so_len;
1360ba2cbe9Sxc151355 } dld_secobj_t;
1370ba2cbe9Sxc151355 
138eae72b5bSSebastien Roy #define	DLDIOC_SECOBJ_SET	DLDIOC(0x06)
1390ba2cbe9Sxc151355 typedef struct dld_ioc_secobj_set {
1400ba2cbe9Sxc151355 	dld_secobj_t		ss_obj;
1410ba2cbe9Sxc151355 	uint_t			ss_flags;
1420ba2cbe9Sxc151355 } dld_ioc_secobj_set_t;
1430ba2cbe9Sxc151355 
144eae72b5bSSebastien Roy #define	DLDIOC_SECOBJ_GET	DLDIOC(0x07)
1450ba2cbe9Sxc151355 typedef struct dld_ioc_secobj_get {
1460ba2cbe9Sxc151355 	dld_secobj_t		sg_obj;
1470ba2cbe9Sxc151355 	uint_t			sg_count;
148eae72b5bSSebastien Roy 	uint_t			sg_size;
1490ba2cbe9Sxc151355 } dld_ioc_secobj_get_t;
1500ba2cbe9Sxc151355 
151d62bc4baSyz147064 /*
152d62bc4baSyz147064  * The following two slots were used outside of ON, so don't reuse them.
153d62bc4baSyz147064  *
154eae72b5bSSebastien Roy  * #define DLDIOCHOLDVLAN DLDIOC(0x08)
155eae72b5bSSebastien Roy  * #define DLDIOCRELEVLAN DLDIOC(0x09)
156d62bc4baSyz147064  */
157d62bc4baSyz147064 
158eae72b5bSSebastien Roy #define	DLDIOC_SECOBJ_UNSET	DLDIOC(0x0a)
1590ba2cbe9Sxc151355 typedef struct dld_ioc_secobj_unset {
1600ba2cbe9Sxc151355 	char			su_name[DLD_SECOBJ_NAME_MAX];
1610ba2cbe9Sxc151355 } dld_ioc_secobj_unset_t;
1620ba2cbe9Sxc151355 
163eae72b5bSSebastien Roy #define	DLDIOC_CREATE_VLAN	DLDIOC(0x0b)
164d62bc4baSyz147064 typedef struct dld_ioc_create_vlan {
165d62bc4baSyz147064 	datalink_id_t	dic_vlanid;
166d62bc4baSyz147064 	datalink_id_t	dic_linkid;
167d62bc4baSyz147064 	uint16_t	dic_vid;
168d62bc4baSyz147064 	boolean_t	dic_force;
169d62bc4baSyz147064 } dld_ioc_create_vlan_t;
170d62bc4baSyz147064 
171eae72b5bSSebastien Roy #define	DLDIOC_DELETE_VLAN	DLDIOC(0x0c)
172d62bc4baSyz147064 typedef struct dld_ioc_delete_vlan {
173d62bc4baSyz147064 	datalink_id_t	did_linkid;
174d62bc4baSyz147064 } dld_ioc_delete_vlan_t;
175d62bc4baSyz147064 
1763bc21d0aSAruna Ramakrishna - Sun Microsystems /*
1773bc21d0aSAruna Ramakrishna - Sun Microsystems  * The following constants have been removed, and the slots are open:
1783bc21d0aSAruna Ramakrishna - Sun Microsystems  *
179eae72b5bSSebastien Roy  * #define DLDIOC_SETAUTOPUSH	DLDIOC(0x0d)
180eae72b5bSSebastien Roy  * #define DLDIOC_GETAUTOPUSH	DLDIOC(0x0e)
181eae72b5bSSebastien Roy  * #define DLDIOC_CLRAUTOPUSH	DLDIOC(0x0f)
1823bc21d0aSAruna Ramakrishna - Sun Microsystems  */
183d62bc4baSyz147064 
184eae72b5bSSebastien Roy #define	DLDIOC_DOORSERVER	DLDIOC(0x10)
185d62bc4baSyz147064 typedef struct dld_ioc_door {
186d62bc4baSyz147064 	boolean_t	did_start_door;
187d62bc4baSyz147064 } dld_ioc_door_t;
188d62bc4baSyz147064 
189eae72b5bSSebastien Roy #define	DLDIOC_RENAME		DLDIOC(0x11)
190d62bc4baSyz147064 typedef struct dld_ioc_rename {
191d62bc4baSyz147064 	datalink_id_t	dir_linkid1;
192d62bc4baSyz147064 	datalink_id_t	dir_linkid2;
193d62bc4baSyz147064 	char		dir_link[MAXLINKNAMELEN];
194d62bc4baSyz147064 } dld_ioc_rename_t;
195d62bc4baSyz147064 
196f4b3ec61Sdh155122 /*
1973bc21d0aSAruna Ramakrishna - Sun Microsystems  * The following constants have been removed, and the slots are open:
1983bc21d0aSAruna Ramakrishna - Sun Microsystems  *
199eae72b5bSSebastien Roy  * #define DLDIOC_SETZID	DLDIOC(0x12)
200eae72b5bSSebastien Roy  * #define DLDIOC_GETZID	DLDIOC(0x13)
201f4b3ec61Sdh155122  */
202f4b3ec61Sdh155122 
2033bc21d0aSAruna Ramakrishna - Sun Microsystems typedef struct dld_ioc_zid {
2043bc21d0aSAruna Ramakrishna - Sun Microsystems 	zoneid_t	diz_zid;
2053bc21d0aSAruna Ramakrishna - Sun Microsystems 	char		diz_link[MAXLINKNAMELEN];
2063bc21d0aSAruna Ramakrishna - Sun Microsystems 	boolean_t	diz_is_ppa_hack;
2073bc21d0aSAruna Ramakrishna - Sun Microsystems } dld_ioc_zid_t;
208f4b3ec61Sdh155122 
209eae72b5bSSebastien Roy #define	DLDIOC_GETZID  		DLDIOC(0x13)
210eae72b5bSSebastien Roy typedef struct dld_ioc_getzid {
211eae72b5bSSebastien Roy 	datalink_id_t	dig_linkid;
212eae72b5bSSebastien Roy 	zoneid_t	dig_zid;
213eae72b5bSSebastien Roy } dld_ioc_getzid_t;
214eae72b5bSSebastien Roy 
215d62bc4baSyz147064 /*
216d62bc4baSyz147064  * data-link autopush configuration.
217d62bc4baSyz147064  */
218d62bc4baSyz147064 struct dlautopush {
219d62bc4baSyz147064 	uint_t	dap_anchor;
220d62bc4baSyz147064 	uint_t	dap_npush;
221d62bc4baSyz147064 	char	dap_aplist[MAXAPUSH][FMNAMESZ+1];
222d62bc4baSyz147064 };
223f4b3ec61Sdh155122 
224eae72b5bSSebastien Roy #define	DLDIOC_SETMACPROP	DLDIOC(0x14)
225eae72b5bSSebastien Roy #define	DLDIOC_GETMACPROP	DLDIOC(0x15)
2263fd94f8cSam223141 #define	MAC_PROP_VERSION	1
227e7801d59Ssowmini 
2283fd94f8cSam223141 typedef struct dld_ioc_macprop_s {
229e7801d59Ssowmini 	int		pr_version;
2304045d941Ssowmini 	uint_t		pr_flags;
2316b9e797cSsowmini 	datalink_id_t	pr_linkid;
2323fd94f8cSam223141 	mac_prop_id_t	pr_num;
233*afdda45fSVasumathi Sundaram - Sun Microsystems 	uint_t		pr_perm_flags;
2344045d941Ssowmini 	char    	pr_name[MAXLINKPROPNAME];
235e7801d59Ssowmini 	uint_t		pr_valsize;		/* sizeof pr_val */
236e7801d59Ssowmini 	char		pr_val[1];
2373fd94f8cSam223141 } dld_ioc_macprop_t;
238e7801d59Ssowmini 
239210db224Sericheng #ifdef _KERNEL
240210db224Sericheng int	dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
241210db224Sericheng int	dld_open(queue_t *, dev_t *, int, int, cred_t *);
242210db224Sericheng int	dld_close(queue_t *);
243210db224Sericheng void	dld_wput(queue_t *, mblk_t *);
244210db224Sericheng void	dld_wsrv(queue_t *);
245210db224Sericheng void	dld_init_ops(struct dev_ops *, const char *);
246210db224Sericheng void	dld_fini_ops(struct dev_ops *);
247d62bc4baSyz147064 int	dld_autopush(dev_t *, struct dlautopush *);
248210db224Sericheng #endif
249210db224Sericheng 
2507c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
2517c478bd9Sstevel@tonic-gate }
2527c478bd9Sstevel@tonic-gate #endif
2537c478bd9Sstevel@tonic-gate 
2547c478bd9Sstevel@tonic-gate #endif	/* _SYS_DLD_H */
255