iwinfo: move builtin hardware database to /usr/share/libiwinfo/hardware.txt
authorjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Fri, 26 Apr 2013 13:20:15 +0000 (13:20 +0000)
committerjow <jow@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Fri, 26 Apr 2013 13:20:15 +0000 (13:20 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@36449 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/network/utils/iwinfo/Makefile
package/network/utils/iwinfo/src/include/iwinfo.h
package/network/utils/iwinfo/src/iwinfo_lib.c
package/network/utils/iwinfo/src/iwinfo_utils.c

index d650c0d..3758692 100644 (file)
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libiwinfo
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=libiwinfo
-PKG_RELEASE:=42
+PKG_RELEASE:=43
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 PKG_CONFIG_DEPENDS := \
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 PKG_CONFIG_DEPENDS := \
@@ -101,6 +101,8 @@ endef
 define Package/libiwinfo/install
        $(INSTALL_DIR) $(1)/usr/lib
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/libiwinfo.so $(1)/usr/lib/libiwinfo.so
 define Package/libiwinfo/install
        $(INSTALL_DIR) $(1)/usr/lib
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/libiwinfo.so $(1)/usr/lib/libiwinfo.so
+       $(INSTALL_DIR) $(1)/usr/share/libiwinfo
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/hardware.txt $(1)/usr/share/libiwinfo/hardware.txt
 endef
 
 define Package/libiwinfo-lua/install
 endef
 
 define Package/libiwinfo-lua/install
index bf7d618..0d92d8d 100644 (file)
@@ -132,8 +132,8 @@ struct iwinfo_hardware_id {
 };
 
 struct iwinfo_hardware_entry {
 };
 
 struct iwinfo_hardware_entry {
-       const char *vendor_name;
-       const char *device_name;
+       char vendor_name[64];
+       char device_name[64];
        uint16_t vendor_id;
        uint16_t device_id;
        uint16_t subsystem_vendor_id;
        uint16_t vendor_id;
        uint16_t device_id;
        uint16_t subsystem_vendor_id;
@@ -143,7 +143,8 @@ struct iwinfo_hardware_entry {
 };
 
 extern const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES[];
 };
 
 extern const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES[];
-extern const struct iwinfo_hardware_entry IWINFO_HARDWARE_ENTRIES[];
+
+#define IWINFO_HARDWARE_FILE   "/usr/share/libiwinfo/hardware.txt"
 
 
 struct iwinfo_ops {
 
 
 struct iwinfo_ops {
index 368f0cf..df1f450 100644 (file)
@@ -313,76 +313,6 @@ const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES[] = {
        { 0,               "" }
 };
 
        { 0,               "" }
 };
 
-/*
- * hardware database
- */
-
-const char VENDOR_UBNT[] = "Ubiquiti";
-const char VENDOR_ATH[]  = "Atheros";
-const char VENDOR_RALINK[]  = "RaLink";
-
-const struct iwinfo_hardware_entry IWINFO_HARDWARE_ENTRIES[] = {
-/*     { vendor, model, vendorid, deviceid, subsys vendorid, subsys deviceid, poweroff, freqoff } */
-#if defined(USE_MADWIFI) || defined(USE_NL80211)
-       { VENDOR_UBNT, "PowerStation2 (18V)",   0xffff, 0xffff, 0xffff, 0xb102,  0,     0 },
-       { VENDOR_UBNT, "PowerStation2 (16D)",   0xffff, 0xffff, 0xffff, 0xb202,  0,     0 },
-       { VENDOR_UBNT, "PowerStation2 (EXT)",   0xffff, 0xffff, 0xffff, 0xb302,  0,     0 },
-       { VENDOR_UBNT, "PowerStation5 (22V)",   0xffff, 0xffff, 0xffff, 0xb105,  0,     0 },
-       { VENDOR_UBNT, "PowerStation5 (EXT)",   0xffff, 0xffff, 0xffff, 0xb305,  0,     0 },
-       { VENDOR_UBNT, "PicoStation2",          0xffff, 0xffff, 0xffff, 0xc302,  0,     0 },
-       { VENDOR_UBNT, "PicoStation2 HP",       0xffff, 0xffff, 0xffff, 0xc3a2, 10,     0 },
-       { VENDOR_UBNT, "WispStation5",          0xffff, 0xffff, 0xffff, 0xa105,  0,     0 },
-       { VENDOR_UBNT, "LiteStation2",          0xffff, 0xffff, 0xffff, 0xa002, 10,     0 },
-       { VENDOR_UBNT, "LiteStation5",          0xffff, 0xffff, 0xffff, 0xa005,  5,     0 },
-       { VENDOR_UBNT, "NanoStation2",          0xffff, 0xffff, 0xffff, 0xc002, 10,     0 },
-       { VENDOR_UBNT, "NanoStation5",          0xffff, 0xffff, 0xffff, 0xc005,  5,     0 },
-       { VENDOR_UBNT, "NanoStation Loco2",     0xffff, 0xffff, 0xffff, 0xc102, 10,     0 },
-       { VENDOR_UBNT, "NanoStation Loco5",     0xffff, 0xffff, 0xffff, 0xc105,  5,     0 },
-       { VENDOR_UBNT, "Bullet2",               0xffff, 0xffff, 0xffff, 0xc202, 10,     0 },
-       { VENDOR_UBNT, "Bullet5",               0xffff, 0xffff, 0xffff, 0xc205,  5,     0 },
-       { VENDOR_UBNT, "XR2",                   0x168c, 0x001b, 0x0777, 0x3002, 10,     0 },
-       { VENDOR_UBNT, "XR2",                   0x168c, 0x001b, 0x7777, 0x3002, 10,     0 },
-       { VENDOR_UBNT, "XR2.3",                 0x168c, 0x001b, 0x0777, 0x3b02, 10,     0 },
-       { VENDOR_UBNT, "XR2.6",                 0x168c, 0x001b, 0x0777, 0x3c02, 10,     0 },
-       { VENDOR_UBNT, "XR3-2.8",               0x168c, 0x001b, 0x0777, 0x3b03, 10,     0 },
-       { VENDOR_UBNT, "XR3-3.6",               0x168c, 0x001b, 0x0777, 0x3c03, 10,     0 },
-       { VENDOR_UBNT, "XR3",                   0x168c, 0x001b, 0x0777, 0x3003, 10,     0 },
-       { VENDOR_UBNT, "XR4",                   0x168c, 0x001b, 0x0777, 0x3004, 10,     0 },
-       { VENDOR_UBNT, "XR5",                   0x168c, 0x001b, 0x0777, 0x3005, 10,     0 },
-       { VENDOR_UBNT, "XR5",                   0x168c, 0x001b, 0x7777, 0x3005, 10,     0 },
-       { VENDOR_UBNT, "XR7",                   0x168c, 0x001b, 0x0777, 0x3007, 10,     0 },
-       { VENDOR_UBNT, "XR9",                   0x168c, 0x001b, 0x0777, 0x3009, 10, -1520 },
-       { VENDOR_ATH,  "AR5413",                0x168c, 0x001b, 0x168c, 0x2063,  0,     0 },
-       { VENDOR_UBNT, "SRC",                   0x168c, 0x0013, 0x168c, 0x1042,  1,     0 },
-       { VENDOR_UBNT, "SR2",                   0x168c, 0x0013, 0x0777, 0x2041, 10,     0 },
-       { VENDOR_UBNT, "SR4",                   0x168c, 0x0013, 0x0777, 0x2004,  6,     0 },
-       { VENDOR_UBNT, "SR4",                   0x168c, 0x0013, 0x7777, 0x2004,  6,     0 },
-       { VENDOR_UBNT, "SR4C",                  0x168c, 0x0013, 0x0777, 0x1004,  6,     0 },
-       { VENDOR_UBNT, "SR4C",                  0x168c, 0x0013, 0x7777, 0x1004,  6,     0 },
-       { VENDOR_UBNT, "SR5",                   0x168c, 0x0013, 0x168c, 0x2042,  7,     0 },
-       { VENDOR_UBNT, "SR9",                   0x168c, 0x0013, 0x7777, 0x2009, 12, -1500 },
-       { VENDOR_UBNT, "SR71A",                 0x168c, 0x0027, 0x168c, 0x2082,  7,     0 },
-       { VENDOR_UBNT, "SR71",                  0x168c, 0x0027, 0x0777, 0x4082,  7,     0 },
-       { VENDOR_UBNT, "SR71-15",               0x168c, 0x0029, 0x0777, 0x4005,  7,     0 },
-#endif
-#ifdef USE_NL80211
-       { VENDOR_UBNT, "PicoStation M2",        0x168c, 0x002a, 0x0777, 0xe302, 12,     0 }, /* ToDo: confirm offset */
-       { VENDOR_UBNT, "NanoStation M2",        0x168c, 0x002a, 0x0777, 0xe012, 12,     0 }, /* ToDo: confirm offset */
-       { VENDOR_UBNT, "NanoStation M5",        0x168c, 0x002a, 0x0777, 0xe005,  5,     0 }, /* ToDo: confirm offset */
-       { VENDOR_UBNT, "Bullet M2",             0x168c, 0x002a, 0x0777, 0xe202, 12,     0 },
-       { VENDOR_UBNT, "Bullet M5",             0x168c, 0x002a, 0x0777, 0xe805,  5,     0 },
-
-       { VENDOR_ATH,  "AR9220",                0x168c, 0x0029, 0x168c, 0xa094,  0,     0 },
-       { VENDOR_ATH,  "AR9223",                0x168c, 0x0029, 0x168c, 0xa095,  0,     0 },
-       { VENDOR_ATH,  "AR9280",                0x168c, 0x002a, 0x168c, 0xa093,  0,     0 },
-       { VENDOR_ATH,  "AR9285",                0x168c, 0x002b, 0x168c, 0xa091,  0,     0 },
-       { VENDOR_RALINK,  "Rt3050",             0x1814, 0x3050, 0x1814, 0x0005,  0,     0 },
-       { VENDOR_RALINK,  "Rt3052",             0x1814, 0x3052, 0x1814, 0x0008,  0,     0 },
-       { VENDOR_RALINK,  "Rt3352",             0x1814, 0x3352, 0x1814, 0x000c,  0,     0 },
-#endif
-       { NULL }
-};
-
 
 const char * iwinfo_type(const char *ifname)
 {
 
 const char * iwinfo_type(const char *ifname)
 {
index 6616f14..b6760c3 100644 (file)
@@ -129,27 +129,46 @@ void iwinfo_close(void)
 
 struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id)
 {
 
 struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id)
 {
-       const struct iwinfo_hardware_entry *e;
+       FILE *db;
+       char buf[256] = { 0 };
+       static struct iwinfo_hardware_entry e;
 
 
-       for (e = IWINFO_HARDWARE_ENTRIES; e->vendor_name; e++)
+       if (!(db = fopen(IWINFO_HARDWARE_FILE, "r")))
+               return NULL;
+
+       while (fgets(buf, sizeof(buf) - 1, db) != NULL)
        {
        {
-               if ((e->vendor_id != 0xffff) && (e->vendor_id != id->vendor_id))
+               memset(&e, 0, sizeof(e));
+
+               if (sscanf(buf, "%hx %hx %hx %hx %hd %hd \"%63[^\"]\" \"%63[^\"]\"",
+                              &e.vendor_id, &e.device_id,
+                              &e.subsystem_vendor_id, &e.subsystem_device_id,
+                              &e.txpower_offset, &e.frequency_offset,
+                              e.vendor_name, e.device_name) < 8)
+                       continue;
+
+               if ((e.vendor_id != 0xffff) && (e.vendor_id != id->vendor_id))
                        continue;
 
                        continue;
 
-               if ((e->device_id != 0xffff) && (e->device_id != id->device_id))
+               if ((e.device_id != 0xffff) && (e.device_id != id->device_id))
                        continue;
 
                        continue;
 
-               if ((e->subsystem_vendor_id != 0xffff) &&
-                       (e->subsystem_vendor_id != id->subsystem_vendor_id))
+               if ((e.subsystem_vendor_id != 0xffff) &&
+                       (e.subsystem_vendor_id != id->subsystem_vendor_id))
                        continue;
 
                        continue;
 
-               if ((e->subsystem_device_id != 0xffff) &&
-                       (e->subsystem_device_id != id->subsystem_device_id))
+               if ((e.subsystem_device_id != 0xffff) &&
+                       (e.subsystem_device_id != id->subsystem_device_id))
                        continue;
 
                        continue;
 
-               return (struct iwinfo_hardware_entry *)e;
+               break;
        }
 
        }
 
+       fclose(db);
+
+       if (e.device_name[0])
+               return &e;
+
        return NULL;
 }
 
        return NULL;
 }