1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef _FC_FIP_H_
18#define _FC_FIP_H_
19
20
21
22
23
24
25#define FIP_DEF_PRI 128
26#define FIP_DEF_FC_MAP 0x0efc00
27#define FIP_DEF_FKA 8000
28#define FIP_VN_KA_PERIOD 90000
29#define FIP_FCF_FUZZ 100
30
31
32
33
34#define FIP_ALL_FCOE_MACS ((u8[6]) { 1, 0x10, 0x18, 1, 0, 0 })
35#define FIP_ALL_ENODE_MACS ((u8[6]) { 1, 0x10, 0x18, 1, 0, 1 })
36#define FIP_ALL_FCF_MACS ((u8[6]) { 1, 0x10, 0x18, 1, 0, 2 })
37
38#define FIP_VER 1
39
40struct fip_header {
41 __u8 fip_ver;
42 __u8 fip_resv1;
43 __be16 fip_op;
44 __u8 fip_resv2;
45 __u8 fip_subcode;
46 __be16 fip_dl_len;
47 __be16 fip_flags;
48} __attribute__((packed));
49
50#define FIP_VER_SHIFT 4
51#define FIP_VER_ENCAPS(v) ((v) << FIP_VER_SHIFT)
52#define FIP_VER_DECAPS(v) ((v) >> FIP_VER_SHIFT)
53#define FIP_BPW 4
54
55
56
57
58enum fip_opcode {
59 FIP_OP_DISC = 1,
60 FIP_OP_LS = 2,
61 FIP_OP_CTRL = 3,
62 FIP_OP_VLAN = 4,
63 FIP_OP_VENDOR_MIN = 0xfff8,
64 FIP_OP_VENDOR_MAX = 0xfffe,
65};
66
67
68
69
70enum fip_disc_subcode {
71 FIP_SC_SOL = 1,
72 FIP_SC_ADV = 2,
73};
74
75
76
77
78enum fip_trans_subcode {
79 FIP_SC_REQ = 1,
80 FIP_SC_REP = 2,
81};
82
83
84
85
86enum fip_reset_subcode {
87 FIP_SC_KEEP_ALIVE = 1,
88 FIP_SC_CLR_VLINK = 2,
89};
90
91
92
93
94enum fip_vlan_subcode {
95 FIP_SC_VL_REQ = 1,
96 FIP_SC_VL_REP = 2,
97};
98
99
100
101
102enum fip_flag {
103 FIP_FL_FPMA = 0x8000,
104 FIP_FL_SPMA = 0x4000,
105 FIP_FL_AVAIL = 0x0004,
106 FIP_FL_SOL = 0x0002,
107 FIP_FL_FPORT = 0x0001,
108};
109
110
111
112
113struct fip_desc {
114 __u8 fip_dtype;
115 __u8 fip_dlen;
116};
117
118enum fip_desc_type {
119 FIP_DT_PRI = 1,
120 FIP_DT_MAC = 2,
121 FIP_DT_MAP_OUI = 3,
122 FIP_DT_NAME = 4,
123 FIP_DT_FAB = 5,
124 FIP_DT_FCOE_SIZE = 6,
125 FIP_DT_FLOGI = 7,
126 FIP_DT_FDISC = 8,
127 FIP_DT_LOGO = 9,
128 FIP_DT_ELP = 10,
129 FIP_DT_VN_ID = 11,
130 FIP_DT_FKA = 12,
131 FIP_DT_VENDOR = 13,
132 FIP_DT_VLAN = 14,
133 FIP_DT_LIMIT,
134 FIP_DT_VENDOR_BASE = 128,
135};
136
137
138
139
140struct fip_pri_desc {
141 struct fip_desc fd_desc;
142 __u8 fd_resvd;
143 __u8 fd_pri;
144} __attribute__((packed));
145
146
147
148
149struct fip_mac_desc {
150 struct fip_desc fd_desc;
151 __u8 fd_mac[ETH_ALEN];
152} __attribute__((packed));
153
154
155
156
157struct fip_map_desc {
158 struct fip_desc fd_desc;
159 __u8 fd_resvd[3];
160 __u8 fd_map[3];
161} __attribute__((packed));
162
163
164
165
166struct fip_wwn_desc {
167 struct fip_desc fd_desc;
168 __u8 fd_resvd[2];
169 __be64 fd_wwn;
170} __attribute__((packed));
171
172
173
174
175struct fip_fab_desc {
176 struct fip_desc fd_desc;
177 __be16 fd_vfid;
178 __u8 fd_resvd;
179 __u8 fd_map[3];
180 __be64 fd_wwn;
181} __attribute__((packed));
182
183
184
185
186struct fip_size_desc {
187 struct fip_desc fd_desc;
188 __be16 fd_size;
189} __attribute__((packed));
190
191
192
193
194
195
196struct fip_encaps {
197 struct fip_desc fd_desc;
198 __u8 fd_resvd[2];
199} __attribute__((packed));
200
201
202
203
204struct fip_vn_desc {
205 struct fip_desc fd_desc;
206 __u8 fd_mac[ETH_ALEN];
207 __u8 fd_resvd;
208 __u8 fd_fc_id[3];
209 __be64 fd_wwpn;
210} __attribute__((packed));
211
212
213
214
215struct fip_fka_desc {
216 struct fip_desc fd_desc;
217 __u8 fd_resvd[2];
218 __be32 fd_fka_period;
219} __attribute__((packed));
220
221
222
223
224struct fip_vendor_desc {
225 struct fip_desc fd_desc;
226 __u8 fd_resvd[2];
227 __u8 fd_vendor_id[8];
228} __attribute__((packed));
229
230#endif
231