1*9087SZhong.Wang@Sun.COM /*
2*9087SZhong.Wang@Sun.COM  * CDDL HEADER START
3*9087SZhong.Wang@Sun.COM  *
4*9087SZhong.Wang@Sun.COM  * The contents of this file are subject to the terms of the
5*9087SZhong.Wang@Sun.COM  * Common Development and Distribution License (the "License").
6*9087SZhong.Wang@Sun.COM  * You may not use this file except in compliance with the License.
7*9087SZhong.Wang@Sun.COM  *
8*9087SZhong.Wang@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9087SZhong.Wang@Sun.COM  * or http://www.opensolaris.org/os/licensing.
10*9087SZhong.Wang@Sun.COM  * See the License for the specific language governing permissions
11*9087SZhong.Wang@Sun.COM  * and limitations under the License.
12*9087SZhong.Wang@Sun.COM  *
13*9087SZhong.Wang@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
14*9087SZhong.Wang@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9087SZhong.Wang@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
16*9087SZhong.Wang@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
17*9087SZhong.Wang@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9087SZhong.Wang@Sun.COM  *
19*9087SZhong.Wang@Sun.COM  * CDDL HEADER END
20*9087SZhong.Wang@Sun.COM  */
21*9087SZhong.Wang@Sun.COM /*
22*9087SZhong.Wang@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23*9087SZhong.Wang@Sun.COM  * Use is subject to license terms.
24*9087SZhong.Wang@Sun.COM  */
25*9087SZhong.Wang@Sun.COM 
26*9087SZhong.Wang@Sun.COM #ifndef	_LIBFCOE_H
27*9087SZhong.Wang@Sun.COM #define	_LIBFCOE_H
28*9087SZhong.Wang@Sun.COM 
29*9087SZhong.Wang@Sun.COM #include <time.h>
30*9087SZhong.Wang@Sun.COM #include <wchar.h>
31*9087SZhong.Wang@Sun.COM #include <sys/param.h>
32*9087SZhong.Wang@Sun.COM #include <sys/ethernet.h>
33*9087SZhong.Wang@Sun.COM #include <libnvpair.h>
34*9087SZhong.Wang@Sun.COM 
35*9087SZhong.Wang@Sun.COM #ifdef	__cplusplus
36*9087SZhong.Wang@Sun.COM extern "C" {
37*9087SZhong.Wang@Sun.COM #endif
38*9087SZhong.Wang@Sun.COM 
39*9087SZhong.Wang@Sun.COM /*
40*9087SZhong.Wang@Sun.COM  * FCOE Port Type
41*9087SZhong.Wang@Sun.COM  */
42*9087SZhong.Wang@Sun.COM #define	FCOE_PORTTYPE_INITIATOR		0
43*9087SZhong.Wang@Sun.COM #define	FCOE_PORTTYPE_TARGET		1
44*9087SZhong.Wang@Sun.COM 
45*9087SZhong.Wang@Sun.COM #define	FCOE_MAX_MAC_NAME_LEN		32
46*9087SZhong.Wang@Sun.COM typedef unsigned char	FCOE_UINT8;
47*9087SZhong.Wang@Sun.COM typedef		 char	FCOE_INT8;
48*9087SZhong.Wang@Sun.COM typedef unsigned short	FCOE_UINT16;
49*9087SZhong.Wang@Sun.COM typedef		 short	FCOE_INT16;
50*9087SZhong.Wang@Sun.COM typedef unsigned int	FCOE_UINT32;
51*9087SZhong.Wang@Sun.COM typedef		 int	FCOE_INT32;
52*9087SZhong.Wang@Sun.COM 
53*9087SZhong.Wang@Sun.COM typedef unsigned int	FCOE_STATUS;
54*9087SZhong.Wang@Sun.COM 
55*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_OK				0
56*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR			1
57*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_INVAL_ARG		2
58*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_BUSY			3
59*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_ALREADY		4
60*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_PERM			5
61*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_OPEN_DEV		6
62*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_WWN_SAME		7
63*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_MAC_LEN		8
64*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_PWWN_CONFLICTED	9
65*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_NWWN_CONFLICTED	10
66*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_NEED_JUMBO_FRAME	11
67*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_CREATE_MAC		12
68*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_OPEN_MAC		13
69*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_CREATE_PORT		14
70*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_MAC_NOT_FOUND		15
71*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_OFFLINE_DEV		16
72*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_MORE_DATA		17
73*9087SZhong.Wang@Sun.COM #define	FCOE_STATUS_ERROR_VNIC_UNSUPPORT	18
74*9087SZhong.Wang@Sun.COM 
75*9087SZhong.Wang@Sun.COM typedef struct fcoe_port_wwn {
76*9087SZhong.Wang@Sun.COM 	uchar_t	wwn[8];
77*9087SZhong.Wang@Sun.COM } FCOE_PORT_WWN, *PFCOE_PORT_WWN;
78*9087SZhong.Wang@Sun.COM 
79*9087SZhong.Wang@Sun.COM typedef struct fcoe_port_attr {
80*9087SZhong.Wang@Sun.COM 	FCOE_PORT_WWN	port_wwn;
81*9087SZhong.Wang@Sun.COM 	FCOE_UINT8	mac_link_name[MAXLINKNAMELEN];
82*9087SZhong.Wang@Sun.COM 	FCOE_UINT8	mac_factory_addr[ETHERADDRL];
83*9087SZhong.Wang@Sun.COM 	FCOE_UINT8	mac_current_addr[ETHERADDRL];
84*9087SZhong.Wang@Sun.COM 	FCOE_UINT8	port_type;
85*9087SZhong.Wang@Sun.COM 	FCOE_UINT32	mtu_size;
86*9087SZhong.Wang@Sun.COM 	FCOE_UINT8	mac_promisc;
87*9087SZhong.Wang@Sun.COM } FCOE_PORT_ATTRIBUTE, *PFCOE_PORT_ATTRIBUTE;
88*9087SZhong.Wang@Sun.COM 
89*9087SZhong.Wang@Sun.COM /*
90*9087SZhong.Wang@Sun.COM  * macLinkName: mac name with maximum lenth 32
91*9087SZhong.Wang@Sun.COM  * portType: 0 (Initiator)/ 1(Target)
92*9087SZhong.Wang@Sun.COM  * pwwn: Port WWN
93*9087SZhong.Wang@Sun.COM  * nwwn: Nodw WWN
94*9087SZhong.Wang@Sun.COM  * promiscous: to enable promisc mode for mac interface
95*9087SZhong.Wang@Sun.COM  */
96*9087SZhong.Wang@Sun.COM FCOE_STATUS FCOE_CreatePort(
97*9087SZhong.Wang@Sun.COM 	const FCOE_UINT8	*macLinkName,	/* maximum len: 32 */
98*9087SZhong.Wang@Sun.COM 	FCOE_UINT8	portType,
99*9087SZhong.Wang@Sun.COM 	FCOE_PORT_WWN	pwwn,
100*9087SZhong.Wang@Sun.COM 	FCOE_PORT_WWN	nwwn,
101*9087SZhong.Wang@Sun.COM 	FCOE_UINT8	promiscusous
102*9087SZhong.Wang@Sun.COM );
103*9087SZhong.Wang@Sun.COM 
104*9087SZhong.Wang@Sun.COM FCOE_STATUS FCOE_DeletePort(
105*9087SZhong.Wang@Sun.COM     const FCOE_UINT8	*macLinkName
106*9087SZhong.Wang@Sun.COM );
107*9087SZhong.Wang@Sun.COM 
108*9087SZhong.Wang@Sun.COM /*
109*9087SZhong.Wang@Sun.COM  * Make sure to free the memory pointed by portlist
110*9087SZhong.Wang@Sun.COM  */
111*9087SZhong.Wang@Sun.COM FCOE_STATUS FCOE_GetPortList(
112*9087SZhong.Wang@Sun.COM     FCOE_UINT32		*port_num,
113*9087SZhong.Wang@Sun.COM     FCOE_PORT_ATTRIBUTE	**portlist
114*9087SZhong.Wang@Sun.COM );
115*9087SZhong.Wang@Sun.COM 
116*9087SZhong.Wang@Sun.COM #ifdef	__cplusplus
117*9087SZhong.Wang@Sun.COM }
118*9087SZhong.Wang@Sun.COM #endif
119*9087SZhong.Wang@Sun.COM 
120*9087SZhong.Wang@Sun.COM #endif	/* _LIBFCOE_H */
121