Lines Matching refs:conn

80 resolve_addr(const struct connection *conn, const char *address,
91 fail(conn, "empty address");
101 fail(conn, "malformed address");
109 fail(conn, "malformed address");
145 fail(conn, gai_strerror(error));
155 struct connection *conn;
163 conn = calloc(1, sizeof(*conn));
164 if (conn == NULL)
170 conn->conn_header_digest = CONN_DIGEST_NONE;
171 conn->conn_data_digest = CONN_DIGEST_NONE;
172 conn->conn_initial_r2t = true;
173 conn->conn_immediate_data = true;
174 conn->conn_max_data_segment_length = 8192;
175 conn->conn_max_burst_length = 262144;
176 conn->conn_first_burst_length = 65536;
178 conn->conn_session_id = session_id;
179 conn->conn_iscsi_fd = iscsi_fd;
184 memcpy(&conn->conn_conf, conf, sizeof(conn->conn_conf));
186 from_addr = conn->conn_conf.isc_initiator_addr;
187 to_addr = conn->conn_conf.isc_target_addr;
190 resolve_addr(conn, from_addr, &from_ai, true);
194 resolve_addr(conn, to_addr, &to_ai, false);
199 idc.idc_session_id = conn->conn_session_id;
200 if (conn->conn_conf.isc_iser)
215 fail(conn, strerror(errno));
222 if (conn->conn_conf.isc_iser) {
223 fail(conn, "iSER not supported");
228 conn->conn_socket = socket(to_ai->ai_family, to_ai->ai_socktype,
230 if (conn->conn_socket < 0) {
231 fail(conn, strerror(errno));
235 error = bind(conn->conn_socket, from_ai->ai_addr,
238 fail(conn, strerror(errno));
243 error = connect(conn->conn_socket, to_ai->ai_addr, to_ai->ai_addrlen);
245 fail(conn, strerror(errno));
251 return (conn);
255 handoff(struct connection *conn)
263 idh.idh_session_id = conn->conn_session_id;
265 idh.idh_socket = conn->conn_socket;
267 strlcpy(idh.idh_target_alias, conn->conn_target_alias,
269 memcpy(idh.idh_isid, conn->conn_isid, sizeof(idh.idh_isid));
270 idh.idh_statsn = conn->conn_statsn;
271 idh.idh_header_digest = conn->conn_header_digest;
272 idh.idh_data_digest = conn->conn_data_digest;
273 idh.idh_initial_r2t = conn->conn_initial_r2t;
274 idh.idh_immediate_data = conn->conn_immediate_data;
275 idh.idh_max_data_segment_length = conn->conn_max_data_segment_length;
276 idh.idh_max_burst_length = conn->conn_max_burst_length;
277 idh.idh_first_burst_length = conn->conn_first_burst_length;
279 error = ioctl(conn->conn_iscsi_fd, ISCSIDHANDOFF, &idh);
285 fail(const struct connection *conn, const char *reason)
291 idf.idf_session_id = conn->conn_session_id;
294 error = ioctl(conn->conn_iscsi_fd, ISCSIDFAIL, &idf);
303 capsicate(struct connection *conn)
316 error = cap_rights_limit(conn->conn_iscsi_fd, &rights);
320 error = cap_ioctls_limit(conn->conn_iscsi_fd, cmds,
399 struct connection *conn;
409 conn = connection_new(request->idr_session_id, &request->idr_conf, iscsi_fd);
411 capsicate(conn);
412 login(conn);
413 if (conn->conn_conf.isc_discovery != 0)
414 discovery(conn);
416 handoff(conn);