svn commit: r300044 - in head/sys: cam/ctl dev/iscsi
Edward Tomasz Napierala
trasz at FreeBSD.org
Tue May 17 11:10:46 UTC 2016
Author: trasz
Date: Tue May 17 11:10:44 2016
New Revision: 300044
URL: https://svnweb.freebsd.org/changeset/base/300044
Log:
Add icl_conn_connect() ICL method, required for iSER.
Obtained from: Mellanox Technologies (earlier version)
MFC after: 1 month
Sponsored by: The FreeBSD Foundation
Modified:
head/sys/cam/ctl/ctl_frontend_iscsi.c
head/sys/dev/iscsi/icl.c
head/sys/dev/iscsi/icl.h
head/sys/dev/iscsi/icl_conn_if.m
head/sys/dev/iscsi/icl_proxy.c
head/sys/dev/iscsi/icl_soft.c
head/sys/dev/iscsi/icl_wrappers.h
head/sys/dev/iscsi/iscsi.c
Modified: head/sys/cam/ctl/ctl_frontend_iscsi.c
==============================================================================
--- head/sys/cam/ctl/ctl_frontend_iscsi.c Tue May 17 09:56:22 2016 (r300043)
+++ head/sys/cam/ctl/ctl_frontend_iscsi.c Tue May 17 11:10:44 2016 (r300044)
@@ -49,6 +49,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mutex.h>
#include <sys/queue.h>
#include <sys/sbuf.h>
+#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
#include <sys/uio.h>
Modified: head/sys/dev/iscsi/icl.c
==============================================================================
--- head/sys/dev/iscsi/icl.c Tue May 17 09:56:22 2016 (r300043)
+++ head/sys/dev/iscsi/icl.c Tue May 17 11:10:44 2016 (r300044)
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include <sys/module.h>
#include <sys/queue.h>
#include <sys/sbuf.h>
+#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
#include <sys/sx.h>
Modified: head/sys/dev/iscsi/icl.h
==============================================================================
--- head/sys/dev/iscsi/icl.h Tue May 17 09:56:22 2016 (r300043)
+++ head/sys/dev/iscsi/icl.h Tue May 17 11:10:44 2016 (r300044)
@@ -139,12 +139,6 @@ struct sockaddr;
struct icl_listen;
/*
- * Initiator part.
- */
-int icl_conn_connect(struct icl_conn *ic, bool rdma,
- int domain, int socktype, int protocol,
- struct sockaddr *from_sa, struct sockaddr *to_sa);
-/*
* Target part.
*/
struct icl_listen *icl_listen_new(void (*accept_cb)(struct socket *,
@@ -156,9 +150,11 @@ int icl_listen_add(struct icl_listen *
int icl_listen_remove(struct icl_listen *il, struct sockaddr *sa);
/*
- * This one is not a public API; only to be used by icl_proxy.c.
+ * Those two are not a public API; only to be used between icl_soft.c and icl_proxy.c.
*/
-int icl_conn_handoff_sock(struct icl_conn *ic, struct socket *so);
-
+int icl_soft_handoff_sock(struct icl_conn *ic, struct socket *so);
+int icl_soft_proxy_connect(struct icl_conn *ic, int domain,
+ int socktype, int protocol, struct sockaddr *from_sa,
+ struct sockaddr *to_sa);
#endif /* ICL_KERNEL_PROXY */
#endif /* !ICL_H */
Modified: head/sys/dev/iscsi/icl_conn_if.m
==============================================================================
--- head/sys/dev/iscsi/icl_conn_if.m Tue May 17 09:56:22 2016 (r300043)
+++ head/sys/dev/iscsi/icl_conn_if.m Tue May 17 11:10:44 2016 (r300044)
@@ -29,6 +29,7 @@
# $FreeBSD$
#
+#include <sys/socket.h>
#include <dev/iscsi/icl.h>
INTERFACE icl_conn;
@@ -106,3 +107,15 @@ METHOD void transfer_done {
struct icl_conn *_ic;
void *_prv;
};
+
+#
+# The function below is only used with ICL_KERNEL_PROXY.
+#
+METHOD int connect {
+ struct icl_conn *_ic;
+ int _domain;
+ int _socktype;
+ int _protocol;
+ struct sockaddr *_from_sa;
+ struct sockaddr *_to_sa;
+};
Modified: head/sys/dev/iscsi/icl_proxy.c
==============================================================================
--- head/sys/dev/iscsi/icl_proxy.c Tue May 17 09:56:22 2016 (r300043)
+++ head/sys/dev/iscsi/icl_proxy.c Tue May 17 11:10:44 2016 (r300044)
@@ -105,8 +105,8 @@ struct icl_listen {
static MALLOC_DEFINE(M_ICL_PROXY, "ICL_PROXY", "iSCSI common layer proxy");
-static int
-icl_conn_connect_tcp(struct icl_conn *ic, int domain, int socktype,
+int
+icl_soft_proxy_connect(struct icl_conn *ic, int domain, int socktype,
int protocol, struct sockaddr *from_sa, struct sockaddr *to_sa)
{
struct socket *so;
@@ -153,26 +153,13 @@ icl_conn_connect_tcp(struct icl_conn *ic
return (error);
}
- error = icl_conn_handoff_sock(ic, so);
+ error = icl_soft_handoff_sock(ic, so);
if (error != 0)
soclose(so);
return (error);
}
-int
-icl_conn_connect(struct icl_conn *ic, bool rdma, int domain, int socktype,
- int protocol, struct sockaddr *from_sa, struct sockaddr *to_sa)
-{
-
- if (rdma) {
- ICL_DEBUG("RDMA not supported");
- return (EOPNOTSUPP);
- }
-
- return (icl_conn_connect_tcp(ic, domain, socktype, protocol, from_sa, to_sa));
-}
-
struct icl_listen *
icl_listen_new(void (*accept_cb)(struct socket *, struct sockaddr *, int))
{
Modified: head/sys/dev/iscsi/icl_soft.c
==============================================================================
--- head/sys/dev/iscsi/icl_soft.c Tue May 17 09:56:22 2016 (r300043)
+++ head/sys/dev/iscsi/icl_soft.c Tue May 17 11:10:44 2016 (r300044)
@@ -101,6 +101,9 @@ static icl_conn_task_setup_t icl_soft_co
static icl_conn_task_done_t icl_soft_conn_task_done;
static icl_conn_transfer_setup_t icl_soft_conn_transfer_setup;
static icl_conn_transfer_done_t icl_soft_conn_transfer_done;
+#ifdef ICL_KERNEL_PROXY
+static icl_conn_connect_t icl_soft_conn_connect;
+#endif
static kobj_method_t icl_soft_methods[] = {
KOBJMETHOD(icl_conn_new_pdu, icl_soft_conn_new_pdu),
@@ -117,6 +120,9 @@ static kobj_method_t icl_soft_methods[]
KOBJMETHOD(icl_conn_task_done, icl_soft_conn_task_done),
KOBJMETHOD(icl_conn_transfer_setup, icl_soft_conn_transfer_setup),
KOBJMETHOD(icl_conn_transfer_done, icl_soft_conn_transfer_done),
+#ifdef ICL_KERNEL_PROXY
+ KOBJMETHOD(icl_conn_connect, icl_soft_conn_connect),
+#endif
{ 0, 0 }
};
@@ -1460,7 +1466,16 @@ icl_soft_limits(size_t *limitp)
#ifdef ICL_KERNEL_PROXY
int
-icl_conn_handoff_sock(struct icl_conn *ic, struct socket *so)
+icl_soft_conn_connect(struct icl_conn *ic, int domain, int socktype,
+ int protocol, struct sockaddr *from_sa, struct sockaddr *to_sa)
+{
+
+ return (icl_soft_proxy_connect(ic, domain, socktype, protocol,
+ from_sa, to_sa));
+}
+
+int
+icl_soft_handoff_sock(struct icl_conn *ic, struct socket *so)
{
int error;
Modified: head/sys/dev/iscsi/icl_wrappers.h
==============================================================================
--- head/sys/dev/iscsi/icl_wrappers.h Tue May 17 09:56:22 2016 (r300043)
+++ head/sys/dev/iscsi/icl_wrappers.h Tue May 17 11:10:44 2016 (r300044)
@@ -135,4 +135,16 @@ icl_conn_transfer_done(struct icl_conn *
ICL_CONN_TRANSFER_DONE(ic, prv);
}
+/*
+ * The function below is only used with ICL_KERNEL_PROXY.
+ */
+static inline int
+icl_conn_connect(struct icl_conn *ic, int domain, int socktype,
+ int protocol, struct sockaddr *from_sa, struct sockaddr *to_sa)
+{
+
+ return (ICL_CONN_CONNECT(ic, domain, socktype, protocol,
+ from_sa, to_sa));
+}
+
#endif /* !ICL_WRAPPERS_H */
Modified: head/sys/dev/iscsi/iscsi.c
==============================================================================
--- head/sys/dev/iscsi/iscsi.c Tue May 17 09:56:22 2016 (r300043)
+++ head/sys/dev/iscsi/iscsi.c Tue May 17 11:10:44 2016 (r300044)
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
#include <sys/malloc.h>
#include <sys/mutex.h>
#include <sys/module.h>
+#include <sys/socket.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
#include <sys/sx.h>
@@ -1559,7 +1560,7 @@ iscsi_ioctl_daemon_connect(struct iscsi_
is->is_timeout = 0;
ISCSI_SESSION_UNLOCK(is);
- error = icl_conn_connect(is->is_conn, idc->idc_iser, idc->idc_domain,
+ error = icl_conn_connect(is->is_conn, idc->idc_domain,
idc->idc_socktype, idc->idc_protocol, from_sa, to_sa);
free(from_sa, M_SONAME);
free(to_sa, M_SONAME);
More information about the svn-src-all
mailing list