[SCSI] libiscsi: add helper to convert addr to string
authorMike Christie <michaelc@cs.wisc.edu>
Wed, 16 Feb 2011 21:04:35 +0000 (15:04 -0600)
committerJames Bottomley <James.Bottomley@suse.de>
Thu, 24 Feb 2011 17:41:08 +0000 (12:41 -0500)
This adds a helper to convert a addr struct to
a string. This will be used by the drivers in
the next patches.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/libiscsi.c
include/scsi/libiscsi.h

index da8b61543ee4cbbfbf98fe7acc9990fbcafe8198..0c550d5b9133473d9308ce502a30df439e7ca077 100644 (file)
@@ -3352,6 +3352,47 @@ int iscsi_session_get_param(struct iscsi_cls_session *cls_session,
 }
 EXPORT_SYMBOL_GPL(iscsi_session_get_param);
 
+int iscsi_conn_get_addr_param(struct sockaddr_storage *addr,
+                             enum iscsi_param param, char *buf)
+{
+       struct sockaddr_in6 *sin6 = NULL;
+       struct sockaddr_in *sin = NULL;
+       int len;
+
+       switch (addr->ss_family) {
+       case AF_INET:
+               sin = (struct sockaddr_in *)addr;
+               break;
+       case AF_INET6:
+               sin6 = (struct sockaddr_in6 *)addr;
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       switch (param) {
+       case ISCSI_PARAM_CONN_ADDRESS:
+       case ISCSI_HOST_PARAM_IPADDRESS:
+               if (sin)
+                       len = sprintf(buf, "%pI4\n", &sin->sin_addr.s_addr);
+               else
+                       len = sprintf(buf, "%pI6\n", &sin6->sin6_addr);
+               break;
+       case ISCSI_PARAM_CONN_PORT:
+               if (sin)
+                       len = sprintf(buf, "%hu\n", be16_to_cpu(sin->sin_port));
+               else
+                       len = sprintf(buf, "%hu\n",
+                                     be16_to_cpu(sin6->sin6_port));
+               break;
+       default:
+               return -EINVAL;
+       }
+
+       return len;
+}
+EXPORT_SYMBOL_GPL(iscsi_conn_get_addr_param);
+
 int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn,
                         enum iscsi_param param, char *buf)
 {
@@ -3416,9 +3457,6 @@ int iscsi_host_get_param(struct Scsi_Host *shost, enum iscsi_host_param param,
        case ISCSI_HOST_PARAM_INITIATOR_NAME:
                len = sprintf(buf, "%s\n", ihost->initiatorname);
                break;
-       case ISCSI_HOST_PARAM_IPADDRESS:
-               len = sprintf(buf, "%s\n", ihost->local_address);
-               break;
        default:
                return -ENOSYS;
        }
index 748382b32b52d5ecce2c76748f171ff66333096d..4bef19fb3a65bd70325ea2393bcc01ae4f204622 100644 (file)
@@ -394,6 +394,8 @@ extern void iscsi_session_failure(struct iscsi_session *session,
                                  enum iscsi_err err);
 extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn,
                                enum iscsi_param param, char *buf);
+extern int iscsi_conn_get_addr_param(struct sockaddr_storage *addr,
+                                    enum iscsi_param param, char *buf);
 extern void iscsi_suspend_tx(struct iscsi_conn *conn);
 extern void iscsi_suspend_queue(struct iscsi_conn *conn);
 extern void iscsi_conn_queue_work(struct iscsi_conn *conn);