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.
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.
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]
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
28 * This file captures the MAC client API definitions. It can be
29 * included from any MAC clients.
32 #ifndef _SYS_MAC_CLIENT_H
33 #define _SYS_MAC_CLIENT_H
36 #include <sys/mac_flow.h>
45 * MAC client interface.
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
;
54 typedef void (*mac_tx_notify_t
)(void *, mac_tx_cookie_t
);
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
72 MAC_CLIENT_PROMISC_ALL
,
73 MAC_CLIENT_PROMISC_FILTERED
,
74 MAC_CLIENT_PROMISC_MULTI
75 } mac_client_promisc_type_t
;
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
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
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
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
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 */
110 extern int mac_client_open(mac_handle_t
, mac_client_handle_t
*, char *,
112 extern void mac_client_close(mac_client_handle_t
, uint16_t);
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
*,
118 extern int mac_unicast_remove(mac_client_handle_t
, mac_unicast_handle_t
);
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 *);
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
);
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
);
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
);
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
);
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
*);
148 extern int mac_addr_random(mac_client_handle_t
, uint_t
, uint8_t *,
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
);
157 extern uint_t
mac_addr_len(mac_handle_t
);
159 extern mac_tx_notify_handle_t
mac_client_tx_notify(mac_client_handle_t
,
160 mac_tx_notify_t
, void *);
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
*);
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
);
173 extern int mac_set_mtu(mac_handle_t
, uint_t
, uint_t
*);
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 *);
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
*);
183 extern boolean_t
mac_is_vnic(mac_handle_t
);
191 #endif /* _SYS_MAC_CLIENT_H */