diff options
author | yz147064 <none@none> | 2008-01-23 18:09:15 -0800 |
---|---|---|
committer | yz147064 <none@none> | 2008-01-23 18:09:15 -0800 |
commit | d62bc4badc1c1f1549c961cfb8b420e650e1272b (patch) | |
tree | 9f466859e9cfb73da13b64261432aba4683f19ad /usr/src/uts/common/sys/softmac_impl.h | |
parent | d38257c4392a9dd690c2f7f2383236c1fc80e509 (diff) | |
download | illumos-gate-d62bc4badc1c1f1549c961cfb8b420e650e1272b.tar.gz |
PSARC/2006/499 Clearview Nemo unification and vanity naming
PSARC/2007/527 Addendum for Clearview Vanity Naming and Nemo Unification
PSARC/2008/002 Clearview UV Updates
6310766 vlan statistics get reset at unplumb time
6320515 dladm commands with "-R" option should not take effect immediately
6433732 Simplify the GLDv3 control path by making its processing asynchronous
6445912 dladm show-link fails to show a specific link in the debug version
6452413 dladm show-link doesn't show VLAN links for GLDv2 drivers
6504433 libwladm's use of wladm_wlresult2status() needs an overhaul
6504507 dladm set-linkprop failure message is unclear
6534289 DR should work with aggregations
6535719 dladm_aggr_port_attr_db_t`lp_devname should be MAXNAMELEN, not MAXNAMELEN + 1
6539634 GLDv3 should DL_ERROR_ACK a DL_UDQOS_REQ with DL_OUTSTATE when the stream is DL_UNATTACHED
6540246 libdladm should not guess zoneid from DLDIOCZIDGET ioctl errno
6544195 dladm show-dev assumes GLDv3 stats.. incompatible with GLDv2
6563295 dladm show-linkprop -P does not work properly for unavailable links
6577618 integrate network vanity naming and nemo unification
6600446 links assigned to a local zone are still aggregatable by global zone
6607572 "boot net - install" can trigger assertion failure in dld_str_attach()
6613956 "svccfg import -" does not work as bfu expects
6637596 invalid assertion in ip_soft_ring_assignment()
6642350 kernel DLPI processing routines are long overdue
6643338 GLDv3 PPA hack VLAN ID checks don't always work
6647203 bfu: smf_delete_manifest() does not work for non-global zones
6649885 DL_IB GLDv3 mactype plugin must fill in its mtr_nativetype
6650395 libuuid should be lint-clean and linted nightly
--HG--
rename : usr/src/cmd/dladm/aggregation.conf => deleted_files/usr/src/cmd/dladm/aggregation.conf
rename : usr/src/cmd/dladm/linkprop.conf => deleted_files/usr/src/cmd/dladm/linkprop.conf
rename : usr/src/lib/libinetcfg/common/inetcfg_nic.c => deleted_files/usr/src/lib/libinetcfg/common/inetcfg_nic.c
rename : usr/src/lib/libinetcfg/common/inetcfg_nic.h => deleted_files/usr/src/lib/libinetcfg/common/inetcfg_nic.h
Diffstat (limited to 'usr/src/uts/common/sys/softmac_impl.h')
-rw-r--r-- | usr/src/uts/common/sys/softmac_impl.h | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/usr/src/uts/common/sys/softmac_impl.h b/usr/src/uts/common/sys/softmac_impl.h new file mode 100644 index 0000000000..93071c17a9 --- /dev/null +++ b/usr/src/uts/common/sys/softmac_impl.h @@ -0,0 +1,234 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#ifndef _SYS_SOFTMAC_IMPL_H +#define _SYS_SOFTMAC_IMPL_H + +#pragma ident "%Z%%M% %I% %E% SMI" + +#include <sys/types.h> +#include <sys/ethernet.h> +#include <sys/taskq.h> +#include <sys/sunddi.h> +#include <sys/sunldi.h> +#include <sys/strsun.h> +#include <sys/stream.h> +#include <sys/dlpi.h> +#include <sys/mac.h> +#include <sys/mac_ether.h> + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct softmac_lower_s { + struct softmac *sl_softmac; + queue_t *sl_wq; + + /* + * sl_ctl_inprogress is used to serialize the control path. It will + * be set when either an ioctl or an M_{PC,}PROTO message is received + * from the upper layer, and will be cleared when processing done. + */ + kmutex_t sl_ctl_mutex; + kcondvar_t sl_ctl_cv; + boolean_t sl_ctl_inprogress; + + /* + * When a control message is processed, either sl_pending_prim or + * sl_pending_ioctl will be set. They will be cleared when the + * acknowledgement of the specific control message is received + * from the underlying legacy driver. + */ + kmutex_t sl_mutex; + kcondvar_t sl_cv; + t_uscalar_t sl_pending_prim; + boolean_t sl_pending_ioctl; + mblk_t *sl_ack_mp; + + mac_resource_handle_t sl_handle; + ldi_handle_t sl_lh; +} softmac_lower_t; + +enum softmac_state { + SOFTMAC_INITIALIZED, + SOFTMAC_READY +}; + +typedef struct softmac_dev_s { + dev_t sd_dev; +} softmac_dev_t; + +/* + * smac_flag values. + */ +#define SOFTMAC_GLDV3 0x01 +#define SOFTMAC_NOSUPP 0x02 +#define SOFTMAC_ATTACH_DONE 0x04 +#define SOFTMAC_NEED_RECREATE 0x08 + +/* + * The softmac structure allows all minor nodes (at most two, style-1 and + * style-2) for the same device to be processed. A softmac_dev_t will be + * created for each minor node. + * + * We try to "register" the mac after all the softmac_dev_t's are processed so + * that even if DLPI operations fail (because of driver bugs) for one minor + * node, the other minor node can still be used to register the mac. + * (Specifically, an incorrect xxx_getinfo() implementation will cause style-2 + * minor node mac registration to fail.) + */ +typedef struct softmac { + /* + * The following fields will be set when the softmac is created and + * will not change. No lock is required. + */ + char smac_devname[MAXNAMELEN]; + major_t smac_umajor; + int smac_uppa; + uint32_t smac_cnt; /* # of minor nodes for this device */ + + /* + * The following fields are protected by softmac_hash_lock. + */ + /* + * The smac_hold_cnt field increases when softmac_hold_device() is + * called to force the dls_vlan_t of the device to be created. The + * device pre-detach fails if this counter is not 0. + */ + uint32_t smac_hold_cnt; + + /* + * The following fields are protected by smac_lock. + */ + kmutex_t smac_mutex; + kcondvar_t smac_cv; + uint32_t smac_flags; + int smac_attacherr; + mac_handle_t smac_mh; + softmac_dev_t *smac_softmac[2]; + taskqid_t smac_taskq; + /* + * Number of minor nodes whose post-attach routine has succeeded. + * This should be the same as the numbers of softmac_dev_t. + * Note that it does not imply SOFTMAC_ATTACH_DONE as the taskq might + * be still ongoing. + */ + uint32_t smac_attachok_cnt; + /* + * Number of softmac_dev_t left when pre-detach fails. This is used + * to indicate whether postattach is called because of a failed + * pre-detach. + */ + uint32_t smac_attached_left; + + /* + * This field is set and cleared by users of softmac (who calls + * softmac_hold/rele_device()). It is protected by smac_mutex. + */ + dev_info_t *smac_udip; + + /* + * The remaining fields are used to register the MAC for a legacy + * device. They are set in softmac_mac_register() and do not change. + * One can access them when mac_register() is done without locks. + */ + + /* + * media type is needed for create <link name, linkid> mapping, so + * it is set for GLDv3 device as well + */ + uint_t smac_media; + /* DLPI style of the underlying device */ + int smac_style; + dev_t smac_dev; + size_t smac_saplen; + size_t smac_addrlen; + uchar_t smac_unicst_addr[MAXMACADDRLEN]; + uint_t smac_min_sdu; + uint_t smac_max_sdu; + uint32_t smac_margin; + + /* Notifications the underlying driver can support. */ + uint32_t smac_notifications; + + /* + * Capabilities of the underlying driver. + */ + uint32_t smac_capab_flags; + uint32_t smac_hcksum_txflags; + boolean_t smac_no_capability_req; + dl_capab_mdt_t smac_mdt_capab; + boolean_t smac_mdt; + + /* + * The following fields are protected by smac_lock + */ + krwlock_t smac_lock; + enum softmac_state smac_state; + /* Lower stream structure */ + softmac_lower_t *smac_lower; +} softmac_t; + +typedef struct smac_ioc_start_s { + softmac_lower_t *si_slp; +} smac_ioc_start_t; + +#define SMAC_IOC ('S' << 24 | 'M' << 16 | 'C' << 8) +#define SMAC_IOC_START (SMAC_IOC | 0x01) + +#define SOFTMAC_BLANK_TICKS 128 +#define SOFTMAC_BLANK_PKT_COUNT 8 + +extern dev_info_t *softmac_dip; +#define SOFTMAC_DEV_NAME "softmac" + +extern int softmac_send_bind_req(softmac_lower_t *, uint_t); +extern int softmac_send_notify_req(softmac_lower_t *, uint32_t); +extern int softmac_send_promisc_req(softmac_lower_t *, t_uscalar_t, + boolean_t); +extern void softmac_init(void); +extern void softmac_fini(void); +extern boolean_t softmac_busy(void); +extern int softmac_fill_capab(ldi_handle_t, softmac_t *); +extern int softmac_capab_enable(softmac_lower_t *); +extern void softmac_rput_process_notdata(queue_t *, mblk_t *); +extern void softmac_rput_process_data(softmac_lower_t *, mblk_t *); + +extern int softmac_m_promisc(void *, boolean_t); +extern int softmac_m_multicst(void *, boolean_t, const uint8_t *); +extern int softmac_m_unicst(void *, const uint8_t *); +extern void softmac_m_ioctl(void *, queue_t *, mblk_t *); +extern int softmac_m_stat(void *, uint_t, uint64_t *); +extern mblk_t *softmac_m_tx(void *, mblk_t *); +extern void softmac_m_resources(void *); +extern int softmac_proto_tx(softmac_lower_t *, mblk_t *, mblk_t **); +extern void softmac_ioctl_tx(softmac_lower_t *, mblk_t *, mblk_t **); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_SOFTMAC_IMPL_H */ |