1*9684SSusan.Gleeson@Sun.COM /* 2*9684SSusan.Gleeson@Sun.COM * CDDL HEADER START 3*9684SSusan.Gleeson@Sun.COM * 4*9684SSusan.Gleeson@Sun.COM * The contents of this file are subject to the terms of the 5*9684SSusan.Gleeson@Sun.COM * Common Development and Distribution License (the "License"). 6*9684SSusan.Gleeson@Sun.COM * You may not use this file except in compliance with the License. 7*9684SSusan.Gleeson@Sun.COM * 8*9684SSusan.Gleeson@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*9684SSusan.Gleeson@Sun.COM * or http://www.opensolaris.org/os/licensing. 10*9684SSusan.Gleeson@Sun.COM * See the License for the specific language governing permissions 11*9684SSusan.Gleeson@Sun.COM * and limitations under the License. 12*9684SSusan.Gleeson@Sun.COM * 13*9684SSusan.Gleeson@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 14*9684SSusan.Gleeson@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*9684SSusan.Gleeson@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 16*9684SSusan.Gleeson@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 17*9684SSusan.Gleeson@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 18*9684SSusan.Gleeson@Sun.COM * 19*9684SSusan.Gleeson@Sun.COM * CDDL HEADER END 20*9684SSusan.Gleeson@Sun.COM */ 21*9684SSusan.Gleeson@Sun.COM 22*9684SSusan.Gleeson@Sun.COM /* 23*9684SSusan.Gleeson@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24*9684SSusan.Gleeson@Sun.COM * Use is subject to license terms. 25*9684SSusan.Gleeson@Sun.COM */ 26*9684SSusan.Gleeson@Sun.COM 27*9684SSusan.Gleeson@Sun.COM #ifndef _SRP_H 28*9684SSusan.Gleeson@Sun.COM #define _SRP_H 29*9684SSusan.Gleeson@Sun.COM 30*9684SSusan.Gleeson@Sun.COM /* 31*9684SSusan.Gleeson@Sun.COM * General SCSI RDMA Protocol generic defines 32*9684SSusan.Gleeson@Sun.COM */ 33*9684SSusan.Gleeson@Sun.COM 34*9684SSusan.Gleeson@Sun.COM #ifdef __cplusplus 35*9684SSusan.Gleeson@Sun.COM extern "C" { 36*9684SSusan.Gleeson@Sun.COM #endif 37*9684SSusan.Gleeson@Sun.COM 38*9684SSusan.Gleeson@Sun.COM /* 39*9684SSusan.Gleeson@Sun.COM * The following defines and structures are based on revision 16A of 40*9684SSusan.Gleeson@Sun.COM * the T10 Project 1415-D SRP Protocol specification. 41*9684SSusan.Gleeson@Sun.COM */ 42*9684SSusan.Gleeson@Sun.COM 43*9684SSusan.Gleeson@Sun.COM /* Protocol revsion information */ 44*9684SSusan.Gleeson@Sun.COM enum { 45*9684SSusan.Gleeson@Sun.COM SRP_PROTOCOL = 0x0108, 46*9684SSusan.Gleeson@Sun.COM SRP_PROTOCOL_VERSION = 0x0001, 47*9684SSusan.Gleeson@Sun.COM SRP_REV_16A_IO_CLASS = 0x0100, 48*9684SSusan.Gleeson@Sun.COM SRP_REV_10_IO_CLASS = 0xFF00, /* Old targets */ 49*9684SSusan.Gleeson@Sun.COM SRP_IO_SUBCLASS = 0x690E 50*9684SSusan.Gleeson@Sun.COM }; 51*9684SSusan.Gleeson@Sun.COM 52*9684SSusan.Gleeson@Sun.COM /* SRP memory descriptors; direct and indirect formats */ 53*9684SSusan.Gleeson@Sun.COM typedef struct srp_direct_desc_s { 54*9684SSusan.Gleeson@Sun.COM uint64_t dd_vaddr; 55*9684SSusan.Gleeson@Sun.COM uint32_t dd_hdl; 56*9684SSusan.Gleeson@Sun.COM uint32_t dd_len; 57*9684SSusan.Gleeson@Sun.COM } srp_direct_desc_t; 58*9684SSusan.Gleeson@Sun.COM 59*9684SSusan.Gleeson@Sun.COM #pragma pack(1) 60*9684SSusan.Gleeson@Sun.COM typedef struct srp_indirect_desc_s { 61*9684SSusan.Gleeson@Sun.COM srp_direct_desc_t id_table; 62*9684SSusan.Gleeson@Sun.COM uint32_t id_len; 63*9684SSusan.Gleeson@Sun.COM srp_direct_desc_t id_desc[1]; 64*9684SSusan.Gleeson@Sun.COM } srp_indirect_desc_t; 65*9684SSusan.Gleeson@Sun.COM #pragma pack() 66*9684SSusan.Gleeson@Sun.COM enum { 67*9684SSusan.Gleeson@Sun.COM SRP_DIRECT_BUFR_DESC = 1 << 1, 68*9684SSusan.Gleeson@Sun.COM SRP_INDIRECT_BUFR_DESC = 1 << 2 69*9684SSusan.Gleeson@Sun.COM }; 70*9684SSusan.Gleeson@Sun.COM 71*9684SSusan.Gleeson@Sun.COM /* General constants */ 72*9684SSusan.Gleeson@Sun.COM enum { 73*9684SSusan.Gleeson@Sun.COM SRP_CDB_SIZE = 16, 74*9684SSusan.Gleeson@Sun.COM SRP_LUN_SIZE = 8, 75*9684SSusan.Gleeson@Sun.COM SRP_PORT_ID_LEN = 16, 76*9684SSusan.Gleeson@Sun.COM SRP_MIN_IU_SIZE = 64 77*9684SSusan.Gleeson@Sun.COM }; 78*9684SSusan.Gleeson@Sun.COM 79*9684SSusan.Gleeson@Sun.COM /* SRP IU types */ 80*9684SSusan.Gleeson@Sun.COM enum { 81*9684SSusan.Gleeson@Sun.COM SRP_IU_LOGIN_REQ = 0x00, 82*9684SSusan.Gleeson@Sun.COM SRP_IU_TASK_MGMT = 0x01, 83*9684SSusan.Gleeson@Sun.COM SRP_IU_CMD = 0x02, 84*9684SSusan.Gleeson@Sun.COM SRP_IU_I_LOGOUT = 0x03, 85*9684SSusan.Gleeson@Sun.COM SRP_IU_LOGIN_RSP = 0xC0, 86*9684SSusan.Gleeson@Sun.COM SRP_IU_RSP = 0xC1, 87*9684SSusan.Gleeson@Sun.COM SRP_IU_LOGIN_REJ = 0xC2, 88*9684SSusan.Gleeson@Sun.COM SRP_IU_T_LOGOUT = 0x80, 89*9684SSusan.Gleeson@Sun.COM SRP_IU_CRED_REQ = 0x81, 90*9684SSusan.Gleeson@Sun.COM SRP_IU_AER_REQ = 0x82, 91*9684SSusan.Gleeson@Sun.COM SRP_IU_CRED_RSP = 0x41, 92*9684SSusan.Gleeson@Sun.COM SRP_IU_AER_RSP = 0x42 93*9684SSusan.Gleeson@Sun.COM }; 94*9684SSusan.Gleeson@Sun.COM 95*9684SSusan.Gleeson@Sun.COM /* SRP Initiator Login IU, 64 bytes */ 96*9684SSusan.Gleeson@Sun.COM enum { 97*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_MULTI_CH_SINGLE = 0, 98*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_MULTI_CH_MULTIPLE = 1, 99*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_MULTI_CH_MASK = 0x03, 100*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_AESOL_NOTIFICATION = 1 << 6, 101*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_CRSOL_NOTIFICATION = 1 << 5, 102*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_LOSOL_NOTIFICATION = 1 << 4 103*9684SSusan.Gleeson@Sun.COM }; 104*9684SSusan.Gleeson@Sun.COM 105*9684SSusan.Gleeson@Sun.COM typedef struct srp_login_req_s { 106*9684SSusan.Gleeson@Sun.COM uint8_t lreq_type; 107*9684SSusan.Gleeson@Sun.COM uint8_t lreq_rsvd[7]; 108*9684SSusan.Gleeson@Sun.COM uint64_t lreq_tag; 109*9684SSusan.Gleeson@Sun.COM uint32_t lreq_req_it_iu_len; 110*9684SSusan.Gleeson@Sun.COM uint8_t lreq_rsvd2[4]; 111*9684SSusan.Gleeson@Sun.COM uint16_t lreq_buf_format; 112*9684SSusan.Gleeson@Sun.COM uint8_t lreq_req_flags; 113*9684SSusan.Gleeson@Sun.COM uint8_t lreq_rsvd3[5]; 114*9684SSusan.Gleeson@Sun.COM uint8_t lreq_initiator_port_id[SRP_PORT_ID_LEN]; 115*9684SSusan.Gleeson@Sun.COM uint8_t lreq_target_port_id[SRP_PORT_ID_LEN]; 116*9684SSusan.Gleeson@Sun.COM } srp_login_req_t; 117*9684SSusan.Gleeson@Sun.COM 118*9684SSusan.Gleeson@Sun.COM /* SRP Task Management IU, 64 bytes. */ 119*9684SSusan.Gleeson@Sun.COM enum { 120*9684SSusan.Gleeson@Sun.COM SRP_TSK_MGMT_SUCCESSFUL_COMP_SOLNT = 1 << 1, 121*9684SSusan.Gleeson@Sun.COM SRP_TSK_MGMT_UNSUCCESSFUL_COMP_SOLNT = 1 << 2 122*9684SSusan.Gleeson@Sun.COM }; 123*9684SSusan.Gleeson@Sun.COM 124*9684SSusan.Gleeson@Sun.COM enum { 125*9684SSusan.Gleeson@Sun.COM SRP_TSK_ATTR_QTYPE_SIMPLE = 0, 126*9684SSusan.Gleeson@Sun.COM SRP_TSK_ATTR_QTYPE_HEAD_OF_Q = 1, 127*9684SSusan.Gleeson@Sun.COM SRP_TSK_ATTR_QTYPE_ORDERED = 2, 128*9684SSusan.Gleeson@Sun.COM SRP_TSK_ATTR_QTYPE_ACA_Q_TAG = 4 129*9684SSusan.Gleeson@Sun.COM }; 130*9684SSusan.Gleeson@Sun.COM 131*9684SSusan.Gleeson@Sun.COM enum { 132*9684SSusan.Gleeson@Sun.COM SRP_TSK_MGMT_ABORT_TASK = 1, 133*9684SSusan.Gleeson@Sun.COM SRP_TSK_MGMT_ABORT_TASK_SET = 2, 134*9684SSusan.Gleeson@Sun.COM SRP_TSK_MGMT_CLEAR_TASK_SET = 4, 135*9684SSusan.Gleeson@Sun.COM SRP_TSK_MGMT_LUN_RESET = 8, 136*9684SSusan.Gleeson@Sun.COM SRP_TSK_MGMT_CLEAR_ACA = 0x40 137*9684SSusan.Gleeson@Sun.COM }; 138*9684SSusan.Gleeson@Sun.COM 139*9684SSusan.Gleeson@Sun.COM typedef struct srp_tsk_mgmt_s { 140*9684SSusan.Gleeson@Sun.COM uint8_t tm_type; 141*9684SSusan.Gleeson@Sun.COM uint8_t tm_not_flags; 142*9684SSusan.Gleeson@Sun.COM uint8_t tm_rsvd[6]; 143*9684SSusan.Gleeson@Sun.COM uint64_t tm_tag; 144*9684SSusan.Gleeson@Sun.COM uint8_t tm_rsvd2[4]; 145*9684SSusan.Gleeson@Sun.COM uint8_t tm_lun[8]; 146*9684SSusan.Gleeson@Sun.COM uint8_t tm_rsvd3[2]; 147*9684SSusan.Gleeson@Sun.COM uint8_t tm_function; 148*9684SSusan.Gleeson@Sun.COM uint8_t tm_rsvd4; 149*9684SSusan.Gleeson@Sun.COM uint64_t tm_task_tag; 150*9684SSusan.Gleeson@Sun.COM uint8_t tm_rsvd5[8]; 151*9684SSusan.Gleeson@Sun.COM } srp_tsk_mgmt_t; 152*9684SSusan.Gleeson@Sun.COM 153*9684SSusan.Gleeson@Sun.COM /* SRP Command Request IU, 48 bytes minimum */ 154*9684SSusan.Gleeson@Sun.COM enum { 155*9684SSusan.Gleeson@Sun.COM SRP_DATA_DESC_NONE = 0, 156*9684SSusan.Gleeson@Sun.COM SRP_DATA_DESC_DIRECT = 1, 157*9684SSusan.Gleeson@Sun.COM SRP_DATA_DESC_INDIRECT = 2 158*9684SSusan.Gleeson@Sun.COM }; 159*9684SSusan.Gleeson@Sun.COM 160*9684SSusan.Gleeson@Sun.COM #pragma pack(1) 161*9684SSusan.Gleeson@Sun.COM typedef struct srp_cmd_req_s { 162*9684SSusan.Gleeson@Sun.COM uint8_t cr_type; 163*9684SSusan.Gleeson@Sun.COM uint8_t cr_not_flags; 164*9684SSusan.Gleeson@Sun.COM uint8_t cr_rsvd[3]; 165*9684SSusan.Gleeson@Sun.COM uint8_t cr_buf_fmt; 166*9684SSusan.Gleeson@Sun.COM uint8_t cr_docnt; 167*9684SSusan.Gleeson@Sun.COM uint8_t cr_dicnt; 168*9684SSusan.Gleeson@Sun.COM uint64_t cr_tag; 169*9684SSusan.Gleeson@Sun.COM uint8_t cr_rsvd2[4]; 170*9684SSusan.Gleeson@Sun.COM uint8_t cr_lun[8]; 171*9684SSusan.Gleeson@Sun.COM uint8_t cr_rsvd3; 172*9684SSusan.Gleeson@Sun.COM uint8_t cr_task_attr; 173*9684SSusan.Gleeson@Sun.COM uint8_t cr_rsvd4; 174*9684SSusan.Gleeson@Sun.COM uint8_t cr_add_cdb_len; 175*9684SSusan.Gleeson@Sun.COM uint8_t cr_cdb[SRP_CDB_SIZE]; 176*9684SSusan.Gleeson@Sun.COM uint8_t cr_add_data; 177*9684SSusan.Gleeson@Sun.COM } srp_cmd_req_t; 178*9684SSusan.Gleeson@Sun.COM #pragma pack() 179*9684SSusan.Gleeson@Sun.COM 180*9684SSusan.Gleeson@Sun.COM /* SRP Initiator Logout IU, 16 bytes */ 181*9684SSusan.Gleeson@Sun.COM typedef struct srp_i_logout_s { 182*9684SSusan.Gleeson@Sun.COM uint8_t il_type; 183*9684SSusan.Gleeson@Sun.COM uint8_t il_rsvd[7]; 184*9684SSusan.Gleeson@Sun.COM uint64_t il_tag; 185*9684SSusan.Gleeson@Sun.COM } srp_i_logout_t; 186*9684SSusan.Gleeson@Sun.COM 187*9684SSusan.Gleeson@Sun.COM /* SRP Login Response IU, 52 bytes */ 188*9684SSusan.Gleeson@Sun.COM enum { 189*9684SSusan.Gleeson@Sun.COM SRP_MULTI_CH_RESULT_NO_EXISTING = 0, 190*9684SSusan.Gleeson@Sun.COM SRP_MULTI_CH_RESULT_TERM_EXISTING = 1, 191*9684SSusan.Gleeson@Sun.COM SRP_MULTI_CH_RESULT_EXISTING_EXISTS = 1 << 1, 192*9684SSusan.Gleeson@Sun.COM SRP_SOLNT_SUPPORTED = 1 << 4 193*9684SSusan.Gleeson@Sun.COM }; 194*9684SSusan.Gleeson@Sun.COM 195*9684SSusan.Gleeson@Sun.COM #define SRP_LOGIN_RSP_SIZE 52 196*9684SSusan.Gleeson@Sun.COM 197*9684SSusan.Gleeson@Sun.COM typedef struct srp_login_rsp_s { 198*9684SSusan.Gleeson@Sun.COM uint8_t lrsp_type; 199*9684SSusan.Gleeson@Sun.COM uint8_t lrsp_rsvd[3]; 200*9684SSusan.Gleeson@Sun.COM uint32_t lrsp_req_limit_delta; 201*9684SSusan.Gleeson@Sun.COM uint64_t lrsp_tag; 202*9684SSusan.Gleeson@Sun.COM uint32_t lrsp_max_it_iu_len; 203*9684SSusan.Gleeson@Sun.COM uint32_t lrsp_max_ti_iu_len; 204*9684SSusan.Gleeson@Sun.COM uint16_t lrsp_sup_buf_format; 205*9684SSusan.Gleeson@Sun.COM uint8_t lrsp_rsp_flags; 206*9684SSusan.Gleeson@Sun.COM uint8_t lrsp_rsvd2[25]; 207*9684SSusan.Gleeson@Sun.COM } srp_login_rsp_t; 208*9684SSusan.Gleeson@Sun.COM 209*9684SSusan.Gleeson@Sun.COM /* SRP Response IU, 36 byte minimum */ 210*9684SSusan.Gleeson@Sun.COM enum { 211*9684SSusan.Gleeson@Sun.COM SRP_RSP_SOLICITED_NOTIFICATION = 1 212*9684SSusan.Gleeson@Sun.COM }; 213*9684SSusan.Gleeson@Sun.COM 214*9684SSusan.Gleeson@Sun.COM enum { 215*9684SSusan.Gleeson@Sun.COM SRP_RSP_VALID = 1, 216*9684SSusan.Gleeson@Sun.COM SRP_RSP_SNS_VALID = 1 << 1, 217*9684SSusan.Gleeson@Sun.COM SRP_RSP_DO_OVER = 1 << 2, 218*9684SSusan.Gleeson@Sun.COM SRP_RSP_DO_UNDER = 1 << 3, 219*9684SSusan.Gleeson@Sun.COM SRP_RSP_DI_OVER = 1 << 4, 220*9684SSusan.Gleeson@Sun.COM SRP_RSP_DI_UNDER = 1 << 5 221*9684SSusan.Gleeson@Sun.COM }; 222*9684SSusan.Gleeson@Sun.COM 223*9684SSusan.Gleeson@Sun.COM /* Additional response data used for task mgmt responses */ 224*9684SSusan.Gleeson@Sun.COM enum { 225*9684SSusan.Gleeson@Sun.COM SRP_TM_SUCCESS = 0, 226*9684SSusan.Gleeson@Sun.COM SRP_TM_REQ_INVALID = 2, 227*9684SSusan.Gleeson@Sun.COM SRP_TM_NOT_SUPPORTED = 4, 228*9684SSusan.Gleeson@Sun.COM SRP_TM_FAILED = 5 229*9684SSusan.Gleeson@Sun.COM }; 230*9684SSusan.Gleeson@Sun.COM 231*9684SSusan.Gleeson@Sun.COM typedef struct srp_rsp_data_s { 232*9684SSusan.Gleeson@Sun.COM uint8_t rd_rsvd[3]; 233*9684SSusan.Gleeson@Sun.COM uint8_t rd_rsp_status; 234*9684SSusan.Gleeson@Sun.COM } srp_rsp_data_t; 235*9684SSusan.Gleeson@Sun.COM 236*9684SSusan.Gleeson@Sun.COM #define SRP_RSP_SIZE 36 237*9684SSusan.Gleeson@Sun.COM 238*9684SSusan.Gleeson@Sun.COM typedef struct srp_rsp_s { 239*9684SSusan.Gleeson@Sun.COM uint8_t rsp_type; 240*9684SSusan.Gleeson@Sun.COM uint8_t rsp_sol_not; 241*9684SSusan.Gleeson@Sun.COM uint8_t rsp_rsvd[2]; 242*9684SSusan.Gleeson@Sun.COM uint32_t rsp_req_limit_delta; 243*9684SSusan.Gleeson@Sun.COM uint64_t rsp_tag; 244*9684SSusan.Gleeson@Sun.COM uint8_t rsp_rsvd2[2]; 245*9684SSusan.Gleeson@Sun.COM uint8_t rsp_flags; 246*9684SSusan.Gleeson@Sun.COM uint8_t rsp_status; 247*9684SSusan.Gleeson@Sun.COM uint32_t rsp_do_resid_cnt; 248*9684SSusan.Gleeson@Sun.COM uint32_t rsp_di_resid_cnt; 249*9684SSusan.Gleeson@Sun.COM uint32_t rsp_sense_data_len; 250*9684SSusan.Gleeson@Sun.COM uint32_t rsp_data_len; 251*9684SSusan.Gleeson@Sun.COM } srp_rsp_t; 252*9684SSusan.Gleeson@Sun.COM 253*9684SSusan.Gleeson@Sun.COM /* SRP Login Reject IU, 32 bytes */ 254*9684SSusan.Gleeson@Sun.COM enum { 255*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_REJ_NO_REASON = 0x00010000, 256*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_REJ_INSUFFICIENT_CH_RESOURCES = 0x00010001, 257*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE = 0x00010002, 258*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_REJ_UNABLE_TO_ASSOCIATE_I_T_NEXUS = 0x00010003, 259*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_REJ_REQ_BUF_FORMAT_NOT_SUPPORTED = 0x00010004, 260*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_REJ_MULTI_CH_NOT_SUPPORTED = 0x00010005, 261*9684SSusan.Gleeson@Sun.COM SRP_LOGIN_REJ_INIT_CH_LIMIT = 0x00010006 262*9684SSusan.Gleeson@Sun.COM }; 263*9684SSusan.Gleeson@Sun.COM 264*9684SSusan.Gleeson@Sun.COM typedef struct srp_login_rej_s { 265*9684SSusan.Gleeson@Sun.COM uint8_t lrej_type; 266*9684SSusan.Gleeson@Sun.COM uint8_t lrej_rsvd[3]; 267*9684SSusan.Gleeson@Sun.COM uint32_t lrej_reason; 268*9684SSusan.Gleeson@Sun.COM uint64_t lrej_tag; 269*9684SSusan.Gleeson@Sun.COM uint8_t lrej_rsvd2[8]; 270*9684SSusan.Gleeson@Sun.COM uint16_t lrej_sup_buf_format; 271*9684SSusan.Gleeson@Sun.COM uint8_t lrej_rsvd3[6]; 272*9684SSusan.Gleeson@Sun.COM } srp_login_rej_t; 273*9684SSusan.Gleeson@Sun.COM 274*9684SSusan.Gleeson@Sun.COM /* SRP Target Logout IU, 16 bytes */ 275*9684SSusan.Gleeson@Sun.COM enum { 276*9684SSusan.Gleeson@Sun.COM SRP_T_LOGOUT_NO_REASON = 0, 277*9684SSusan.Gleeson@Sun.COM SRP_T_LOGOUT_INACTIVE = 1, 278*9684SSusan.Gleeson@Sun.COM SRP_T_LOGOUT_INVALID_IU_TYPE = 2, 279*9684SSusan.Gleeson@Sun.COM SRP_T_LOGOUT_UNEXPECTED_INITIATOR_RSP = 3, 280*9684SSusan.Gleeson@Sun.COM SRP_T_LOGOUT_MULTI_CHANNEL_ACTION = 4, 281*9684SSusan.Gleeson@Sun.COM SRP_T_LOGOUT_UNSUPPORTED_DO_FORMAT = 6, 282*9684SSusan.Gleeson@Sun.COM SRP_T_LOGOUT_UNSUPPORTED_DI_FORMAT = 7, 283*9684SSusan.Gleeson@Sun.COM SRP_T_LOGOUT_INVALID_IU_LENGTH = 8 284*9684SSusan.Gleeson@Sun.COM }; 285*9684SSusan.Gleeson@Sun.COM 286*9684SSusan.Gleeson@Sun.COM typedef struct srp_t_logout_s { 287*9684SSusan.Gleeson@Sun.COM uint8_t tl_type; 288*9684SSusan.Gleeson@Sun.COM uint8_t tl_sol_not; 289*9684SSusan.Gleeson@Sun.COM uint8_t tl_rsvd[2]; 290*9684SSusan.Gleeson@Sun.COM uint32_t tl_reason; 291*9684SSusan.Gleeson@Sun.COM uint64_t tl_tag; 292*9684SSusan.Gleeson@Sun.COM } srp_t_logout_t; 293*9684SSusan.Gleeson@Sun.COM 294*9684SSusan.Gleeson@Sun.COM #ifdef __cplusplus 295*9684SSusan.Gleeson@Sun.COM } 296*9684SSusan.Gleeson@Sun.COM #endif 297*9684SSusan.Gleeson@Sun.COM 298*9684SSusan.Gleeson@Sun.COM #endif /* _SRP_H */ 299