1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER START
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * The contents of this file are subject to the terms of the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Common Development and Distribution License (the "License").
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You may not use this file except in compliance with the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * See the License for the specific language governing permissions
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * and limitations under the License.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * When distributing Covered Code, include this CDDL HEADER in each
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * If applicable, add the following below this CDDL HEADER, with the
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * fields enclosed by brackets "[]" replaced with your own identifying
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * information: Portions Copyright [yyyy] [name of copyright owner]
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * CDDL HEADER END
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * Use is subject to license terms.
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppoextern "C" {
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna#define VNET_NUM_DESCRIPTORS 512 /* power of 2 descriptors */
678453a8ed49104d8adad58f3ba591bdc39883e8speer (ether_cmp(&ehp->ether_dhost, ðerbroadcastaddr) == 0)
678453a8ed49104d8adad58f3ba591bdc39883e8speer (ether_cmp(vresp->local_macaddr, vnetp->curr_macaddr) == 0)
5460ddbd465905aefef1e301733f035391f680e0Sriharsha Basavapatna * Flags used to indicate the state of the vnet device and its associated
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG /* Link Input/Output stats */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG /* MIB II variables */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG uint32_t multircv; /* # multicast packets received */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG uint32_t multixmt; /* # multicast packets for xmit */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG uint32_t brdcstrcv; /* # broadcast packets received */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG uint32_t brdcstxmt; /* # broadcast packets for xmit */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG uint32_t norcvbuf; /* # rcv packets discarded */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG uint32_t noxmtbuf; /* # xmit packets discarded */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG /* Link Input/Output stats */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG /* required by kstat for MIB II objects(RFC 1213) */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG kstat_named_t multircv; /* MIB - ifInNUcastPkts */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG kstat_named_t multixmt; /* MIB - ifOutNUcastPkts */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG kstat_named_t brdcstrcv; /* MIB - ifInNUcastPkts */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG kstat_named_t brdcstxmt; /* MIB - ifOutNUcastPkts */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG kstat_named_t norcvbuf; /* MIB - ifInDiscards */
6ab6cb20c72ce71fe6022b1c164f36dfe716e425WENTAO YANG kstat_named_t noxmtbuf; /* MIB - ifOutDiscards */
678453a8ed49104d8adad58f3ba591bdc39883e8speer * A vnet resource structure.
678453a8ed49104d8adad58f3ba591bdc39883e8speer struct vnet_res *nextp; /* next resource in the list */
678453a8ed49104d8adad58f3ba591bdc39883e8speer ether_addr_t rem_macaddr; /* resource's remote macaddr */
5460ddbd465905aefef1e301733f035391f680e0Sriharsha Basavapatna vnet_flags_t flags; /* resource flags */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna void *rx_ringp; /* assoc pseudo rx ring */
678453a8ed49104d8adad58f3ba591bdc39883e8speer/* An instance specific DDS structure */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna char hio_ifname[LIFNAMSIZ]; /* Hybrid interface name */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo/* rwlock macros */
c1c61f44e88f4c8c155272ee56d868043146096asb#define VLAN_ID_KEY(key) ((mod_hash_key_t)(uintptr_t)(key))
6f09f0fef8e4582cfa771d87fe2a1f777bfb5cf0WENTAO YANGtypedef enum {
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna AST_ring_init = 0x2, AST_vdds_init = 0x4,
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna AST_read_macaddr = 0x8, AST_fdbh_alloc = 0x10,
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna AST_taskq_create = 0x20, AST_vnet_list = 0x40,
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna AST_vgen_init = 0x80, AST_macreg = 0x100,
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna#define VNET_NUM_PSEUDO_GROUPS 1 /* # of pseudo ring grps */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna#define VNET_NUM_HYBRID_RINGS 2 /* # of Hybrid tx/rx rings */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna#define VNET_HYBRID_RXRING_INDEX 1 /* Hybrid rx ring start index */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna * # of Pseudo TX Rings is defined based on the possible
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna * # of TX Hardware Rings from a Hybrid resource.
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna#define VNET_NUM_PSEUDO_TXRINGS VNET_NUM_HYBRID_RINGS
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna * # of Pseudo RX Rings that are reserved and exposed by default.
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna * 1 for LDC resource to vsw + 2 for RX rings of Hybrid resource.
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna#define VNET_NUM_PSEUDO_RXRINGS_DEFAULT (VNET_NUM_HYBRID_RINGS + 1)
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna/* Pseudo RX Ring States */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna VNET_RXRING_LDC_SERVICE = 0x2, /* Mapped to vswitch */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna VNET_RXRING_LDC_GUEST = 0x4, /* Mapped to a peer vnet */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna VNET_RXRING_HYBRID = 0x8, /* Mapped to Hybrid resource */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna VNET_RXRING_STARTED = 0x10 /* Started */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna/* Pseudo TX Ring States */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna VNET_TXRING_SHARED = 0x2, /* Shared among LDCs */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna VNET_TXRING_HYBRID = 0x4, /* Shared among LDCs, Hybrid resource */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna VNET_TXRING_STARTED = 0x8 /* Started */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna * Psuedo TX Ring
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna vnet_txring_state_t state; /* ring state */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_ring_handle_t handle; /* ring handle in mac layer */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_ring_handle_t hw_rh; /* Resource type dependent, internal */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna /* ring handle. Hybrid res: ring hdl */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna /* of hardware rx ring; LDC res: hdl */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna /* to the res itself (vnet_res_t) */
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer vnet_tx_ring_stats_t tx_ring_stats; /* ring statistics */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna * Psuedo RX Ring
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna vnet_rxring_state_t state; /* ring state */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_ring_handle_t handle; /* ring handle in mac layer */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_ring_handle_t hw_rh; /* Resource type dependent, internal */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna /* ring handle. Hybrid res: ring hdl */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna /* of hardware tx ring; otherwise */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna uint64_t gen_num; /* Mac layer gen_num */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna * Psuedo TX Ring Group
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_group_handle_t handle; /* grp handle in mac layer */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna uint_t ring_cnt; /* total # of rings in grp */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna vnet_pseudo_tx_ring_t *rings; /* array of rings */
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer kmutex_t flowctl_lock; /* flow control lock */
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer void *tx_notify_handle; /* Tx ring notification */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna * Psuedo RX Ring Group
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna krwlock_t lock; /* sync rings access in grp */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna void *vnetp; /* vnet this grp belongs to */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_group_handle_t handle; /* grp handle in mac layer */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna uint_t max_ring_cnt; /* total # of rings in grp */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna uint_t ring_cnt; /* # of rings in use */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna vnet_pseudo_rx_ring_t *rings; /* array of rings */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo * vnet instance state information
6f09f0fef8e4582cfa771d87fe2a1f777bfb5cf0WENTAO YANG vnet_attach_progress_t attach_progress; /* attach progress flags */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo uchar_t curr_macaddr[ETHERADDRL]; /* current macadr */
1107ea9346159bcc8ea154084897667347c4e6d5Sriharsha Basavapatna link_state_t link_state; /* link status */
1107ea9346159bcc8ea154084897667347c4e6d5Sriharsha Basavapatna boolean_t pls_update; /* phys link state update ? */
5460ddbd465905aefef1e301733f035391f680e0Sriharsha Basavapatna vnet_flags_t flags; /* interface flags */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna /* pseudo ring groups */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna vnet_pseudo_rx_group_t rx_grp[VNET_NUM_PSEUDO_GROUPS];
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna vnet_pseudo_tx_group_t tx_grp[VNET_NUM_PSEUDO_GROUPS];
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna vio_net_handle_t hio_vhp; /* HIO resource hdl */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_handle_t hio_mh; /* HIO mac hdl */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_client_handle_t hio_mch; /* HIO mac client hdl */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_unicast_handle_t hio_muh; /* HIO mac unicst hdl */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_group_handle_t rx_hwgh; /* HIO rx ring-group hdl */
63f531d1cf94e7ff3e74e15ca709808d96e239f3Sriharsha Basavapatna mac_group_handle_t tx_hwgh; /* HIO tx ring-group hdl */
844e62a3ec8c8ff5175bb35d1c38446e060730f6raghuram * debug levels:
844e62a3ec8c8ff5175bb35d1c38446e060730f6raghuram * DBG_LEVEL1: Function entry/exit tracing
844e62a3ec8c8ff5175bb35d1c38446e060730f6raghuram * DBG_LEVEL2: Info messages
844e62a3ec8c8ff5175bb35d1c38446e060730f6raghuram * DBG_LEVEL3: Warning messages
844e62a3ec8c8ff5175bb35d1c38446e060730f6raghuram * DBG_LEVEL4: Error messages
844e62a3ec8c8ff5175bb35d1c38446e060730f6raghuramenum { DBG_LEVEL1 = 0x01, DBG_LEVEL2 = 0x02, DBG_WARN = 0x04,
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna DEBUG_PRINTF(__func__, __VA_ARGS__); \
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna DEBUG_PRINTF(__func__, __VA_ARGS__); \
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna DEBUG_PRINTF(__func__, __VA_ARGS__); \
7bd3a2e26cc8569257b88c1691d559138e1d32d0Sriharsha Basavapatna DEBUG_PRINTF(__func__, __VA_ARGS__); \
1107ea9346159bcc8ea154084897667347c4e6d5Sriharsha Basavapatna#ifdef VNET_IOC_DEBUG /* Debug ioctls */
1ae0874509b6811fdde1dfd46f0d93fd09867a3fheppo#endif /* _VNET_H */