Re: [RFC] Add source address binding to iSER

2019-02-15 Thread The Lee-Man
On Wednesday, February 6, 2019 at 9:11:45 AM UTC-8, Nikhil Valluru wrote:
>
> Hi Robert,
>
> I am looking for a similar fix and wanted to know if this patch was 
> accepted into the linux kernel? 
>
> Thanks,
> Nikhil
>
>
As a quick look at linux upstream shows, this code is not in the kernel.

More over, looking at this old thread, I believe the original problem 
turned out to be a non-problem when Robert updated to the latest upstream.

-- 
You received this message because you are subscribed to the Google Groups 
"open-iscsi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to open-iscsi+unsubscr...@googlegroups.com.
To post to this group, send email to open-iscsi@googlegroups.com.
Visit this group at https://groups.google.com/group/open-iscsi.
For more options, visit https://groups.google.com/d/optout.


Re: [RFC] Add source address binding to iSER

2019-02-06 Thread Nikhil Valluru
Hi Robert,

I am looking for a similar fix and wanted to know if this patch was 
accepted into the linux kernel? 

Thanks,
Nikhil

On Friday, 2 June 2017 19:20:52 UTC-4, Robert LeBlanc wrote:
>
> The error that I was getting was due to the distro version of iscsid 
> running. Once I stopped that and ran iscsid from the patched source, 
> it logged in just fine. 
>  
> Robert LeBlanc 
> PGP Fingerprint 79A2 9CA4 6CC4 45DD A904  C70E E654 3BB2 FA62 B9F1 
>
>
> On Fri, Jun 2, 2017 at 2:29 PM, Robert LeBlanc  > wrote: 
> > Attaching patches in case they are mangled. 
> >  
> > Robert LeBlanc 
> > PGP Fingerprint 79A2 9CA4 6CC4 45DD A904  C70E E654 3BB2 FA62 B9F1 
> > 
> > 
> > On Fri, Jun 2, 2017 at 1:13 PM, Robert LeBlanc  > wrote: 
> >> First off, I've never done anything this complicated, please be gentle. 
> >> 
> >> Second, I know this will need to be broken up, but I'm not clear if 
> >> each commit should be able to compile. It seems having a commit for 
> >> each driver would make sense, but it won't compile cleanly without the 
> >> others. How do I go about that? 
> >> 
> >> Third, this required a change to the kernel API(?) and I'm not sure 
> >> the best way to to make that change backwards compatible. 
> >> 
> >> Forth, I'm getting an error on login. I don't think the kernel is even 
> >> trying the login. Maybe I can get a pointer to help me get this 
> >> resolved. 
> >> 
> >> # usr/iscsiadm -m iface -I iser3 
> >> # BEGIN RECORD 2.0-874 
> >> iface.iscsi_ifacename = iser3 
> >> iface.net_ifacename =  
> >> iface.ipaddress = fd00::14 
> >> ... 
> >> # usr/iscsiadm -m iface -I iser4 
> >> # BEGIN RECORD 2.0-874 
> >> iface.iscsi_ifacename = iser4 
> >> iface.net_ifacename =  
> >> iface.ipaddress = fd00::114 
> >> ... 
> >> # usr/iscsiadm -m discovery -t st -p fd00::13 -I iser3 -I iser4 
> >> [fd00::13]:3260,1 iqn.2016-12.com.betterservers 
> >> [fd00::13]:3260,1 iqn.2016-12.com.betterservers 
> >> # usr/iscsiadm -m node -T iqn.2016-12.com.betterservers -p 
> [fd00::13]:3260 -l 
> >> Logging in to [iface: iser3, target: iqn.2016-12.com.betterservers, 
> >> portal: fd00::13,3260] (multiple) 
> >> Logging in to [iface: iser4, target: iqn.2016-12.com.betterservers, 
> >> portal: fd00::13,3260] (multiple) 
> >> iscsiadm: Could not login to [iface: iser3, target: 
> >> iqn.2016-12.com.betterservers, portal: fd00::13,3260]. 
> >> iscsiadm: initiator reported error (12 - iSCSI driver not found. 
> >> Please make sure it is loaded, and retry the operation) 
> >> iscsiadm: Could not login to [iface: iser4, target: 
> >> iqn.2016-12.com.betterservers, portal: fd00::13,3260]. 
> >> iscsiadm: initiator reported error (12 - iSCSI driver not found. 
> >> Please make sure it is loaded, and retry the operation) 
> >> iscsiadm: Could not log into all portals 
> >> 
> >> Patch to open-iscsi 
> >>  
> >> diff --git a/usr/netlink.c b/usr/netlink.c 
> >> index 1a0bf80..c474375 100644 
> >> --- a/usr/netlink.c 
> >> +++ b/usr/netlink.c 
> >> @@ -848,10 +848,13 @@ krecv_pdu_end(struct iscsi_conn *conn) 
> >>  int 
> >>  ktransport_ep_connect(iscsi_conn_t *conn, int non_blocking) 
> >>  { 
> >> -int rc, addrlen; 
> >> +int rc, addrlen = sizeof(struct sockaddr_storage); 
> >>  struct iscsi_uevent *ev; 
> >> -struct sockaddr *dst_addr = (struct sockaddr *)>saddr; 
> >> +struct sockaddr_storage *dst_addr = (struct sockaddr_storage 
> >> *)>saddr; 
> >>  struct iovec iov[2]; 
> >> +struct iscsi_session *tmp_session = (struct iscsi_session 
> >> *)conn->session; 
> >> +node_rec_t *tmp_rec = (node_rec_t *)_session->nrec; 
> >> +iface_rec_t *tmp_iface = (iface_rec_t *)_rec->iface; 
> >> 
> >>  log_debug(7, "in %s", __FUNCTION__); 
> >> 
> >> @@ -868,19 +871,16 @@ ktransport_ep_connect(iscsi_conn_t *conn, int 
> >> non_blocking) 
> >>  ev->u.ep_connect.non_blocking = non_blocking; 
> >>  } 
> >> 
> >> -if (dst_addr->sa_family == PF_INET) 
> >> -addrlen = sizeof(struct sockaddr_in); 
> >> -else if (dst_addr->sa_family == PF_INET6) 
> >> -addrlen = sizeof(struct sockaddr_in6); 
> >> -else { 
> >> +if (dst_addr->ss_family != AF_INET && dst_addr->ss_family != 
> >> AF_INET6) { 
> >>  log_error("%s unknown addr family %d", 
> >> - __FUNCTION__, dst_addr->sa_family); 
> >> + __FUNCTION__, dst_addr->ss_family); 
> >>  return -EINVAL; 
> >>  } 
> >>  memcpy(setparam_buf + sizeof(*ev), dst_addr, addrlen); 
> >> +iface_copy(setparam_buf + sizeof(*ev) + addrlen, tmp_iface); 
> >> 
> >>  iov[1].iov_base = ev; 
> >> -iov[1].iov_len = sizeof(*ev) + addrlen; 
> >> +iov[1].iov_len = sizeof(*ev) + addrlen + sizeof(iface_rec_t); 
> >>  rc = __kipc_call(iov, 2); 
> >>  if (rc < 0) 

Re: [RFC] Add source address binding to iSER

2017-06-02 Thread Robert LeBlanc
The error that I was getting was due to the distro version of iscsid
running. Once I stopped that and ran iscsid from the patched source,
it logged in just fine.

Robert LeBlanc
PGP Fingerprint 79A2 9CA4 6CC4 45DD A904  C70E E654 3BB2 FA62 B9F1


On Fri, Jun 2, 2017 at 2:29 PM, Robert LeBlanc  wrote:
> Attaching patches in case they are mangled.
> 
> Robert LeBlanc
> PGP Fingerprint 79A2 9CA4 6CC4 45DD A904  C70E E654 3BB2 FA62 B9F1
>
>
> On Fri, Jun 2, 2017 at 1:13 PM, Robert LeBlanc  wrote:
>> First off, I've never done anything this complicated, please be gentle.
>>
>> Second, I know this will need to be broken up, but I'm not clear if
>> each commit should be able to compile. It seems having a commit for
>> each driver would make sense, but it won't compile cleanly without the
>> others. How do I go about that?
>>
>> Third, this required a change to the kernel API(?) and I'm not sure
>> the best way to to make that change backwards compatible.
>>
>> Forth, I'm getting an error on login. I don't think the kernel is even
>> trying the login. Maybe I can get a pointer to help me get this
>> resolved.
>>
>> # usr/iscsiadm -m iface -I iser3
>> # BEGIN RECORD 2.0-874
>> iface.iscsi_ifacename = iser3
>> iface.net_ifacename = 
>> iface.ipaddress = fd00::14
>> ...
>> # usr/iscsiadm -m iface -I iser4
>> # BEGIN RECORD 2.0-874
>> iface.iscsi_ifacename = iser4
>> iface.net_ifacename = 
>> iface.ipaddress = fd00::114
>> ...
>> # usr/iscsiadm -m discovery -t st -p fd00::13 -I iser3 -I iser4
>> [fd00::13]:3260,1 iqn.2016-12.com.betterservers
>> [fd00::13]:3260,1 iqn.2016-12.com.betterservers
>> # usr/iscsiadm -m node -T iqn.2016-12.com.betterservers -p [fd00::13]:3260 -l
>> Logging in to [iface: iser3, target: iqn.2016-12.com.betterservers,
>> portal: fd00::13,3260] (multiple)
>> Logging in to [iface: iser4, target: iqn.2016-12.com.betterservers,
>> portal: fd00::13,3260] (multiple)
>> iscsiadm: Could not login to [iface: iser3, target:
>> iqn.2016-12.com.betterservers, portal: fd00::13,3260].
>> iscsiadm: initiator reported error (12 - iSCSI driver not found.
>> Please make sure it is loaded, and retry the operation)
>> iscsiadm: Could not login to [iface: iser4, target:
>> iqn.2016-12.com.betterservers, portal: fd00::13,3260].
>> iscsiadm: initiator reported error (12 - iSCSI driver not found.
>> Please make sure it is loaded, and retry the operation)
>> iscsiadm: Could not log into all portals
>>
>> Patch to open-iscsi
>> 
>> diff --git a/usr/netlink.c b/usr/netlink.c
>> index 1a0bf80..c474375 100644
>> --- a/usr/netlink.c
>> +++ b/usr/netlink.c
>> @@ -848,10 +848,13 @@ krecv_pdu_end(struct iscsi_conn *conn)
>>  int
>>  ktransport_ep_connect(iscsi_conn_t *conn, int non_blocking)
>>  {
>> -int rc, addrlen;
>> +int rc, addrlen = sizeof(struct sockaddr_storage);
>>  struct iscsi_uevent *ev;
>> -struct sockaddr *dst_addr = (struct sockaddr *)>saddr;
>> +struct sockaddr_storage *dst_addr = (struct sockaddr_storage
>> *)>saddr;
>>  struct iovec iov[2];
>> +struct iscsi_session *tmp_session = (struct iscsi_session
>> *)conn->session;
>> +node_rec_t *tmp_rec = (node_rec_t *)_session->nrec;
>> +iface_rec_t *tmp_iface = (iface_rec_t *)_rec->iface;
>>
>>  log_debug(7, "in %s", __FUNCTION__);
>>
>> @@ -868,19 +871,16 @@ ktransport_ep_connect(iscsi_conn_t *conn, int
>> non_blocking)
>>  ev->u.ep_connect.non_blocking = non_blocking;
>>  }
>>
>> -if (dst_addr->sa_family == PF_INET)
>> -addrlen = sizeof(struct sockaddr_in);
>> -else if (dst_addr->sa_family == PF_INET6)
>> -addrlen = sizeof(struct sockaddr_in6);
>> -else {
>> +if (dst_addr->ss_family != AF_INET && dst_addr->ss_family !=
>> AF_INET6) {
>>  log_error("%s unknown addr family %d",
>> - __FUNCTION__, dst_addr->sa_family);
>> + __FUNCTION__, dst_addr->ss_family);
>>  return -EINVAL;
>>  }
>>  memcpy(setparam_buf + sizeof(*ev), dst_addr, addrlen);
>> +iface_copy(setparam_buf + sizeof(*ev) + addrlen, tmp_iface);
>>
>>  iov[1].iov_base = ev;
>> -iov[1].iov_len = sizeof(*ev) + addrlen;
>> +iov[1].iov_len = sizeof(*ev) + addrlen + sizeof(iface_rec_t);
>>  rc = __kipc_call(iov, 2);
>>  if (rc < 0)
>>  return rc;
>>
>> Patch to kernel
>> --
>> diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c
>> b/drivers/infiniband/ulp/iser/iscsi_iser.c
>> index 5a887ef..7ba5ed9 100644
>> --- a/drivers/infiniband/ulp/iser/iscsi_iser.c
>> +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
>> @@ -59,6 +59,7 @@
>>  #include 
>>  #include 
>>  #include 
>> +#include 
>>
>>  #include 
>>
>> @@ -808,12 +809,16 @@ static int iscsi_iser_get_ep_param(struct

Re: [RFC] Add source address binding to iSER

2017-06-02 Thread Robert LeBlanc
Attaching patches in case they are mangled.

Robert LeBlanc
PGP Fingerprint 79A2 9CA4 6CC4 45DD A904  C70E E654 3BB2 FA62 B9F1


On Fri, Jun 2, 2017 at 1:13 PM, Robert LeBlanc  wrote:
> First off, I've never done anything this complicated, please be gentle.
>
> Second, I know this will need to be broken up, but I'm not clear if
> each commit should be able to compile. It seems having a commit for
> each driver would make sense, but it won't compile cleanly without the
> others. How do I go about that?
>
> Third, this required a change to the kernel API(?) and I'm not sure
> the best way to to make that change backwards compatible.
>
> Forth, I'm getting an error on login. I don't think the kernel is even
> trying the login. Maybe I can get a pointer to help me get this
> resolved.
>
> # usr/iscsiadm -m iface -I iser3
> # BEGIN RECORD 2.0-874
> iface.iscsi_ifacename = iser3
> iface.net_ifacename = 
> iface.ipaddress = fd00::14
> ...
> # usr/iscsiadm -m iface -I iser4
> # BEGIN RECORD 2.0-874
> iface.iscsi_ifacename = iser4
> iface.net_ifacename = 
> iface.ipaddress = fd00::114
> ...
> # usr/iscsiadm -m discovery -t st -p fd00::13 -I iser3 -I iser4
> [fd00::13]:3260,1 iqn.2016-12.com.betterservers
> [fd00::13]:3260,1 iqn.2016-12.com.betterservers
> # usr/iscsiadm -m node -T iqn.2016-12.com.betterservers -p [fd00::13]:3260 -l
> Logging in to [iface: iser3, target: iqn.2016-12.com.betterservers,
> portal: fd00::13,3260] (multiple)
> Logging in to [iface: iser4, target: iqn.2016-12.com.betterservers,
> portal: fd00::13,3260] (multiple)
> iscsiadm: Could not login to [iface: iser3, target:
> iqn.2016-12.com.betterservers, portal: fd00::13,3260].
> iscsiadm: initiator reported error (12 - iSCSI driver not found.
> Please make sure it is loaded, and retry the operation)
> iscsiadm: Could not login to [iface: iser4, target:
> iqn.2016-12.com.betterservers, portal: fd00::13,3260].
> iscsiadm: initiator reported error (12 - iSCSI driver not found.
> Please make sure it is loaded, and retry the operation)
> iscsiadm: Could not log into all portals
>
> Patch to open-iscsi
> 
> diff --git a/usr/netlink.c b/usr/netlink.c
> index 1a0bf80..c474375 100644
> --- a/usr/netlink.c
> +++ b/usr/netlink.c
> @@ -848,10 +848,13 @@ krecv_pdu_end(struct iscsi_conn *conn)
>  int
>  ktransport_ep_connect(iscsi_conn_t *conn, int non_blocking)
>  {
> -int rc, addrlen;
> +int rc, addrlen = sizeof(struct sockaddr_storage);
>  struct iscsi_uevent *ev;
> -struct sockaddr *dst_addr = (struct sockaddr *)>saddr;
> +struct sockaddr_storage *dst_addr = (struct sockaddr_storage
> *)>saddr;
>  struct iovec iov[2];
> +struct iscsi_session *tmp_session = (struct iscsi_session
> *)conn->session;
> +node_rec_t *tmp_rec = (node_rec_t *)_session->nrec;
> +iface_rec_t *tmp_iface = (iface_rec_t *)_rec->iface;
>
>  log_debug(7, "in %s", __FUNCTION__);
>
> @@ -868,19 +871,16 @@ ktransport_ep_connect(iscsi_conn_t *conn, int
> non_blocking)
>  ev->u.ep_connect.non_blocking = non_blocking;
>  }
>
> -if (dst_addr->sa_family == PF_INET)
> -addrlen = sizeof(struct sockaddr_in);
> -else if (dst_addr->sa_family == PF_INET6)
> -addrlen = sizeof(struct sockaddr_in6);
> -else {
> +if (dst_addr->ss_family != AF_INET && dst_addr->ss_family !=
> AF_INET6) {
>  log_error("%s unknown addr family %d",
> - __FUNCTION__, dst_addr->sa_family);
> + __FUNCTION__, dst_addr->ss_family);
>  return -EINVAL;
>  }
>  memcpy(setparam_buf + sizeof(*ev), dst_addr, addrlen);
> +iface_copy(setparam_buf + sizeof(*ev) + addrlen, tmp_iface);
>
>  iov[1].iov_base = ev;
> -iov[1].iov_len = sizeof(*ev) + addrlen;
> +iov[1].iov_len = sizeof(*ev) + addrlen + sizeof(iface_rec_t);
>  rc = __kipc_call(iov, 2);
>  if (rc < 0)
>  return rc;
>
> Patch to kernel
> --
> diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c
> b/drivers/infiniband/ulp/iser/iscsi_iser.c
> index 5a887ef..7ba5ed9 100644
> --- a/drivers/infiniband/ulp/iser/iscsi_iser.c
> +++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
> @@ -59,6 +59,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>
>  #include 
>
> @@ -808,12 +809,16 @@ static int iscsi_iser_get_ep_param(struct
> iscsi_endpoint *ep,
>   * if fails.
>   */
>  static struct iscsi_endpoint *
> -iscsi_iser_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
> -  int non_blocking)
> +iscsi_iser_ep_connect(struct Scsi_Host *shost, struct
> sockaddr_storage *dst_addr,
> +  int non_blocking, struct iface_rec *iface)
>  {
>  int err;
>  struct iser_conn *iser_conn;
>  struct iscsi_endpoint 

[RFC] Add source address binding to iSER

2017-06-02 Thread Robert LeBlanc
First off, I've never done anything this complicated, please be gentle.

Second, I know this will need to be broken up, but I'm not clear if
each commit should be able to compile. It seems having a commit for
each driver would make sense, but it won't compile cleanly without the
others. How do I go about that?

Third, this required a change to the kernel API(?) and I'm not sure
the best way to to make that change backwards compatible.

Forth, I'm getting an error on login. I don't think the kernel is even
trying the login. Maybe I can get a pointer to help me get this
resolved.

# usr/iscsiadm -m iface -I iser3
# BEGIN RECORD 2.0-874
iface.iscsi_ifacename = iser3
iface.net_ifacename = 
iface.ipaddress = fd00::14
...
# usr/iscsiadm -m iface -I iser4
# BEGIN RECORD 2.0-874
iface.iscsi_ifacename = iser4
iface.net_ifacename = 
iface.ipaddress = fd00::114
...
# usr/iscsiadm -m discovery -t st -p fd00::13 -I iser3 -I iser4
[fd00::13]:3260,1 iqn.2016-12.com.betterservers
[fd00::13]:3260,1 iqn.2016-12.com.betterservers
# usr/iscsiadm -m node -T iqn.2016-12.com.betterservers -p [fd00::13]:3260 -l
Logging in to [iface: iser3, target: iqn.2016-12.com.betterservers,
portal: fd00::13,3260] (multiple)
Logging in to [iface: iser4, target: iqn.2016-12.com.betterservers,
portal: fd00::13,3260] (multiple)
iscsiadm: Could not login to [iface: iser3, target:
iqn.2016-12.com.betterservers, portal: fd00::13,3260].
iscsiadm: initiator reported error (12 - iSCSI driver not found.
Please make sure it is loaded, and retry the operation)
iscsiadm: Could not login to [iface: iser4, target:
iqn.2016-12.com.betterservers, portal: fd00::13,3260].
iscsiadm: initiator reported error (12 - iSCSI driver not found.
Please make sure it is loaded, and retry the operation)
iscsiadm: Could not log into all portals

Patch to open-iscsi

diff --git a/usr/netlink.c b/usr/netlink.c
index 1a0bf80..c474375 100644
--- a/usr/netlink.c
+++ b/usr/netlink.c
@@ -848,10 +848,13 @@ krecv_pdu_end(struct iscsi_conn *conn)
 int
 ktransport_ep_connect(iscsi_conn_t *conn, int non_blocking)
 {
-int rc, addrlen;
+int rc, addrlen = sizeof(struct sockaddr_storage);
 struct iscsi_uevent *ev;
-struct sockaddr *dst_addr = (struct sockaddr *)>saddr;
+struct sockaddr_storage *dst_addr = (struct sockaddr_storage
*)>saddr;
 struct iovec iov[2];
+struct iscsi_session *tmp_session = (struct iscsi_session
*)conn->session;
+node_rec_t *tmp_rec = (node_rec_t *)_session->nrec;
+iface_rec_t *tmp_iface = (iface_rec_t *)_rec->iface;

 log_debug(7, "in %s", __FUNCTION__);

@@ -868,19 +871,16 @@ ktransport_ep_connect(iscsi_conn_t *conn, int
non_blocking)
 ev->u.ep_connect.non_blocking = non_blocking;
 }

-if (dst_addr->sa_family == PF_INET)
-addrlen = sizeof(struct sockaddr_in);
-else if (dst_addr->sa_family == PF_INET6)
-addrlen = sizeof(struct sockaddr_in6);
-else {
+if (dst_addr->ss_family != AF_INET && dst_addr->ss_family !=
AF_INET6) {
 log_error("%s unknown addr family %d",
- __FUNCTION__, dst_addr->sa_family);
+ __FUNCTION__, dst_addr->ss_family);
 return -EINVAL;
 }
 memcpy(setparam_buf + sizeof(*ev), dst_addr, addrlen);
+iface_copy(setparam_buf + sizeof(*ev) + addrlen, tmp_iface);

 iov[1].iov_base = ev;
-iov[1].iov_len = sizeof(*ev) + addrlen;
+iov[1].iov_len = sizeof(*ev) + addrlen + sizeof(iface_rec_t);
 rc = __kipc_call(iov, 2);
 if (rc < 0)
 return rc;

Patch to kernel
--
diff --git a/drivers/infiniband/ulp/iser/iscsi_iser.c
b/drivers/infiniband/ulp/iser/iscsi_iser.c
index 5a887ef..7ba5ed9 100644
--- a/drivers/infiniband/ulp/iser/iscsi_iser.c
+++ b/drivers/infiniband/ulp/iser/iscsi_iser.c
@@ -59,6 +59,7 @@
 #include 
 #include 
 #include 
+#include 

 #include 

@@ -808,12 +809,16 @@ static int iscsi_iser_get_ep_param(struct
iscsi_endpoint *ep,
  * if fails.
  */
 static struct iscsi_endpoint *
-iscsi_iser_ep_connect(struct Scsi_Host *shost, struct sockaddr *dst_addr,
-  int non_blocking)
+iscsi_iser_ep_connect(struct Scsi_Host *shost, struct
sockaddr_storage *dst_addr,
+  int non_blocking, struct iface_rec *iface)
 {
 int err;
 struct iser_conn *iser_conn;
 struct iscsi_endpoint *ep;
+struct sockaddr_storage src_addr;
+struct sockaddr_in *tmp_addr;
+struct sockaddr_in6 *tmp_addr6;
+memset(_addr, 0, sizeof(src_addr));

 ep = iscsi_create_endpoint(0);
 if (!ep)
@@ -828,8 +833,28 @@ static int iscsi_iser_get_ep_param(struct
iscsi_endpoint *ep,
 ep->dd_data = iser_conn;
 iser_conn->ep = ep;
 iser_conn_init(iser_conn);
-
-err = iser_connect(iser_conn, NULL,