1
2
3
4
5 #ifndef _FC_FIP_H_
6 #define _FC_FIP_H_
7
8 #include <scsi/fc/fc_ns.h>
9
10
11
12
13
14
15
16 #define FIP_DEF_PRI 128
17 #define FIP_DEF_FC_MAP 0x0efc00
18 #define FIP_DEF_FKA 8000
19 #define FIP_VN_KA_PERIOD 90000
20 #define FIP_FCF_FUZZ 100
21
22
23
24
25 #define FIP_VN_FC_MAP 0x0efd00
26 #define FIP_VN_PROBE_WAIT 100
27 #define FIP_VN_ANN_WAIT 400
28 #define FIP_VN_RLIM_INT 10000
29 #define FIP_VN_RLIM_COUNT 10
30 #define FIP_VN_BEACON_INT 8000
31 #define FIP_VN_BEACON_FUZZ 100
32
33
34
35
36 #define FIP_ALL_FCOE_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 0 })
37 #define FIP_ALL_ENODE_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 1 })
38 #define FIP_ALL_FCF_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 2 })
39 #define FIP_ALL_VN2VN_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 4 })
40 #define FIP_ALL_P2P_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 5 })
41
42 #define FIP_VER 1
43
44 struct fip_header {
45 __u8 fip_ver;
46 __u8 fip_resv1;
47 __be16 fip_op;
48 __u8 fip_resv2;
49 __u8 fip_subcode;
50 __be16 fip_dl_len;
51 __be16 fip_flags;
52 } __attribute__((packed));
53
54 #define FIP_VER_SHIFT 4
55 #define FIP_VER_ENCAPS(v) ((v) << FIP_VER_SHIFT)
56 #define FIP_VER_DECAPS(v) ((v) >> FIP_VER_SHIFT)
57 #define FIP_BPW 4
58
59
60
61
62 enum fip_opcode {
63 FIP_OP_DISC = 1,
64 FIP_OP_LS = 2,
65 FIP_OP_CTRL = 3,
66 FIP_OP_VLAN = 4,
67 FIP_OP_VN2VN = 5,
68 FIP_OP_VENDOR_MIN = 0xfff8,
69 FIP_OP_VENDOR_MAX = 0xfffe,
70 };
71
72
73
74
75 enum fip_disc_subcode {
76 FIP_SC_SOL = 1,
77 FIP_SC_ADV = 2,
78 };
79
80
81
82
83 enum fip_trans_subcode {
84 FIP_SC_REQ = 1,
85 FIP_SC_REP = 2,
86 };
87
88
89
90
91 enum fip_reset_subcode {
92 FIP_SC_KEEP_ALIVE = 1,
93 FIP_SC_CLR_VLINK = 2,
94 };
95
96
97
98
99 enum fip_vlan_subcode {
100 FIP_SC_VL_REQ = 1,
101 FIP_SC_VL_NOTE = 2,
102 FIP_SC_VL_VN2VN_NOTE = 3,
103 };
104
105
106
107
108 enum fip_vn2vn_subcode {
109 FIP_SC_VN_PROBE_REQ = 1,
110 FIP_SC_VN_PROBE_REP = 2,
111 FIP_SC_VN_CLAIM_NOTIFY = 3,
112 FIP_SC_VN_CLAIM_REP = 4,
113 FIP_SC_VN_BEACON = 5,
114 };
115
116
117
118
119 enum fip_flag {
120 FIP_FL_FPMA = 0x8000,
121 FIP_FL_SPMA = 0x4000,
122 FIP_FL_FCF = 0x0020,
123 FIP_FL_FDF = 0x0010,
124 FIP_FL_REC_OR_P2P = 0x0008,
125 FIP_FL_AVAIL = 0x0004,
126 FIP_FL_SOL = 0x0002,
127 FIP_FL_FPORT = 0x0001,
128 };
129
130
131
132
133 struct fip_desc {
134 __u8 fip_dtype;
135 __u8 fip_dlen;
136 };
137
138 enum fip_desc_type {
139 FIP_DT_PRI = 1,
140 FIP_DT_MAC = 2,
141 FIP_DT_MAP_OUI = 3,
142 FIP_DT_NAME = 4,
143 FIP_DT_FAB = 5,
144 FIP_DT_FCOE_SIZE = 6,
145 FIP_DT_FLOGI = 7,
146 FIP_DT_FDISC = 8,
147 FIP_DT_LOGO = 9,
148 FIP_DT_ELP = 10,
149 FIP_DT_VN_ID = 11,
150 FIP_DT_FKA = 12,
151 FIP_DT_VENDOR = 13,
152 FIP_DT_VLAN = 14,
153 FIP_DT_FC4F = 15,
154 FIP_DT_LIMIT,
155 FIP_DT_NON_CRITICAL = 128,
156 FIP_DT_CLR_VLINKS = 128,
157 FIP_DT_VENDOR_BASE = 241,
158 };
159
160
161
162
163 struct fip_pri_desc {
164 struct fip_desc fd_desc;
165 __u8 fd_resvd;
166 __u8 fd_pri;
167 } __attribute__((packed));
168
169
170
171
172 struct fip_mac_desc {
173 struct fip_desc fd_desc;
174 __u8 fd_mac[ETH_ALEN];
175 } __attribute__((packed));
176
177
178
179
180 struct fip_map_desc {
181 struct fip_desc fd_desc;
182 __u8 fd_resvd[3];
183 __u8 fd_map[3];
184 } __attribute__((packed));
185
186
187
188
189 struct fip_wwn_desc {
190 struct fip_desc fd_desc;
191 __u8 fd_resvd[2];
192 __be64 fd_wwn;
193 } __attribute__((packed));
194
195
196
197
198 struct fip_fab_desc {
199 struct fip_desc fd_desc;
200 __be16 fd_vfid;
201 __u8 fd_resvd;
202 __u8 fd_map[3];
203 __be64 fd_wwn;
204 } __attribute__((packed));
205
206
207
208
209 struct fip_size_desc {
210 struct fip_desc fd_desc;
211 __be16 fd_size;
212 } __attribute__((packed));
213
214
215
216
217
218
219 struct fip_encaps {
220 struct fip_desc fd_desc;
221 __u8 fd_resvd[2];
222 } __attribute__((packed));
223
224
225
226
227 struct fip_vn_desc {
228 struct fip_desc fd_desc;
229 __u8 fd_mac[ETH_ALEN];
230 __u8 fd_resvd;
231 __u8 fd_fc_id[3];
232 __be64 fd_wwpn;
233 } __attribute__((packed));
234
235
236
237
238 struct fip_fka_desc {
239 struct fip_desc fd_desc;
240 __u8 fd_resvd;
241 __u8 fd_flags;
242 __be32 fd_fka_period;
243 } __attribute__((packed));
244
245
246
247
248 enum fip_fka_flags {
249 FIP_FKA_ADV_D = 0x01,
250 };
251
252
253
254
255
256
257 struct fip_vlan_desc {
258 struct fip_desc fd_desc;
259 __be16 fd_vlan;
260 } __attribute__((packed));
261
262
263
264
265 struct fip_fc4_feat {
266 struct fip_desc fd_desc;
267 __u8 fd_resvd[2];
268 struct fc_ns_fts fd_fts;
269 struct fc_ns_ff fd_ff;
270 } __attribute__((packed));
271
272
273
274
275 struct fip_vendor_desc {
276 struct fip_desc fd_desc;
277 __u8 fd_resvd[2];
278 __u8 fd_vendor_id[8];
279 } __attribute__((packed));
280
281 #endif