Libiscsi: Adding transport layer into all library utilities
lib/init: initializing connection transport
lib/socket: Adding function to initialize tcp transport.
future commits will include adding iSER transport layer,
so each transport option will has it's own template of functions.
all_utils: All utils stay the same, in future iSER commits in case of
iSER transport we will override tcp_transport in
iscsi_context.
connect: adding transport initialization when creating context
include/iscsi-private: Adding iscsi_transport attribute in iscsi_context
Signed-off-by: Roy Shterman <roysh@mellanox.com>
Make iscsi_init_tcp_transport private
Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
committed by
Ronnie Sahlberg
parent
e26f6fe51a
commit
9378a39ddc
@@ -66,7 +66,21 @@ void iscsi_free_iscsi_inqueue(struct iscsi_context *iscsi, struct iscsi_in_pdu *
|
|||||||
/* max length of chap challange */
|
/* max length of chap challange */
|
||||||
#define MAX_CHAP_C_LENGTH 2048
|
#define MAX_CHAP_C_LENGTH 2048
|
||||||
|
|
||||||
|
struct iscsi_transport {
|
||||||
|
|
||||||
|
int temp;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct tcp_transport {
|
||||||
|
|
||||||
|
struct iscsi_transport t;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
struct iscsi_context {
|
struct iscsi_context {
|
||||||
|
|
||||||
|
struct iscsi_transport *t;
|
||||||
|
enum iscsi_transport_type transport;
|
||||||
char initiator_name[MAX_STRING_SIZE+1];
|
char initiator_name[MAX_STRING_SIZE+1];
|
||||||
char target_name[MAX_STRING_SIZE+1];
|
char target_name[MAX_STRING_SIZE+1];
|
||||||
char target_address[MAX_STRING_SIZE+1]; /* If a redirect */
|
char target_address[MAX_STRING_SIZE+1]; /* If a redirect */
|
||||||
@@ -372,6 +386,8 @@ void iscsi_timeout_scan(struct iscsi_context *iscsi);
|
|||||||
void iscsi_reconnect_cb(struct iscsi_context *iscsi _U_, int status,
|
void iscsi_reconnect_cb(struct iscsi_context *iscsi _U_, int status,
|
||||||
void *command_data, void *private_data);
|
void *command_data, void *private_data);
|
||||||
|
|
||||||
|
void iscsi_init_tcp_transport(struct iscsi_context *iscsi);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ struct sockaddr;
|
|||||||
#define ISCSI_PORTAL_URL_SYNTAX "\"iscsi://[<username>[%<password>]@]" \
|
#define ISCSI_PORTAL_URL_SYNTAX "\"iscsi://[<username>[%<password>]@]" \
|
||||||
"<host>[:<port>]\""
|
"<host>[:<port>]\""
|
||||||
|
|
||||||
|
enum iscsi_transport_type {
|
||||||
|
TCP_TRANSPORT = 0
|
||||||
|
};
|
||||||
|
|
||||||
EXTERN void iscsi_set_cache_allocations(struct iscsi_context *iscsi, int ca);
|
EXTERN void iscsi_set_cache_allocations(struct iscsi_context *iscsi, int ca);
|
||||||
|
|
||||||
@@ -244,6 +247,18 @@ EXTERN struct iscsi_context *iscsi_create_context(const char *initiator_name);
|
|||||||
*/
|
*/
|
||||||
EXTERN int iscsi_destroy_context(struct iscsi_context *iscsi);
|
EXTERN int iscsi_destroy_context(struct iscsi_context *iscsi);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sets and initializes the transport type for a context.
|
||||||
|
* TCP_TRANSPORT is the default and is available on all platforms.
|
||||||
|
* ISER_TRANSPORT is conditionally supported on Linux where available.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0: success
|
||||||
|
* <0: error
|
||||||
|
*/
|
||||||
|
EXTERN int iscsi_init_transport(struct iscsi_context *iscsi,
|
||||||
|
enum iscsi_transport_type transport);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set an optional alias name to identify with when connecting to the target
|
* Set an optional alias name to identify with when connecting to the target
|
||||||
*
|
*
|
||||||
|
|||||||
39
lib/init.c
39
lib/init.c
@@ -34,6 +34,39 @@
|
|||||||
#include "iscsi-private.h"
|
#include "iscsi-private.h"
|
||||||
#include "slist.h"
|
#include "slist.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize transport type of session
|
||||||
|
*/
|
||||||
|
|
||||||
|
int iscsi_init_transport(struct iscsi_context *iscsi,
|
||||||
|
enum iscsi_transport_type transport) {
|
||||||
|
struct tcp_transport *tcp_transport;
|
||||||
|
|
||||||
|
if (iscsi->t) {
|
||||||
|
iscsi_free(iscsi, iscsi->t);
|
||||||
|
iscsi->t = NULL;
|
||||||
|
}
|
||||||
|
iscsi->transport = transport;
|
||||||
|
|
||||||
|
switch (iscsi->transport) {
|
||||||
|
case TCP_TRANSPORT:
|
||||||
|
tcp_transport = iscsi_malloc(iscsi, sizeof(struct tcp_transport));
|
||||||
|
if (tcp_transport == NULL) {
|
||||||
|
iscsi_set_error(iscsi, "Couldn't allocate memory for transport\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
iscsi->t = &tcp_transport->t;
|
||||||
|
iscsi_init_tcp_transport(iscsi);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
iscsi_set_error(iscsi, "Unfamiliar transport type");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether or not the internal memory allocator caches allocations. Disable
|
* Whether or not the internal memory allocator caches allocations. Disable
|
||||||
* memory allocation caching to improve the accuracy of Valgrind reports.
|
* memory allocation caching to improve the accuracy of Valgrind reports.
|
||||||
@@ -125,6 +158,12 @@ iscsi_create_context(const char *initiator_name)
|
|||||||
|
|
||||||
memset(iscsi, 0, sizeof(struct iscsi_context));
|
memset(iscsi, 0, sizeof(struct iscsi_context));
|
||||||
|
|
||||||
|
/* initalize transport of context */
|
||||||
|
if (iscsi_init_transport(iscsi, TCP_TRANSPORT)) {
|
||||||
|
iscsi_set_error(iscsi, "Failed allocating transport");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
strncpy(iscsi->initiator_name,initiator_name,MAX_STRING_SIZE);
|
strncpy(iscsi->initiator_name,initiator_name,MAX_STRING_SIZE);
|
||||||
|
|
||||||
iscsi->fd = -1;
|
iscsi->fd = -1;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ iscsi_get_lba_status_sync
|
|||||||
iscsi_get_lba_status_task
|
iscsi_get_lba_status_task
|
||||||
iscsi_get_target_address
|
iscsi_get_target_address
|
||||||
iscsi_get_nops_in_flight
|
iscsi_get_nops_in_flight
|
||||||
|
iscsi_init_transport
|
||||||
iscsi_inquiry_sync
|
iscsi_inquiry_sync
|
||||||
iscsi_inquiry_task
|
iscsi_inquiry_task
|
||||||
iscsi_is_logged_in
|
iscsi_is_logged_in
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ iscsi_get_lba_status_sync
|
|||||||
iscsi_get_lba_status_task
|
iscsi_get_lba_status_task
|
||||||
iscsi_get_target_address
|
iscsi_get_target_address
|
||||||
iscsi_get_nops_in_flight
|
iscsi_get_nops_in_flight
|
||||||
|
iscsi_init_transport
|
||||||
iscsi_inquiry_sync
|
iscsi_inquiry_sync
|
||||||
iscsi_inquiry_task
|
iscsi_inquiry_task
|
||||||
iscsi_is_logged_in
|
iscsi_is_logged_in
|
||||||
|
|||||||
@@ -72,6 +72,14 @@
|
|||||||
#include "slist.h"
|
#include "slist.h"
|
||||||
|
|
||||||
static uint32_t iface_rr = 0;
|
static uint32_t iface_rr = 0;
|
||||||
|
struct iscsi_transport;
|
||||||
|
|
||||||
|
void iscsi_init_tcp_transport(struct iscsi_context *iscsi)
|
||||||
|
{
|
||||||
|
iscsi->t = NULL;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
iscsi_add_to_outqueue(struct iscsi_context *iscsi, struct iscsi_pdu *pdu)
|
iscsi_add_to_outqueue(struct iscsi_context *iscsi, struct iscsi_pdu *pdu)
|
||||||
|
|||||||
Reference in New Issue
Block a user