Re: [PATCH v2] staging: usbip: add support for viewing imported devices

2013-12-23 Thread Ilija Hadzic


This looks better, but there are still two minor issues:

You have one trailing whtespace error. Please the scripts/checkpatch.pl 
script on the patch and correct the error.


The title of the commit message should indicate that this is an userspace 
patch (this seems to be the convention that other patches have adhered 
to). So:


'staging: usbip: userspace: '

not

'staging: usbip: ;

-- Ilija


On Tue, 24 Dec 2013, Valentina Manea wrote:


As of Matt Mooney's major refactoring in 2011, usbip port
option was left out. Add support for this option in
a manner similar to the old implementation.

Sample output:

Imported USB devices

Port 00:  at Full Speed(12Mbps)
  unknown vendor : unknown product (1687:6211)
  2-1 -> usbip://192.168.122.152:3240/1-1
  -> remote bus/dev 001/002

Signed-off-by: Valentina Manea 
---
Changes since v1:
* remove devid from the printed info
* arrange formatting a bit
* don't bail out when port file doesn't exist, just print whatever info 
is available
* replace void cast with __attribute__((unused))

.../staging/usbip/userspace/libsrc/vhci_driver.c   | 67 ++
.../staging/usbip/userspace/libsrc/vhci_driver.h   |  2 +
drivers/staging/usbip/userspace/src/Makefile.am|  2 +-
drivers/staging/usbip/userspace/src/usbip.c|  6 ++
drivers/staging/usbip/userspace/src/usbip.h|  1 +
drivers/staging/usbip/userspace/src/usbip_port.c   | 57 ++
6 files changed, 134 insertions(+), 1 deletion(-)
create mode 100644 drivers/staging/usbip/userspace/src/usbip_port.c

diff --git a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c 
b/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
index 241006a..65ea5cf 100644
--- a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
+++ b/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
@@ -4,6 +4,8 @@

#include "usbip_common.h"
#include "vhci_driver.h"
+#include 
+#include 

#undef  PROGNAME
#define PROGNAME "libusbip"
@@ -337,6 +339,29 @@ err:
return -1;
}

+static int read_record(int rhport, char *host, char *port, char *busid)
+{
+   FILE *file;
+   char path[PATH_MAX+1];
+
+   snprintf(path, PATH_MAX, VHCI_STATE_PATH"/port%d", rhport);
+
+   file = fopen(path, "r");
+   if (!file) {
+   err("fopen");
+   return -1;
+   }
+
+   if (fscanf(file, "%s %s %s\n", host, port, busid) != 3) {
+   err("fscanf");
+   fclose(file);
+   return -1;
+   }
+
+   fclose(file);
+
+   return 0;
+}

/* -- */

@@ -535,3 +560,45 @@ int usbip_vhci_detach_device(uint8_t port)

return 0;
}
+
+int usbip_vhci_imported_device_dump(struct usbip_imported_device *idev)
+{
+   char product_name[100];
+   char host[NI_MAXHOST] = "unknown host";
+   char serv[NI_MAXSERV] = "unknown port";
+   char remote_busid[SYSFS_BUS_ID_SIZE];
+   int ret;
+   int read_record_error = 0;
+
+   if (idev->status == VDEV_ST_NULL || idev->status == VDEV_ST_NOTASSIGNED)
+   return 0;
+
+   ret = read_record(idev->port, host, serv, remote_busid);
+   if (ret) {
+   err("read_record");
+   read_record_error = 1;
+   }
+
+   printf("Port %02d: <%s> at %s\n", idev->port,
+  usbip_status_string(idev->status),
+  usbip_speed_string(idev->udev.speed));
+
+   usbip_names_get_product(product_name, sizeof(product_name),
+   idev->udev.idVendor, idev->udev.idProduct);
+
+   printf("   %s\n",  product_name);
+
+   if (!read_record_error) {
+   printf("%10s -> usbip://%s:%s/%s\n", idev->udev.busid,
+  host, serv, remote_busid);
+   printf("%10s -> remote bus/dev %03d/%03d\n", " ",
+  idev->busnum, idev->devnum);
+   } else {
+   printf("%10s -> unknown host, remote port and remote busid\n",
+  idev->udev.busid);
+   printf("%10s -> remote bus/dev %03d/%03d\n", " ",
+  idev->busnum, idev->devnum);
+   }
+
+   return 0;
+}
diff --git a/drivers/staging/usbip/userspace/libsrc/vhci_driver.h 
b/drivers/staging/usbip/userspace/libsrc/vhci_driver.h
index 89949aa..e071f80 100644
--- a/drivers/staging/usbip/userspace/libsrc/vhci_driver.h
+++ b/drivers/staging/usbip/userspace/libsrc/vhci_driver.h
@@ -64,4 +64,6 @@ int usbip_vhci_attach_device(uint8_t port, int sockfd, 
uint8_t busnum,

int usbip_vhci_detach_device(uint8_t port);

+int usbip_vhci_imported_device_dump(struct usbip_imported_device *idev);
+
#endif /* __VHCI_DRIVER_H */
diff --git a/drivers/staging/usbip/userspace/src/Makefile.am 
b/drivers/staging/usbip/userspace/src/Makefile.am
index a113003..b4f8c4b 100644
--- a/drivers/staging/usbip/userspace/src/Makefile.am
+++ b/drivers/stag

[PATCH v2] staging: usbip: add support for viewing imported devices

2013-12-23 Thread Valentina Manea
As of Matt Mooney's major refactoring in 2011, usbip port
option was left out. Add support for this option in
a manner similar to the old implementation.

Sample output:

Imported USB devices

Port 00:  at Full Speed(12Mbps)
   unknown vendor : unknown product (1687:6211)
   2-1 -> usbip://192.168.122.152:3240/1-1
   -> remote bus/dev 001/002

Signed-off-by: Valentina Manea 
---
Changes since v1:
* remove devid from the printed info
* arrange formatting a bit
* don't bail out when port file doesn't exist, just print whatever info 
is available
* replace void cast with __attribute__((unused)) 

 .../staging/usbip/userspace/libsrc/vhci_driver.c   | 67 ++
 .../staging/usbip/userspace/libsrc/vhci_driver.h   |  2 +
 drivers/staging/usbip/userspace/src/Makefile.am|  2 +-
 drivers/staging/usbip/userspace/src/usbip.c|  6 ++
 drivers/staging/usbip/userspace/src/usbip.h|  1 +
 drivers/staging/usbip/userspace/src/usbip_port.c   | 57 ++
 6 files changed, 134 insertions(+), 1 deletion(-)
 create mode 100644 drivers/staging/usbip/userspace/src/usbip_port.c

diff --git a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c 
b/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
index 241006a..65ea5cf 100644
--- a/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
+++ b/drivers/staging/usbip/userspace/libsrc/vhci_driver.c
@@ -4,6 +4,8 @@
 
 #include "usbip_common.h"
 #include "vhci_driver.h"
+#include 
+#include 
 
 #undef  PROGNAME
 #define PROGNAME "libusbip"
@@ -337,6 +339,29 @@ err:
return -1;
 }
 
+static int read_record(int rhport, char *host, char *port, char *busid)
+{
+   FILE *file;
+   char path[PATH_MAX+1];
+
+   snprintf(path, PATH_MAX, VHCI_STATE_PATH"/port%d", rhport);
+
+   file = fopen(path, "r");
+   if (!file) {
+   err("fopen");
+   return -1;
+   }
+
+   if (fscanf(file, "%s %s %s\n", host, port, busid) != 3) {
+   err("fscanf");
+   fclose(file);
+   return -1;
+   }
+
+   fclose(file);
+
+   return 0;
+}
 
 /* -- */
 
@@ -535,3 +560,45 @@ int usbip_vhci_detach_device(uint8_t port)
 
return 0;
 }
+
+int usbip_vhci_imported_device_dump(struct usbip_imported_device *idev)
+{
+   char product_name[100];
+   char host[NI_MAXHOST] = "unknown host";
+   char serv[NI_MAXSERV] = "unknown port";
+   char remote_busid[SYSFS_BUS_ID_SIZE];
+   int ret;
+   int read_record_error = 0;
+
+   if (idev->status == VDEV_ST_NULL || idev->status == VDEV_ST_NOTASSIGNED)
+   return 0;
+
+   ret = read_record(idev->port, host, serv, remote_busid);
+   if (ret) {
+   err("read_record");
+   read_record_error = 1;
+   }
+
+   printf("Port %02d: <%s> at %s\n", idev->port,
+  usbip_status_string(idev->status),
+  usbip_speed_string(idev->udev.speed));
+
+   usbip_names_get_product(product_name, sizeof(product_name),
+   idev->udev.idVendor, idev->udev.idProduct);
+
+   printf("   %s\n",  product_name);
+
+   if (!read_record_error) {
+   printf("%10s -> usbip://%s:%s/%s\n", idev->udev.busid,
+  host, serv, remote_busid);
+   printf("%10s -> remote bus/dev %03d/%03d\n", " ",
+  idev->busnum, idev->devnum);
+   } else {
+   printf("%10s -> unknown host, remote port and remote busid\n",
+  idev->udev.busid); 
+   printf("%10s -> remote bus/dev %03d/%03d\n", " ",
+  idev->busnum, idev->devnum);
+   }
+
+   return 0;
+}
diff --git a/drivers/staging/usbip/userspace/libsrc/vhci_driver.h 
b/drivers/staging/usbip/userspace/libsrc/vhci_driver.h
index 89949aa..e071f80 100644
--- a/drivers/staging/usbip/userspace/libsrc/vhci_driver.h
+++ b/drivers/staging/usbip/userspace/libsrc/vhci_driver.h
@@ -64,4 +64,6 @@ int usbip_vhci_attach_device(uint8_t port, int sockfd, 
uint8_t busnum,
 
 int usbip_vhci_detach_device(uint8_t port);
 
+int usbip_vhci_imported_device_dump(struct usbip_imported_device *idev);
+
 #endif /* __VHCI_DRIVER_H */
diff --git a/drivers/staging/usbip/userspace/src/Makefile.am 
b/drivers/staging/usbip/userspace/src/Makefile.am
index a113003..b4f8c4b 100644
--- a/drivers/staging/usbip/userspace/src/Makefile.am
+++ b/drivers/staging/usbip/userspace/src/Makefile.am
@@ -6,7 +6,7 @@ sbin_PROGRAMS := usbip usbipd
 
 usbip_SOURCES := usbip.h utils.h usbip.c utils.c usbip_network.c \
 usbip_attach.c usbip_detach.c usbip_list.c \
-usbip_bind.c usbip_unbind.c
+usbip_bind.c usbip_unbind.c usbip_port.c
 
 
 usbipd_SOURCES := usbip_network.h usbipd.c usbip_network.c
diff --git a/drivers/staging/usbip/use