chiark / gitweb /
[PATCH] more extras/multipath changes
authorchristophe.varoqui@free.fr <christophe.varoqui@free.fr>
Tue, 16 Dec 2003 07:25:51 +0000 (23:25 -0800)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:13:08 +0000 (21:13 -0700)
* Make the HW-specific get_unique_id switch pretty
* Prepare to field-test by whitelisting all known fibre array, try to
fetch WWID from the standard EVPD 0x83 off 8 for everyone ... we will
learn from feedback :)

Could you drop a note with the udev-009 release-notes asking for testing
this WWID fetching thing ?

extras/multipath/main.c

index 6b1c37cd95bc483cfd818d69ded6cac1c6078d84..9402888c58a3c91872a11ab2b3796c54d4f1253b 100644 (file)
@@ -160,8 +160,11 @@ get_serial (int fd, char * str)
 */
 
 /* hardware vendor specifics : add support for new models below */
+
+/* this one get EVPD page 0x83 off 8 */
+/* tested ok with StorageWorks */
 static int
-get_storageworks_wwid(int fd, char *str)
+get_evpd_wwid(int fd, char *str)
 {
        char buff[64];
 
@@ -176,12 +179,39 @@ get_storageworks_wwid(int fd, char *str)
 static int
 get_unique_id(int fd, struct path * mypath)
 {
-       if (strncmp(mypath->product_id, "HSV110 (C)COMPAQ", 16) == 0 ||
-           strncmp(mypath->product_id, "HSG80           ", 16) == 0) {
-               get_storageworks_wwid(fd, mypath->wwid);
-               return 0;
-       }
+       int i;
+       static struct {
+               char * vendor;
+               char * product;
+               int (*getuid) (int fd, char * wwid);
+       } wlist[] = {
+               {"COMPAQ  ", "HSV110 (C)COMPAQ", &get_evpd_wwid},
+               {"COMPAQ  ", "MSA1000         ", &get_evpd_wwid},
+               {"COMPAQ  ", "MSA1000 VOLUME  ", &get_evpd_wwid},
+               {"DEC     ", "HSG80           ", &get_evpd_wwid},
+               {"HP      ", "HSV100          ", &get_evpd_wwid},
+               {"HP      ", "A6189A          ", &get_evpd_wwid},
+               {"HP      ", "OPEN-           ", &get_evpd_wwid},
+               {"DDN     ", "SAN DataDirector", &get_evpd_wwid},
+               {"FSC     ", "CentricStor     ", &get_evpd_wwid},
+               {"HITACHI ", "DF400           ", &get_evpd_wwid},
+               {"HITACHI ", "DF500           ", &get_evpd_wwid},
+               {"HITACHI ", "DF600           ", &get_evpd_wwid},
+               {"IBM     ", "ProFibre 4000R  ", &get_evpd_wwid},
+               {"SGI     ", "TP9100          ", &get_evpd_wwid},
+               {"SGI     ", "TP9300          ", &get_evpd_wwid},
+               {"SGI     ", "TP9400          ", &get_evpd_wwid},
+               {"SGI     ", "TP9500          ", &get_evpd_wwid},
+               {NULL, NULL, NULL},
+       };
 
+       for (i = 0; wlist[i].vendor; i++) {
+               if (strncmp(mypath->vendor_id, wlist[i].vendor, 8) == 0 &&
+                   strncmp(mypath->product_id, wlist[i].product, 16) == 0) {
+                       wlist[i].getuid(fd, mypath->wwid);
+                       return 0;
+               }
+       }
        return 1;
 }