130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright(c) 2007 Intel Corporation. All rights reserved.
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is free software; you can redistribute it and/or modify it
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * under the terms and conditions of the GNU General Public License,
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * version 2, as published by the Free Software Foundation.
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * This program is distributed in the hope it will be useful, but WITHOUT
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * more details.
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * You should have received a copy of the GNU General Public License along with
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * this program; if not, write to the Free Software Foundation, Inc.,
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Maintained at www.Open-FCoE.org
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _FC_NS_H_
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define	_FC_NS_H_
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Fibre Channel Services - Name Service (dNS)
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * From T11.org FC-GS-2 Rev 5.3 November 1998.
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Common-transport sub-type for Name Server.
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define	FC_NS_SUBTYPE	    2	/* fs_ct_hdr.ct_fs_subtype */
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Name server Requests.
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Note:  this is an incomplete list, some unused requests are omitted.
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
3930692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum fc_ns_req {
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GA_NXT =	0x0100,		/* get all next */
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GI_A =	0x0101,		/* get identifiers - scope */
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GPN_ID =	0x0112,		/* get port name by ID */
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GNN_ID =	0x0113,		/* get node name by ID */
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GSPN_ID = 0x0118,		/* get symbolic port name */
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GID_PN =	0x0121,		/* get ID for port name */
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GID_NN =	0x0131,		/* get IDs for node name */
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GID_FT =	0x0171,		/* get IDs by FC4 type */
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GPN_FT =	0x0172,		/* get port names by FC4 type */
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_GID_PT =	0x01a1,		/* get IDs by port type */
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_RPN_ID =	0x0212,		/* reg port name for ID */
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_RNN_ID =	0x0213,		/* reg node name for ID */
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_RFT_ID =	0x0217,		/* reg FC4 type for ID */
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_RSPN_ID =	0x0218,		/* reg symbolic port name */
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_RFF_ID =	0x021f,		/* reg FC4 Features for ID */
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_RSNN_NN =	0x0239,		/* reg symbolic node name */
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Port type values.
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
6130692c65c4174412c90e79489e98ab85c1a7412fBen Chengenum fc_ns_pt {
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_UNID_PORT = 0x00,	/* unidentified */
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_N_PORT =	0x01,	/* N port */
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_NL_PORT =	0x02,	/* NL port */
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_FNL_PORT = 0x03,	/* F/NL port */
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_NX_PORT =	0x7f,	/* Nx port */
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_F_PORT =	0x81,	/* F port */
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_FL_PORT =	0x82,	/* FL port */
6930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_E_PORT =	0x84,	/* E port */
7030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	FC_NS_B_PORT =	0x85,	/* B port */
7130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
7230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Port type object.
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
7630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_pt_obj {
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		pt_type;
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Port ID object
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
8330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_fid {
8430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fp_flags;	/* flags for responses only */
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fp_fid[3];
8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * fp_flags in port ID object, for responses only.
9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define	FC_NS_FID_LAST	0x80		/* last object */
9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FC4-types object.
9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define	FC_NS_TYPES	256	/* number of possible FC-4 types */
9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define	FC_NS_BPW	32	/* bits per word in bitmap */
9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_fts {
10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32	ff_type_map[FC_NS_TYPES / FC_NS_BPW]; /* bitmap of FC-4 types */
10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
10230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * FC4-features object.
10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
10630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_ff	{
10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32	fd_feat[FC_NS_TYPES * 4 / FC_NS_BPW]; /* 4-bits per FC-type */
10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GID_PT request.
11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
11330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_gid_pt {
11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fn_pt_type;
11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fn_domain_id_scope;
11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fn_area_id_scope;
11730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fn_resvd;
11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GID_FT or GPN_FT request.
12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
12330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_gid_ft {
12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fn_resvd;
12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fn_domain_id_scope;
12630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fn_area_id_scope;
12730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fn_fc4_type;
12830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GPN_FT response.
13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
13330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_gpn_ft_resp {
13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fp_flags;	/* see fp_flags definitions above */
13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fp_fid[3];	/* port ID */
13630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be32		fp_resvd;
13730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be64		fp_wwpn;	/* port name */
13830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
13930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
14130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GID_PN request
14230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
14330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_gid_pn {
14430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be64     fn_wwpn;    /* port name */
14530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
14630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
14730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
14830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GID_PN response or GSPN_ID request
14930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
15030692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_gid_pn_resp {
15130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8      fp_resvd;
15230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8      fp_fid[3];     /* port ID */
15330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
15430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
15530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
15630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * GSPN_ID response
15730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
15830692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_gspn_resp {
15930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8	fp_name_len;
16030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char	fp_name[];
16130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
16230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
16330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
16430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RFT_ID request - register FC-4 types for ID.
16530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
16630692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_rft_id {
16730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct fc_ns_fid fr_fid;	/* port ID object */
16830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct fc_ns_fts fr_fts;	/* FC-4 types object */
16930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
17030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
17130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
17230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RPN_ID request - register port name for ID.
17330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RNN_ID request - register node name for ID.
17430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
17530692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_rn_id {
17630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct fc_ns_fid fr_fid;	/* port ID object */
17730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be64		fr_wwn;		/* node name or port name */
17830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((__packed__));
17930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
18030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
18130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RSNN_NN request - register symbolic node name
18230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
18330692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_rsnn {
18430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__be64		fr_wwn;		/* node name */
18530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fr_name_len;
18630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char		fr_name[];
18730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((__packed__));
18830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
18930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
19030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RSPN_ID request - register symbolic port name
19130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
19230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_rspn {
19330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct fc_ns_fid fr_fid;	/* port ID object */
19430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fr_name_len;
19530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char		fr_name[];
19630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((__packed__));
19730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
19830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
19930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * RFF_ID request - register FC-4 Features for ID.
20030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
20130692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct fc_ns_rff_id {
20230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	struct fc_ns_fid fr_fid;	/* port ID object */
20330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fr_resvd[2];
20430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fr_feat;	/* FC-4 Feature bits */
20530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u8		fr_type;	/* FC-4 type */
20630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} __attribute__((__packed__));
20730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
20830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _FC_NS_H_ */
209