Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  * Copyright(c) 2007 Intel Corporation. All rights reserved.
0004  *
0005  * Maintained at www.Open-FCoE.org
0006  */
0007 
0008 #ifndef _FC_NS_H_
0009 #define _FC_NS_H_
0010 
0011 #include <linux/types.h>
0012 
0013 /*
0014  * Fibre Channel Services - Name Service (dNS)
0015  * From T11.org FC-GS-2 Rev 5.3 November 1998.
0016  */
0017 
0018 /*
0019  * Common-transport sub-type for Name Server.
0020  */
0021 #define FC_NS_SUBTYPE       2   /* fs_ct_hdr.ct_fs_subtype */
0022 
0023 /*
0024  * Name server Requests.
0025  * Note:  this is an incomplete list, some unused requests are omitted.
0026  */
0027 enum fc_ns_req {
0028     FC_NS_GA_NXT =  0x0100,     /* get all next */
0029     FC_NS_GI_A =    0x0101,     /* get identifiers - scope */
0030     FC_NS_GPN_ID =  0x0112,     /* get port name by ID */
0031     FC_NS_GNN_ID =  0x0113,     /* get node name by ID */
0032     FC_NS_GSPN_ID = 0x0118,     /* get symbolic port name */
0033     FC_NS_GID_PN =  0x0121,     /* get ID for port name */
0034     FC_NS_GID_NN =  0x0131,     /* get IDs for node name */
0035     FC_NS_GID_FT =  0x0171,     /* get IDs by FC4 type */
0036     FC_NS_GPN_FT =  0x0172,     /* get port names by FC4 type */
0037     FC_NS_GID_PT =  0x01a1,     /* get IDs by port type */
0038     FC_NS_RPN_ID =  0x0212,     /* reg port name for ID */
0039     FC_NS_RNN_ID =  0x0213,     /* reg node name for ID */
0040     FC_NS_RFT_ID =  0x0217,     /* reg FC4 type for ID */
0041     FC_NS_RSPN_ID = 0x0218,     /* reg symbolic port name */
0042     FC_NS_RFF_ID =  0x021f,     /* reg FC4 Features for ID */
0043     FC_NS_RSNN_NN = 0x0239,     /* reg symbolic node name */
0044 };
0045 
0046 /*
0047  * Port type values.
0048  */
0049 enum fc_ns_pt {
0050     FC_NS_UNID_PORT = 0x00, /* unidentified */
0051     FC_NS_N_PORT =  0x01,   /* N port */
0052     FC_NS_NL_PORT = 0x02,   /* NL port */
0053     FC_NS_FNL_PORT = 0x03,  /* F/NL port */
0054     FC_NS_NX_PORT = 0x7f,   /* Nx port */
0055     FC_NS_F_PORT =  0x81,   /* F port */
0056     FC_NS_FL_PORT = 0x82,   /* FL port */
0057     FC_NS_E_PORT =  0x84,   /* E port */
0058     FC_NS_B_PORT =  0x85,   /* B port */
0059 };
0060 
0061 /*
0062  * Port type object.
0063  */
0064 struct fc_ns_pt_obj {
0065     __u8        pt_type;
0066 };
0067 
0068 /*
0069  * Port ID object
0070  */
0071 struct fc_ns_fid {
0072     __u8        fp_flags;   /* flags for responses only */
0073     __u8        fp_fid[3];
0074 };
0075 
0076 /*
0077  * fp_flags in port ID object, for responses only.
0078  */
0079 #define FC_NS_FID_LAST  0x80        /* last object */
0080 
0081 /*
0082  * FC4-types object.
0083  */
0084 #define FC_NS_TYPES 256 /* number of possible FC-4 types */
0085 #define FC_NS_BPW   32  /* bits per word in bitmap */
0086 
0087 struct fc_ns_fts {
0088     __be32  ff_type_map[FC_NS_TYPES / FC_NS_BPW]; /* bitmap of FC-4 types */
0089 };
0090 
0091 /*
0092  * FC4-features object.
0093  */
0094 struct fc_ns_ff {
0095     __be32  fd_feat[FC_NS_TYPES * 4 / FC_NS_BPW]; /* 4-bits per FC-type */
0096 };
0097 
0098 /*
0099  * GID_PT request.
0100  */
0101 struct fc_ns_gid_pt {
0102     __u8        fn_pt_type;
0103     __u8        fn_domain_id_scope;
0104     __u8        fn_area_id_scope;
0105     __u8        fn_resvd;
0106 };
0107 
0108 /*
0109  * GID_FT or GPN_FT request.
0110  */
0111 struct fc_ns_gid_ft {
0112     __u8        fn_resvd;
0113     __u8        fn_domain_id_scope;
0114     __u8        fn_area_id_scope;
0115     __u8        fn_fc4_type;
0116 };
0117 
0118 /*
0119  * GPN_FT response.
0120  */
0121 struct fc_gpn_ft_resp {
0122     __u8        fp_flags;   /* see fp_flags definitions above */
0123     __u8        fp_fid[3];  /* port ID */
0124     __be32      fp_resvd;
0125     __be64      fp_wwpn;    /* port name */
0126 };
0127 
0128 /*
0129  * GID_PN request
0130  */
0131 struct fc_ns_gid_pn {
0132     __be64     fn_wwpn;    /* port name */
0133 };
0134 
0135 /*
0136  * GID_PN response or GSPN_ID request
0137  */
0138 struct fc_gid_pn_resp {
0139     __u8      fp_resvd;
0140     __u8      fp_fid[3];     /* port ID */
0141 };
0142 
0143 /*
0144  * GSPN_ID response
0145  */
0146 struct fc_gspn_resp {
0147     __u8    fp_name_len;
0148     char    fp_name[];
0149 };
0150 
0151 /*
0152  * RFT_ID request - register FC-4 types for ID.
0153  */
0154 struct fc_ns_rft_id {
0155     struct fc_ns_fid fr_fid;    /* port ID object */
0156     struct fc_ns_fts fr_fts;    /* FC-4 types object */
0157 };
0158 
0159 /*
0160  * RPN_ID request - register port name for ID.
0161  * RNN_ID request - register node name for ID.
0162  */
0163 struct fc_ns_rn_id {
0164     struct fc_ns_fid fr_fid;    /* port ID object */
0165     __be64      fr_wwn;     /* node name or port name */
0166 } __attribute__((__packed__));
0167 
0168 /*
0169  * RSNN_NN request - register symbolic node name
0170  */
0171 struct fc_ns_rsnn {
0172     __be64      fr_wwn;     /* node name */
0173     __u8        fr_name_len;
0174     char        fr_name[];
0175 } __attribute__((__packed__));
0176 
0177 /*
0178  * RSPN_ID request - register symbolic port name
0179  */
0180 struct fc_ns_rspn {
0181     struct fc_ns_fid fr_fid;    /* port ID object */
0182     __u8        fr_name_len;
0183     char        fr_name[];
0184 } __attribute__((__packed__));
0185 
0186 /*
0187  * RFF_ID request - register FC-4 Features for ID.
0188  */
0189 struct fc_ns_rff_id {
0190     struct fc_ns_fid fr_fid;    /* port ID object */
0191     __u8        fr_resvd[2];
0192     __u8        fr_feat;    /* FC-4 Feature bits */
0193     __u8        fr_type;    /* FC-4 type */
0194 } __attribute__((__packed__));
0195 
0196 #endif /* _FC_NS_H_ */