xref: /titanic_51/usr/src/uts/common/sys/mac_client.h (revision 7f0b8309074a5d8e9f9d8ffe7aad7bb0b1ee6b1f)
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 2009 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*
28  * This file captures the MAC client API definitions. It can be
29  * included from any MAC clients.
30  */
31 
32 #ifndef	_SYS_MAC_CLIENT_H
33 #define	_SYS_MAC_CLIENT_H
34 
35 #include <sys/mac.h>
36 #include <sys/mac_flow.h>
37 
38 #ifdef	__cplusplus
39 extern "C" {
40 #endif
41 
42 #ifdef	_KERNEL
43 
44 /*
45  * MAC client interface.
46  */
47 
48 typedef struct __mac_client_handle *mac_client_handle_t;
49 typedef struct __mac_unicast_handle *mac_unicast_handle_t;
50 typedef struct __mac_promisc_handle *mac_promisc_handle_t;
51 typedef struct __mac_perim_handle *mac_perim_handle_t;
52 typedef uintptr_t mac_tx_cookie_t;
53 
54 typedef void (*mac_tx_notify_t)(void *, mac_tx_cookie_t);
55 
56 typedef enum {
57 	MAC_DIAG_NONE,
58 	MAC_DIAG_MACADDR_NIC,
59 	MAC_DIAG_MACADDR_INUSE,
60 	MAC_DIAG_MACADDR_INVALID,
61 	MAC_DIAG_MACADDRLEN_INVALID,
62 	MAC_DIAG_MACFACTORYSLOTINVALID,
63 	MAC_DIAG_MACFACTORYSLOTUSED,
64 	MAC_DIAG_MACFACTORYSLOTALLUSED,
65 	MAC_DIAG_MACFACTORYNOTSUP,
66 	MAC_DIAG_MACPREFIX_INVALID,
67 	MAC_DIAG_MACPREFIXLEN_INVALID,
68 	MAC_DIAG_MACNO_HWRINGS
69 } mac_diag_t;
70 
71 typedef enum {
72 	MAC_CLIENT_PROMISC_ALL,
73 	MAC_CLIENT_PROMISC_FILTERED,
74 	MAC_CLIENT_PROMISC_MULTI
75 } mac_client_promisc_type_t;
76 
77 /* flags passed to mac_unicast_add() */
78 #define	MAC_UNICAST_NODUPCHECK		0x0001
79 #define	MAC_UNICAST_PRIMARY		0x0002
80 #define	MAC_UNICAST_HW			0x0004
81 #define	MAC_UNICAST_VNIC_PRIMARY	0x0008
82 
83 /* flags passed to mac_client_open */
84 #define	MAC_OPEN_FLAGS_IS_VNIC			0x0001
85 #define	MAC_OPEN_FLAGS_EXCLUSIVE		0x0002
86 #define	MAC_OPEN_FLAGS_TAG_DISABLE		0x0004
87 #define	MAC_OPEN_FLAGS_IS_AGGR_PORT		0x0008
88 #define	MAC_OPEN_FLAGS_STRIP_DISABLE		0x0010
89 #define	MAC_OPEN_FLAGS_NO_HWRINGS		0x0020
90 #define	MAC_OPEN_FLAGS_SHARES_DESIRED		0x0040
91 #define	MAC_OPEN_FLAGS_DISABLE_TX_VID_CHECK	0x0080
92 #define	MAC_OPEN_FLAGS_USE_DATALINK_NAME	0x0100
93 #define	MAC_OPEN_FLAGS_REQ_HWRINGS		0x0200
94 
95 /* flags passed to mac_client_close */
96 #define	MAC_CLOSE_FLAGS_IS_VNIC		0x0001
97 #define	MAC_CLOSE_FLAGS_EXCLUSIVE	0x0002
98 #define	MAC_CLOSE_FLAGS_IS_AGGR_PORT	0x0004
99 
100 /* flags passed to mac_promisc_add() */
101 #define	MAC_PROMISC_FLAGS_NO_TX_LOOP		0x0001
102 #define	MAC_PROMISC_FLAGS_NO_PHYS		0x0002
103 #define	MAC_PROMISC_FLAGS_VLAN_TAG_STRIP	0x0004
104 
105 /* flags passed to mac_tx() */
106 #define	MAC_DROP_ON_NO_DESC	0x01 /* freemsg() if no tx descs */
107 #define	MAC_TX_NO_ENQUEUE	0x02 /* don't enqueue mblks if not xmit'ed */
108 #define	MAC_TX_NO_HOLD		0x04 /* don't bump the active Tx count */
109 
110 extern int mac_client_open(mac_handle_t, mac_client_handle_t *, char *,
111     uint16_t);
112 extern void mac_client_close(mac_client_handle_t, uint16_t);
113 
114 extern int mac_unicast_add(mac_client_handle_t, uint8_t *, uint16_t,
115     mac_unicast_handle_t *, uint16_t, mac_diag_t *);
116 extern int mac_unicast_primary_add(mac_client_handle_t, mac_unicast_handle_t *,
117     mac_diag_t *);
118 extern int mac_unicast_remove(mac_client_handle_t, mac_unicast_handle_t);
119 
120 extern int mac_multicast_add(mac_client_handle_t, const uint8_t *);
121 extern void mac_multicast_remove(mac_client_handle_t, const uint8_t *);
122 
123 extern void mac_rx_set(mac_client_handle_t, mac_rx_t, void *);
124 extern void mac_rx_clear(mac_client_handle_t);
125 extern mac_tx_cookie_t mac_tx(mac_client_handle_t, mblk_t *,
126     uintptr_t, uint16_t, mblk_t **);
127 extern boolean_t mac_tx_is_flow_blocked(mac_client_handle_t, mac_tx_cookie_t);
128 extern uint64_t mac_client_stat_get(mac_client_handle_t, uint_t);
129 
130 extern int mac_promisc_add(mac_client_handle_t, mac_client_promisc_type_t,
131     mac_rx_t, void *, mac_promisc_handle_t *, uint16_t);
132 extern int mac_promisc_remove(mac_promisc_handle_t);
133 
134 extern mac_notify_handle_t mac_notify_add(mac_handle_t, mac_notify_t, void *);
135 extern int mac_notify_remove(mac_notify_handle_t, boolean_t);
136 extern void mac_notify_remove_wait(mac_handle_t);
137 extern int mac_rename_primary(mac_handle_t, const char *);
138 extern	char *mac_client_name(mac_client_handle_t);
139 
140 extern int mac_open(const char *, mac_handle_t *);
141 extern void mac_close(mac_handle_t);
142 extern uint64_t mac_stat_get(mac_handle_t, uint_t);
143 
144 extern int mac_unicast_primary_set(mac_handle_t, const uint8_t *);
145 extern void mac_unicast_primary_get(mac_handle_t, uint8_t *);
146 extern void mac_unicast_primary_info(mac_handle_t, char *, boolean_t *);
147 
148 extern int mac_addr_random(mac_client_handle_t, uint_t, uint8_t *,
149     mac_diag_t *);
150 
151 extern int mac_addr_factory_reserve(mac_client_handle_t, int *);
152 extern void mac_addr_factory_release(mac_client_handle_t, uint_t);
153 extern void mac_addr_factory_value(mac_handle_t, int, uchar_t *, uint_t *,
154     char *, boolean_t *);
155 extern uint_t mac_addr_factory_num(mac_handle_t);
156 
157 extern uint_t mac_addr_len(mac_handle_t);
158 
159 extern mac_tx_notify_handle_t mac_client_tx_notify(mac_client_handle_t,
160     mac_tx_notify_t, void *);
161 
162 extern int mac_set_resources(mac_handle_t, mac_resource_props_t *);
163 extern void mac_get_resources(mac_handle_t, mac_resource_props_t *);
164 extern int mac_client_set_resources(mac_client_handle_t,
165     mac_resource_props_t *);
166 extern void mac_client_get_resources(mac_client_handle_t,
167     mac_resource_props_t *);
168 
169 extern int mac_share_capable(mac_handle_t);
170 extern int mac_share_bind(mac_client_handle_t, uint64_t, uint64_t *);
171 extern void mac_share_unbind(mac_client_handle_t);
172 
173 extern int mac_set_mtu(mac_handle_t, uint_t, uint_t *);
174 
175 extern uint_t mac_hwgrp_num(mac_handle_t);
176 extern void mac_get_hwgrp_info(mac_handle_t, int, uint_t *, uint_t *,
177     uint_t *, uint_t *, char *);
178 
179 extern uint32_t mac_no_notification(mac_handle_t);
180 extern int mac_set_prop(mac_handle_t, mac_prop_t *, void *, uint_t);
181 extern int mac_get_prop(mac_handle_t, mac_prop_t *, void *, uint_t, uint_t *);
182 
183 extern boolean_t mac_is_vnic(mac_handle_t);
184 
185 #endif	/* _KERNEL */
186 
187 #ifdef	__cplusplus
188 }
189 #endif
190 
191 #endif /* _SYS_MAC_CLIENT_H */
192