1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _ISCSI_DOOR_H 27 #define _ISCSI_DOOR_H 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #define ISCSI_DOOR_REQ_SIGNATURE 0x53435349 34 #define ISCSI_DOOR_REQ_VERSION_1 1 35 #define ISCSI_DOOR_MAX_DATA_SIZE 8192 36 37 38 #define ISCSI_DOOR_GETIPNODEBYNAME_REQ 0x0000 39 #define ISCSI_DOOR_GETIPNODEBYNAME_CNF 0x4000 40 #define ISCSI_DOOR_ERROR_IND 0x8000 41 42 #define ISCSI_DOOR_STATUS_SUCCESS 0x00000000 43 #define ISCSI_DOOR_STATUS_REQ_LENGTH 0x00000001 44 #define ISCSI_DOOR_STATUS_REQ_FORMAT 0x00000002 45 #define ISCSI_DOOR_STATUS_REQ_INVALID 0x00000003 46 #define ISCSI_DOOR_STATUS_REQ_VERSION 0x00000004 47 #define ISCSI_DOOR_STATUS_MORE 0x00000005 48 49 typedef struct _iscsi_door_msg_hdr { 50 uint32_t signature; 51 uint32_t version; 52 uint32_t opcode; 53 uint32_t status; 54 } iscsi_door_msg_hdr_t; 55 56 typedef struct _getipnodebyname_req { 57 iscsi_door_msg_hdr_t hdr; 58 uint32_t name_offset; 59 uint32_t name_length; 60 uint32_t af; 61 uint32_t flags; 62 } getipnodebyname_req_t; 63 64 typedef struct _getipnodebyname_cnf { 65 iscsi_door_msg_hdr_t hdr; 66 uint32_t h_size_needed; 67 uint32_t h_addr_list_offset; 68 uint32_t h_addr_list_length; 69 uint32_t h_addrtype; 70 uint32_t h_addrlen; 71 uint32_t h_name_offset; 72 uint32_t h_name_len; 73 uint32_t h_alias_list_offset; 74 uint32_t h_alias_list_length; 75 int32_t error_num; 76 } getipnodebyname_cnf_t; 77 78 typedef union _iscsi_door_req { 79 iscsi_door_msg_hdr_t hdr; 80 getipnodebyname_req_t ginbn_req; 81 } iscsi_door_req_t; 82 83 typedef union _iscsi_door_cnf { 84 iscsi_door_msg_hdr_t hdr; 85 getipnodebyname_cnf_t ginbn_cnf; 86 } iscsi_door_cnf_t; 87 88 typedef union _iscsi_door_ind { 89 iscsi_door_msg_hdr_t hdr; 90 iscsi_door_msg_hdr_t error_ind; 91 } iscsi_door_ind_t; 92 93 typedef union _iscsi_door_msg { 94 iscsi_door_msg_hdr_t hdr; 95 iscsi_door_req_t req; 96 iscsi_door_cnf_t cnf; 97 iscsi_door_ind_t ind; 98 } iscsi_door_msg_t; 99 100 #ifdef _KERNEL 101 102 /* Defines copied from netdb.h */ 103 #define HOST_NOT_FOUND 1 /* Authoritive Answer Host not found */ 104 #define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */ 105 #define NO_RECOVERY 3 /* Non recoverable errors,FORMERR,REFUSED,NOTIMP */ 106 #define NO_DATA 4 /* Valid name, no data record of requested type */ 107 #define NO_ADDRESS NO_DATA /* no address, look for MX record */ 108 109 #define AI_V4MAPPED 0x0001 /* IPv4 mapped addresses if no IPv6 */ 110 #define AI_ALL 0x0002 /* IPv6 and IPv4 mapped addresses */ 111 #define AI_ADDRCONFIG 0x0004 /* AAAA or A records only if IPv6/IPv4 cnfgd */ 112 113 struct hostent { 114 char *h_name; /* official name of host */ 115 char **h_aliases; /* alias list */ 116 int h_addrtype; /* host address type */ 117 int h_length; /* length of address */ 118 char **h_addr_list; /* list of addresses from name server */ 119 }; 120 121 boolean_t 122 iscsi_door_ini(void); 123 124 boolean_t 125 iscsi_door_term(void); 126 127 boolean_t 128 iscsi_door_bind( 129 int did 130 ); 131 132 void 133 iscsi_door_unbind(void); 134 135 void 136 kfreehostent( 137 struct hostent *hptr 138 ); 139 140 struct hostent * 141 kgetipnodebyname( 142 const char *name, 143 int af, 144 int flags, 145 int *error_num 146 ); 147 148 #else /* !_KERNEL */ 149 150 #define kfreehostent freehostent 151 #define kgetipnodebyname getipnodebyname 152 153 #endif /* _KERNEL */ 154 155 /* 156 * iSCSI initiator SMF service status in kernel 157 */ 158 #define ISCSI_SERVICE_ENABLED 0x0 159 #define ISCSI_SERVICE_DISABLED 0x1 160 #define ISCSI_SERVICE_TRANSITION 0x2 161 162 #ifdef __cplusplus 163 } 164 #endif 165 166 #endif /* _ISCSI_DOOR_H */ 167