18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright(c) 2007 Intel Corporation. All rights reserved.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Maintained at www.Open-FCoE.org
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef _FC_NS_H_
98c2ecf20Sopenharmony_ci#define	_FC_NS_H_
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/types.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci/*
148c2ecf20Sopenharmony_ci * Fibre Channel Services - Name Service (dNS)
158c2ecf20Sopenharmony_ci * From T11.org FC-GS-2 Rev 5.3 November 1998.
168c2ecf20Sopenharmony_ci */
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ci/*
198c2ecf20Sopenharmony_ci * Common-transport sub-type for Name Server.
208c2ecf20Sopenharmony_ci */
218c2ecf20Sopenharmony_ci#define	FC_NS_SUBTYPE	    2	/* fs_ct_hdr.ct_fs_subtype */
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci/*
248c2ecf20Sopenharmony_ci * Name server Requests.
258c2ecf20Sopenharmony_ci * Note:  this is an incomplete list, some unused requests are omitted.
268c2ecf20Sopenharmony_ci */
278c2ecf20Sopenharmony_cienum fc_ns_req {
288c2ecf20Sopenharmony_ci	FC_NS_GA_NXT =	0x0100,		/* get all next */
298c2ecf20Sopenharmony_ci	FC_NS_GI_A =	0x0101,		/* get identifiers - scope */
308c2ecf20Sopenharmony_ci	FC_NS_GPN_ID =	0x0112,		/* get port name by ID */
318c2ecf20Sopenharmony_ci	FC_NS_GNN_ID =	0x0113,		/* get node name by ID */
328c2ecf20Sopenharmony_ci	FC_NS_GSPN_ID = 0x0118,		/* get symbolic port name */
338c2ecf20Sopenharmony_ci	FC_NS_GID_PN =	0x0121,		/* get ID for port name */
348c2ecf20Sopenharmony_ci	FC_NS_GID_NN =	0x0131,		/* get IDs for node name */
358c2ecf20Sopenharmony_ci	FC_NS_GID_FT =	0x0171,		/* get IDs by FC4 type */
368c2ecf20Sopenharmony_ci	FC_NS_GPN_FT =	0x0172,		/* get port names by FC4 type */
378c2ecf20Sopenharmony_ci	FC_NS_GID_PT =	0x01a1,		/* get IDs by port type */
388c2ecf20Sopenharmony_ci	FC_NS_RPN_ID =	0x0212,		/* reg port name for ID */
398c2ecf20Sopenharmony_ci	FC_NS_RNN_ID =	0x0213,		/* reg node name for ID */
408c2ecf20Sopenharmony_ci	FC_NS_RFT_ID =	0x0217,		/* reg FC4 type for ID */
418c2ecf20Sopenharmony_ci	FC_NS_RSPN_ID =	0x0218,		/* reg symbolic port name */
428c2ecf20Sopenharmony_ci	FC_NS_RFF_ID =	0x021f,		/* reg FC4 Features for ID */
438c2ecf20Sopenharmony_ci	FC_NS_RSNN_NN =	0x0239,		/* reg symbolic node name */
448c2ecf20Sopenharmony_ci};
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci/*
478c2ecf20Sopenharmony_ci * Port type values.
488c2ecf20Sopenharmony_ci */
498c2ecf20Sopenharmony_cienum fc_ns_pt {
508c2ecf20Sopenharmony_ci	FC_NS_UNID_PORT = 0x00,	/* unidentified */
518c2ecf20Sopenharmony_ci	FC_NS_N_PORT =	0x01,	/* N port */
528c2ecf20Sopenharmony_ci	FC_NS_NL_PORT =	0x02,	/* NL port */
538c2ecf20Sopenharmony_ci	FC_NS_FNL_PORT = 0x03,	/* F/NL port */
548c2ecf20Sopenharmony_ci	FC_NS_NX_PORT =	0x7f,	/* Nx port */
558c2ecf20Sopenharmony_ci	FC_NS_F_PORT =	0x81,	/* F port */
568c2ecf20Sopenharmony_ci	FC_NS_FL_PORT =	0x82,	/* FL port */
578c2ecf20Sopenharmony_ci	FC_NS_E_PORT =	0x84,	/* E port */
588c2ecf20Sopenharmony_ci	FC_NS_B_PORT =	0x85,	/* B port */
598c2ecf20Sopenharmony_ci};
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci/*
628c2ecf20Sopenharmony_ci * Port type object.
638c2ecf20Sopenharmony_ci */
648c2ecf20Sopenharmony_cistruct fc_ns_pt_obj {
658c2ecf20Sopenharmony_ci	__u8		pt_type;
668c2ecf20Sopenharmony_ci};
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci/*
698c2ecf20Sopenharmony_ci * Port ID object
708c2ecf20Sopenharmony_ci */
718c2ecf20Sopenharmony_cistruct fc_ns_fid {
728c2ecf20Sopenharmony_ci	__u8		fp_flags;	/* flags for responses only */
738c2ecf20Sopenharmony_ci	__u8		fp_fid[3];
748c2ecf20Sopenharmony_ci};
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ci/*
778c2ecf20Sopenharmony_ci * fp_flags in port ID object, for responses only.
788c2ecf20Sopenharmony_ci */
798c2ecf20Sopenharmony_ci#define	FC_NS_FID_LAST	0x80		/* last object */
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci/*
828c2ecf20Sopenharmony_ci * FC4-types object.
838c2ecf20Sopenharmony_ci */
848c2ecf20Sopenharmony_ci#define	FC_NS_TYPES	256	/* number of possible FC-4 types */
858c2ecf20Sopenharmony_ci#define	FC_NS_BPW	32	/* bits per word in bitmap */
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_cistruct fc_ns_fts {
888c2ecf20Sopenharmony_ci	__be32	ff_type_map[FC_NS_TYPES / FC_NS_BPW]; /* bitmap of FC-4 types */
898c2ecf20Sopenharmony_ci};
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ci/*
928c2ecf20Sopenharmony_ci * FC4-features object.
938c2ecf20Sopenharmony_ci */
948c2ecf20Sopenharmony_cistruct fc_ns_ff	{
958c2ecf20Sopenharmony_ci	__be32	fd_feat[FC_NS_TYPES * 4 / FC_NS_BPW]; /* 4-bits per FC-type */
968c2ecf20Sopenharmony_ci};
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ci/*
998c2ecf20Sopenharmony_ci * GID_PT request.
1008c2ecf20Sopenharmony_ci */
1018c2ecf20Sopenharmony_cistruct fc_ns_gid_pt {
1028c2ecf20Sopenharmony_ci	__u8		fn_pt_type;
1038c2ecf20Sopenharmony_ci	__u8		fn_domain_id_scope;
1048c2ecf20Sopenharmony_ci	__u8		fn_area_id_scope;
1058c2ecf20Sopenharmony_ci	__u8		fn_resvd;
1068c2ecf20Sopenharmony_ci};
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ci/*
1098c2ecf20Sopenharmony_ci * GID_FT or GPN_FT request.
1108c2ecf20Sopenharmony_ci */
1118c2ecf20Sopenharmony_cistruct fc_ns_gid_ft {
1128c2ecf20Sopenharmony_ci	__u8		fn_resvd;
1138c2ecf20Sopenharmony_ci	__u8		fn_domain_id_scope;
1148c2ecf20Sopenharmony_ci	__u8		fn_area_id_scope;
1158c2ecf20Sopenharmony_ci	__u8		fn_fc4_type;
1168c2ecf20Sopenharmony_ci};
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci/*
1198c2ecf20Sopenharmony_ci * GPN_FT response.
1208c2ecf20Sopenharmony_ci */
1218c2ecf20Sopenharmony_cistruct fc_gpn_ft_resp {
1228c2ecf20Sopenharmony_ci	__u8		fp_flags;	/* see fp_flags definitions above */
1238c2ecf20Sopenharmony_ci	__u8		fp_fid[3];	/* port ID */
1248c2ecf20Sopenharmony_ci	__be32		fp_resvd;
1258c2ecf20Sopenharmony_ci	__be64		fp_wwpn;	/* port name */
1268c2ecf20Sopenharmony_ci};
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_ci/*
1298c2ecf20Sopenharmony_ci * GID_PN request
1308c2ecf20Sopenharmony_ci */
1318c2ecf20Sopenharmony_cistruct fc_ns_gid_pn {
1328c2ecf20Sopenharmony_ci	__be64     fn_wwpn;    /* port name */
1338c2ecf20Sopenharmony_ci};
1348c2ecf20Sopenharmony_ci
1358c2ecf20Sopenharmony_ci/*
1368c2ecf20Sopenharmony_ci * GID_PN response or GSPN_ID request
1378c2ecf20Sopenharmony_ci */
1388c2ecf20Sopenharmony_cistruct fc_gid_pn_resp {
1398c2ecf20Sopenharmony_ci	__u8      fp_resvd;
1408c2ecf20Sopenharmony_ci	__u8      fp_fid[3];     /* port ID */
1418c2ecf20Sopenharmony_ci};
1428c2ecf20Sopenharmony_ci
1438c2ecf20Sopenharmony_ci/*
1448c2ecf20Sopenharmony_ci * GSPN_ID response
1458c2ecf20Sopenharmony_ci */
1468c2ecf20Sopenharmony_cistruct fc_gspn_resp {
1478c2ecf20Sopenharmony_ci	__u8	fp_name_len;
1488c2ecf20Sopenharmony_ci	char	fp_name[];
1498c2ecf20Sopenharmony_ci};
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ci/*
1528c2ecf20Sopenharmony_ci * RFT_ID request - register FC-4 types for ID.
1538c2ecf20Sopenharmony_ci */
1548c2ecf20Sopenharmony_cistruct fc_ns_rft_id {
1558c2ecf20Sopenharmony_ci	struct fc_ns_fid fr_fid;	/* port ID object */
1568c2ecf20Sopenharmony_ci	struct fc_ns_fts fr_fts;	/* FC-4 types object */
1578c2ecf20Sopenharmony_ci};
1588c2ecf20Sopenharmony_ci
1598c2ecf20Sopenharmony_ci/*
1608c2ecf20Sopenharmony_ci * RPN_ID request - register port name for ID.
1618c2ecf20Sopenharmony_ci * RNN_ID request - register node name for ID.
1628c2ecf20Sopenharmony_ci */
1638c2ecf20Sopenharmony_cistruct fc_ns_rn_id {
1648c2ecf20Sopenharmony_ci	struct fc_ns_fid fr_fid;	/* port ID object */
1658c2ecf20Sopenharmony_ci	__be64		fr_wwn;		/* node name or port name */
1668c2ecf20Sopenharmony_ci} __attribute__((__packed__));
1678c2ecf20Sopenharmony_ci
1688c2ecf20Sopenharmony_ci/*
1698c2ecf20Sopenharmony_ci * RSNN_NN request - register symbolic node name
1708c2ecf20Sopenharmony_ci */
1718c2ecf20Sopenharmony_cistruct fc_ns_rsnn {
1728c2ecf20Sopenharmony_ci	__be64		fr_wwn;		/* node name */
1738c2ecf20Sopenharmony_ci	__u8		fr_name_len;
1748c2ecf20Sopenharmony_ci	char		fr_name[];
1758c2ecf20Sopenharmony_ci} __attribute__((__packed__));
1768c2ecf20Sopenharmony_ci
1778c2ecf20Sopenharmony_ci/*
1788c2ecf20Sopenharmony_ci * RSPN_ID request - register symbolic port name
1798c2ecf20Sopenharmony_ci */
1808c2ecf20Sopenharmony_cistruct fc_ns_rspn {
1818c2ecf20Sopenharmony_ci	struct fc_ns_fid fr_fid;	/* port ID object */
1828c2ecf20Sopenharmony_ci	__u8		fr_name_len;
1838c2ecf20Sopenharmony_ci	char		fr_name[];
1848c2ecf20Sopenharmony_ci} __attribute__((__packed__));
1858c2ecf20Sopenharmony_ci
1868c2ecf20Sopenharmony_ci/*
1878c2ecf20Sopenharmony_ci * RFF_ID request - register FC-4 Features for ID.
1888c2ecf20Sopenharmony_ci */
1898c2ecf20Sopenharmony_cistruct fc_ns_rff_id {
1908c2ecf20Sopenharmony_ci	struct fc_ns_fid fr_fid;	/* port ID object */
1918c2ecf20Sopenharmony_ci	__u8		fr_resvd[2];
1928c2ecf20Sopenharmony_ci	__u8		fr_feat;	/* FC-4 Feature bits */
1938c2ecf20Sopenharmony_ci	__u8		fr_type;	/* FC-4 type */
1948c2ecf20Sopenharmony_ci} __attribute__((__packed__));
1958c2ecf20Sopenharmony_ci
1968c2ecf20Sopenharmony_ci#endif /* _FC_NS_H_ */
197