SIOC_QUERY_PATH

This IOCTL command returns the primary path and the first alternate path information for a physical device.

The data structure is
struct scsi_path
 {
   char primary_name[30];    /* primary logical device name                 */
   char primary_parent[30];  /* primary SCSI parent name, "Host" name       */
   unchar primary_id;        /* primary target address of device, "Id" value*/
   unchar primary_lun;       /* primary logical unit of device, "lun" value */
   unchar primary_bus;       /* primary SCSI bus for device, "Channel" value*/
   unsigned long long primary_fcp_scsi_id;   /* not supported               */
   unsigned long long primary_fcp_lun_id;    /* not supported               */
   unsigned long long primary_fcp_ww_name;   /* not supported               */
   unchar primary_enabled;          /* primary path enabled                 */
   unchar primary_id_valid;         /* primary id/lun/bus fields valid      */
   unchar primary_fcp_id_valid;     /* not supported                        */
   unchar alternate_configured;     /* alternate path configured            */
   char alternate_name[30];         /* alternate logical device name        */
   char alternate_parent[30];       /* alternate SCSI parent name           */
   unchar alternate_id;             /* alternate target address of device   */
   unchar alternate_lun;            /* alternate logical unit of device     */
   unchar alternate_bus;            /* alternate SCSI bus for device        */
   unsigned long long alternate_fcp_scsi_id;  /* not supported              */
   unsigned long long alternate_fcp_lun_id;   /* not supported              */
   unsigned long long alternate_fcp_ww_name;  /* not supported              */
   unchar alternate_enabled;                  /* alternate path enabled     */
   unchar alternate_id_valid;          /* alternate id/lun/bus fields valid */
   unchar alternate_fcp_id_valid;      /* not supported                     */
   unchar primary_drive_port_valid;    /* not supported                     */
   unchar primary_drive_port;          /* not supported                     */
   unchar alternate_drive_port_valid;  /* not supported                     */
   unchar alternate_drive_port;        /* not supported                     */
   unchar primary_fenced;         /* primary fenced by disable path ioctl   */
   unchar alternate_fenced;       /* alternate fenced by disable path ioctl */
   unchar primary_host;           /* primary host bus adapter id            */
   unchar alternate_host;        /* alternate host bus adapter id           */
   char reserved[56];     
 };
An example of the SIOC_QUERY_PATH command is
#include <sys/IBM_tape.h>
struct scsi_path path;
memset(&path, 0, sizeof(struct scsi_path));
printf("Querying SCSI paths...\n");
rc = ioctl(fd, SIOC_QUERY_PATH, &path);
if(rc == 0)
    show_path(&path);