^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright 2008 Cisco Systems, Inc. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #ifndef _FC_FIP_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #define _FC_FIP_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <scsi/fc/fc_ns.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * This version is based on:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * http://www.t11.org/ftp/t11/pub/fc/bb-5/08-543v1.pdf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * and T11 FC-BB-6 13-091v5.pdf (December 2013 VN2VN proposal)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define FIP_DEF_PRI 128 /* default selection priority */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define FIP_DEF_FC_MAP 0x0efc00 /* default FCoE MAP (MAC OUI) value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define FIP_DEF_FKA 8000 /* default FCF keep-alive/advert period (mS) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define FIP_VN_KA_PERIOD 90000 /* required VN_port keep-alive period (mS) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define FIP_FCF_FUZZ 100 /* random time added by FCF (mS) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * VN2VN proposed-standard values.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define FIP_VN_FC_MAP 0x0efd00 /* MAC OUI for VN2VN use */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define FIP_VN_PROBE_WAIT 100 /* interval between VN2VN probes (ms) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define FIP_VN_ANN_WAIT 400 /* interval between VN2VN announcements (ms) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define FIP_VN_RLIM_INT 10000 /* interval between probes when rate limited */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define FIP_VN_RLIM_COUNT 10 /* number of probes before rate limiting */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define FIP_VN_BEACON_INT 8000 /* interval between VN2VN beacons */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define FIP_VN_BEACON_FUZZ 100 /* random time to add to beacon period (ms) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * Multicast MAC addresses. T11-adopted.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define FIP_ALL_FCOE_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 0 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define FIP_ALL_ENODE_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 1 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define FIP_ALL_FCF_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 2 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define FIP_ALL_VN2VN_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 4 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define FIP_ALL_P2P_MACS ((__u8[6]) { 1, 0x10, 0x18, 1, 0, 5 })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define FIP_VER 1 /* version for fip_header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) struct fip_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) __u8 fip_ver; /* upper 4 bits are the version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) __u8 fip_resv1; /* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) __be16 fip_op; /* operation code */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) __u8 fip_resv2; /* reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) __u8 fip_subcode; /* lower 4 bits are sub-code */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) __be16 fip_dl_len; /* length of descriptors in words */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) __be16 fip_flags; /* header flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define FIP_VER_SHIFT 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define FIP_VER_ENCAPS(v) ((v) << FIP_VER_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define FIP_VER_DECAPS(v) ((v) >> FIP_VER_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define FIP_BPW 4 /* bytes per word for lengths */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) * fip_op.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) enum fip_opcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) FIP_OP_DISC = 1, /* discovery, advertisement, etc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) FIP_OP_LS = 2, /* Link Service request or reply */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) FIP_OP_CTRL = 3, /* Keep Alive / Link Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) FIP_OP_VLAN = 4, /* VLAN discovery */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) FIP_OP_VN2VN = 5, /* VN2VN operation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) FIP_OP_VENDOR_MIN = 0xfff8, /* min vendor-specific opcode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) FIP_OP_VENDOR_MAX = 0xfffe, /* max vendor-specific opcode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) * Subcodes for FIP_OP_DISC.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) enum fip_disc_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) FIP_SC_SOL = 1, /* solicitation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) FIP_SC_ADV = 2, /* advertisement */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) * Subcodes for FIP_OP_LS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) enum fip_trans_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) FIP_SC_REQ = 1, /* request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) FIP_SC_REP = 2, /* reply */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) * Subcodes for FIP_OP_RESET.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) enum fip_reset_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) FIP_SC_KEEP_ALIVE = 1, /* keep-alive from VN_Port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) FIP_SC_CLR_VLINK = 2, /* clear virtual link from VF_Port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) * Subcodes for FIP_OP_VLAN.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) enum fip_vlan_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) FIP_SC_VL_REQ = 1, /* vlan request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) FIP_SC_VL_NOTE = 2, /* vlan notification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) FIP_SC_VL_VN2VN_NOTE = 3, /* VN2VN vlan notification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * Subcodes for FIP_OP_VN2VN.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) enum fip_vn2vn_subcode {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) FIP_SC_VN_PROBE_REQ = 1, /* probe request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) FIP_SC_VN_PROBE_REP = 2, /* probe reply */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) FIP_SC_VN_CLAIM_NOTIFY = 3, /* claim notification */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) FIP_SC_VN_CLAIM_REP = 4, /* claim response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) FIP_SC_VN_BEACON = 5, /* beacon */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) * flags in header fip_flags.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) enum fip_flag {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) FIP_FL_FPMA = 0x8000, /* supports FPMA fabric-provided MACs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) FIP_FL_SPMA = 0x4000, /* supports SPMA server-provided MACs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) FIP_FL_FCF = 0x0020, /* originated from a controlling FCF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) FIP_FL_FDF = 0x0010, /* originated from an FDF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) FIP_FL_REC_OR_P2P = 0x0008, /* configured addr or point-to-point */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) FIP_FL_AVAIL = 0x0004, /* available for FLOGI/ELP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) FIP_FL_SOL = 0x0002, /* this is a solicited message */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) FIP_FL_FPORT = 0x0001, /* sent from an F port */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) * Common descriptor header format.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) struct fip_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) __u8 fip_dtype; /* type - see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) __u8 fip_dlen; /* length - in 32-bit words */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) enum fip_desc_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) FIP_DT_PRI = 1, /* priority for forwarder selection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) FIP_DT_MAC = 2, /* MAC address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) FIP_DT_MAP_OUI = 3, /* FC-MAP OUI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) FIP_DT_NAME = 4, /* switch name or node name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) FIP_DT_FAB = 5, /* fabric descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) FIP_DT_FCOE_SIZE = 6, /* max FCoE frame size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) FIP_DT_FLOGI = 7, /* FLOGI request or response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) FIP_DT_FDISC = 8, /* FDISC request or response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) FIP_DT_LOGO = 9, /* LOGO request or response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) FIP_DT_ELP = 10, /* ELP request or response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) FIP_DT_VN_ID = 11, /* VN_Node Identifier */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) FIP_DT_FKA = 12, /* advertisement keep-alive period */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) FIP_DT_VENDOR = 13, /* vendor ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) FIP_DT_VLAN = 14, /* vlan number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) FIP_DT_FC4F = 15, /* FC-4 features */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) FIP_DT_LIMIT, /* max defined desc_type + 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) FIP_DT_NON_CRITICAL = 128, /* First non-critical descriptor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) FIP_DT_CLR_VLINKS = 128, /* Clear virtual links reason code */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) FIP_DT_VENDOR_BASE = 241, /* first vendor-specific desc_type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) * FIP_DT_PRI - priority descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) struct fip_pri_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) __u8 fd_resvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) __u8 fd_pri; /* FCF priority: higher is better */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) * FIP_DT_MAC - MAC address descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) struct fip_mac_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) __u8 fd_mac[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) * FIP_DT_MAP - descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) struct fip_map_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) __u8 fd_resvd[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) __u8 fd_map[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) * FIP_DT_NAME descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) struct fip_wwn_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) __u8 fd_resvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) __be64 fd_wwn; /* 64-bit WWN, unaligned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) * FIP_DT_FAB descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) struct fip_fab_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) __be16 fd_vfid; /* virtual fabric ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) __u8 fd_resvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) __u8 fd_map[3]; /* FC-MAP value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) __be64 fd_wwn; /* fabric name, unaligned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) * FIP_DT_FCOE_SIZE descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) struct fip_size_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) __be16 fd_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) * Descriptor that encapsulates an ELS or ILS frame.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) * The encapsulated frame immediately follows this header, without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) * SOF, EOF, or CRC.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) struct fip_encaps {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) __u8 fd_resvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) * FIP_DT_VN_ID - VN_Node Identifier descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) struct fip_vn_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) __u8 fd_mac[ETH_ALEN];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) __u8 fd_resvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) __u8 fd_fc_id[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) __be64 fd_wwpn; /* port name, unaligned */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) * FIP_DT_FKA - Advertisement keep-alive period.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) struct fip_fka_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) __u8 fd_resvd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) __u8 fd_flags; /* bit0 is fka disable flag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) __be32 fd_fka_period; /* adv./keep-alive period in mS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) * flags for fip_fka_desc.fd_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) enum fip_fka_flags {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) FIP_FKA_ADV_D = 0x01, /* no need for FKA from ENode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) /* FIP_DT_FKA flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) * FIP_DT_VLAN descriptor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) struct fip_vlan_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) __be16 fd_vlan; /* Note: highest 4 bytes are unused */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) * FIP_DT_FC4F - FC-4 features.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) struct fip_fc4_feat {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) __u8 fd_resvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) struct fc_ns_fts fd_fts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) struct fc_ns_ff fd_ff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) * FIP_DT_VENDOR descriptor.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) struct fip_vendor_desc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) struct fip_desc fd_desc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) __u8 fd_resvd[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) __u8 fd_vendor_id[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #endif /* _FC_FIP_H_ */