xref: /titanic_52/usr/src/uts/common/sys/vnic.h (revision d62bc4badc1c1f1549c961cfb8b420e650e1272b)
1843e1988Sjohnlev /*
2843e1988Sjohnlev  * CDDL HEADER START
3843e1988Sjohnlev  *
4843e1988Sjohnlev  * The contents of this file are subject to the terms of the
5843e1988Sjohnlev  * Common Development and Distribution License (the "License").
6843e1988Sjohnlev  * You may not use this file except in compliance with the License.
7843e1988Sjohnlev  *
8843e1988Sjohnlev  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9843e1988Sjohnlev  * or http://www.opensolaris.org/os/licensing.
10843e1988Sjohnlev  * See the License for the specific language governing permissions
11843e1988Sjohnlev  * and limitations under the License.
12843e1988Sjohnlev  *
13843e1988Sjohnlev  * When distributing Covered Code, include this CDDL HEADER in each
14843e1988Sjohnlev  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15843e1988Sjohnlev  * If applicable, add the following below this CDDL HEADER, with the
16843e1988Sjohnlev  * fields enclosed by brackets "[]" replaced with your own identifying
17843e1988Sjohnlev  * information: Portions Copyright [yyyy] [name of copyright owner]
18843e1988Sjohnlev  *
19843e1988Sjohnlev  * CDDL HEADER END
20843e1988Sjohnlev  */
21843e1988Sjohnlev /*
22*d62bc4baSyz147064  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23843e1988Sjohnlev  * Use is subject to license terms.
24843e1988Sjohnlev  */
25843e1988Sjohnlev 
26843e1988Sjohnlev #ifndef	_SYS_VNIC_H
27843e1988Sjohnlev #define	_SYS_VNIC_H
28843e1988Sjohnlev 
29843e1988Sjohnlev #pragma ident	"%Z%%M%	%I%	%E% SMI"
30843e1988Sjohnlev 
31843e1988Sjohnlev #include <sys/types.h>
32843e1988Sjohnlev #include <sys/ethernet.h>
33843e1988Sjohnlev #include <sys/param.h>
34843e1988Sjohnlev #include <sys/mac.h>
35843e1988Sjohnlev 
36843e1988Sjohnlev #ifdef	__cplusplus
37843e1988Sjohnlev extern "C" {
38843e1988Sjohnlev #endif
39843e1988Sjohnlev 
40843e1988Sjohnlev /* control interface name */
41843e1988Sjohnlev #define	VNIC_CTL_NODE_NAME	"ctl"
42843e1988Sjohnlev #define	VNIC_CTL_NODE_MINOR	1		/* control interface minor */
43843e1988Sjohnlev 
44843e1988Sjohnlev #define	VNIC_IOC(x)	(('v' << 24) | ('n' << 16) | ('i' << 8) | (x))
45843e1988Sjohnlev 
46843e1988Sjohnlev /*
47843e1988Sjohnlev  * For now, we support only MAC addresses specified by value.
48843e1988Sjohnlev  */
49843e1988Sjohnlev 
50843e1988Sjohnlev typedef enum {
51843e1988Sjohnlev 	VNIC_MAC_ADDR_TYPE_FIXED
52843e1988Sjohnlev } vnic_mac_addr_type_t;
53843e1988Sjohnlev 
54843e1988Sjohnlev #define	VNIC_IOC_CREATE		VNIC_IOC(1)
55843e1988Sjohnlev 
56843e1988Sjohnlev typedef struct vnic_ioc_create {
57*d62bc4baSyz147064 	datalink_id_t	vc_vnic_id;
58*d62bc4baSyz147064 	datalink_id_t	vc_link_id;
59843e1988Sjohnlev 	uint_t		vc_mac_len;
60843e1988Sjohnlev 	vnic_mac_addr_type_t vc_mac_addr_type;
61843e1988Sjohnlev 	uchar_t		vc_mac_addr[MAXMACADDRLEN];
62843e1988Sjohnlev } vnic_ioc_create_t;
63843e1988Sjohnlev 
64843e1988Sjohnlev #ifdef _SYSCALL32
65843e1988Sjohnlev 
66843e1988Sjohnlev typedef struct vnic_ioc_create32 {
67*d62bc4baSyz147064 	datalink_id_t	vc_vnic_id;
68*d62bc4baSyz147064 	datalink_id_t	vc_link_id;
69843e1988Sjohnlev 	uint32_t	vc_mac_len;
70843e1988Sjohnlev 	vnic_mac_addr_type_t vc_mac_addr_type;
71843e1988Sjohnlev 	uchar_t		vc_mac_addr[MAXMACADDRLEN];
72843e1988Sjohnlev } vnic_ioc_create32_t;
73843e1988Sjohnlev 
74843e1988Sjohnlev #endif /* _SYSCALL32 */
75843e1988Sjohnlev 
76843e1988Sjohnlev #define	VNIC_IOC_DELETE		VNIC_IOC(2)
77843e1988Sjohnlev 
78843e1988Sjohnlev typedef struct vnic_ioc_delete {
79*d62bc4baSyz147064 	datalink_id_t	vd_vnic_id;
80843e1988Sjohnlev } vnic_ioc_delete_t;
81843e1988Sjohnlev 
82843e1988Sjohnlev #ifdef _SYSCALL32
83843e1988Sjohnlev 
84843e1988Sjohnlev typedef struct vnic_ioc_delete32 {
85*d62bc4baSyz147064 	datalink_id_t	vd_vnic_id;
86843e1988Sjohnlev } vnic_ioc_delete32_t;
87843e1988Sjohnlev 
88843e1988Sjohnlev #endif /* _SYSCALL32 */
89843e1988Sjohnlev 
90843e1988Sjohnlev #define	VNIC_IOC_INFO		VNIC_IOC(3)
91843e1988Sjohnlev 
92843e1988Sjohnlev typedef struct vnic_ioc_info_vnic {
93*d62bc4baSyz147064 	datalink_id_t	vn_vnic_id;
94*d62bc4baSyz147064 	datalink_id_t	vn_link_id;
95843e1988Sjohnlev 	uint32_t	vn_mac_len;
96843e1988Sjohnlev 	uchar_t		vn_mac_addr[MAXMACADDRLEN];
97843e1988Sjohnlev 	vnic_mac_addr_type_t vn_mac_addr_type;
98843e1988Sjohnlev } vnic_ioc_info_vnic_t;
99843e1988Sjohnlev 
100843e1988Sjohnlev typedef struct vnic_ioc_info {
101843e1988Sjohnlev 	uint_t		vi_nvnics;
102*d62bc4baSyz147064 	datalink_id_t	vi_vnic_id;	/* DATALINK_ALL_LINKID returns all */
103*d62bc4baSyz147064 	datalink_id_t	vi_linkid;
104843e1988Sjohnlev } vnic_ioc_info_t;
105843e1988Sjohnlev 
106843e1988Sjohnlev #ifdef _SYSCALL32
107843e1988Sjohnlev 
108843e1988Sjohnlev typedef struct vnic_ioc_info32 {
109843e1988Sjohnlev 	uint32_t	vi_nvnics;
110*d62bc4baSyz147064 	datalink_id_t	vi_vnic_id;	/* DATALINK_ALL_LINKID returns all */
111*d62bc4baSyz147064 	datalink_id_t	vi_linkid;
112843e1988Sjohnlev } vnic_ioc_info32_t;
113843e1988Sjohnlev 
114843e1988Sjohnlev #endif /* _SYSCALL32 */
115843e1988Sjohnlev 
116843e1988Sjohnlev #define	VNIC_IOC_MODIFY		VNIC_IOC(4)
117843e1988Sjohnlev 
118843e1988Sjohnlev #define	VNIC_IOC_MODIFY_ADDR		0x01
119843e1988Sjohnlev 
120843e1988Sjohnlev typedef struct vnic_ioc_modify {
121*d62bc4baSyz147064 	datalink_id_t	vm_vnic_id;
122843e1988Sjohnlev 	uint_t		vm_modify_mask;
123843e1988Sjohnlev 	uchar_t		vm_mac_addr[MAXMACADDRLEN];
124843e1988Sjohnlev 	vnic_mac_addr_type_t vm_mac_addr_type;
125843e1988Sjohnlev 	uint_t		vm_mac_len;
126843e1988Sjohnlev } vnic_ioc_modify_t;
127843e1988Sjohnlev 
128843e1988Sjohnlev #ifdef _SYSCALL32
129843e1988Sjohnlev 
130843e1988Sjohnlev typedef struct vnic_ioc_modify32 {
131*d62bc4baSyz147064 	datalink_id_t	vm_vnic_id;
132843e1988Sjohnlev 	uint32_t	vm_modify_mask;
133843e1988Sjohnlev 	uchar_t		vm_mac_addr[MAXMACADDRLEN];
134843e1988Sjohnlev 	vnic_mac_addr_type_t vm_mac_addr_type;
135843e1988Sjohnlev 	uint32_t	vm_mac_len;
136843e1988Sjohnlev } vnic_ioc_modify32_t;
137843e1988Sjohnlev 
138843e1988Sjohnlev #endif /* _SYSCALL32 */
139843e1988Sjohnlev 
140843e1988Sjohnlev #ifdef	__cplusplus
141843e1988Sjohnlev }
142843e1988Sjohnlev #endif
143843e1988Sjohnlev 
144843e1988Sjohnlev #endif	/* _SYS_VNIC_H */
145