xref: /titanic_52/usr/src/lib/libfcoe/common/libfcoe.h (revision d4401b99a36e5170ccaa7defc0d2ac65b23f08c6)
12a8164dfSZhong Wang /*
22a8164dfSZhong Wang  * CDDL HEADER START
32a8164dfSZhong Wang  *
42a8164dfSZhong Wang  * The contents of this file are subject to the terms of the
52a8164dfSZhong Wang  * Common Development and Distribution License (the "License").
62a8164dfSZhong Wang  * You may not use this file except in compliance with the License.
72a8164dfSZhong Wang  *
82a8164dfSZhong Wang  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
92a8164dfSZhong Wang  * or http://www.opensolaris.org/os/licensing.
102a8164dfSZhong Wang  * See the License for the specific language governing permissions
112a8164dfSZhong Wang  * and limitations under the License.
122a8164dfSZhong Wang  *
132a8164dfSZhong Wang  * When distributing Covered Code, include this CDDL HEADER in each
142a8164dfSZhong Wang  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
152a8164dfSZhong Wang  * If applicable, add the following below this CDDL HEADER, with the
162a8164dfSZhong Wang  * fields enclosed by brackets "[]" replaced with your own identifying
172a8164dfSZhong Wang  * information: Portions Copyright [yyyy] [name of copyright owner]
182a8164dfSZhong Wang  *
192a8164dfSZhong Wang  * CDDL HEADER END
202a8164dfSZhong Wang  */
212a8164dfSZhong Wang /*
222a8164dfSZhong Wang  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
232a8164dfSZhong Wang  * Use is subject to license terms.
242a8164dfSZhong Wang  */
252a8164dfSZhong Wang 
262a8164dfSZhong Wang #ifndef	_LIBFCOE_H
272a8164dfSZhong Wang #define	_LIBFCOE_H
282a8164dfSZhong Wang 
292a8164dfSZhong Wang #include <time.h>
302a8164dfSZhong Wang #include <wchar.h>
312a8164dfSZhong Wang #include <sys/param.h>
322a8164dfSZhong Wang #include <sys/ethernet.h>
332a8164dfSZhong Wang #include <libnvpair.h>
342a8164dfSZhong Wang 
352a8164dfSZhong Wang #ifdef	__cplusplus
362a8164dfSZhong Wang extern "C" {
372a8164dfSZhong Wang #endif
382a8164dfSZhong Wang 
392a8164dfSZhong Wang /*
402a8164dfSZhong Wang  * FCOE Port Type
412a8164dfSZhong Wang  */
422a8164dfSZhong Wang #define	FCOE_PORTTYPE_INITIATOR		0
432a8164dfSZhong Wang #define	FCOE_PORTTYPE_TARGET		1
442a8164dfSZhong Wang 
452a8164dfSZhong Wang #define	FCOE_MAX_MAC_NAME_LEN		32
462a8164dfSZhong Wang typedef unsigned char	FCOE_UINT8;
472a8164dfSZhong Wang typedef		 char	FCOE_INT8;
482a8164dfSZhong Wang typedef unsigned short	FCOE_UINT16;
492a8164dfSZhong Wang typedef		 short	FCOE_INT16;
502a8164dfSZhong Wang typedef unsigned int	FCOE_UINT32;
512a8164dfSZhong Wang typedef		 int	FCOE_INT32;
522a8164dfSZhong Wang 
532a8164dfSZhong Wang typedef unsigned int	FCOE_STATUS;
542a8164dfSZhong Wang 
552a8164dfSZhong Wang #define	FCOE_STATUS_OK				0
562a8164dfSZhong Wang #define	FCOE_STATUS_ERROR			1
572a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_INVAL_ARG		2
582a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_BUSY			3
592a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_ALREADY		4
602a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_PERM			5
612a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_OPEN_DEV		6
622a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_WWN_SAME		7
632a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_MAC_LEN		8
642a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_PWWN_CONFLICTED	9
652a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_NWWN_CONFLICTED	10
662a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_NEED_JUMBO_FRAME	11
672a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_CREATE_MAC		12
682a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_OPEN_MAC		13
692a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_CREATE_PORT		14
702a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_MAC_NOT_FOUND		15
712a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_OFFLINE_DEV		16
722a8164dfSZhong Wang #define	FCOE_STATUS_ERROR_MORE_DATA		17
73*d4401b99SKelly Hu #define	FCOE_STATUS_ERROR_CLASS_UNSUPPORT	18
74*d4401b99SKelly Hu #define	FCOE_STATUS_ERROR_GET_LINKINFO		19
752a8164dfSZhong Wang 
762a8164dfSZhong Wang typedef struct fcoe_port_wwn {
772a8164dfSZhong Wang 	uchar_t	wwn[8];
782a8164dfSZhong Wang } FCOE_PORT_WWN, *PFCOE_PORT_WWN;
792a8164dfSZhong Wang 
802a8164dfSZhong Wang typedef struct fcoe_port_attr {
812a8164dfSZhong Wang 	FCOE_PORT_WWN	port_wwn;
822a8164dfSZhong Wang 	FCOE_UINT8	mac_link_name[MAXLINKNAMELEN];
832a8164dfSZhong Wang 	FCOE_UINT8	mac_factory_addr[ETHERADDRL];
842a8164dfSZhong Wang 	FCOE_UINT8	mac_current_addr[ETHERADDRL];
852a8164dfSZhong Wang 	FCOE_UINT8	port_type;
862a8164dfSZhong Wang 	FCOE_UINT32	mtu_size;
872a8164dfSZhong Wang 	FCOE_UINT8	mac_promisc;
882a8164dfSZhong Wang } FCOE_PORT_ATTRIBUTE, *PFCOE_PORT_ATTRIBUTE;
892a8164dfSZhong Wang 
902a8164dfSZhong Wang /*
912a8164dfSZhong Wang  * macLinkName: mac name with maximum lenth 32
922a8164dfSZhong Wang  * portType: 0 (Initiator)/ 1(Target)
932a8164dfSZhong Wang  * pwwn: Port WWN
942a8164dfSZhong Wang  * nwwn: Nodw WWN
952a8164dfSZhong Wang  * promiscous: to enable promisc mode for mac interface
962a8164dfSZhong Wang  */
972a8164dfSZhong Wang FCOE_STATUS FCOE_CreatePort(
982a8164dfSZhong Wang 	const FCOE_UINT8	*macLinkName,	/* maximum len: 32 */
992a8164dfSZhong Wang 	FCOE_UINT8	portType,
1002a8164dfSZhong Wang 	FCOE_PORT_WWN	pwwn,
1012a8164dfSZhong Wang 	FCOE_PORT_WWN	nwwn,
1022a8164dfSZhong Wang 	FCOE_UINT8	promiscusous
1032a8164dfSZhong Wang );
1042a8164dfSZhong Wang 
1052a8164dfSZhong Wang FCOE_STATUS FCOE_DeletePort(
1062a8164dfSZhong Wang     const FCOE_UINT8	*macLinkName
1072a8164dfSZhong Wang );
1082a8164dfSZhong Wang 
1092a8164dfSZhong Wang /*
1102a8164dfSZhong Wang  * Make sure to free the memory pointed by portlist
1112a8164dfSZhong Wang  */
1122a8164dfSZhong Wang FCOE_STATUS FCOE_GetPortList(
1132a8164dfSZhong Wang     FCOE_UINT32		*port_num,
1142a8164dfSZhong Wang     FCOE_PORT_ATTRIBUTE	**portlist
1152a8164dfSZhong Wang );
1162a8164dfSZhong Wang 
1172a8164dfSZhong Wang #ifdef	__cplusplus
1182a8164dfSZhong Wang }
1192a8164dfSZhong Wang #endif
1202a8164dfSZhong Wang 
1212a8164dfSZhong Wang #endif	/* _LIBFCOE_H */
122