|
Packit |
eace71 |
/*
|
|
Packit |
eace71 |
* iSCSI Initiator
|
|
Packit |
eace71 |
*
|
|
Packit |
eace71 |
* Copyright (C) 2004 Dmitry Yusupov, Alex Aizman
|
|
Packit |
eace71 |
* maintained by open-iscsi@googlegroups.com
|
|
Packit |
eace71 |
*
|
|
Packit |
eace71 |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
eace71 |
* it under the terms of the GNU General Public License as published
|
|
Packit |
eace71 |
* by the Free Software Foundation; either version 2 of the License, or
|
|
Packit |
eace71 |
* (at your option) any later version.
|
|
Packit |
eace71 |
*
|
|
Packit |
eace71 |
* This program is distributed in the hope that it will be useful, but
|
|
Packit |
eace71 |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
eace71 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
eace71 |
* General Public License for more details.
|
|
Packit |
eace71 |
*
|
|
Packit |
eace71 |
* See the file COPYING included with this distribution for more details.
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#ifndef INITIATOR_H
|
|
Packit |
eace71 |
#define INITIATOR_H
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#include <stdint.h>
|
|
Packit |
eace71 |
#include <net/if.h>
|
|
Packit |
eace71 |
#include <sys/time.h>
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#include "types.h"
|
|
Packit |
eace71 |
#include "iscsi_proto.h"
|
|
Packit |
eace71 |
#include "iscsi_if.h"
|
|
Packit |
eace71 |
#include "auth.h"
|
|
Packit |
eace71 |
#include "mgmt_ipc.h"
|
|
Packit |
eace71 |
#include "config.h"
|
|
Packit |
eace71 |
#include "actor.h"
|
|
Packit |
eace71 |
#include "list.h"
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#define ISCSI_CONFIG_ROOT "/etc/iscsi/"
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#define CONFIG_FILE ISCSI_CONFIG_ROOT"iscsid.conf"
|
|
Packit |
eace71 |
#define INITIATOR_NAME_FILE ISCSI_CONFIG_ROOT"initiatorname.iscsi"
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#define PID_FILE "/run/iscsid.pid"
|
|
Packit |
eace71 |
#ifndef LOCK_DIR
|
|
Packit |
eace71 |
#define LOCK_DIR "/run/lock/iscsi"
|
|
Packit |
eace71 |
#endif
|
|
Packit |
eace71 |
#define LOCK_FILE LOCK_DIR"/lock"
|
|
Packit |
eace71 |
#define LOCK_WRITE_FILE LOCK_DIR"/lock.write"
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
typedef enum iscsi_session_r_stage_e {
|
|
Packit |
eace71 |
R_STAGE_NO_CHANGE,
|
|
Packit |
eace71 |
R_STAGE_SESSION_CLEANUP,
|
|
Packit |
eace71 |
R_STAGE_SESSION_REOPEN,
|
|
Packit |
eace71 |
R_STAGE_SESSION_REDIRECT,
|
|
Packit |
eace71 |
R_STAGE_SESSION_DESTOYED,
|
|
Packit |
eace71 |
} iscsi_session_r_stage_e;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
typedef enum conn_login_status_e {
|
|
Packit |
eace71 |
CONN_LOGIN_SUCCESS = 0,
|
|
Packit |
eace71 |
CONN_LOGIN_FAILED = 1,
|
|
Packit |
eace71 |
CONN_LOGIN_IO_ERR = 2,
|
|
Packit |
eace71 |
CONN_LOGIN_RETRY = 3,
|
|
Packit |
eace71 |
CONN_LOGIN_IMM_RETRY = 4,
|
|
Packit |
eace71 |
CONN_LOGIN_IMM_REDIRECT_RETRY = 5,
|
|
Packit |
eace71 |
CONN_LOGIN_AUTH_FAILED = 6,
|
|
Packit |
eace71 |
} conn_login_status_e;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
enum iscsi_login_status {
|
|
Packit |
eace71 |
LOGIN_OK = 0,
|
|
Packit |
eace71 |
LOGIN_IO_ERROR = 1,
|
|
Packit |
eace71 |
LOGIN_FAILED = 2,
|
|
Packit |
eace71 |
LOGIN_VERSION_MISMATCH = 3,
|
|
Packit |
eace71 |
LOGIN_NEGOTIATION_FAILED = 4,
|
|
Packit |
eace71 |
LOGIN_AUTHENTICATION_FAILED = 5,
|
|
Packit |
eace71 |
LOGIN_REDIRECTION_FAILED = 6,
|
|
Packit |
eace71 |
LOGIN_INVALID_PDU = 7,
|
|
Packit |
eace71 |
LOGIN_REDIRECT = 8,
|
|
Packit |
eace71 |
};
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
typedef enum iscsi_event_e {
|
|
Packit |
eace71 |
EV_UNKNOWN,
|
|
Packit |
eace71 |
EV_CONN_RECV_PDU,
|
|
Packit |
eace71 |
EV_CONN_POLL,
|
|
Packit |
eace71 |
EV_CONN_ERROR,
|
|
Packit |
eace71 |
EV_CONN_LOGOUT_TIMER,
|
|
Packit |
eace71 |
EV_CONN_STOP,
|
|
Packit |
eace71 |
EV_CONN_LOGIN,
|
|
Packit |
eace71 |
} iscsi_event_e;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
struct queue_task;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
typedef struct iscsi_login_context {
|
|
Packit |
eace71 |
int cid;
|
|
Packit |
eace71 |
char *buffer;
|
|
Packit |
eace71 |
size_t bufsize;
|
|
Packit |
eace71 |
uint8_t status_class;
|
|
Packit |
eace71 |
uint8_t status_detail;
|
|
Packit |
eace71 |
struct iscsi_acl *auth_client;
|
|
Packit |
eace71 |
struct iscsi_hdr pdu;
|
|
Packit |
eace71 |
struct iscsi_login_rsp *login_rsp;
|
|
Packit |
eace71 |
char *data;
|
|
Packit |
eace71 |
int received_pdu;
|
|
Packit |
eace71 |
int max_data_length;
|
|
Packit |
eace71 |
int timeout;
|
|
Packit |
eace71 |
int final;
|
|
Packit |
eace71 |
enum iscsi_login_status ret;
|
|
Packit |
eace71 |
struct queue_task *qtask;
|
|
Packit |
eace71 |
} iscsi_login_context_t;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
struct iscsi_session;
|
|
Packit |
eace71 |
struct iscsi_conn;
|
|
Packit |
eace71 |
struct iscsi_ev_context;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* daemon's connection structure */
|
|
Packit |
eace71 |
typedef struct iscsi_conn {
|
|
Packit |
eace71 |
uint32_t id;
|
|
Packit |
eace71 |
struct iscsi_session *session;
|
|
Packit |
eace71 |
iscsi_login_context_t login_context;
|
|
Packit |
eace71 |
struct iscsi_ev_context *recv_context;
|
|
Packit |
eace71 |
struct queue_task *logout_qtask;
|
|
Packit |
eace71 |
char data[ISCSI_DEF_MAX_RECV_SEG_LEN];
|
|
Packit |
eace71 |
char host[NI_MAXHOST]; /* scratch */
|
|
Packit |
eace71 |
enum iscsi_conn_state state;
|
|
Packit |
eace71 |
int userspace_nop;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
struct timeval initial_connect_time;
|
|
Packit |
eace71 |
actor_t login_timer;
|
|
Packit |
eace71 |
actor_t nop_out_timer;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#define CONTEXT_POOL_MAX 32
|
|
Packit |
eace71 |
struct iscsi_ev_context *context_pool[CONTEXT_POOL_MAX];
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* login state machine */
|
|
Packit |
eace71 |
int current_stage;
|
|
Packit |
eace71 |
int next_stage;
|
|
Packit |
eace71 |
int partial_response;
|
|
Packit |
eace71 |
conn_login_status_e status;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* tcp/socket settings */
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/*
|
|
Packit |
eace71 |
* Either a tcp/ip or a netlink socket to do
|
|
Packit |
eace71 |
* IO through.
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
int socket_fd;
|
|
Packit |
eace71 |
/* address being used for normal session connection */
|
|
Packit |
eace71 |
struct sockaddr_storage saddr;
|
|
Packit |
eace71 |
/* address received during login */
|
|
Packit |
eace71 |
struct sockaddr_storage failback_saddr;
|
|
Packit |
eace71 |
int tcp_window_size;
|
|
Packit |
eace71 |
int type_of_service;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* used for the IPC of bind and for connect/poll/disconnect by
|
|
Packit |
eace71 |
* transports (eg iser) which does these ops from the kernel.
|
|
Packit |
eace71 |
* In the case of TCP, it is just the transport_fd casted to u64. */
|
|
Packit |
eace71 |
uint64_t transport_ep_handle;
|
|
Packit |
eace71 |
int bind_ep;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* timeouts */
|
|
Packit |
eace71 |
int login_timeout;
|
|
Packit |
eace71 |
int logout_timeout;
|
|
Packit |
eace71 |
int auth_timeout;
|
|
Packit |
eace71 |
int active_timeout;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
int noop_out_interval;
|
|
Packit |
eace71 |
int noop_out_timeout;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* sequencing */
|
|
Packit |
eace71 |
uint32_t exp_statsn;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* negotiated parameters */
|
|
Packit |
eace71 |
uint32_t hdrdgst_en;
|
|
Packit |
eace71 |
uint32_t datadgst_en;
|
|
Packit |
eace71 |
uint32_t max_recv_dlength; /* the value we declare */
|
|
Packit |
eace71 |
uint32_t max_xmit_dlength; /* the value declared by the target */
|
|
Packit |
eace71 |
} iscsi_conn_t;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
struct iscsi_ev_context {
|
|
Packit |
eace71 |
struct actor actor;
|
|
Packit |
eace71 |
struct iscsi_conn *conn;
|
|
Packit |
eace71 |
int allocated;
|
|
Packit |
eace71 |
void *data;
|
|
Packit |
eace71 |
};
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
typedef struct queue_task {
|
|
Packit |
eace71 |
iscsi_conn_t *conn;
|
|
Packit |
eace71 |
iscsiadm_req_t req;
|
|
Packit |
eace71 |
iscsiadm_rsp_t rsp;
|
|
Packit |
eace71 |
int mgmt_ipc_fd;
|
|
Packit |
eace71 |
int allocated : 1;
|
|
Packit |
eace71 |
/* Newer request types include a
|
|
Packit |
eace71 |
* variable-length payload */
|
|
Packit |
eace71 |
void *payload;
|
|
Packit |
eace71 |
} queue_task_t;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
struct iscsi_transport_template;
|
|
Packit |
eace71 |
struct iscsi_transport;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* daemon's session structure */
|
|
Packit |
eace71 |
typedef struct iscsi_session {
|
|
Packit |
eace71 |
struct list_head list;
|
|
Packit |
eace71 |
uint32_t id;
|
|
Packit |
eace71 |
uint32_t hostno;
|
|
Packit |
eace71 |
char netdev[IFNAMSIZ];
|
|
Packit |
eace71 |
struct iscsi_transport *t;
|
|
Packit |
eace71 |
uint8_t use_ipc;
|
|
Packit |
eace71 |
node_rec_t nrec; /* copy of original Node record in database */
|
|
Packit |
eace71 |
unsigned int irrelevant_keys_bitmap;
|
|
Packit |
eace71 |
int send_async_text;
|
|
Packit |
eace71 |
uint32_t itt;
|
|
Packit |
eace71 |
uint32_t cmdsn;
|
|
Packit |
eace71 |
uint32_t exp_cmdsn;
|
|
Packit |
eace71 |
uint32_t max_cmdsn;
|
|
Packit |
eace71 |
int erl;
|
|
Packit |
eace71 |
uint32_t imm_data_en;
|
|
Packit |
eace71 |
uint32_t initial_r2t_en;
|
|
Packit |
eace71 |
uint32_t max_r2t;
|
|
Packit |
eace71 |
uint32_t fast_abort;
|
|
Packit |
eace71 |
uint32_t first_burst;
|
|
Packit |
eace71 |
uint32_t max_burst;
|
|
Packit |
eace71 |
uint32_t pdu_inorder_en;
|
|
Packit |
eace71 |
uint32_t dataseq_inorder_en;
|
|
Packit |
eace71 |
uint32_t def_time2wait;
|
|
Packit |
eace71 |
uint32_t def_time2retain;
|
|
Packit |
eace71 |
int type;
|
|
Packit |
eace71 |
int portal_group_tag;
|
|
Packit |
eace71 |
uint8_t isid[6];
|
|
Packit |
eace71 |
uint16_t tsih;
|
|
Packit |
eace71 |
char target_name[TARGET_NAME_MAXLEN + 1];
|
|
Packit |
eace71 |
char *target_alias;
|
|
Packit |
eace71 |
char *initiator_name;
|
|
Packit |
eace71 |
char *initiator_alias;
|
|
Packit |
eace71 |
struct auth_str_block auth_recv_string_block;
|
|
Packit |
eace71 |
struct auth_str_block auth_send_string_block;
|
|
Packit |
eace71 |
struct auth_large_binary auth_recv_binary_block;
|
|
Packit |
eace71 |
struct auth_large_binary auth_send_binary_block;
|
|
Packit |
eace71 |
struct iscsi_acl auth_client_block;
|
|
Packit |
eace71 |
struct iscsi_acl *auth_client;
|
|
Packit |
eace71 |
int num_auth_buffers;
|
|
Packit |
eace71 |
struct auth_buffer_desc auth_buffers[5];
|
|
Packit |
eace71 |
int bidirectional_auth;
|
|
Packit |
eace71 |
char username[AUTH_STR_MAX_LEN];
|
|
Packit |
eace71 |
uint8_t password[AUTH_STR_MAX_LEN];
|
|
Packit |
eace71 |
int password_length;
|
|
Packit |
eace71 |
char username_in[AUTH_STR_MAX_LEN];
|
|
Packit |
eace71 |
uint8_t password_in[AUTH_STR_MAX_LEN];
|
|
Packit |
eace71 |
int password_in_length;
|
|
Packit |
eace71 |
iscsi_conn_t conn[ISCSI_CONN_MAX];
|
|
Packit |
eace71 |
uint64_t param_mask;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* connection reopens during recovery */
|
|
Packit |
eace71 |
int reopen_cnt;
|
|
Packit |
eace71 |
int reopen_max;
|
|
Packit |
eace71 |
queue_task_t reopen_qtask;
|
|
Packit |
eace71 |
iscsi_session_r_stage_e r_stage;
|
|
Packit |
eace71 |
uint32_t replacement_timeout;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
int host_reset_timeout;
|
|
Packit |
eace71 |
int tgt_reset_timeout;
|
|
Packit |
eace71 |
int lu_reset_timeout;
|
|
Packit |
eace71 |
int abort_timeout;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/*
|
|
Packit |
eace71 |
* used for hw and sync up to notify caller that the operation
|
|
Packit |
eace71 |
* is complete
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
queue_task_t *notify_qtask;
|
|
Packit |
eace71 |
} iscsi_session_t;
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* login.c */
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#define ISCSI_SESSION_TYPE_NORMAL 0
|
|
Packit |
eace71 |
#define ISCSI_SESSION_TYPE_DISCOVERY 1
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* not defined by iSCSI, but used in the login code to determine
|
|
Packit |
eace71 |
* when to send the initial Login PDU
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
#define ISCSI_INITIAL_LOGIN_STAGE -1
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#define ISCSI_TEXT_SEPARATOR '='
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* implemented in iscsi-login.c for use on all platforms */
|
|
Packit |
eace71 |
extern int iscsi_add_text(struct iscsi_hdr *hdr, char *data, int max_data_length,
|
|
Packit |
eace71 |
char *param, char *value);
|
|
Packit |
eace71 |
extern enum iscsi_login_status iscsi_login(iscsi_session_t *session, int cid,
|
|
Packit |
eace71 |
char *buffer, size_t bufsize, uint8_t * status_class,
|
|
Packit |
eace71 |
uint8_t * status_detail);
|
|
Packit |
eace71 |
extern int iscsi_update_address(iscsi_conn_t *conn, char *address);
|
|
Packit |
eace71 |
extern int iscsi_login_begin(iscsi_session_t *session,
|
|
Packit |
eace71 |
iscsi_login_context_t *c);
|
|
Packit |
eace71 |
extern int iscsi_login_req(iscsi_session_t *session, iscsi_login_context_t *c);
|
|
Packit |
eace71 |
extern int iscsi_login_rsp(iscsi_session_t *session, iscsi_login_context_t *c);
|
|
Packit |
eace71 |
extern int resolve_address(char *host, char *port, struct sockaddr_storage *ss);
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* Digest types */
|
|
Packit |
eace71 |
#define ISCSI_DIGEST_NONE 0
|
|
Packit |
eace71 |
#define ISCSI_DIGEST_CRC32C 1
|
|
Packit |
eace71 |
#define ISCSI_DIGEST_CRC32C_NONE 2 /* offer both, prefer CRC32C */
|
|
Packit |
eace71 |
#define ISCSI_DIGEST_NONE_CRC32C 3 /* offer both, prefer None */
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
#define IRRELEVANT_MAXCONNECTIONS 0x01
|
|
Packit |
eace71 |
#define IRRELEVANT_INITIALR2T 0x02
|
|
Packit |
eace71 |
#define IRRELEVANT_IMMEDIATEDATA 0x04
|
|
Packit |
eace71 |
#define IRRELEVANT_MAXBURSTLENGTH 0x08
|
|
Packit |
eace71 |
#define IRRELEVANT_FIRSTBURSTLENGTH 0x10
|
|
Packit |
eace71 |
#define IRRELEVANT_MAXOUTSTANDINGR2T 0x20
|
|
Packit |
eace71 |
#define IRRELEVANT_DATAPDUINORDER 0x40
|
|
Packit |
eace71 |
#define IRRELEVANT_DATASEQUENCEINORDER 0x80
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/*
|
|
Packit |
eace71 |
* These user/kernel IPC calls are used by transports (eg iSER) that have their
|
|
Packit |
eace71 |
* native connection managed from the kernel. The IPC for having the user space
|
|
Packit |
eace71 |
* code being able to do it, is implemented as an enhancement of the open iscsi
|
|
Packit |
eace71 |
* netlink IPC scheme, currently with the ability to connect/poll-for-establish
|
|
Packit |
eace71 |
* ment/disconnect an opaque transport dependent 64 bit ep (endpoint) handle.
|
|
Packit |
eace71 |
* The exact IPC ABI for that matter is defined in iscsi_if.h
|
|
Packit |
eace71 |
*/
|
|
Packit |
eace71 |
/* netlink.c */
|
|
Packit |
eace71 |
extern int ktransport_ep_connect(iscsi_conn_t *conn, int non_blocking);
|
|
Packit |
eace71 |
extern int ktransport_ep_poll(iscsi_conn_t *conn, int timeout_ms);
|
|
Packit |
eace71 |
extern void ktransport_ep_disconnect(iscsi_conn_t *conn);
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* io.c */
|
|
Packit |
eace71 |
extern int iscsi_io_tcp_poll(iscsi_conn_t *conn, int timeout_ms);
|
|
Packit |
eace71 |
extern int iscsi_io_tcp_connect(iscsi_conn_t *conn, int non_blocking);
|
|
Packit |
eace71 |
extern void iscsi_io_tcp_disconnect(iscsi_conn_t *conn);
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
extern int iscsi_io_connect(iscsi_conn_t *conn);
|
|
Packit |
eace71 |
extern void iscsi_io_disconnect(iscsi_conn_t *conn);
|
|
Packit |
eace71 |
extern int iscsi_io_send_pdu(iscsi_conn_t *conn, struct iscsi_hdr *hdr,
|
|
Packit |
eace71 |
int hdr_digest, char *data, int data_digest, int timeout);
|
|
Packit |
eace71 |
extern int iscsi_io_recv_pdu(iscsi_conn_t *conn, struct iscsi_hdr *hdr,
|
|
Packit |
eace71 |
int hdr_digest, char *data, int max_data_length, int data_digest,
|
|
Packit |
eace71 |
int timeout);
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* initiator.c */
|
|
Packit |
eace71 |
extern int session_login_task(node_rec_t *rec, queue_task_t *qtask);
|
|
Packit |
eace71 |
extern int session_logout_task(int sid, queue_task_t *qtask);
|
|
Packit |
eace71 |
extern iscsi_session_t *session_find_by_sid(uint32_t sid);
|
|
Packit |
eace71 |
extern int iscsi_sync_session(node_rec_t *rec, queue_task_t
|
|
Packit |
eace71 |
*tsk, uint32_t sid);
|
|
Packit |
eace71 |
extern int iscsi_host_send_targets(queue_task_t *qtask,
|
|
Packit |
eace71 |
int host_no, int do_login, struct sockaddr_storage *ss);
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
extern void free_initiator(void);
|
|
Packit |
eace71 |
extern void iscsi_initiator_init(void);
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
/* initiator code common to discovery and normal sessions */
|
|
Packit |
eace71 |
extern int iscsi_session_set_neg_params(struct iscsi_conn *conn);
|
|
Packit |
eace71 |
extern int iscsi_session_set_params(struct iscsi_conn *conn);
|
|
Packit |
eace71 |
extern int iscsi_host_set_params(struct iscsi_session *session);
|
|
Packit |
eace71 |
extern int iscsi_host_set_net_params(struct iface_rec *iface,
|
|
Packit |
eace71 |
struct iscsi_session *session);
|
|
Packit |
eace71 |
extern void iscsi_copy_operational_params(struct iscsi_conn *conn,
|
|
Packit |
eace71 |
struct iscsi_session_operational_config *session_conf,
|
|
Packit |
eace71 |
struct iscsi_conn_operational_config *conn_conf);
|
|
Packit |
eace71 |
extern int iscsi_setup_authentication(struct iscsi_session *session,
|
|
Packit |
eace71 |
struct iscsi_auth_config *auth_cfg);
|
|
Packit |
eace71 |
extern int iscsi_setup_portal(struct iscsi_conn *conn, char *address, int port);
|
|
Packit |
eace71 |
extern int iscsi_set_net_config(struct iscsi_transport *t,
|
|
Packit |
eace71 |
iscsi_session_t *session,
|
|
Packit |
eace71 |
struct iface_rec *iface);
|
|
Packit |
eace71 |
extern void iscsi_session_init_params(struct iscsi_session *session);
|
|
Packit |
eace71 |
|
|
Packit |
eace71 |
extern int session_in_use(int sid);
|
|
Packit |
eace71 |
#endif /* INITIATOR_H */
|