iPXE
fcns.h
Go to the documentation of this file.
1 #ifndef _IPXE_FCNS_H
2 #define _IPXE_FCNS_H
3 
4 /**
5  * @file
6  *
7  * Fibre Channel name server lookups
8  *
9  */
10 
11 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
12 
13 #include <stdint.h>
14 #include <ipxe/fc.h>
15 
16 /** A Fibre Channel Common Transport header */
17 struct fc_ct_header {
18  /** Revision */
20  /** Original requestor ID */
21  struct fc_port_id in_id;
22  /** Generic service type */
24  /** Generic service subtype */
26  /** Options */
28  /** Reserved */
30  /** Command/response code */
32  /** Maximum/residual size */
34  /** Fragment ID */
36  /** Reason code */
38  /** Reason code explanation */
40  /** Vendor specific */
42 } __attribute__ (( packed ));
43 
44 /** Fibre Channel Common Transport revision */
45 #define FC_CT_REVISION 1
46 
47 /** Fibre Channel generic service type */
48 enum fc_gs_type {
49  /** Directory service */
50  FC_GS_TYPE_DS = 0xfc,
51 };
52 
53 /** Fibre Channel generic service response codes */
55  /** Accepted */
56  FC_GS_ACCEPT = 0x8002,
57  /** Rejected */
58  FC_GS_REJECT = 0x8001,
59 };
60 
61 /** Fibre Channel generic service rejection reason codes */
63  /** Invalid command code */
65  /** Invalid version level */
67  /** Logical error */
68  FC_GS_ERROR = 0x03,
69  /** Invalid CT_IU size */
71  /** Logical busy */
72  FC_GS_BUSY = 0x05,
73  /** Protocol error */
74  FC_GS_EPROTO = 0x07,
75  /** Unable to perform command request */
76  FC_GS_UNABLE = 0x09,
77  /** Command not supported */
78  FC_GS_ENOTSUP = 0x0b,
79  /** Server not available */
81  /** Session could not be established */
82  FC_GS_SESSION = 0x0e,
83 };
84 
85 /** Fibre Channel directory service subtype */
87  /** Name server */
89 };
90 
91 /** Fibre Channel name server commands */
93  /** Get */
94  FC_NS_GET = 0x1,
95  /** Register */
97  /** De-register */
99 };
100 
101 /** Fibre Channel name server objects */
103  /** Port ID */
105  /** Port name */
107  /** Node name */
109  /** FC-4 types */
111  /** Symbolic port name */
113  /** Symbolic node name */
115  /** FC-4 features */
117 };
118 
119 /** Construct Fibre Channel name server command code
120  *
121  * @v command Name server command
122  * @v key Name server key
123  * @v value Name server value
124  * @ret code Name server command code
125  */
126 #define FC_NS_CODE( command, key, value ) \
127  ( ( (command) << 8 ) | ( (key) << 4 ) | ( (value) << 0 ) )
128 
129 /** Construct Fibre Channel name server "get" command code
130  *
131  * @v key Name server key
132  * @v value Name server value to get
133  * @ret code Name server command code
134  */
135 #define FC_NS_GET( key, value ) FC_NS_CODE ( FC_NS_GET, key, value )
136 
137 /** Construct Fibre Channel name server "register" command code
138  *
139  * @v key Name server key
140  * @v value Name server value to register
141  * @ret code Name server command code
142  */
143 #define FC_NS_REGISTER( key, value ) FC_NS_CODE ( FC_NS_REGISTER, key, value )
144 
145 /** Extract Fibre Channel name server command
146  *
147  * @v code Name server command code
148  * @ret command Name server command
149  */
150 #define FC_NS_COMMAND( code ) ( ( (code) >> 8 ) & 0xf )
151 
152 /** Extract Fibre Channel name server key
153  *
154  * @v code Name server command code
155  * @ret key Name server key
156  */
157 #define FC_NS_KEY( code ) ( ( (code) >> 4 ) & 0xf )
158 
159 /** Extract Fibre Channel name server value
160  *
161  * @v code Name server command code
162  * @ret value NAme server value
163  */
164 #define FC_NS_VALUE( code ) ( ( (code) >> 0 ) & 0xf )
165 
166 /** A Fibre Channel name server port ID */
168  /** Reserved */
170  /** Port ID */
172 } __attribute__ (( packed ));
173 
174 /** A Fibre Channel name server GID_PN request */
176  /** Common Transport header */
177  struct fc_ct_header ct;
178  /** Port name */
180 } __attribute__ (( packed ));
181 
182 /** A Fibre Channel name server request */
184  /** Get ID by port name */
186 };
187 
188 /** A Fibre Channel name server rejection response */
190  /** Common Transport header */
191  struct fc_ct_header ct;
192 } __attribute__ (( packed ));
193 
194 /** A Fibre Channel name server GID_PN response */
196  /** Common Transport header */
197  struct fc_ct_header ct;
198  /** Port ID */
200 } __attribute__ (( packed ));
201 
202 /** A Fibre Channel name server response */
204  /** Common Transport header */
205  struct fc_ct_header ct;
206  /** Rejection */
208  /** Get ID by port name */
210 };
211 
212 extern int fc_ns_query ( struct fc_peer *peer, struct fc_port *port,
213  int ( * done ) ( struct fc_peer *peer,
214  struct fc_port *port,
215  struct fc_port_id *peer_port_id ) );
216 
217 #endif /* _IPXE_FCNS_H */
struct fc_ct_header ct
Common Transport header.
Definition: fcns.h:191
#define __attribute__(x)
Definition: compiler.h:10
fc_ns_command_nibble
Fibre Channel name server commands.
Definition: fcns.h:92
unsigned short uint16_t
Definition: stdint.h:11
fc_ds_subtype
Fibre Channel directory service subtype.
Definition: fcns.h:86
Server not available.
Definition: fcns.h:80
A Fibre Channel name server GID_PN request.
Definition: fcns.h:175
Port name.
Definition: fcns.h:106
uint8_t reason
Reason code.
Definition: fcns.h:37
A Fibre Channel name server GID_PN response.
Definition: fcns.h:195
Name server.
Definition: fcns.h:88
uint16_t code
Command/response code.
Definition: fcns.h:31
A Fibre Channel port.
Definition: fc.h:252
fc_gs_reason_code
Fibre Channel generic service rejection reason codes.
Definition: fcns.h:62
uint8_t reserved
Reserved.
Definition: fcns.h:169
Invalid version level.
Definition: fcns.h:66
struct fc_ct_header ct
Common Transport header.
Definition: fcns.h:205
struct fc_ns_gid_pn_response gid_pn
Get ID by port name.
Definition: fcns.h:209
A Fibre Channel name server request.
Definition: fcns.h:183
u8 port
Port number.
Definition: CIB_PRM.h:31
A Fibre Channel name server rejection response.
Definition: fcns.h:189
A Fibre Channel name server port ID.
Definition: fcns.h:167
Logical busy.
Definition: fcns.h:72
struct fc_ns_reject_response reject
Rejection.
Definition: fcns.h:207
A Fibre Channel port identifier.
Definition: fc.h:37
uint8_t subtype
Generic service subtype.
Definition: fcns.h:25
uint8_t reserved
Reserved.
Definition: fcns.h:29
struct fc_ns_gid_pn_request gid_pn
Get ID by port name.
Definition: fcns.h:185
struct fc_port_id port_id
Port ID.
Definition: fcns.h:171
uint8_t type
Generic service type.
Definition: fcns.h:23
#define FC_NS_REGISTER(key, value)
Construct Fibre Channel name server "register" command code.
Definition: fcns.h:143
Rejected.
Definition: fcns.h:58
Node name.
Definition: fcns.h:108
uint8_t explanation
Reason code explanation.
Definition: fcns.h:39
Symbolic node name.
Definition: fcns.h:114
uint8_t fragment
Fragment ID.
Definition: fcns.h:35
Port ID.
Definition: fcns.h:104
int fc_ns_query(struct fc_peer *peer, struct fc_port *port, int(*done)(struct fc_peer *peer, struct fc_port *port, struct fc_port_id *peer_port_id))
Issue Fibre Channel name server query.
Definition: fcns.c:222
fc_ns_object_nibble
Fibre Channel name server objects.
Definition: fcns.h:102
Directory service.
Definition: fcns.h:50
unsigned char uint8_t
Definition: stdint.h:10
struct fc_port_id in_id
Original requestor ID.
Definition: fcns.h:21
uint16_t size
Maximum/residual size.
Definition: fcns.h:33
Fibre Channel.
struct fc_name port_wwn
Port name.
Definition: fcns.h:179
FC-4 types.
Definition: fcns.h:110
A Fibre Channel peer.
Definition: fc.h:340
A Fibre Channel name.
Definition: fc.h:29
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
struct fc_ct_header ct
Common Transport header.
Definition: fcns.h:177
De-register.
Definition: fcns.h:98
fc_gs_response_code
Fibre Channel generic service response codes.
Definition: fcns.h:54
struct fc_ns_port_id port_id
Port ID.
Definition: fcns.h:199
struct fc_ct_header ct
Common Transport header.
Definition: fcns.h:197
A Fibre Channel name server response.
Definition: fcns.h:203
Symbolic port name.
Definition: fcns.h:112
Protocol error.
Definition: fcns.h:74
struct mschapv2_challenge peer
Peer challenge.
Definition: mschapv2.h:12
Unable to perform command request.
Definition: fcns.h:76
fc_gs_type
Fibre Channel generic service type.
Definition: fcns.h:48
Accepted.
Definition: fcns.h:56
Command not supported.
Definition: fcns.h:78
uint8_t vendor
Vendor specific.
Definition: fcns.h:41
uint8_t options
Options.
Definition: fcns.h:27
A Fibre Channel Common Transport header.
Definition: fcns.h:17
struct bofm_section_header done
Definition: bofm_test.c:46
#define FC_NS_GET(key, value)
Construct Fibre Channel name server "get" command code.
Definition: fcns.h:135
FC-4 features.
Definition: fcns.h:116
uint8_t revision
Revision.
Definition: fcns.h:19
Invalid command code.
Definition: fcns.h:64
Invalid CT_IU size.
Definition: fcns.h:70
Session could not be established.
Definition: fcns.h:82
Logical error.
Definition: fcns.h:68