/* Macro, used on received payloads, to return the descriptor length */ #define FC_TLV_DESC_SZ_FROM_LENGTH(tlv) \
(__be32_to_cpu((tlv)->desc_len) + FC_TLV_DESC_HDR_SZ)
/* *ELS_LOGO-processorfabriclogout.
*/ struct fc_els_logo {
__u8 fl_cmd; /* command code */
__u8 fl_zero[3]; /* specified as zero - part of cmd */
__u8 fl_resvd; /* reserved */
__u8 fl_n_port_id[3];/* N port ID */
__be64 fl_n_port_wwn; /* port name */
};
/* *ELS_RTV-readtimeoutvalue.
*/ struct fc_els_rtv {
__u8 rtv_cmd; /* command code 0x0e */
__u8 rtv_zero[3]; /* specified as zero - part of cmd */
};
/* *LS_ACCforELS_RTV-readtimeoutvalue.
*/ struct fc_els_rtv_acc {
__u8 rtv_cmd; /* command code 0x02 */
__u8 rtv_zero[3]; /* specified as zero - part of cmd */
__be32 rtv_r_a_tov; /* resource allocation timeout value */
__be32 rtv_e_d_tov; /* error detection timeout value */
__be32 rtv_toq; /* timeout qualifier (see below) */
};
/* *rtv_toqbits.
*/ #define FC_ELS_RTV_EDRES (1 << 26) /* E_D_TOV resolution is nS else mS */ #define FC_ELS_RTV_RTTOV (1 << 19) /* R_T_TOV is 100 uS else 100 mS */
enum fc_els_rscn_addr_fmt {
ELS_ADDR_FMT_PORT = 0, /* rscn_fid is a port address */
ELS_ADDR_FMT_AREA = 1, /* rscn_fid is a area address */
ELS_ADDR_FMT_DOM = 2, /* rscn_fid is a domain address */
ELS_ADDR_FMT_FAB = 3, /* anything on fabric may have changed */
};
/* *NodeIdentificationDataformats(rnid_fmt)
*/ enum fc_els_rnid_fmt {
ELS_RNIDF_NONE = 0, /* no specific identification data */
ELS_RNIDF_GEN = 0xdf, /* general topology discovery format */
};
/* *ELS_RNIDresponse.
*/ struct fc_els_rnid_resp {
__u8 rnid_cmd; /* response code (LS_ACC) */
__u8 rnid_resv[3]; /* reserved */
__u8 rnid_fmt; /* data format */
__u8 rnid_cid_len; /* common ID data length */
__u8 rnid_resv2; /* reserved */
__u8 rnid_sid_len; /* specific ID data length */
};
struct fc_els_rnid_cid {
__be64 rnid_wwpn; /* N port name */
__be64 rnid_wwnn; /* node name */
};
struct fc_els_rnid_gen {
__u8 rnid_vend_id[16]; /* vendor-unique ID */
__be32 rnid_atype; /* associated type (see below) */
__be32 rnid_phys_port; /* physical port number */
__be32 rnid_att_nodes; /* number of attached nodes */
__u8 rnid_node_mgmt; /* node management (see below) */
__u8 rnid_ip_ver; /* IP version (see below) */
__be16 rnid_prot_port; /* UDP / TCP port number */
__be32 rnid_ip_addr[4]; /* IP address */
__u8 rnid_resvd[2]; /* reserved */
__be16 rnid_vend_spec; /* vendor-specific field */
};
enum fc_els_rnid_atype {
ELS_RNIDA_UNK = 0x01, /* unknown */
ELS_RNIDA_OTHER = 0x02, /* none of the following */
ELS_RNIDA_HUB = 0x03,
ELS_RNIDA_SWITCH = 0x04,
ELS_RNIDA_GATEWAY = 0x05,
ELS_RNIDA_CONV = 0x06, /* Obsolete, do not use this value */
ELS_RNIDA_HBA = 0x07, /* Obsolete, do not use this value */
ELS_RNIDA_PROXY = 0x08, /* Obsolete, do not use this value */
ELS_RNIDA_STORAGE = 0x09,
ELS_RNIDA_HOST = 0x0a,
ELS_RNIDA_SUBSYS = 0x0b, /* storage subsystem (e.g., RAID) */
ELS_RNIDA_ACCESS = 0x0e, /* access device (e.g. media changer) */
ELS_RNIDA_NAS = 0x11, /* NAS server */
ELS_RNIDA_BRIDGE = 0x12, /* bridge */
ELS_RNIDA_VIRT = 0x13, /* virtualization device */
ELS_RNIDA_MF = 0xff, /* multifunction device (bits below) */
ELS_RNIDA_MF_HUB = 1UL << 31, /* hub */
ELS_RNIDA_MF_SW = 1UL << 30, /* switch */
ELS_RNIDA_MF_GW = 1UL << 29, /* gateway */
ELS_RNIDA_MF_ST = 1UL << 28, /* storage */
ELS_RNIDA_MF_HOST = 1UL << 27, /* host */
ELS_RNIDA_MF_SUB = 1UL << 26, /* storage subsystem */
ELS_RNIDA_MF_ACC = 1UL << 25, /* storage access dev */
ELS_RNIDA_MF_WDM = 1UL << 24, /* wavelength division mux */
ELS_RNIDA_MF_NAS = 1UL << 23, /* NAS server */
ELS_RNIDA_MF_BR = 1UL << 22, /* bridge */
ELS_RNIDA_MF_VIRT = 1UL << 21, /* virtualization device */
};
enum fc_els_rnid_ipver {
ELS_RNIDIP_NONE = 0, /* no IP support or node mgmt. */
ELS_RNIDIP_V4 = 1, /* IPv4 */
ELS_RNIDIP_V6 = 2, /* IPv6 */
};
/* *ELSRPL-ReadPortList.
*/ struct fc_els_rpl {
__u8 rpl_cmd; /* command */
__u8 rpl_resv[5]; /* reserved - must be zero */
__be16 rpl_max_size; /* maximum response size or zero */
__u8 rpl_resv1; /* reserved - must be zero */
__u8 rpl_index[3]; /* starting index */
};
/* *PortnumberblockinRPLresponse.
*/ struct fc_els_pnb {
__be32 pnb_phys_pn; /* physical port number */
__u8 pnb_resv; /* reserved */
__u8 pnb_port_id[3]; /* port ID */
__be64 pnb_wwpn; /* port name */
};
/* *RPLLS_ACCresponse.
*/ struct fc_els_rpl_resp {
__u8 rpl_cmd; /* ELS_LS_ACC */
__u8 rpl_resv1; /* reserved - must be zero */
__be16 rpl_plen; /* payload length */
__u8 rpl_resv2; /* reserved - must be zero */
__u8 rpl_llen[3]; /* list length */
__u8 rpl_resv3; /* reserved - must be zero */
__u8 rpl_index[3]; /* starting index */ struct fc_els_pnb rpl_pnb[1]; /* variable number of PNBs */
};
/* *LinkErrorStatusBlock.
*/ struct fc_els_lesb {
__be32 lesb_link_fail; /* link failure count */
__be32 lesb_sync_loss; /* loss of synchronization count */
__be32 lesb_sig_loss; /* loss of signal count */
__be32 lesb_prim_err; /* primitive sequence error count */
__be32 lesb_inv_word; /* invalid transmission word count */
__be32 lesb_inv_crc; /* invalid CRC count */
};
/* *ELSRPS-ReadPortStatusBlockrequest.
*/ struct fc_els_rps {
__u8 rps_cmd; /* command */
__u8 rps_resv[2]; /* reserved - must be zero */
__u8 rps_flag; /* flag - see below */
__be64 rps_port_spec; /* port selection */
};
enum fc_els_rps_flag {
FC_ELS_RPS_DID = 0x00, /* port identified by D_ID of req. */
FC_ELS_RPS_PPN = 0x01, /* port_spec is physical port number */
FC_ELS_RPS_WWPN = 0x02, /* port_spec is port WWN */
};
/* *ELSRPSLS_ACCresponse.
*/ struct fc_els_rps_resp {
__u8 rps_cmd; /* command - LS_ACC */
__u8 rps_resv[2]; /* reserved - must be zero */
__u8 rps_flag; /* flag - see below */
__u8 rps_resv2[2]; /* reserved */
__be16 rps_status; /* port status - see below */ struct fc_els_lesb rps_lesb; /* link error status block */
};
enum fc_els_rps_resp_status {
FC_ELS_RPS_PTP = 1 << 5, /* point-to-point connection */
FC_ELS_RPS_LOOP = 1 << 4, /* loop mode */
FC_ELS_RPS_FAB = 1 << 3, /* fabric present */
FC_ELS_RPS_NO_SIG = 1 << 2, /* loss of signal */
FC_ELS_RPS_NO_SYNC = 1 << 1, /* loss of synchronization */
FC_ELS_RPS_RESET = 1 << 0, /* in link reset protocol */
};
/* *ELSLIRR-LinkIncidentRecordRegistrationrequest.
*/ struct fc_els_lirr {
__u8 lirr_cmd; /* command */
__u8 lirr_resv[3]; /* reserved - must be zero */
__u8 lirr_func; /* registration function */
__u8 lirr_fmt; /* FC-4 type of RLIR requested */
__u8 lirr_resv2[2]; /* reserved - must be zero */
};
/* *ELSRLS-ReadLinkErrorStatusBlockrequest.
*/ struct fc_els_rls {
__u8 rls_cmd; /* command */
__u8 rls_resv[4]; /* reserved - must be zero */
__u8 rls_port_id[3]; /* port ID */
};
/* *ELSRLSLS_ACCResponse.
*/ struct fc_els_rls_resp {
__u8 rls_cmd; /* ELS_LS_ACC */
__u8 rls_resv[3]; /* reserved - must be zero */ struct fc_els_lesb rls_lesb; /* link error status block */
};
/* *ELSRLIR-RegisteredLinkIncidentReport. *ThisisfollowedbytheCLIRandtheCLID,describedbelow.
*/ struct fc_els_rlir {
__u8 rlir_cmd; /* command */
__u8 rlir_resv[3]; /* reserved - must be zero */
__u8 rlir_fmt; /* format (FC4-type if type specific) */
__u8 rlir_clr_len; /* common link incident record length */
__u8 rlir_cld_len; /* common link incident desc. length */
__u8 rlir_slr_len; /* spec. link incident record length */
};
/* *CLIR-CommonLinkIncidentRecordData.-SentviaRLIR.
*/ struct fc_els_clir {
__be64 clir_wwpn; /* incident port name */
__be64 clir_wwnn; /* incident port node name */
__u8 clir_port_type; /* incident port type */
__u8 clir_port_id[3]; /* incident port ID */
__be64 clir_conn_wwpn; /* connected port name */
__be64 clir_conn_wwnn; /* connected node name */
__be64 clir_fab_name; /* fabric name */
__be32 clir_phys_port; /* physical port number */
__be32 clir_trans_id; /* transaction ID */
__u8 clir_resv[3]; /* reserved */
__u8 clir_ts_fmt; /* time stamp format */
__be64 clir_timestamp; /* time stamp */
};
/* *CLIRclir_ts_fmt-timestampformatvalues.
*/ enum fc_els_clir_ts_fmt {
ELS_CLIR_TS_UNKNOWN = 0, /* time stamp field unknown */
ELS_CLIR_TS_SEC_FRAC = 1, /* time in seconds and fractions */
ELS_CLIR_TS_CSU = 2, /* time in clock synch update format */
};
/* *CLIDincidentqualifierflags.
*/ enum fc_els_clid_iq {
ELS_CLID_SWITCH = 0x20, /* incident port is a switch node */
ELS_CLID_E_PORT = 0x10, /* incident is an ISL (E) port */
ELS_CLID_SEV_MASK = 0x0c, /* severity 2-bit field mask */
ELS_CLID_SEV_INFO = 0x00, /* report is informational */
ELS_CLID_SEV_INOP = 0x08, /* link not operational */
ELS_CLID_SEV_DEG = 0x04, /* link degraded but operational */
ELS_CLID_LASER = 0x02, /* subassembly is a laser */
ELS_CLID_FRU = 0x01, /* format can identify a FRU */
};
/* *LinkIntegrityNotificationDescriptor
*/ struct fc_fn_li_desc {
__be32 desc_tag; /* Descriptor Tag (0x00020001) */
__be32 desc_len; /* Length of Descriptor (in bytes). *Sizeofdescriptorexcluding *desc_taganddesc_lenfields.
*/
__be64 detecting_wwpn; /* Port Name that detected event */
__be64 attached_wwpn; /* Port Name of device attached to *detectingPortName
*/
__be16 event_type; /* see enum fc_fpin_li_event_types */
__be16 event_modifier; /* Implementation specific value *describingtheeventtype
*/
__be32 event_threshold;/* duration in ms of the link *integritydetectioncycle
*/
__be32 event_count; /* minimum number of event *occurrencesduringtheevent *thresholdtocaausetheLIevent
*/
__be32 pname_count; /* number of portname_list elements */
__be64 pname_list[]; /* list of N_Port_Names accessible *throughtheattachedport
*/
};
/* *DeliveryNotificationDescriptor
*/ struct fc_fn_deli_desc {
__be32 desc_tag; /* Descriptor Tag (0x00020002) */
__be32 desc_len; /* Length of Descriptor (in bytes). *Sizeofdescriptorexcluding *desc_taganddesc_lenfields.
*/
__be64 detecting_wwpn; /* Port Name that detected event */
__be64 attached_wwpn; /* Port Name of device attached to *detectingPortName
*/
__be32 deli_reason_code;/* see enum fc_fpin_deli_event_types */
};
/* *PeerCongestionNotificationDescriptor
*/ struct fc_fn_peer_congn_desc {
__be32 desc_tag; /* Descriptor Tag (0x00020003) */
__be32 desc_len; /* Length of Descriptor (in bytes). *Sizeofdescriptorexcluding *desc_taganddesc_lenfields.
*/
__be64 detecting_wwpn; /* Port Name that detected event */
__be64 attached_wwpn; /* Port Name of device attached to *detectingPortName
*/
__be16 event_type; /* see enum fc_fpin_congn_event_types */
__be16 event_modifier; /* Implementation specific value *describingtheeventtype
*/
__be32 event_period; /* duration (ms) of the detected *congestionevent
*/
__be32 pname_count; /* number of portname_list elements */
__be64 pname_list[]; /* list of N_Port_Names accessible *throughtheattachedport
*/
};
/* *CongestionNotificationDescriptor
*/ struct fc_fn_congn_desc {
__be32 desc_tag; /* Descriptor Tag (0x00020004) */
__be32 desc_len; /* Length of Descriptor (in bytes). *Sizeofdescriptorexcluding *desc_taganddesc_lenfields.
*/
__be16 event_type; /* see enum fc_fpin_congn_event_types */
__be16 event_modifier; /* Implementation specific value *describingtheeventtype
*/
__be32 event_period; /* duration (ms) of the detected *congestionevent
*/
__u8 severity; /* command */
__u8 resv[3]; /* reserved - must be zero */
};
/* *ELS_FPIN-FabricPerformanceImpactNotification
*/ struct fc_els_fpin {
__u8 fpin_cmd; /* command (0x16) */
__u8 fpin_zero[3]; /* specified as zero - part of cmd */
__be32 desc_len; /* Length of Descriptor List (in bytes). *SizeofELSexcludingfpin_cmd, *fpin_zeroanddesc_lenfields.
*/ struct fc_tlv_desc fpin_desc[]; /* Descriptor list */
};
/* Diagnostic Function Descriptor - FPIN Registration */ struct fc_df_desc_fpin_reg {
__be32 desc_tag; /* FPIN Registration (0x00030001) */
__be32 desc_len; /* Length of Descriptor (in bytes). *Sizeofdescriptorexcluding *desc_taganddesc_lenfields.
*/
__be32 count; /* Number of desc_tags elements */
__be32 desc_tags[]; /* Array of Descriptor Tags. *Eachtagindicatesafunction *supportedbytheN_Port(request) *orbytheN_PortandFabric *Controller(reply;maybeasubset *oftherequest). *SeeELS_FN_DTAG_xxxfortagvalues.
*/
};
/* *ELS_RDF-RegisterDiagnosticFunctions
*/ struct fc_els_rdf {
__u8 fpin_cmd; /* command (0x19) */
__u8 fpin_zero[3]; /* specified as zero - part of cmd */
__be32 desc_len; /* Length of Descriptor List (in bytes). *SizeofELSexcludingfpin_cmd, *fpin_zeroanddesc_lenfields.
*/ struct fc_tlv_desc desc[]; /* Descriptor list */
};
struct fc_diag_cg_sig_freq {
__be16 count; /* Time between signals *note:upper6bitsrsvd
*/
__be16 units; /* Time unit for count *note:upper12bitsrsvd
*/
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.