summaryrefslogtreecommitdiff
path: root/usr/src/cmd/fcinfo/fcinfo.h
blob: 3001bf2654b03ff337ab862e63c22bbceda2951d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _FCINFO_H
#define	_FCINFO_H


#ifdef	__cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libintl.h>
#include <hbaapi.h>
#include <hbaapi-sun.h>
#include <unistd.h>
#include <sys/scsi/scsi.h>
#include <sys/fibre-channel/fcio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <inttypes.h>
#include <cmdparse.h>
#include <locale.h>

#ifdef _BIG_ENDIAN
#define	htonll(x)   (x)
#define	ntohll(x)   (x)
#else
#define	htonll(x)   ((((unsigned long long)htonl(x)) << 32) + htonl(x >> 32))
#define	ntohll(x)   ((((unsigned long long)ntohl(x)) << 32) + ntohl(x >> 32))
#endif

/* DEFINES */

/* SCSI TARGET TYPES */
#define	SCSI_TARGET_TYPE_UNKNOWN    0
#define	SCSI_TARGET_TYPE_NO	    1
#define	SCSI_TARGET_TYPE_YES	    2

#define	DEFAULT_LUN_COUNT	    1024
#define	LUN_SIZE		    8
#define	LUN_HEADER_SIZE		    8
#define	LUN_LENGTH		    LUN_SIZE + LUN_HEADER_SIZE
#define	DEFAULT_LUN_LENGTH	    DEFAULT_LUN_COUNT	* \
				    LUN_SIZE		+ \
				    LUN_HEADER_SIZE

#define	HBA_MAX_RETRIES		20
#define	PORT_LIST_ALLOC		100
#define	NPIV_PORT_LIST_LENGTH	255

#define	NPIV_ADD		0
#define	NPIV_REMOVE		1

#define	NPIV_SUCCESS			0
#define	NPIV_ERROR			1
#define	NPIV_ERROR_NOT_FOUND		2
#define	NPIV_ERROR_EXISTS		3
#define	NPIV_ERROR_SERVICE_NOT_FOUND	4
#define	NPIV_ERROR_NOMEM		5
#define	NPIV_ERROR_MEMBER_NOT_FOUND	6
#define	NPIV_ERROR_BUSY			7

#define	NPIV_SERVICE	"network/npiv_config"
#define	NPIV_PG_NAME	"npiv-port-list"
#define	NPIV_PORT_LIST	"port_list"

/* flags that are needed to be passed into processHBA */
#define	PRINT_LINKSTAT	    0x00000001	/* print link statistics information */
#define	PRINT_SCSI_TARGET   0x00000010	/* print Scsi target information */
#define	PRINT_INITIATOR	    0x00000100	/* print intiator port information */
#define	PRINT_TARGET	    0x00001000	/* print target port information */
#define	PRINT_FCOE	    0x00010000	/* print fcoe port information */

/* flags for Adpater/port mode */
#define	INITIATOR_MODE	    0x00000001
#define	TARGET_MODE	    0x00000010

/* FCOE */
#define	FCOE_USER_RAW_FRAME_SIZE	224

typedef struct _tgtPortWWNList {
	HBA_WWN portWWN;
	HBA_UINT32	scsiOSLun;
	struct _tgtPortWWNList *next;
} tgtPortWWNList;

typedef struct _portWWNList {
	HBA_WWN	portWWN;
	tgtPortWWNList *tgtPortWWN;
	struct _portWWNList *next;
} portWWNList;

/* Discovered ports structure */
typedef struct _discoveredDevice {
	char	OSDeviceName[MAXPATHLEN];
	portWWNList *HBAPortWWN;
	char    VID[8];
	char    PID[16];
	boolean_t   inqSuccess;
	uchar_t	dType;
	struct  _discoveredDevice *next;
} discoveredDevice;

/* globals */
static char *cmdName;

/* print helper functions */
void printHBAPortInfo(HBA_PORTATTRIBUTES *port,
    HBA_ADAPTERATTRIBUTES *attrs, int mode);
void printDiscoPortInfo(HBA_PORTATTRIBUTES *discoPort, int scsiTargetType);
void printLUNInfo(struct scsi_inquiry *inq, HBA_UINT32 scsiLUN, char *devpath);
void printPortStat(fc_rls_acc_t *rls_payload);
void printScsiTarget(HBA_WWN);
void printStatus(HBA_STATUS status);
void printOSDeviceNameInfo(discoveredDevice *devListWalk, boolean_t verbose);
uint64_t wwnConversion(uchar_t *wwn);

int fc_util_list_hbaport(int wwnCount, char **wwn_argv, cmdOptions_t *options);
int fc_util_list_remoteport(int wwnCount, char **argv, cmdOptions_t *options);
int fc_util_list_logicalunit(int pathCount, char **argv, cmdOptions_t *options);
int fc_util_delete_npivport(int wwnCount, char **argv, cmdOptions_t *options);
int fc_util_create_npivport(int wwnCount, char **argv, cmdOptions_t *options);
int fc_util_create_portlist();
int fc_util_force_lip(int objects, char *argv[]);

int fcoe_adm_create_port(int objects, char *argv[],
    cmdOptions_t *options);
int fcoe_adm_delete_port(int objects, char *argv[]);
int fcoe_adm_list_ports(cmdOptions_t *options);


#ifdef	__cplusplus
}
#endif

#endif /* _FCINFO_H */