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 /* 22ae6aa22aSVenugopal Iyer * Copyright 2009 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_DLS_IMPL_H 277c478bd9Sstevel@tonic-gate #define _SYS_DLS_IMPL_H 287c478bd9Sstevel@tonic-gate 297c478bd9Sstevel@tonic-gate #include <sys/stream.h> 307c478bd9Sstevel@tonic-gate #include <sys/dls.h> 31da14cebeSEric Cheng #include <sys/mac_provider.h> 32da14cebeSEric Cheng #include <sys/mac_client.h> 33da14cebeSEric Cheng #include <sys/mac_client_priv.h> 34210db224Sericheng #include <sys/modhash.h> 357c478bd9Sstevel@tonic-gate #include <sys/kstat.h> 367c478bd9Sstevel@tonic-gate #include <net/if.h> 374b46d1efSkrgopi #include <sys/dlpi.h> 387c478bd9Sstevel@tonic-gate 397c478bd9Sstevel@tonic-gate #ifdef __cplusplus 407c478bd9Sstevel@tonic-gate extern "C" { 417c478bd9Sstevel@tonic-gate #endif 427c478bd9Sstevel@tonic-gate 43da14cebeSEric Cheng typedef struct dls_multicst_addr_s { 44da14cebeSEric Cheng struct dls_multicst_addr_s *dma_nextp; /* ds_rw_lock */ 45ba2e4443Sseb uint8_t dma_addr[MAXMACADDRLEN]; 46da14cebeSEric Cheng } dls_multicst_addr_t; 47da14cebeSEric Cheng 48da14cebeSEric Cheng struct dls_link_s { /* Protected by */ 49da14cebeSEric Cheng char dl_name[MAXNAMELEN]; /* SL */ 50da14cebeSEric Cheng uint_t dl_ddi_instance; /* SL */ 51da14cebeSEric Cheng mac_handle_t dl_mh; /* SL */ 52da14cebeSEric Cheng mac_client_handle_t dl_mch; /* SL */ 53da14cebeSEric Cheng mac_unicast_handle_t dl_mah; /* SL */ 54da14cebeSEric Cheng const mac_info_t *dl_mip; /* SL */ 55da14cebeSEric Cheng uint_t dl_ref; /* SL */ 56da14cebeSEric Cheng mod_hash_t *dl_str_hash; /* SL, modhash lock */ 57da14cebeSEric Cheng uint_t dl_impl_count; /* SL */ 58da14cebeSEric Cheng uint_t dl_nactive; /* SL */ 59da14cebeSEric Cheng uint32_t dl_unknowns; /* atomic */ 60da14cebeSEric Cheng zoneid_t dl_zid; 61da14cebeSEric Cheng uint_t dl_zone_ref; 62e75f0919SSebastien Roy link_tagmode_t dl_tagmode; /* atomic */ 63*8d4cf8d8S uint_t dl_nonip_cnt; /* SL */ 647c478bd9Sstevel@tonic-gate }; 657c478bd9Sstevel@tonic-gate 66da14cebeSEric Cheng typedef struct dls_head_s { 67da14cebeSEric Cheng kmutex_t dh_lock; 68da14cebeSEric Cheng struct dld_str_s *dh_list; /* dh_ref */ 69da14cebeSEric Cheng uint_t dh_ref; /* dh_lock */ 70da14cebeSEric Cheng mod_hash_key_t dh_key; /* SL */ 71da14cebeSEric Cheng kcondvar_t dh_cv; /* dh_lock */ 72da14cebeSEric Cheng uint_t dh_removing; /* dh_lock */ 73da14cebeSEric Cheng } dls_head_t; 74210db224Sericheng 75ae6aa22aSVenugopal Iyer extern mod_hash_t *i_dls_link_hash; 76ae6aa22aSVenugopal Iyer 777c478bd9Sstevel@tonic-gate extern void dls_link_init(void); 787c478bd9Sstevel@tonic-gate extern int dls_link_fini(void); 79a08fa175Syz147064 extern int dls_link_hold(const char *, dls_link_t **); 80da14cebeSEric Cheng extern int dls_link_hold_create(const char *, dls_link_t **); 81da14cebeSEric Cheng extern int dls_link_hold_by_dev(dev_t, dls_link_t **); 827c478bd9Sstevel@tonic-gate extern void dls_link_rele(dls_link_t *); 83da14cebeSEric Cheng extern int dls_link_rele_by_name(const char *); 84da14cebeSEric Cheng extern void dls_link_add(dls_link_t *, uint32_t, dld_str_t *); 85da14cebeSEric Cheng extern void dls_link_remove(dls_link_t *, dld_str_t *); 860a0e9771SDarren Reed extern int dls_link_getzid(const char *, zoneid_t *); 87da14cebeSEric Cheng extern int dls_link_setzid(const char *, zoneid_t); 88da14cebeSEric Cheng extern dev_info_t *dls_link_devinfo(dev_t); 89da14cebeSEric Cheng extern dev_t dls_link_dev(dls_link_t *); 90da14cebeSEric Cheng 91da14cebeSEric Cheng extern void i_dls_head_rele(dls_head_t *); 92da14cebeSEric Cheng extern int dls_mac_active_set(dls_link_t *i); 93d62bc4baSyz147064 extern void dls_mac_active_clear(dls_link_t *); 947c478bd9Sstevel@tonic-gate 95da14cebeSEric Cheng extern void dls_create_str_kstats(dld_str_t *); 96da14cebeSEric Cheng extern int dls_stat_update(kstat_t *, dls_link_t *, int); 97d62bc4baSyz147064 extern int dls_stat_create(const char *, int, const char *, 982b24ab6bSSebastien Roy zoneid_t, int (*)(struct kstat *, int), void *, 992b24ab6bSSebastien Roy kstat_t **); 100d62bc4baSyz147064 101da14cebeSEric Cheng extern int dls_devnet_open_by_dev(dev_t, dls_link_t **, 102d62bc4baSyz147064 dls_dl_handle_t *); 103da14cebeSEric Cheng extern int dls_devnet_hold_link(datalink_id_t, dls_dl_handle_t *, 104da14cebeSEric Cheng dls_link_t **); 105da14cebeSEric Cheng extern void dls_devnet_rele_link(dls_dl_handle_t, dls_link_t *); 1067c478bd9Sstevel@tonic-gate 1077c478bd9Sstevel@tonic-gate extern void dls_init(void); 1087c478bd9Sstevel@tonic-gate extern int dls_fini(void); 109a08fa175Syz147064 extern void dls_link_txloop(void *, mblk_t *); 110da14cebeSEric Cheng extern boolean_t dls_accept(dld_str_t *, mac_header_info_t *, 111cd93090eSericheng dls_rx_t *, void **); 112da14cebeSEric Cheng extern boolean_t dls_accept_loopback(dld_str_t *, mac_header_info_t *, 113605445d5Sdg199075 dls_rx_t *, void **); 114da14cebeSEric Cheng extern boolean_t dls_accept_promisc(dld_str_t *, mac_header_info_t *, 115da14cebeSEric Cheng dls_rx_t *, void **, boolean_t); 116da14cebeSEric Cheng extern void i_dls_link_rx(void *, mac_resource_handle_t, mblk_t *, 117da14cebeSEric Cheng boolean_t); 118da14cebeSEric Cheng extern void dls_rx_promisc(void *, mac_resource_handle_t, mblk_t *, 119da14cebeSEric Cheng boolean_t); 120da14cebeSEric Cheng extern void dls_rx_vlan_promisc(void *, mac_resource_handle_t, 121da14cebeSEric Cheng mblk_t *, boolean_t); 122da14cebeSEric Cheng extern int dls_active_set(dld_str_t *); 1235d460eafSCathy Zhou extern void dls_active_clear(dld_str_t *, boolean_t); 1247c478bd9Sstevel@tonic-gate 125d62bc4baSyz147064 extern void dls_mgmt_init(void); 126d62bc4baSyz147064 extern void dls_mgmt_fini(void); 127d62bc4baSyz147064 128d62bc4baSyz147064 extern int dls_mgmt_get_phydev(datalink_id_t, dev_t *); 129d62bc4baSyz147064 1307c478bd9Sstevel@tonic-gate #ifdef __cplusplus 1317c478bd9Sstevel@tonic-gate } 1327c478bd9Sstevel@tonic-gate #endif 1337c478bd9Sstevel@tonic-gate 1347c478bd9Sstevel@tonic-gate #endif /* _SYS_DLS_IMPL_H */ 135