11991Sheppo /* 21991Sheppo * CDDL HEADER START 31991Sheppo * 41991Sheppo * The contents of this file are subject to the terms of the 51991Sheppo * Common Development and Distribution License (the "License"). 61991Sheppo * You may not use this file except in compliance with the License. 71991Sheppo * 81991Sheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 91991Sheppo * or http://www.opensolaris.org/os/licensing. 101991Sheppo * See the License for the specific language governing permissions 111991Sheppo * and limitations under the License. 121991Sheppo * 131991Sheppo * When distributing Covered Code, include this CDDL HEADER in each 141991Sheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 151991Sheppo * If applicable, add the following below this CDDL HEADER, with the 161991Sheppo * fields enclosed by brackets "[]" replaced with your own identifying 171991Sheppo * information: Portions Copyright [yyyy] [name of copyright owner] 181991Sheppo * 191991Sheppo * CDDL HEADER END 201991Sheppo */ 211991Sheppo 221991Sheppo /* 2311878SVenu.Iyer@Sun.COM * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 241991Sheppo * Use is subject to license terms. 251991Sheppo */ 261991Sheppo 271991Sheppo #ifndef _VNET_H 281991Sheppo #define _VNET_H 291991Sheppo 301991Sheppo #ifdef __cplusplus 311991Sheppo extern "C" { 321991Sheppo #endif 331991Sheppo 346495Sspeer #include <sys/vnet_res.h> 356495Sspeer #include <sys/vnet_mailbox.h> 366789Sam223141 #include <sys/modhash.h> 3710309SSriharsha.Basavapatna@Sun.COM #include <net/if.h> 3810309SSriharsha.Basavapatna@Sun.COM #include <sys/mac_client.h> 396495Sspeer 401991Sheppo #define VNET_SUCCESS (0) /* successful return */ 411991Sheppo #define VNET_FAILURE (-1) /* unsuccessful return */ 421991Sheppo 431991Sheppo #define KMEM_FREE(_p) kmem_free((_p), sizeof (*(_p))) 441991Sheppo 45*12011SSriharsha.Basavapatna@Sun.COM #define VNET_NUM_DESCRIPTORS 512 /* power of 2 descriptors */ 466495Sspeer 476495Sspeer #define IS_BROADCAST(ehp) \ 486495Sspeer (ether_cmp(&ehp->ether_dhost, ðerbroadcastaddr) == 0) 496495Sspeer #define IS_MULTICAST(ehp) \ 506495Sspeer ((ehp->ether_dhost.ether_addr_octet[0] & 01) == 1) 516495Sspeer 526495Sspeer #define VNET_MATCH_RES(vresp, vnetp) \ 536495Sspeer (ether_cmp(vresp->local_macaddr, vnetp->curr_macaddr) == 0) 546419Ssb155480 559805SSriharsha.Basavapatna@Sun.COM /* 569805SSriharsha.Basavapatna@Sun.COM * Flags used to indicate the state of the vnet device and its associated 579805SSriharsha.Basavapatna@Sun.COM * resources. 589805SSriharsha.Basavapatna@Sun.COM */ 599805SSriharsha.Basavapatna@Sun.COM typedef enum vnet_flags { 609805SSriharsha.Basavapatna@Sun.COM VNET_STOPPED = 0x0, 619805SSriharsha.Basavapatna@Sun.COM VNET_STARTED = 0x1, 629805SSriharsha.Basavapatna@Sun.COM VNET_STOPPING = 0x2 639805SSriharsha.Basavapatna@Sun.COM } vnet_flags_t; 649805SSriharsha.Basavapatna@Sun.COM 658160SWentao.Yang@Sun.COM typedef struct vnet_hio_stats { 668160SWentao.Yang@Sun.COM /* Link Input/Output stats */ 678160SWentao.Yang@Sun.COM uint64_t ipackets; /* # rx packets */ 688160SWentao.Yang@Sun.COM uint64_t ierrors; /* # rx error */ 698160SWentao.Yang@Sun.COM uint64_t opackets; /* # tx packets */ 708160SWentao.Yang@Sun.COM uint64_t oerrors; /* # tx error */ 718160SWentao.Yang@Sun.COM 728160SWentao.Yang@Sun.COM /* MIB II variables */ 738160SWentao.Yang@Sun.COM uint64_t rbytes; /* # bytes received */ 748160SWentao.Yang@Sun.COM uint64_t obytes; /* # bytes transmitted */ 758160SWentao.Yang@Sun.COM uint32_t multircv; /* # multicast packets received */ 768160SWentao.Yang@Sun.COM uint32_t multixmt; /* # multicast packets for xmit */ 778160SWentao.Yang@Sun.COM uint32_t brdcstrcv; /* # broadcast packets received */ 788160SWentao.Yang@Sun.COM uint32_t brdcstxmt; /* # broadcast packets for xmit */ 798160SWentao.Yang@Sun.COM uint32_t norcvbuf; /* # rcv packets discarded */ 808160SWentao.Yang@Sun.COM uint32_t noxmtbuf; /* # xmit packets discarded */ 818160SWentao.Yang@Sun.COM } vnet_hio_stats_t; 828160SWentao.Yang@Sun.COM 838160SWentao.Yang@Sun.COM typedef struct vnet_hio_kstats { 848160SWentao.Yang@Sun.COM /* Link Input/Output stats */ 858160SWentao.Yang@Sun.COM kstat_named_t ipackets; 868160SWentao.Yang@Sun.COM kstat_named_t ipackets64; 878160SWentao.Yang@Sun.COM kstat_named_t ierrors; 888160SWentao.Yang@Sun.COM kstat_named_t opackets; 898160SWentao.Yang@Sun.COM kstat_named_t opackets64; 908160SWentao.Yang@Sun.COM kstat_named_t oerrors; 918160SWentao.Yang@Sun.COM 928160SWentao.Yang@Sun.COM /* required by kstat for MIB II objects(RFC 1213) */ 938160SWentao.Yang@Sun.COM kstat_named_t rbytes; /* MIB - ifInOctets */ 948160SWentao.Yang@Sun.COM kstat_named_t rbytes64; 958160SWentao.Yang@Sun.COM kstat_named_t obytes; /* MIB - ifOutOctets */ 968160SWentao.Yang@Sun.COM kstat_named_t obytes64; 978160SWentao.Yang@Sun.COM kstat_named_t multircv; /* MIB - ifInNUcastPkts */ 988160SWentao.Yang@Sun.COM kstat_named_t multixmt; /* MIB - ifOutNUcastPkts */ 998160SWentao.Yang@Sun.COM kstat_named_t brdcstrcv; /* MIB - ifInNUcastPkts */ 1008160SWentao.Yang@Sun.COM kstat_named_t brdcstxmt; /* MIB - ifOutNUcastPkts */ 1018160SWentao.Yang@Sun.COM kstat_named_t norcvbuf; /* MIB - ifInDiscards */ 1028160SWentao.Yang@Sun.COM kstat_named_t noxmtbuf; /* MIB - ifOutDiscards */ 1038160SWentao.Yang@Sun.COM } vnet_hio_kstats_t; 1048160SWentao.Yang@Sun.COM 10511878SVenu.Iyer@Sun.COM typedef struct vnet_tx_ring_stats { 10611878SVenu.Iyer@Sun.COM uint64_t opackets; /* # tx packets */ 10711878SVenu.Iyer@Sun.COM uint64_t obytes; /* # bytes transmitted */ 10811878SVenu.Iyer@Sun.COM } vnet_tx_ring_stats_t; 10911878SVenu.Iyer@Sun.COM 1101991Sheppo /* 1116495Sspeer * A vnet resource structure. 1121991Sheppo */ 1136495Sspeer typedef struct vnet_res { 1146495Sspeer struct vnet_res *nextp; /* next resource in the list */ 1156495Sspeer mac_register_t macreg; /* resource's mac_reg */ 1166495Sspeer vio_net_res_type_t type; /* resource type */ 1176495Sspeer ether_addr_t local_macaddr; /* resource's macaddr */ 1186495Sspeer ether_addr_t rem_macaddr; /* resource's remote macaddr */ 1199805SSriharsha.Basavapatna@Sun.COM vnet_flags_t flags; /* resource flags */ 1206495Sspeer uint32_t refcnt; /* reference count */ 1216495Sspeer struct vnet *vnetp; /* back pointer to vnet */ 1228160SWentao.Yang@Sun.COM kstat_t *ksp; /* hio kstats */ 12310309SSriharsha.Basavapatna@Sun.COM void *rx_ringp; /* assoc pseudo rx ring */ 1246495Sspeer } vnet_res_t; 1251991Sheppo 1266495Sspeer #define VNET_DDS_TASK_ADD_SHARE 0x01 1276495Sspeer #define VNET_DDS_TASK_DEL_SHARE 0x02 1286495Sspeer #define VNET_DDS_TASK_REL_SHARE 0x04 1296495Sspeer 1306495Sspeer /* An instance specific DDS structure */ 1316495Sspeer typedef struct vnet_dds_info { 1326495Sspeer kmutex_t lock; /* lock for this structure */ 1336495Sspeer uint8_t task_flags; /* flags for taskq */ 1346495Sspeer uint8_t dds_req_id; /* DDS message request id */ 1356495Sspeer vio_dds_msg_t dmsg; /* Pending DDS message */ 1366495Sspeer dev_info_t *hio_dip; /* Hybrid device's dip */ 1376495Sspeer uint64_t hio_cookie; /* Hybrid device's cookie */ 13810309SSriharsha.Basavapatna@Sun.COM char hio_ifname[LIFNAMSIZ]; /* Hybrid interface name */ 1396495Sspeer ddi_taskq_t *dds_taskqp; /* Taskq's used for DDS */ 1406495Sspeer struct vnet *vnetp; /* Back pointer to vnetp */ 1416495Sspeer } vnet_dds_info_t; 1421991Sheppo 1436419Ssb155480 #define VNET_NFDB_HASH 64 1441991Sheppo 1456419Ssb155480 #define KEY_HASH(key, addr) \ 1466495Sspeer (key = (((uint64_t)(addr[0])) << 40) | \ 1476495Sspeer (((uint64_t)(addr[1])) << 32) | \ 1486495Sspeer (((uint64_t)(addr[2])) << 24) | \ 1496495Sspeer (((uint64_t)(addr[3])) << 16) | \ 1506495Sspeer (((uint64_t)(addr[4])) << 8) | \ 1516495Sspeer ((uint64_t)(addr[5]))); 1526495Sspeer 1531991Sheppo 1541991Sheppo /* rwlock macros */ 1551991Sheppo #define READ_ENTER(x) rw_enter(x, RW_READER) 1561991Sheppo #define WRITE_ENTER(x) rw_enter(x, RW_WRITER) 1571991Sheppo #define RW_EXIT(x) rw_exit(x) 1581991Sheppo 1596419Ssb155480 #define VLAN_ID_KEY(key) ((mod_hash_key_t)(uintptr_t)(key)) 1606419Ssb155480 1619217SWentao.Yang@Sun.COM typedef enum { 1629217SWentao.Yang@Sun.COM AST_init = 0x0, AST_vnet_alloc = 0x1, 16310309SSriharsha.Basavapatna@Sun.COM AST_ring_init = 0x2, AST_vdds_init = 0x4, 16410309SSriharsha.Basavapatna@Sun.COM AST_read_macaddr = 0x8, AST_fdbh_alloc = 0x10, 16510309SSriharsha.Basavapatna@Sun.COM AST_taskq_create = 0x20, AST_vnet_list = 0x40, 16610309SSriharsha.Basavapatna@Sun.COM AST_vgen_init = 0x80, AST_macreg = 0x100, 16710309SSriharsha.Basavapatna@Sun.COM AST_init_mdeg = 0x200 1689217SWentao.Yang@Sun.COM } vnet_attach_progress_t; 1699217SWentao.Yang@Sun.COM 17010309SSriharsha.Basavapatna@Sun.COM #define VNET_NUM_PSEUDO_GROUPS 1 /* # of pseudo ring grps */ 17110309SSriharsha.Basavapatna@Sun.COM #define VNET_NUM_HYBRID_RINGS 2 /* # of Hybrid tx/rx rings */ 17210309SSriharsha.Basavapatna@Sun.COM #define VNET_HYBRID_RXRING_INDEX 1 /* Hybrid rx ring start index */ 17310309SSriharsha.Basavapatna@Sun.COM 17410309SSriharsha.Basavapatna@Sun.COM /* 17510309SSriharsha.Basavapatna@Sun.COM * # of Pseudo TX Rings is defined based on the possible 17610309SSriharsha.Basavapatna@Sun.COM * # of TX Hardware Rings from a Hybrid resource. 17710309SSriharsha.Basavapatna@Sun.COM */ 17810309SSriharsha.Basavapatna@Sun.COM #define VNET_NUM_PSEUDO_TXRINGS VNET_NUM_HYBRID_RINGS 17910309SSriharsha.Basavapatna@Sun.COM 18010309SSriharsha.Basavapatna@Sun.COM /* 18110309SSriharsha.Basavapatna@Sun.COM * # of Pseudo RX Rings that are reserved and exposed by default. 18210309SSriharsha.Basavapatna@Sun.COM * 1 for LDC resource to vsw + 2 for RX rings of Hybrid resource. 18310309SSriharsha.Basavapatna@Sun.COM */ 18410309SSriharsha.Basavapatna@Sun.COM #define VNET_NUM_PSEUDO_RXRINGS_DEFAULT (VNET_NUM_HYBRID_RINGS + 1) 18510309SSriharsha.Basavapatna@Sun.COM 18610309SSriharsha.Basavapatna@Sun.COM /* Pseudo RX Ring States */ 18710309SSriharsha.Basavapatna@Sun.COM typedef enum { 18810309SSriharsha.Basavapatna@Sun.COM VNET_RXRING_FREE = 0x0, /* Free */ 18910309SSriharsha.Basavapatna@Sun.COM VNET_RXRING_INUSE = 0x1, /* In use */ 19010309SSriharsha.Basavapatna@Sun.COM VNET_RXRING_LDC_SERVICE = 0x2, /* Mapped to vswitch */ 19110309SSriharsha.Basavapatna@Sun.COM VNET_RXRING_LDC_GUEST = 0x4, /* Mapped to a peer vnet */ 19210309SSriharsha.Basavapatna@Sun.COM VNET_RXRING_HYBRID = 0x8, /* Mapped to Hybrid resource */ 19310309SSriharsha.Basavapatna@Sun.COM VNET_RXRING_STARTED = 0x10 /* Started */ 19410309SSriharsha.Basavapatna@Sun.COM } vnet_rxring_state_t; 19510309SSriharsha.Basavapatna@Sun.COM 19610309SSriharsha.Basavapatna@Sun.COM /* Pseudo TX Ring States */ 19710309SSriharsha.Basavapatna@Sun.COM typedef enum { 19810309SSriharsha.Basavapatna@Sun.COM VNET_TXRING_FREE = 0x0, /* Free */ 19910309SSriharsha.Basavapatna@Sun.COM VNET_TXRING_INUSE = 0x1, /* In use */ 20010309SSriharsha.Basavapatna@Sun.COM VNET_TXRING_SHARED = 0x2, /* Shared among LDCs */ 20110309SSriharsha.Basavapatna@Sun.COM VNET_TXRING_HYBRID = 0x4, /* Shared among LDCs, Hybrid resource */ 20210309SSriharsha.Basavapatna@Sun.COM VNET_TXRING_STARTED = 0x8 /* Started */ 20310309SSriharsha.Basavapatna@Sun.COM } vnet_txring_state_t; 20410309SSriharsha.Basavapatna@Sun.COM 20510309SSriharsha.Basavapatna@Sun.COM /* 20610309SSriharsha.Basavapatna@Sun.COM * Psuedo TX Ring 20710309SSriharsha.Basavapatna@Sun.COM */ 20810309SSriharsha.Basavapatna@Sun.COM typedef struct vnet_pseudo_tx_ring { 20910309SSriharsha.Basavapatna@Sun.COM uint_t index; /* ring index */ 21010309SSriharsha.Basavapatna@Sun.COM vnet_txring_state_t state; /* ring state */ 21110309SSriharsha.Basavapatna@Sun.COM void *grp; /* grp associated */ 21210309SSriharsha.Basavapatna@Sun.COM void *vnetp; /* vnet associated */ 21310309SSriharsha.Basavapatna@Sun.COM mac_ring_handle_t handle; /* ring handle in mac layer */ 21410309SSriharsha.Basavapatna@Sun.COM mac_ring_handle_t hw_rh; /* Resource type dependent, internal */ 21510309SSriharsha.Basavapatna@Sun.COM /* ring handle. Hybrid res: ring hdl */ 21610309SSriharsha.Basavapatna@Sun.COM /* of hardware rx ring; LDC res: hdl */ 21710309SSriharsha.Basavapatna@Sun.COM /* to the res itself (vnet_res_t) */ 21811878SVenu.Iyer@Sun.COM boolean_t woken_up; 21911878SVenu.Iyer@Sun.COM vnet_tx_ring_stats_t tx_ring_stats; /* ring statistics */ 22010309SSriharsha.Basavapatna@Sun.COM } vnet_pseudo_tx_ring_t; 22110309SSriharsha.Basavapatna@Sun.COM 22210309SSriharsha.Basavapatna@Sun.COM /* 22310309SSriharsha.Basavapatna@Sun.COM * Psuedo RX Ring 22410309SSriharsha.Basavapatna@Sun.COM */ 22510309SSriharsha.Basavapatna@Sun.COM typedef struct vnet_pseudo_rx_ring { 22610309SSriharsha.Basavapatna@Sun.COM uint_t index; /* ring index */ 22710309SSriharsha.Basavapatna@Sun.COM vnet_rxring_state_t state; /* ring state */ 22810309SSriharsha.Basavapatna@Sun.COM void *grp; /* grp associated */ 22910309SSriharsha.Basavapatna@Sun.COM void *vnetp; /* vnet associated */ 23010309SSriharsha.Basavapatna@Sun.COM mac_ring_handle_t handle; /* ring handle in mac layer */ 23110309SSriharsha.Basavapatna@Sun.COM mac_ring_handle_t hw_rh; /* Resource type dependent, internal */ 23210309SSriharsha.Basavapatna@Sun.COM /* ring handle. Hybrid res: ring hdl */ 23310309SSriharsha.Basavapatna@Sun.COM /* of hardware tx ring; otherwise */ 23410309SSriharsha.Basavapatna@Sun.COM /* NULL */ 23510309SSriharsha.Basavapatna@Sun.COM uint64_t gen_num; /* Mac layer gen_num */ 23610309SSriharsha.Basavapatna@Sun.COM } vnet_pseudo_rx_ring_t; 23710309SSriharsha.Basavapatna@Sun.COM 23810309SSriharsha.Basavapatna@Sun.COM /* 23910309SSriharsha.Basavapatna@Sun.COM * Psuedo TX Ring Group 24010309SSriharsha.Basavapatna@Sun.COM */ 24110309SSriharsha.Basavapatna@Sun.COM typedef struct vnet_pseudo_tx_group { 24210309SSriharsha.Basavapatna@Sun.COM uint_t index; /* group index */ 24310309SSriharsha.Basavapatna@Sun.COM void *vnetp; /* vnet associated */ 24410309SSriharsha.Basavapatna@Sun.COM mac_group_handle_t handle; /* grp handle in mac layer */ 24510309SSriharsha.Basavapatna@Sun.COM uint_t ring_cnt; /* total # of rings in grp */ 24610309SSriharsha.Basavapatna@Sun.COM vnet_pseudo_tx_ring_t *rings; /* array of rings */ 24711878SVenu.Iyer@Sun.COM kmutex_t flowctl_lock; /* flow control lock */ 24811878SVenu.Iyer@Sun.COM kcondvar_t flowctl_cv; 24911878SVenu.Iyer@Sun.COM kthread_t *flowctl_thread; 25011878SVenu.Iyer@Sun.COM boolean_t flowctl_done; 25111878SVenu.Iyer@Sun.COM void *tx_notify_handle; /* Tx ring notification */ 25210309SSriharsha.Basavapatna@Sun.COM } vnet_pseudo_tx_group_t; 25310309SSriharsha.Basavapatna@Sun.COM 25410309SSriharsha.Basavapatna@Sun.COM /* 25510309SSriharsha.Basavapatna@Sun.COM * Psuedo RX Ring Group 25610309SSriharsha.Basavapatna@Sun.COM */ 25710309SSriharsha.Basavapatna@Sun.COM typedef struct vnet_pseudo_rx_group { 25810309SSriharsha.Basavapatna@Sun.COM krwlock_t lock; /* sync rings access in grp */ 25910309SSriharsha.Basavapatna@Sun.COM int index; /* group index */ 26010309SSriharsha.Basavapatna@Sun.COM void *vnetp; /* vnet this grp belongs to */ 26110309SSriharsha.Basavapatna@Sun.COM mac_group_handle_t handle; /* grp handle in mac layer */ 26210309SSriharsha.Basavapatna@Sun.COM uint_t max_ring_cnt; /* total # of rings in grp */ 26310309SSriharsha.Basavapatna@Sun.COM uint_t ring_cnt; /* # of rings in use */ 26410309SSriharsha.Basavapatna@Sun.COM vnet_pseudo_rx_ring_t *rings; /* array of rings */ 26510309SSriharsha.Basavapatna@Sun.COM } vnet_pseudo_rx_group_t; 26610309SSriharsha.Basavapatna@Sun.COM 2671991Sheppo /* 2681991Sheppo * vnet instance state information 2691991Sheppo */ 2701991Sheppo typedef struct vnet { 2711991Sheppo int instance; /* instance # */ 2721991Sheppo dev_info_t *dip; /* dev_info */ 2736495Sspeer uint64_t reg; /* reg prop value */ 2749217SWentao.Yang@Sun.COM vnet_attach_progress_t attach_progress; /* attach progress flags */ 2751991Sheppo struct vnet *nextp; /* next in list */ 2766495Sspeer mac_handle_t mh; /* handle to GLDv3 mac module */ 2771991Sheppo uchar_t vendor_addr[ETHERADDRL]; /* orig macadr */ 2781991Sheppo uchar_t curr_macaddr[ETHERADDRL]; /* current macadr */ 2796495Sspeer void *vgenhdl; /* Handle for vgen */ 2806419Ssb155480 2816419Ssb155480 uint32_t fdb_nchains; /* # of hash chains in fdbtbl */ 2826419Ssb155480 mod_hash_t *fdb_hashp; /* forwarding database */ 2836495Sspeer vnet_res_t *vsw_fp; /* cached fdb entry of vsw */ 2846419Ssb155480 krwlock_t vsw_fp_rw; /* lock to protect vsw_fp */ 2857529SSriharsha.Basavapatna@Sun.COM uint32_t mtu; /* mtu of the device */ 2866419Ssb155480 2876419Ssb155480 uint16_t default_vlan_id; /* default vlan id */ 2886419Ssb155480 uint16_t pvid; /* port vlan id (untagged) */ 2896419Ssb155480 uint16_t *vids; /* vlan ids (tagged) */ 2906419Ssb155480 uint16_t nvids; /* # of vids */ 2916495Sspeer 2929336SSriharsha.Basavapatna@Sun.COM link_state_t link_state; /* link status */ 2939336SSriharsha.Basavapatna@Sun.COM boolean_t pls_update; /* phys link state update ? */ 2949805SSriharsha.Basavapatna@Sun.COM vnet_flags_t flags; /* interface flags */ 2956495Sspeer vnet_res_t *hio_fp; /* Hybrid IO resource */ 2966495Sspeer vnet_res_t *vres_list; /* Resource list */ 2976495Sspeer vnet_dds_info_t vdds_info; /* DDS related info */ 2986495Sspeer krwlock_t vrwlock; /* Resource list lock */ 2996495Sspeer ddi_taskq_t *taskqp; /* Resource taskq */ 30010309SSriharsha.Basavapatna@Sun.COM 30110309SSriharsha.Basavapatna@Sun.COM /* pseudo ring groups */ 30210309SSriharsha.Basavapatna@Sun.COM vnet_pseudo_rx_group_t rx_grp[VNET_NUM_PSEUDO_GROUPS]; 30310309SSriharsha.Basavapatna@Sun.COM vnet_pseudo_tx_group_t tx_grp[VNET_NUM_PSEUDO_GROUPS]; 30410309SSriharsha.Basavapatna@Sun.COM 30510309SSriharsha.Basavapatna@Sun.COM vio_net_handle_t hio_vhp; /* HIO resource hdl */ 30610309SSriharsha.Basavapatna@Sun.COM mac_handle_t hio_mh; /* HIO mac hdl */ 30710309SSriharsha.Basavapatna@Sun.COM mac_client_handle_t hio_mch; /* HIO mac client hdl */ 30810309SSriharsha.Basavapatna@Sun.COM mac_unicast_handle_t hio_muh; /* HIO mac unicst hdl */ 30910309SSriharsha.Basavapatna@Sun.COM mac_group_handle_t rx_hwgh; /* HIO rx ring-group hdl */ 31010309SSriharsha.Basavapatna@Sun.COM mac_group_handle_t tx_hwgh; /* HIO tx ring-group hdl */ 3111991Sheppo } vnet_t; 3121991Sheppo 3134647Sraghuram #ifdef DEBUG 3144647Sraghuram /* 3154647Sraghuram * debug levels: 3164647Sraghuram * DBG_LEVEL1: Function entry/exit tracing 3174647Sraghuram * DBG_LEVEL2: Info messages 3184647Sraghuram * DBG_LEVEL3: Warning messages 3194647Sraghuram * DBG_LEVEL4: Error messages 3204647Sraghuram */ 3214647Sraghuram 3224647Sraghuram enum { DBG_LEVEL1 = 0x01, DBG_LEVEL2 = 0x02, DBG_WARN = 0x04, 3234647Sraghuram DBG_ERR = 0x08 }; 3244647Sraghuram 3254647Sraghuram #define DBG1(...) do { \ 3264647Sraghuram if ((vnet_dbglevel & DBG_LEVEL1) != 0) { \ 327*12011SSriharsha.Basavapatna@Sun.COM DEBUG_PRINTF(__func__, __VA_ARGS__); \ 3284647Sraghuram } \ 3294647Sraghuram _NOTE(CONSTCOND) } while (0) 3304647Sraghuram 3314647Sraghuram #define DBG2(...) do { \ 3324647Sraghuram if ((vnet_dbglevel & DBG_LEVEL2) != 0) { \ 333*12011SSriharsha.Basavapatna@Sun.COM DEBUG_PRINTF(__func__, __VA_ARGS__); \ 3344647Sraghuram } \ 3354647Sraghuram _NOTE(CONSTCOND) } while (0) 3364647Sraghuram 3374647Sraghuram #define DWARN(...) do { \ 3384647Sraghuram if ((vnet_dbglevel & DBG_WARN) != 0) { \ 339*12011SSriharsha.Basavapatna@Sun.COM DEBUG_PRINTF(__func__, __VA_ARGS__); \ 3404647Sraghuram } \ 3414647Sraghuram _NOTE(CONSTCOND) } while (0) 3424647Sraghuram 3434647Sraghuram #define DERR(...) do { \ 3444647Sraghuram if ((vnet_dbglevel & DBG_ERR) != 0) { \ 345*12011SSriharsha.Basavapatna@Sun.COM DEBUG_PRINTF(__func__, __VA_ARGS__); \ 3464647Sraghuram } \ 3474647Sraghuram _NOTE(CONSTCOND) } while (0) 3484647Sraghuram 3494647Sraghuram #else 3504647Sraghuram 3514647Sraghuram #define DBG1(...) if (0) do { } while (0) 3524647Sraghuram #define DBG2(...) if (0) do { } while (0) 3534647Sraghuram #define DWARN(...) if (0) do { } while (0) 3544647Sraghuram #define DERR(...) if (0) do { } while (0) 3554647Sraghuram 3564647Sraghuram #endif 3574647Sraghuram 3589336SSriharsha.Basavapatna@Sun.COM #ifdef VNET_IOC_DEBUG /* Debug ioctls */ 3599336SSriharsha.Basavapatna@Sun.COM 3609336SSriharsha.Basavapatna@Sun.COM #define VNET_FORCE_LINK_DOWN 0x1 3619336SSriharsha.Basavapatna@Sun.COM #define VNET_FORCE_LINK_UP 0x2 3629336SSriharsha.Basavapatna@Sun.COM 3639336SSriharsha.Basavapatna@Sun.COM #endif 3649336SSriharsha.Basavapatna@Sun.COM 3651991Sheppo #ifdef __cplusplus 3661991Sheppo } 3671991Sheppo #endif 3681991Sheppo 3691991Sheppo #endif /* _VNET_H */ 370