0001
0002
0003
0004
0005 #ifndef _FC_FIP_H_
0006 #define _FC_FIP_H_
0007
0008 #include <scsi/fc/fc_ns.h>
0009
0010
0011
0012
0013
0014
0015
0016 #define FIP_DEF_PRI 128
0017 #define FIP_DEF_FC_MAP 0x0efc00
0018 #define FIP_DEF_FKA 8000
0019 #define FIP_VN_KA_PERIOD 90000
0020 #define FIP_FCF_FUZZ 100
0021
0022
0023
0024
0025 #define FIP_VN_FC_MAP 0x0efd00
0026 #define FIP_VN_PROBE_WAIT 100
0027 #define FIP_VN_ANN_WAIT 400
0028 #define FIP_VN_RLIM_INT 10000
0029 #define FIP_VN_RLIM_COUNT 10
0030 #define FIP_VN_BEACON_INT 8000
0031 #define FIP_VN_BEACON_FUZZ 100
0032
0033
0034
0035
0036 #define FIP_ALL_FCOE_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 0 })
0037 #define FIP_ALL_ENODE_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 1 })
0038 #define FIP_ALL_FCF_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 2 })
0039 #define FIP_ALL_VN2VN_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 4 })
0040 #define FIP_ALL_P2P_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 5 })
0041
0042 #define FIP_VER 1
0043
0044 struct fip_header {
0045 __u8 fip_ver;
0046 __u8 fip_resv1;
0047 __be16 fip_op;
0048 __u8 fip_resv2;
0049 __u8 fip_subcode;
0050 __be16 fip_dl_len;
0051 __be16 fip_flags;
0052 } __attribute__((packed));
0053
0054 #define FIP_VER_SHIFT 4
0055 #define FIP_VER_ENCAPS(v) ((v) << FIP_VER_SHIFT)
0056 #define FIP_VER_DECAPS(v) ((v) >> FIP_VER_SHIFT)
0057 #define FIP_BPW 4
0058
0059
0060
0061
0062 enum fip_opcode {
0063 FIP_OP_DISC = 1,
0064 FIP_OP_LS = 2,
0065 FIP_OP_CTRL = 3,
0066 FIP_OP_VLAN = 4,
0067 FIP_OP_VN2VN = 5,
0068 FIP_OP_VENDOR_MIN = 0xfff8,
0069 FIP_OP_VENDOR_MAX = 0xfffe,
0070 };
0071
0072
0073
0074
0075 enum fip_disc_subcode {
0076 FIP_SC_SOL = 1,
0077 FIP_SC_ADV = 2,
0078 };
0079
0080
0081
0082
0083 enum fip_trans_subcode {
0084 FIP_SC_REQ = 1,
0085 FIP_SC_REP = 2,
0086 };
0087
0088
0089
0090
0091 enum fip_reset_subcode {
0092 FIP_SC_KEEP_ALIVE = 1,
0093 FIP_SC_CLR_VLINK = 2,
0094 };
0095
0096
0097
0098
0099 enum fip_vlan_subcode {
0100 FIP_SC_VL_REQ = 1,
0101 FIP_SC_VL_NOTE = 2,
0102 FIP_SC_VL_VN2VN_NOTE = 3,
0103 };
0104
0105
0106
0107
0108 enum fip_vn2vn_subcode {
0109 FIP_SC_VN_PROBE_REQ = 1,
0110 FIP_SC_VN_PROBE_REP = 2,
0111 FIP_SC_VN_CLAIM_NOTIFY = 3,
0112 FIP_SC_VN_CLAIM_REP = 4,
0113 FIP_SC_VN_BEACON = 5,
0114 };
0115
0116
0117
0118
0119 enum fip_flag {
0120 FIP_FL_FPMA = 0x8000,
0121 FIP_FL_SPMA = 0x4000,
0122 FIP_FL_FCF = 0x0020,
0123 FIP_FL_FDF = 0x0010,
0124 FIP_FL_REC_OR_P2P = 0x0008,
0125 FIP_FL_AVAIL = 0x0004,
0126 FIP_FL_SOL = 0x0002,
0127 FIP_FL_FPORT = 0x0001,
0128 };
0129
0130
0131
0132
0133 struct fip_desc {
0134 __u8 fip_dtype;
0135 __u8 fip_dlen;
0136 };
0137
0138 enum fip_desc_type {
0139 FIP_DT_PRI = 1,
0140 FIP_DT_MAC = 2,
0141 FIP_DT_MAP_OUI = 3,
0142 FIP_DT_NAME = 4,
0143 FIP_DT_FAB = 5,
0144 FIP_DT_FCOE_SIZE = 6,
0145 FIP_DT_FLOGI = 7,
0146 FIP_DT_FDISC = 8,
0147 FIP_DT_LOGO = 9,
0148 FIP_DT_ELP = 10,
0149 FIP_DT_VN_ID = 11,
0150 FIP_DT_FKA = 12,
0151 FIP_DT_VENDOR = 13,
0152 FIP_DT_VLAN = 14,
0153 FIP_DT_FC4F = 15,
0154 FIP_DT_LIMIT,
0155 FIP_DT_NON_CRITICAL = 128,
0156 FIP_DT_CLR_VLINKS = 128,
0157 FIP_DT_VENDOR_BASE = 241,
0158 };
0159
0160
0161
0162
0163 struct fip_pri_desc {
0164 struct fip_desc fd_desc;
0165 __u8 fd_resvd;
0166 __u8 fd_pri;
0167 } __attribute__((packed));
0168
0169
0170
0171
0172 struct fip_mac_desc {
0173 struct fip_desc fd_desc;
0174 __u8 fd_mac[ETH_ALEN];
0175 } __attribute__((packed));
0176
0177
0178
0179
0180 struct fip_map_desc {
0181 struct fip_desc fd_desc;
0182 __u8 fd_resvd[3];
0183 __u8 fd_map[3];
0184 } __attribute__((packed));
0185
0186
0187
0188
0189 struct fip_wwn_desc {
0190 struct fip_desc fd_desc;
0191 __u8 fd_resvd[2];
0192 __be64 fd_wwn;
0193 } __attribute__((packed));
0194
0195
0196
0197
0198 struct fip_fab_desc {
0199 struct fip_desc fd_desc;
0200 __be16 fd_vfid;
0201 __u8 fd_resvd;
0202 __u8 fd_map[3];
0203 __be64 fd_wwn;
0204 } __attribute__((packed));
0205
0206
0207
0208
0209 struct fip_size_desc {
0210 struct fip_desc fd_desc;
0211 __be16 fd_size;
0212 } __attribute__((packed));
0213
0214
0215
0216
0217
0218
0219 struct fip_encaps {
0220 struct fip_desc fd_desc;
0221 __u8 fd_resvd[2];
0222 } __attribute__((packed));
0223
0224
0225
0226
0227 struct fip_vn_desc {
0228 struct fip_desc fd_desc;
0229 __u8 fd_mac[ETH_ALEN];
0230 __u8 fd_resvd;
0231 __u8 fd_fc_id[3];
0232 __be64 fd_wwpn;
0233 } __attribute__((packed));
0234
0235
0236
0237
0238 struct fip_fka_desc {
0239 struct fip_desc fd_desc;
0240 __u8 fd_resvd;
0241 __u8 fd_flags;
0242 __be32 fd_fka_period;
0243 } __attribute__((packed));
0244
0245
0246
0247
0248 enum fip_fka_flags {
0249 FIP_FKA_ADV_D = 0x01,
0250 };
0251
0252
0253
0254
0255
0256
0257 struct fip_vlan_desc {
0258 struct fip_desc fd_desc;
0259 __be16 fd_vlan;
0260 } __attribute__((packed));
0261
0262
0263
0264
0265 struct fip_fc4_feat {
0266 struct fip_desc fd_desc;
0267 __u8 fd_resvd[2];
0268 struct fc_ns_fts fd_fts;
0269 struct fc_ns_ff fd_ff;
0270 } __attribute__((packed));
0271
0272
0273
0274
0275 struct fip_vendor_desc {
0276 struct fip_desc fd_desc;
0277 __u8 fd_resvd[2];
0278 __u8 fd_vendor_id[8];
0279 } __attribute__((packed));
0280
0281 #endif