Index: sys/dev/iscsi/icl.h =================================================================== --- sys/dev/iscsi/icl.h +++ sys/dev/iscsi/icl.h @@ -144,9 +144,9 @@ struct icl_conn *(*new_conn)(const char *, struct mtx *)); int icl_unregister(const char *offload, bool rdma); -#ifdef ICL_KERNEL_PROXY - struct sockaddr; + +#ifdef ICL_KERNEL_PROXY struct icl_listen; /* @@ -160,13 +160,13 @@ struct sockaddr *sa, int portal_id); int icl_listen_remove(struct icl_listen *il, struct sockaddr *sa); +#endif /* ICL_KERNEL_PROXY */ + /* - * Those two are not a public API; only to be used between icl_soft.c + * Those are not a public API; only to be used between icl_soft.c, iscsi.c * and icl_soft_proxy.c. */ -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 */ Index: sys/dev/iscsi/icl_conn_if.m =================================================================== --- sys/dev/iscsi/icl_conn_if.m +++ sys/dev/iscsi/icl_conn_if.m @@ -96,6 +96,11 @@ int _fd; }; +METHOD int handoff_sock { + struct icl_conn *_ic; + struct socket *so; +}; + METHOD void close { struct icl_conn *_ic; }; Index: sys/dev/iscsi/icl_soft.c =================================================================== --- sys/dev/iscsi/icl_soft.c +++ sys/dev/iscsi/icl_soft.c @@ -134,6 +134,7 @@ static icl_conn_pdu_queue_t icl_soft_conn_pdu_queue; static icl_conn_pdu_queue_cb_t icl_soft_conn_pdu_queue_cb; static icl_conn_handoff_t icl_soft_conn_handoff; +static icl_conn_handoff_sock_t icl_soft_conn_handoff_sock; static icl_conn_free_t icl_soft_conn_free; static icl_conn_close_t icl_soft_conn_close; static icl_conn_task_setup_t icl_soft_conn_task_setup; @@ -154,6 +155,7 @@ KOBJMETHOD(icl_conn_pdu_queue, icl_soft_conn_pdu_queue), KOBJMETHOD(icl_conn_pdu_queue_cb, icl_soft_conn_pdu_queue_cb), KOBJMETHOD(icl_conn_handoff, icl_soft_conn_handoff), + KOBJMETHOD(icl_conn_handoff_sock, icl_soft_conn_handoff_sock), KOBJMETHOD(icl_conn_free, icl_soft_conn_free), KOBJMETHOD(icl_conn_close, icl_soft_conn_close), KOBJMETHOD(icl_conn_task_setup, icl_soft_conn_task_setup), @@ -1496,9 +1498,10 @@ return (icl_soft_proxy_connect(ic, domain, socktype, protocol, from_sa, to_sa)); } +#endif /* ICL_KERNEL_PROXY */ int -icl_soft_handoff_sock(struct icl_conn *ic, struct socket *so) +icl_soft_conn_handoff_sock(struct icl_conn *ic, struct socket *so) { int error; @@ -1519,7 +1522,6 @@ return (error); } -#endif /* ICL_KERNEL_PROXY */ static int icl_soft_load(void) Index: sys/dev/iscsi/icl_soft_proxy.c =================================================================== --- sys/dev/iscsi/icl_soft_proxy.c +++ sys/dev/iscsi/icl_soft_proxy.c @@ -64,8 +64,6 @@ * iSCSI Common Layer, kernel proxy part. */ -#ifdef ICL_KERNEL_PROXY - #include __FBSDID("$FreeBSD$"); @@ -87,6 +85,9 @@ #include #include +#include + +#ifdef ICL_KERNEL_PROXY struct icl_listen_sock { TAILQ_ENTRY(icl_listen_sock) ils_next; @@ -105,6 +106,8 @@ static MALLOC_DEFINE(M_ICL_PROXY, "ICL_PROXY", "iSCSI common layer proxy"); +#endif /* ICL_KERNEL_PROXY */ + int icl_soft_proxy_connect(struct icl_conn *ic, int domain, int socktype, int protocol, struct sockaddr *from_sa, struct sockaddr *to_sa) @@ -149,13 +152,15 @@ return (error); } - error = icl_soft_handoff_sock(ic, so); + error = ICL_CONN_HANDOFF_SOCK(ic, so); if (error != 0) soclose(so); return (error); } +#ifdef ICL_KERNEL_PROXY + struct icl_listen * icl_listen_new(void (*accept_cb)(struct socket *, struct sockaddr *, int)) { Index: sys/dev/iscsi/icl_wrappers.h =================================================================== --- sys/dev/iscsi/icl_wrappers.h +++ sys/dev/iscsi/icl_wrappers.h @@ -106,6 +106,13 @@ return (ICL_CONN_HANDOFF(ic, fd)); } +static inline int +icl_conn_handoff_sock(struct icl_conn *ic, struct socket *so) +{ + + return (ICL_CONN_HANDOFF_SOCK(ic, so)); +} + static inline void icl_conn_close(struct icl_conn *ic) {