vnet_res.h revision 6495:1a95fa8c7c94
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef _VNET_RES_H
28#define	_VNET_RES_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
36/*
37 * Vio network resource types.
38 * VIO_NET_RES_LDC_SERVICE:
39 *			An LDC based resource corresonding to vswitch
40 *			service. This means, all broadcast pakets need
41 *			to be sent via this resource. Unicast packets
42 *			that have no known end point will also be sent
43 *			via this resource, but only if no Hybrid resource
44 *			is available.
45 *
46 * VIO_NET_RES_LDC_GUEST:
47 *			An LDC based resource corresponding to another
48 *			guest domain. This means, unicast packets to that
49 *			guest's mac addres will be sent via this resource.
50 *
51 * VIO_NET_RES_HYBRID:
52 *			A Hybrid resource. Even though this resource may
53 *			be capable of transmitting the broadcast/multicast
54 *			traffic, it will be used only for transmitting
55 *			uni-cast traffic.
56 *			This is because the broadcast/multicast traffic needs
57 *			to be sent to the vswitch so that those packets
58 *			are sent to other guest domains and vswitch interface.
59 */
60typedef enum {
61	VIO_NET_RES_LDC_SERVICE,
62	VIO_NET_RES_LDC_GUEST,
63	VIO_NET_RES_HYBRID
64} vio_net_res_type_t;
65
66/* A handle returned by vio_net_resource_reg() interface */
67typedef void *vio_net_handle_t;
68
69
70/*
71 * Callback functions returned via the reg() interfce.
72 *
73 * vio_net_rx_cb:	Used for passing the packets that are received
74 *			by a device. This is equivalent of mac_rx().
75 *
76 * vio_net_tx_update:   Used for re-starting the transmission. This
77 *			is an equivalent of mac_tx_update().
78 *
79 * vio_net_report_err:	Used for reporting any errors with the resource.
80 */
81typedef void (*vio_net_rx_cb_t)(vio_net_handle_t, mblk_t *);
82typedef void (*vio_net_tx_update_t)(vio_net_handle_t);
83
84typedef enum {
85	VIO_NET_RES_DOWN,		/* Resource down */
86	VIO_VNET_RES_ERR		/* Resource encountered an error */
87} vio_net_err_val_t;
88
89typedef void (*vio_net_report_err_t)(vio_net_handle_t, vio_net_err_val_t err);
90
91typedef struct vio_net_callbacks_s {
92	vio_net_rx_cb_t		vio_net_rx_cb;
93	vio_net_tx_update_t	vio_net_tx_update;
94	vio_net_report_err_t	vio_net_report_err;
95} vio_net_callbacks_t;
96
97
98/*
99 * vio_net_resource_reg -- An interface to register a resource with vnet.
100 *
101 *	macp:		A mac_register_t structure representing the
102 *			device and its MAC driver callbacks.
103 *	type:		Type of the device.
104 *
105 *	local-macaddr:	A MAC address to which this resource belongs to.
106 *
107 *	rem_macaddr:	A MAC address of the peer. This is only applicable
108 *			to LDC based resource. This argument is ignored
109 *			for HYBRID resource.
110 *	vhp:		A handle returned by this interface. After a
111 *			successful return of this interface,
112 *			all other interaction will use this handle.
113 *
114 *	vcb:		A set of callbacks returned by this interface
115 *			for the use of the devices to pass packets etc.
116 *
117 * Return value: 0 for success, non-zero errno value appropriate for the error.
118 */
119int vio_net_resource_reg(mac_register_t *macp,
120    vio_net_res_type_t type, ether_addr_t local_maddr, ether_addr_t rem_maddr,
121    vio_net_handle_t *vhp, vio_net_callbacks_t *vcb);
122
123/* A useful typedef for consumers of this interface */
124typedef int (*vio_net_resource_reg_t)(mac_register_t *macp,
125    vio_net_res_type_t type, ether_addr_t local_maddr, ether_addr_t rem_maddr,
126    vio_net_handle_t *vhp, vio_net_callbacks_t *vcb);
127
128
129
130/*
131 * vio_net_resource_unreg -- Unregisters a resource.
132 *
133 *	vhp:  handle that was returned by the resource_reg() interface.
134 */
135void vio_net_resource_unreg(vio_net_handle_t vhp);
136
137/* A useful typedef for consumers of this interface */
138typedef void (*vio_net_resource_unreg_t)(vio_net_handle_t vhp);
139
140#ifdef __cplusplus
141}
142#endif
143
144#endif	/* _VNET_RES_H */
145