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). 317c478bd9Sstevel@tonic-gate */ 327c478bd9Sstevel@tonic-gate 337c478bd9Sstevel@tonic-gate #include <sys/types.h> 347c478bd9Sstevel@tonic-gate #include <sys/stream.h> 35d62bc4baSyz147064 #include <sys/conf.h> 36d62bc4baSyz147064 #include <sys/sad.h> 377c478bd9Sstevel@tonic-gate #include <net/if.h> 38e7801d59Ssowmini #include <sys/ddi.h> 39e7801d59Ssowmini #include <sys/sunddi.h> 403fd94f8cSam223141 #include <sys/mac.h> 417c478bd9Sstevel@tonic-gate 427c478bd9Sstevel@tonic-gate #ifdef __cplusplus 437c478bd9Sstevel@tonic-gate extern "C" { 447c478bd9Sstevel@tonic-gate #endif 457c478bd9Sstevel@tonic-gate 467c478bd9Sstevel@tonic-gate /* 477c478bd9Sstevel@tonic-gate * Data-Link Driver Information (text emitted by modinfo(1m)) 487c478bd9Sstevel@tonic-gate */ 494045d941Ssowmini #define DLD_INFO "Data-Link Driver" 507c478bd9Sstevel@tonic-gate 517c478bd9Sstevel@tonic-gate /* 527c478bd9Sstevel@tonic-gate * Options: To enable an option set the property name to a non-zero value 537c478bd9Sstevel@tonic-gate * in kernel/drv/dld.conf. 547c478bd9Sstevel@tonic-gate */ 557c478bd9Sstevel@tonic-gate 567c478bd9Sstevel@tonic-gate /* 577c478bd9Sstevel@tonic-gate * Prevent use of the IP fast-path (direct M_DATA transmit). 587c478bd9Sstevel@tonic-gate */ 597c478bd9Sstevel@tonic-gate #define DLD_PROP_NO_FASTPATH "no-fastpath" 607c478bd9Sstevel@tonic-gate 617c478bd9Sstevel@tonic-gate /* 627c478bd9Sstevel@tonic-gate * Prevent advertising of the DL_CAPAB_POLL capability. 637c478bd9Sstevel@tonic-gate */ 647c478bd9Sstevel@tonic-gate #define DLD_PROP_NO_POLL "no-poll" 657c478bd9Sstevel@tonic-gate 667c478bd9Sstevel@tonic-gate /* 677c478bd9Sstevel@tonic-gate * Prevent advertising of the DL_CAPAB_ZEROCOPY capability. 687c478bd9Sstevel@tonic-gate */ 697c478bd9Sstevel@tonic-gate #define DLD_PROP_NO_ZEROCOPY "no-zerocopy" 707c478bd9Sstevel@tonic-gate 717c478bd9Sstevel@tonic-gate /* 729c175129Sja97890 * Prevent advertising of the DL_CAPAB_SOFTRING capability. 739c175129Sja97890 */ 749c175129Sja97890 #define DLD_PROP_NO_SOFTRING "no-softring" 759c175129Sja97890 769c175129Sja97890 /* 777c478bd9Sstevel@tonic-gate * The name of the driver. 787c478bd9Sstevel@tonic-gate */ 797c478bd9Sstevel@tonic-gate #define DLD_DRIVER_NAME "dld" 807c478bd9Sstevel@tonic-gate 817c478bd9Sstevel@tonic-gate /* 827c478bd9Sstevel@tonic-gate * The name of the control minor node of dld. 837c478bd9Sstevel@tonic-gate */ 847c478bd9Sstevel@tonic-gate #define DLD_CONTROL_MINOR_NAME "ctl" 857c478bd9Sstevel@tonic-gate #define DLD_CONTROL_MINOR 0 867c478bd9Sstevel@tonic-gate #define DLD_CONTROL_DEV "/devices/pseudo/" DLD_DRIVER_NAME "@0:" \ 877c478bd9Sstevel@tonic-gate DLD_CONTROL_MINOR_NAME 887c478bd9Sstevel@tonic-gate 897c478bd9Sstevel@tonic-gate /* 907c478bd9Sstevel@tonic-gate * IOCTL codes and data structures. 917c478bd9Sstevel@tonic-gate */ 927c478bd9Sstevel@tonic-gate #define DLDIOC ('D' << 24 | 'L' << 16 | 'D' << 8) 937c478bd9Sstevel@tonic-gate 94d62bc4baSyz147064 #define DLDIOC_ATTR (DLDIOC | 0x03) 957c478bd9Sstevel@tonic-gate 967c478bd9Sstevel@tonic-gate typedef struct dld_ioc_attr { 97d62bc4baSyz147064 datalink_id_t dia_linkid; 98210db224Sericheng uint_t dia_max_sdu; 997c478bd9Sstevel@tonic-gate } dld_ioc_attr_t; 1007c478bd9Sstevel@tonic-gate 101d62bc4baSyz147064 #define DLDIOC_VLAN_ATTR (DLDIOC | 0x04) 102d62bc4baSyz147064 typedef struct dld_ioc_vlan_attr { 103d62bc4baSyz147064 datalink_id_t div_vlanid; 104d62bc4baSyz147064 uint16_t div_vid; 105d62bc4baSyz147064 datalink_id_t div_linkid; 106d62bc4baSyz147064 boolean_t div_force; 107d62bc4baSyz147064 boolean_t div_implicit; 108d62bc4baSyz147064 } dld_ioc_vlan_attr_t; 109210db224Sericheng 110d62bc4baSyz147064 #define DLDIOC_PHYS_ATTR (DLDIOC | 0x05) 111e7801d59Ssowmini #define DLPI_LINKNAME_MAX 32 112e7801d59Ssowmini 113d62bc4baSyz147064 typedef struct dld_ioc_phys_attr { 114d62bc4baSyz147064 datalink_id_t dip_linkid; 115d62bc4baSyz147064 /* 116d62bc4baSyz147064 * Whether this physical link supports vanity naming. Note that 117d62bc4baSyz147064 * physical links whose media type is not supported by GLDv3 118d62bc4baSyz147064 * can not support vanity naming. 119d62bc4baSyz147064 */ 120d62bc4baSyz147064 boolean_t dip_novanity; 121d62bc4baSyz147064 char dip_dev[MAXLINKNAMELEN]; 122d62bc4baSyz147064 } dld_ioc_phys_attr_t; 123f4b3ec61Sdh155122 1240ba2cbe9Sxc151355 /* 1250ba2cbe9Sxc151355 * Secure objects ioctls 1260ba2cbe9Sxc151355 */ 1270ba2cbe9Sxc151355 typedef enum { 128a399b765Szf162725 DLD_SECOBJ_CLASS_WEP = 1, 129a399b765Szf162725 DLD_SECOBJ_CLASS_WPA 1300ba2cbe9Sxc151355 } dld_secobj_class_t; 1310ba2cbe9Sxc151355 1320ba2cbe9Sxc151355 #define DLD_SECOBJ_OPT_CREATE 0x00000001 1330ba2cbe9Sxc151355 #define DLD_SECOBJ_NAME_MAX 32 1340ba2cbe9Sxc151355 #define DLD_SECOBJ_VAL_MAX 256 1350ba2cbe9Sxc151355 typedef struct dld_secobj { 1360ba2cbe9Sxc151355 char so_name[DLD_SECOBJ_NAME_MAX]; 1370ba2cbe9Sxc151355 dld_secobj_class_t so_class; 1380ba2cbe9Sxc151355 uint8_t so_val[DLD_SECOBJ_VAL_MAX]; 1390ba2cbe9Sxc151355 uint_t so_len; 1400ba2cbe9Sxc151355 } dld_secobj_t; 1410ba2cbe9Sxc151355 142d62bc4baSyz147064 #define DLDIOC_SECOBJ_SET (DLDIOC | 0x06) 1430ba2cbe9Sxc151355 typedef struct dld_ioc_secobj_set { 1440ba2cbe9Sxc151355 dld_secobj_t ss_obj; 1450ba2cbe9Sxc151355 uint_t ss_flags; 1460ba2cbe9Sxc151355 } dld_ioc_secobj_set_t; 1470ba2cbe9Sxc151355 148d62bc4baSyz147064 #define DLDIOC_SECOBJ_GET (DLDIOC | 0x07) 1490ba2cbe9Sxc151355 typedef struct dld_ioc_secobj_get { 1500ba2cbe9Sxc151355 dld_secobj_t sg_obj; 1510ba2cbe9Sxc151355 uint_t sg_count; 1520ba2cbe9Sxc151355 } dld_ioc_secobj_get_t; 1530ba2cbe9Sxc151355 154d62bc4baSyz147064 /* 155d62bc4baSyz147064 * The following two slots were used outside of ON, so don't reuse them. 156d62bc4baSyz147064 * 157d62bc4baSyz147064 * #define DLDIOCHOLDVLAN (DLDIOC | 0x08) 158d62bc4baSyz147064 * #define DLDIOCRELEVLAN (DLDIOC | 0x09) 159d62bc4baSyz147064 */ 160d62bc4baSyz147064 161d62bc4baSyz147064 #define DLDIOC_SECOBJ_UNSET (DLDIOC | 0x0a) 1620ba2cbe9Sxc151355 typedef struct dld_ioc_secobj_unset { 1630ba2cbe9Sxc151355 char su_name[DLD_SECOBJ_NAME_MAX]; 1640ba2cbe9Sxc151355 } dld_ioc_secobj_unset_t; 1650ba2cbe9Sxc151355 166d62bc4baSyz147064 #define DLDIOC_CREATE_VLAN (DLDIOC | 0x0b) 167d62bc4baSyz147064 typedef struct dld_ioc_create_vlan { 168d62bc4baSyz147064 datalink_id_t dic_vlanid; 169d62bc4baSyz147064 datalink_id_t dic_linkid; 170d62bc4baSyz147064 uint16_t dic_vid; 171d62bc4baSyz147064 boolean_t dic_force; 172d62bc4baSyz147064 } dld_ioc_create_vlan_t; 173d62bc4baSyz147064 174d62bc4baSyz147064 #define DLDIOC_DELETE_VLAN (DLDIOC | 0x0c) 175d62bc4baSyz147064 typedef struct dld_ioc_delete_vlan { 176d62bc4baSyz147064 datalink_id_t did_linkid; 177d62bc4baSyz147064 } dld_ioc_delete_vlan_t; 178d62bc4baSyz147064 179*3bc21d0aSAruna Ramakrishna - Sun Microsystems /* 180*3bc21d0aSAruna Ramakrishna - Sun Microsystems * The following constants have been removed, and the slots are open: 181*3bc21d0aSAruna Ramakrishna - Sun Microsystems * 182*3bc21d0aSAruna Ramakrishna - Sun Microsystems * #define DLDIOC_SETAUTOPUSH (DLDIOC | 0x0d) 183*3bc21d0aSAruna Ramakrishna - Sun Microsystems * #define DLDIOC_GETAUTOPUSH (DLDIOC | 0x0e) 184*3bc21d0aSAruna Ramakrishna - Sun Microsystems * #define DLDIOC_CLRAUTOPUSH (DLDIOC | 0x0f) 185*3bc21d0aSAruna Ramakrishna - Sun Microsystems */ 186d62bc4baSyz147064 187d62bc4baSyz147064 #define DLDIOC_DOORSERVER (DLDIOC | 0x10) 188d62bc4baSyz147064 typedef struct dld_ioc_door { 189d62bc4baSyz147064 boolean_t did_start_door; 190d62bc4baSyz147064 } dld_ioc_door_t; 191d62bc4baSyz147064 192d62bc4baSyz147064 #define DLDIOC_RENAME (DLDIOC | 0x11) 193d62bc4baSyz147064 typedef struct dld_ioc_rename { 194d62bc4baSyz147064 datalink_id_t dir_linkid1; 195d62bc4baSyz147064 datalink_id_t dir_linkid2; 196d62bc4baSyz147064 char dir_link[MAXLINKNAMELEN]; 197d62bc4baSyz147064 } dld_ioc_rename_t; 198d62bc4baSyz147064 199f4b3ec61Sdh155122 /* 200*3bc21d0aSAruna Ramakrishna - Sun Microsystems * The following constants have been removed, and the slots are open: 201*3bc21d0aSAruna Ramakrishna - Sun Microsystems * 202*3bc21d0aSAruna Ramakrishna - Sun Microsystems * #define DLDIOC_SETZID (DLDIOC | 0x12) 203*3bc21d0aSAruna Ramakrishna - Sun Microsystems * #define DLDIOC_GETZID (DLDIOC | 0x13) 204f4b3ec61Sdh155122 */ 205f4b3ec61Sdh155122 206*3bc21d0aSAruna Ramakrishna - Sun Microsystems typedef struct dld_ioc_zid { 207*3bc21d0aSAruna Ramakrishna - Sun Microsystems zoneid_t diz_zid; 208*3bc21d0aSAruna Ramakrishna - Sun Microsystems char diz_link[MAXLINKNAMELEN]; 209*3bc21d0aSAruna Ramakrishna - Sun Microsystems boolean_t diz_is_ppa_hack; 210*3bc21d0aSAruna Ramakrishna - Sun Microsystems } dld_ioc_zid_t; 211f4b3ec61Sdh155122 212d62bc4baSyz147064 /* 213d62bc4baSyz147064 * data-link autopush configuration. 214d62bc4baSyz147064 */ 215d62bc4baSyz147064 struct dlautopush { 216d62bc4baSyz147064 uint_t dap_anchor; 217d62bc4baSyz147064 uint_t dap_npush; 218d62bc4baSyz147064 char dap_aplist[MAXAPUSH][FMNAMESZ+1]; 219d62bc4baSyz147064 }; 220f4b3ec61Sdh155122 221e7801d59Ssowmini 222e7801d59Ssowmini 2233fd94f8cSam223141 #define DLDIOC_SETMACPROP (DLDIOC | 0x14) 2243fd94f8cSam223141 #define DLDIOC_GETMACPROP (DLDIOC | 0x15) 2253fd94f8cSam223141 #define MAC_PROP_VERSION 1 226e7801d59Ssowmini 2273fd94f8cSam223141 typedef struct dld_ioc_macprop_s { 228e7801d59Ssowmini int pr_version; 2294045d941Ssowmini uint_t pr_flags; 2306b9e797cSsowmini datalink_id_t pr_linkid; 2313fd94f8cSam223141 mac_prop_id_t pr_num; 2324045d941Ssowmini char pr_name[MAXLINKPROPNAME]; 233e7801d59Ssowmini uint_t pr_valsize; /* sizeof pr_val */ 234e7801d59Ssowmini char pr_val[1]; 2353fd94f8cSam223141 } dld_ioc_macprop_t; 236e7801d59Ssowmini 237210db224Sericheng #ifdef _KERNEL 238210db224Sericheng int dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **); 239210db224Sericheng int dld_open(queue_t *, dev_t *, int, int, cred_t *); 240210db224Sericheng int dld_close(queue_t *); 241210db224Sericheng void dld_wput(queue_t *, mblk_t *); 242210db224Sericheng void dld_wsrv(queue_t *); 243210db224Sericheng void dld_init_ops(struct dev_ops *, const char *); 244210db224Sericheng void dld_fini_ops(struct dev_ops *); 245d62bc4baSyz147064 int dld_autopush(dev_t *, struct dlautopush *); 246210db224Sericheng #endif 247210db224Sericheng 2487c478bd9Sstevel@tonic-gate #ifdef __cplusplus 2497c478bd9Sstevel@tonic-gate } 2507c478bd9Sstevel@tonic-gate #endif 2517c478bd9Sstevel@tonic-gate 2527c478bd9Sstevel@tonic-gate #endif /* _SYS_DLD_H */ 253