/* * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. * All rights reserved * www.brocade.com * * Linux driver for Brocade Fibre Channel Host Bus Adapter. * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) Version 2 as * published by the Free Software Foundation * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. */ #ifndef __FC_SP_H__ #define __FC_SP_H__ #include #pragma pack(1) enum auth_els_flags{ FC_AUTH_ELS_MORE_FRAGS_FLAG = 0x80, /*! bit-7. More Fragments * Follow */ FC_AUTH_ELS_CONCAT_FLAG = 0x40, /*! bit-6. Concatenation Flag */ FC_AUTH_ELS_SEQ_NUM_FLAG = 0x01 /*! bit-0. Sequence Number */ }; enum auth_msg_codes{ FC_AUTH_MC_AUTH_RJT = 0x0A, /*! Auth Reject */ FC_AUTH_MC_AUTH_NEG = 0x0B, /*! Auth Negotiate */ FC_AUTH_MC_AUTH_DONE = 0x0C, /*! Auth Done */ FC_AUTH_MC_DHCHAP_CHAL = 0x10, /*! DHCHAP Challenge */ FC_AUTH_MC_DHCHAP_REPLY = 0x11, /*! DHCHAP Reply */ FC_AUTH_MC_DHCHAP_SUCC = 0x12, /*! DHCHAP Success */ FC_AUTH_MC_FCAP_REQ = 0x13, /*! FCAP Request */ FC_AUTH_MC_FCAP_ACK = 0x14, /*! FCAP Acknowledge */ FC_AUTH_MC_FCAP_CONF = 0x15, /*! FCAP Confirm */ FC_AUTH_MC_FCPAP_INIT = 0x16, /*! FCPAP Init */ FC_AUTH_MC_FCPAP_ACC = 0x17, /*! FCPAP Accept */ FC_AUTH_MC_FCPAP_COMP = 0x18, /*! FCPAP Complete */ FC_AUTH_MC_IKE_SA_INIT = 0x22, /*! IKE SA INIT */ FC_AUTH_MC_IKE_SA_AUTH = 0x23, /*! IKE SA Auth */ FC_AUTH_MC_IKE_CREATE_CHILD_SA = 0x24, /*! IKE Create Child SA */ FC_AUTH_MC_IKE_INFO = 0x25, /*! IKE informational */ }; enum auth_proto_version{ FC_AUTH_PROTO_VER_1 = 1, /*! Protocol Version 1 */ }; enum { FC_AUTH_ELS_COMMAND_CODE = 0x90,/*! Authentication ELS Command code */ FC_AUTH_PROTO_PARAM_LEN_SZ = 4, /*! Size of Proto Parameter Len Field */ FC_AUTH_PROTO_PARAM_VAL_SZ = 4, /*! Size of Proto Parameter Val Field */ FC_MAX_AUTH_SECRET_LEN = 256, /*! Maximum secret string length */ FC_AUTH_NUM_USABLE_PROTO_LEN_SZ = 4, /*! Size of usable protocols field */ FC_AUTH_RESP_VALUE_LEN_SZ = 4, /*! Size of response value length */ FC_MAX_CHAP_KEY_LEN = 256, /*! Maximum md5 digest length */ FC_MAX_AUTH_RETRIES = 3, /*! Maximum number of retries */ FC_MD5_DIGEST_LEN = 16, /*! MD5 digest length */ FC_SHA1_DIGEST_LEN = 20, /*! SHA1 digest length */ FC_MAX_DHG_SUPPORTED = 1, /*! Maximum DH Groups supported */ FC_MAX_ALG_SUPPORTED = 1, /*! Maximum algorithms supported */ FC_MAX_PROTO_SUPPORTED = 1, /*! Maximum protocols supported */ FC_START_TXN_ID = 2, /*! Starting transaction ID */ }; enum auth_proto_id{ FC_AUTH_PROTO_DHCHAP = 0x00000001, FC_AUTH_PROTO_FCAP = 0x00000002, FC_AUTH_PROTO_FCPAP = 0x00000003, FC_AUTH_PROTO_IKEv2 = 0x00000004, FC_AUTH_PROTO_IKEv2_AUTH = 0x00000005, }; struct auth_name_s{ u16 name_tag; /*! Name Tag = 1 for Authentication */ u16 name_len; /*! Name Length = 8 for Authentication */ wwn_t name; /*! Name. TODO - is this PWWN */ }; enum auth_hash_func{ FC_AUTH_HASH_FUNC_MD5 = 0x00000005, FC_AUTH_HASH_FUNC_SHA_1 = 0x00000006, }; enum auth_dh_gid{ FC_AUTH_DH_GID_0_DHG_NULL = 0x00000000, FC_AUTH_DH_GID_1_DHG_1024 = 0x00000001, FC_AUTH_DH_GID_2_DHG_1280 = 0x00000002, FC_AUTH_DH_GID_3_DHG_1536 = 0x00000003, FC_AUTH_DH_GID_4_DHG_2048 = 0x00000004, FC_AUTH_DH_GID_6_DHG_3072 = 0x00000006, FC_AUTH_DH_GID_7_DHG_4096 = 0x00000007, FC_AUTH_DH_GID_8_DHG_6144 = 0x00000008, FC_AUTH_DH_GID_9_DHG_8192 = 0x00000009, }; struct auth_els_msg_s { u8 auth_els_code; /* Authentication ELS Code (0x90) */ u8 auth_els_flag; /* Authentication ELS Flags */ u8 auth_msg_code; /* Authentication Message Code */ u8 proto_version; /* Protocol Version */ u32 msg_len; /* Message Length */ u32 trans_id; /* Transaction Identifier (T_ID) */ /* Msg payload follows... */ }; enum auth_neg_param_tags { FC_AUTH_NEG_DHCHAP_HASHLIST = 0x0001, FC_AUTH_NEG_DHCHAP_DHG_ID_LIST = 0x0002, }; struct dhchap_param_format_s { u16 tag; /*! Parameter Tag. See * auth_neg_param_tags_t */ u16 word_cnt; /* followed by variable length parameter value... */ }; struct auth_proto_params_s { u32 proto_param_len; u32 proto_id; /* * Followed by variable length Protocol specific parameters. DH-CHAP * uses dhchap_param_format_t */ }; struct auth_neg_msg_s { struct auth_name_s auth_ini_name; u32 usable_auth_protos; struct auth_proto_params_s proto_params[1]; /*! (1..usable_auth_proto) * protocol params */ }; struct auth_dh_val_s { u32 dh_val_len; u32 dh_val[1]; }; struct auth_dhchap_chal_msg_s { struct auth_els_msg_s hdr; struct auth_name_s auth_responder_name; /* TODO VRK - is auth_name_t * type OK? */ u32 hash_id; u32 dh_grp_id; u32 chal_val_len; char chal_val[1]; /* ...followed by variable Challenge length/value and DH length/value */ }; enum auth_rjt_codes { FC_AUTH_RJT_CODE_AUTH_FAILURE = 0x01, FC_AUTH_RJT_CODE_LOGICAL_ERR = 0x02, }; enum auth_rjt_code_exps { FC_AUTH_CEXP_AUTH_MECH_NOT_USABLE = 0x01, FC_AUTH_CEXP_DH_GROUP_NOT_USABLE = 0x02, FC_AUTH_CEXP_HASH_FUNC_NOT_USABLE = 0x03, FC_AUTH_CEXP_AUTH_XACT_STARTED = 0x04, FC_AUTH_CEXP_AUTH_FAILED = 0x05, FC_AUTH_CEXP_INCORRECT_PLD = 0x06, FC_AUTH_CEXP_INCORRECT_PROTO_MSG = 0x07, FC_AUTH_CEXP_RESTART_AUTH_PROTO = 0x08, FC_AUTH_CEXP_AUTH_CONCAT_NOT_SUPP = 0x09, FC_AUTH_CEXP_PROTO_VER_NOT_SUPP = 0x0A, }; enum auth_status { FC_AUTH_STATE_INPROGRESS = 0, /*! authentication in progress */ FC_AUTH_STATE_FAILED = 1, /*! authentication failed */ FC_AUTH_STATE_SUCCESS = 2 /*! authentication successful */ }; struct auth_rjt_msg_s { struct auth_els_msg_s hdr; u8 reason_code; u8 reason_code_exp; u8 rsvd[2]; }; struct auth_dhchap_neg_msg_s { struct auth_els_msg_s hdr; struct auth_neg_msg_s nego; }; struct auth_dhchap_reply_msg_s { struct auth_els_msg_s hdr; /* * followed by response value length & Value + DH Value Length & Value */ }; #pragma pack() #endif /* __FC_SP_H__ */