Changeset 29421


Ignore:
Timestamp:
2011-12-04T04:42:17+01:00 (5 years ago)
Author:
jow
Message:

[package] iwinfo: add initial hardware detection capabilities

Location:
trunk/package/iwinfo
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/iwinfo/Makefile

    r29403 r29421  
    88 
    99PKG_NAME:=libiwinfo 
    10 PKG_RELEASE:=18 
     10PKG_RELEASE:=19 
    1111 
    1212PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) 
  • trunk/package/iwinfo/src/include/iwinfo.h

    r29403 r29421  
    9696}; 
    9797 
     98struct iwinfo_hardware_id { 
     99        uint16_t vendor_id; 
     100        uint16_t device_id; 
     101        uint16_t subsystem_vendor_id; 
     102        uint16_t subsystem_device_id; 
     103}; 
     104 
     105struct iwinfo_hardware_entry { 
     106        const char *vendor_name; 
     107        const char *device_name; 
     108        uint16_t vendor_id; 
     109        uint16_t device_id; 
     110        uint16_t subsystem_vendor_id; 
     111        uint16_t subsystem_device_id; 
     112        int16_t txpower_offset; 
     113        int16_t frequency_offset; 
     114}; 
     115 
    98116extern const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES[]; 
     117extern const struct iwinfo_hardware_entry IWINFO_HARDWARE_ENTRIES[]; 
    99118 
    100119 
     
    114133        int (*bssid)(const char *, char *); 
    115134        int (*country)(const char *, char *); 
     135        int (*hardware_id)(const char *, char *); 
     136        int (*hardware_name)(const char *, char *); 
    116137        int (*encryption)(const char *, char *); 
    117138        int (*assoclist)(const char *, char *, int *); 
  • trunk/package/iwinfo/src/include/iwinfo/lua.h

    r29403 r29421  
    7272        } 
    7373 
    74 #define LUA_WRAP_LIST(type,op)                                                  \ 
     74#define LUA_WRAP_STRUCT(type,op)                                                \ 
    7575        static int iwinfo_L_##type##_##op(lua_State *L)         \ 
    7676        {                                                                                                       \ 
     
    7979 
    8080#endif 
    81  
  • trunk/package/iwinfo/src/include/iwinfo/madwifi.h

    r29403 r29421  
    4747int madwifi_get_hwmodelist(const char *ifname, int *buf); 
    4848int madwifi_get_mbssid_support(const char *ifname, int *buf); 
     49int madwifi_get_hardware_id(const char *ifname, char *buf); 
     50int madwifi_get_hardware_name(const char *ifname, char *buf); 
    4951void madwifi_close(void); 
    5052 
     
    6466        .bssid          = madwifi_get_bssid, 
    6567        .country        = madwifi_get_country, 
     68        .hardware_id    = madwifi_get_hardware_id, 
     69        .hardware_name  = madwifi_get_hardware_name, 
    6670        .encryption     = madwifi_get_encryption, 
    6771        .assoclist      = madwifi_get_assoclist, 
  • trunk/package/iwinfo/src/include/iwinfo/nl80211.h

    r29403 r29421  
    7878int nl80211_get_hwmodelist(const char *ifname, int *buf); 
    7979int nl80211_get_mbssid_support(const char *ifname, int *buf); 
     80int nl80211_get_hardware_id(const char *ifname, char *buf); 
     81int nl80211_get_hardware_name(const char *ifname, char *buf); 
    8082void nl80211_close(void); 
    8183 
     
    9597        .bssid          = nl80211_get_bssid, 
    9698        .country        = nl80211_get_country, 
     99        .hardware_id    = nl80211_get_hardware_id, 
     100        .hardware_name  = nl80211_get_hardware_name, 
    97101        .encryption     = nl80211_get_encryption, 
    98102        .assoclist      = nl80211_get_assoclist, 
  • trunk/package/iwinfo/src/include/iwinfo/utils.h

    r29403 r29421  
    3838void iwinfo_close(void); 
    3939 
     40struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id); 
     41 
    4042#endif 
  • trunk/package/iwinfo/src/include/iwinfo/wext.h

    r29403 r29421  
    4848int wext_get_hwmodelist(const char *ifname, int *buf); 
    4949int wext_get_mbssid_support(const char *ifname, int *buf); 
     50int wext_get_hardware_id(const char *ifname, char *buf); 
     51int wext_get_hardware_name(const char *ifname, char *buf); 
    5052void wext_close(void); 
    5153 
     
    6567        .bssid          = wext_get_bssid, 
    6668        .country        = wext_get_country, 
     69        .hardware_id    = wext_get_hardware_id, 
     70        .hardware_name  = wext_get_hardware_name, 
    6771        .encryption     = wext_get_encryption, 
    6872        .assoclist      = wext_get_assoclist, 
  • trunk/package/iwinfo/src/include/iwinfo/wl.h

    r29403 r29421  
    4848int wl_get_hwmodelist(const char *ifname, int *buf); 
    4949int wl_get_mbssid_support(const char *ifname, int *buf); 
     50int wl_get_hardware_id(const char *ifname, char *buf); 
     51int wl_get_hardware_name(const char *ifname, char *buf); 
    5052void wl_close(void); 
    5153 
     
    6567        .bssid          = wl_get_bssid, 
    6668        .country        = wl_get_country, 
     69        .hardware_id    = wl_get_hardware_id, 
     70        .hardware_name  = wl_get_hardware_name, 
    6771        .encryption     = wl_get_encryption, 
    6872        .assoclist      = wl_get_assoclist, 
  • trunk/package/iwinfo/src/iwinfo_cli.c

    r29403 r29421  
    283283} 
    284284 
     285static char * print_hardware_id(const struct iwinfo_ops *iw, const char *ifname) 
     286{ 
     287        static char buf[20]; 
     288        struct iwinfo_hardware_id ids; 
     289 
     290        if (!iw->hardware_id(ifname, (char *)&ids)) 
     291        { 
     292                snprintf(buf, sizeof(buf), "%04X:%04X %04X:%04X", 
     293                        ids.vendor_id, ids.device_id, 
     294                        ids.subsystem_vendor_id, ids.subsystem_device_id); 
     295        } 
     296        else 
     297        { 
     298                snprintf(buf, sizeof(buf), "unknown"); 
     299        } 
     300 
     301        return buf; 
     302} 
     303 
     304static char * print_hardware_name(const struct iwinfo_ops *iw, const char *ifname) 
     305{ 
     306        static char buf[128]; 
     307 
     308        if (iw->hardware_name(ifname, buf)) 
     309                snprintf(buf, sizeof(buf), "unknown"); 
     310 
     311        return buf; 
     312} 
     313 
    285314static char * print_ssid(const struct iwinfo_ops *iw, const char *ifname) 
    286315{ 
     
    424453        printf("          Access Point: %s\n", 
    425454                print_bssid(iw, ifname)); 
    426         printf("          Type: %s  HW Mode(s): %s\n", 
    427                 print_type(iw, ifname), 
    428                 print_hwmodes(iw, ifname)); 
    429455        printf("          Mode: %s  Channel: %s (%s)\n", 
    430456                print_mode(iw, ifname), 
     
    442468        printf("          Encryption: %s\n", 
    443469                print_encryption(iw, ifname)); 
     470        printf("          Type: %s  HW Mode(s): %s\n", 
     471                print_type(iw, ifname), 
     472                print_hwmodes(iw, ifname)); 
     473        printf("          Hardware: %s [%s]\n", 
     474                print_hardware_id(iw, ifname), 
     475                print_hardware_name(iw, ifname)); 
    444476        printf("          Supports VAPs: %s\n", 
    445477                print_mbssid_supp(iw, ifname)); 
  • trunk/package/iwinfo/src/iwinfo_lib.c

    r29403 r29421  
    301301}; 
    302302 
     303/* 
     304 * hardware database 
     305 */ 
     306 
     307const char VENDOR_UBNT[] = "Ubiquiti"; 
     308const char VENDOR_ATH[]  = "Atheros"; 
     309 
     310const struct iwinfo_hardware_entry IWINFO_HARDWARE_ENTRIES[] = { 
     311/*      { vendor, model, vendorid, deviceid, subsys vendorid, subsys deviceid, poweroff, freqoff } */ 
     312#if defined(USE_MADWIFI) || defined(USE_NL80211) 
     313        { VENDOR_UBNT, "PowerStation2 (18V)",   0xffff, 0xffff, 0xffff, 0xb102,  0,     0 }, 
     314        { VENDOR_UBNT, "PowerStation2 (16D)",   0xffff, 0xffff, 0xffff, 0xb202,  0,     0 }, 
     315        { VENDOR_UBNT, "PowerStation2 (EXT)",   0xffff, 0xffff, 0xffff, 0xb302,  0,     0 }, 
     316        { VENDOR_UBNT, "PowerStation5 (22V)",   0xffff, 0xffff, 0xffff, 0xb105,  0,     0 }, 
     317        { VENDOR_UBNT, "PowerStation5 (EXT)",   0xffff, 0xffff, 0xffff, 0xb305,  0,     0 }, 
     318        { VENDOR_UBNT, "WispStation5",          0xffff, 0xffff, 0xffff, 0xa105,  0,     0 }, 
     319        { VENDOR_UBNT, "LiteStation2",          0xffff, 0xffff, 0xffff, 0xa002,  0,     0 }, 
     320        { VENDOR_UBNT, "LiteStation5",          0xffff, 0xffff, 0xffff, 0xa005,  0,     0 }, 
     321        { VENDOR_UBNT, "NanoStation2",          0xffff, 0xffff, 0xffff, 0xc002,  0,     0 }, 
     322        { VENDOR_UBNT, "NanoStation5",          0xffff, 0xffff, 0xffff, 0xc005,  0,     0 }, 
     323        { VENDOR_UBNT, "NanoStation Loco2",     0xffff, 0xffff, 0xffff, 0xc102,  0,     0 }, 
     324        { VENDOR_UBNT, "NanoStation Loco5",     0xffff, 0xffff, 0xffff, 0xc105,  0,     0 }, 
     325        { VENDOR_UBNT, "Bullet2",               0xffff, 0xffff, 0xffff, 0xc202,  0,     0 }, 
     326        { VENDOR_UBNT, "Bullet5",               0xffff, 0xffff, 0xffff, 0xc205,  0,     0 }, 
     327        { VENDOR_UBNT, "XR2",                   0x168c, 0x001b, 0x0777, 0x3002, 10,     0 }, 
     328        { VENDOR_UBNT, "XR2",                   0x168c, 0x001b, 0x7777, 0x3002, 10,     0 }, 
     329        { VENDOR_UBNT, "XR2.3",                 0x168c, 0x001b, 0x0777, 0x3b02, 10,     0 }, 
     330        { VENDOR_UBNT, "XR2.6",                 0x168c, 0x001b, 0x0777, 0x3c02, 10,     0 }, 
     331        { VENDOR_UBNT, "XR3-2.8",               0x168c, 0x001b, 0x0777, 0x3b03, 10,     0 }, 
     332        { VENDOR_UBNT, "XR3-3.6",               0x168c, 0x001b, 0x0777, 0x3c03, 10,     0 }, 
     333        { VENDOR_UBNT, "XR3",                   0x168c, 0x001b, 0x0777, 0x3003, 10,     0 }, 
     334        { VENDOR_UBNT, "XR4",                   0x168c, 0x001b, 0x0777, 0x3004, 10,     0 }, 
     335        { VENDOR_UBNT, "XR5",                   0x168c, 0x001b, 0x0777, 0x3005, 10,     0 }, 
     336        { VENDOR_UBNT, "XR5",                   0x168c, 0x001b, 0x7777, 0x3005, 10,     0 }, 
     337        { VENDOR_UBNT, "XR7",                   0x168c, 0x001b, 0x0777, 0x3007, 10,     0 }, 
     338        { VENDOR_UBNT, "XR9",                   0x168c, 0x001b, 0x0777, 0x3009, 10, -1520 }, 
     339        { VENDOR_UBNT, "SRC",                   0x168c, 0x0013, 0x168c, 0x1042,  1,     0 }, 
     340        { VENDOR_UBNT, "SR2",                   0x168c, 0x0013, 0x0777, 0x2041, 10,     0 }, 
     341        { VENDOR_UBNT, "SR4",                   0x168c, 0x0013, 0x0777, 0x2004,  6,     0 }, 
     342        { VENDOR_UBNT, "SR4",                   0x168c, 0x0013, 0x7777, 0x2004,  6,     0 }, 
     343        { VENDOR_UBNT, "SR4C",                  0x168c, 0x0013, 0x0777, 0x1004,  6,     0 }, 
     344        { VENDOR_UBNT, "SR4C",                  0x168c, 0x0013, 0x7777, 0x1004,  6,     0 }, 
     345        { VENDOR_UBNT, "SR5",                   0x168c, 0x0013, 0x168c, 0x2042,  7,     0 }, 
     346        { VENDOR_UBNT, "SR9",                   0x168c, 0x0013, 0x7777, 0x2009, 12, -1500 }, 
     347        { VENDOR_UBNT, "SR71A",                 0x168c, 0x0027, 0x168c, 0x2082, 10,     0 }, 
     348        { VENDOR_UBNT, "SR71",                  0x168c, 0x0027, 0x0777, 0x4082, 10,     0 }, 
     349        { VENDOR_ATH,  "AR9220",                0x168c, 0x0029, 0x168c, 0xa094,  0,     0 }, 
     350        { VENDOR_ATH,  "AR9223",                0x168c, 0x0029, 0x168c, 0xa095,  0,     0 }, 
     351#endif 
     352        { NULL } 
     353}; 
     354 
    303355 
    304356const char * iwinfo_type(const char *ifname) 
  • trunk/package/iwinfo/src/iwinfo_lua.c

    r29403 r29421  
    452452} 
    453453 
    454 /* Wrapper for mbbsid_support */ 
     454/* Wrapper for mbssid_support */ 
    455455static int iwinfo_L_mbssid_support(lua_State *L, int (*func)(const char *, int *)) 
    456456{ 
     
    465465 
    466466        lua_pushnil(L); 
     467        return 1; 
     468} 
     469 
     470/* Wrapper for hardware_id */ 
     471static int iwinfo_L_hardware_id(lua_State *L, int (*func)(const char *, char *)) 
     472{ 
     473        const char *ifname = luaL_checkstring(L, 1); 
     474        struct iwinfo_hardware_id ids; 
     475 
     476        if (!(*func)(ifname, (char *)&ids)) 
     477        { 
     478                lua_newtable(L); 
     479 
     480                lua_pushnumber(L, ids.vendor_id); 
     481                lua_setfield(L, -2, "vendor_id"); 
     482 
     483                lua_pushnumber(L, ids.device_id); 
     484                lua_setfield(L, -2, "device_id"); 
     485 
     486                lua_pushnumber(L, ids.subsystem_vendor_id); 
     487                lua_setfield(L, -2, "subsystem_vendor_id"); 
     488 
     489                lua_pushnumber(L, ids.subsystem_device_id); 
     490                lua_setfield(L, -2, "subsystem_device_id"); 
     491        } 
     492        else 
     493        { 
     494                lua_pushnil(L); 
     495        } 
     496 
    467497        return 1; 
    468498} 
     
    539569LUA_WRAP_STRING(wl,bssid) 
    540570LUA_WRAP_STRING(wl,country) 
    541 LUA_WRAP_LIST(wl,assoclist) 
    542 LUA_WRAP_LIST(wl,txpwrlist) 
    543 LUA_WRAP_LIST(wl,scanlist) 
    544 LUA_WRAP_LIST(wl,freqlist) 
    545 LUA_WRAP_LIST(wl,countrylist) 
    546 LUA_WRAP_LIST(wl,hwmodelist) 
    547 LUA_WRAP_LIST(wl,encryption) 
    548 LUA_WRAP_LIST(wl,mbssid_support) 
     571LUA_WRAP_STRING(wl,hardware_name) 
     572LUA_WRAP_STRUCT(wl,assoclist) 
     573LUA_WRAP_STRUCT(wl,txpwrlist) 
     574LUA_WRAP_STRUCT(wl,scanlist) 
     575LUA_WRAP_STRUCT(wl,freqlist) 
     576LUA_WRAP_STRUCT(wl,countrylist) 
     577LUA_WRAP_STRUCT(wl,hwmodelist) 
     578LUA_WRAP_STRUCT(wl,encryption) 
     579LUA_WRAP_STRUCT(wl,mbssid_support) 
     580LUA_WRAP_STRUCT(wl,hardware_id) 
    549581#endif 
    550582 
     
    563595LUA_WRAP_STRING(madwifi,bssid) 
    564596LUA_WRAP_STRING(madwifi,country) 
    565 LUA_WRAP_LIST(madwifi,assoclist) 
    566 LUA_WRAP_LIST(madwifi,txpwrlist) 
    567 LUA_WRAP_LIST(madwifi,scanlist) 
    568 LUA_WRAP_LIST(madwifi,freqlist) 
    569 LUA_WRAP_LIST(madwifi,countrylist) 
    570 LUA_WRAP_LIST(madwifi,hwmodelist) 
    571 LUA_WRAP_LIST(madwifi,encryption) 
    572 LUA_WRAP_LIST(madwifi,mbssid_support) 
     597LUA_WRAP_STRING(madwifi,hardware_name) 
     598LUA_WRAP_STRUCT(madwifi,assoclist) 
     599LUA_WRAP_STRUCT(madwifi,txpwrlist) 
     600LUA_WRAP_STRUCT(madwifi,scanlist) 
     601LUA_WRAP_STRUCT(madwifi,freqlist) 
     602LUA_WRAP_STRUCT(madwifi,countrylist) 
     603LUA_WRAP_STRUCT(madwifi,hwmodelist) 
     604LUA_WRAP_STRUCT(madwifi,encryption) 
     605LUA_WRAP_STRUCT(madwifi,mbssid_support) 
     606LUA_WRAP_STRUCT(madwifi,hardware_id) 
    573607#endif 
    574608 
     
    587621LUA_WRAP_STRING(nl80211,bssid) 
    588622LUA_WRAP_STRING(nl80211,country) 
    589 LUA_WRAP_LIST(nl80211,assoclist) 
    590 LUA_WRAP_LIST(nl80211,txpwrlist) 
    591 LUA_WRAP_LIST(nl80211,scanlist) 
    592 LUA_WRAP_LIST(nl80211,freqlist) 
    593 LUA_WRAP_LIST(nl80211,countrylist) 
    594 LUA_WRAP_LIST(nl80211,hwmodelist) 
    595 LUA_WRAP_LIST(nl80211,encryption) 
    596 LUA_WRAP_LIST(nl80211,mbssid_support) 
     623LUA_WRAP_STRING(nl80211,hardware_name) 
     624LUA_WRAP_STRUCT(nl80211,assoclist) 
     625LUA_WRAP_STRUCT(nl80211,txpwrlist) 
     626LUA_WRAP_STRUCT(nl80211,scanlist) 
     627LUA_WRAP_STRUCT(nl80211,freqlist) 
     628LUA_WRAP_STRUCT(nl80211,countrylist) 
     629LUA_WRAP_STRUCT(nl80211,hwmodelist) 
     630LUA_WRAP_STRUCT(nl80211,encryption) 
     631LUA_WRAP_STRUCT(nl80211,mbssid_support) 
     632LUA_WRAP_STRUCT(nl80211,hardware_id) 
    597633#endif 
    598634 
     
    610646LUA_WRAP_STRING(wext,bssid) 
    611647LUA_WRAP_STRING(wext,country) 
    612 LUA_WRAP_LIST(wext,assoclist) 
    613 LUA_WRAP_LIST(wext,txpwrlist) 
    614 LUA_WRAP_LIST(wext,scanlist) 
    615 LUA_WRAP_LIST(wext,freqlist) 
    616 LUA_WRAP_LIST(wext,countrylist) 
    617 LUA_WRAP_LIST(wext,hwmodelist) 
    618 LUA_WRAP_LIST(wext,encryption) 
    619 LUA_WRAP_LIST(wext,mbssid_support) 
     648LUA_WRAP_STRING(wext,hardware_name) 
     649LUA_WRAP_STRUCT(wext,assoclist) 
     650LUA_WRAP_STRUCT(wext,txpwrlist) 
     651LUA_WRAP_STRUCT(wext,scanlist) 
     652LUA_WRAP_STRUCT(wext,freqlist) 
     653LUA_WRAP_STRUCT(wext,countrylist) 
     654LUA_WRAP_STRUCT(wext,hwmodelist) 
     655LUA_WRAP_STRUCT(wext,encryption) 
     656LUA_WRAP_STRUCT(wext,mbssid_support) 
     657LUA_WRAP_STRUCT(wext,hardware_id) 
    620658 
    621659#ifdef USE_WL 
     
    642680        LUA_REG(wl,encryption), 
    643681        LUA_REG(wl,mbssid_support), 
     682        LUA_REG(wl,hardware_id), 
     683        LUA_REG(wl,hardware_name), 
    644684        { NULL, NULL } 
    645685}; 
     
    669709        LUA_REG(madwifi,encryption), 
    670710        LUA_REG(madwifi,mbssid_support), 
     711        LUA_REG(madwifi,hardware_id), 
     712        LUA_REG(madwifi,hardware_name), 
    671713        { NULL, NULL } 
    672714}; 
     
    696738        LUA_REG(nl80211,encryption), 
    697739        LUA_REG(nl80211,mbssid_support), 
     740        LUA_REG(nl80211,hardware_id), 
     741        LUA_REG(nl80211,hardware_name), 
    698742        { NULL, NULL } 
    699743}; 
     
    722766        LUA_REG(wext,encryption), 
    723767        LUA_REG(wext,mbssid_support), 
     768        LUA_REG(wext,hardware_id), 
     769        LUA_REG(wext,hardware_name), 
    724770        { NULL, NULL } 
    725771}; 
  • trunk/package/iwinfo/src/iwinfo_madwifi.c

    r29403 r29421  
    988988        return -1; 
    989989} 
     990 
     991int madwifi_get_hardware_id(const char *ifname, char *buf) 
     992{ 
     993        return wext_get_hardware_id(ifname, buf); 
     994} 
     995 
     996int madwifi_get_hardware_name(const char *ifname, char *buf) 
     997{ 
     998        struct iwinfo_hardware_id id; 
     999        struct iwinfo_hardware_entry *hw; 
     1000 
     1001        if (madwifi_get_hardware_id(ifname, (char *)&id)) 
     1002                return -1; 
     1003 
     1004        hw = iwinfo_hardware(&id); 
     1005 
     1006        if (hw) 
     1007                sprintf(buf, "%s %s", hw->vendor_name, hw->device_name); 
     1008        else 
     1009                sprintf(buf, "Generic Atheros"); 
     1010 
     1011        return 0; 
     1012} 
  • trunk/package/iwinfo/src/iwinfo_nl80211.c

    r29403 r29421  
    16291629        return -1; 
    16301630} 
     1631 
     1632int nl80211_get_hardware_id(const char *ifname, char *buf) 
     1633{ 
     1634        return wext_get_hardware_id(ifname, buf); 
     1635} 
     1636 
     1637int nl80211_get_hardware_name(const char *ifname, char *buf) 
     1638{ 
     1639        struct iwinfo_hardware_id id; 
     1640        struct iwinfo_hardware_entry *hw; 
     1641 
     1642        if (nl80211_get_hardware_id(ifname, (char *)&id)) 
     1643                return -1; 
     1644 
     1645        hw = iwinfo_hardware(&id); 
     1646 
     1647        if (hw) 
     1648                sprintf(buf, "%s %s", hw->vendor_name, hw->device_name); 
     1649        else 
     1650                sprintf(buf, "Generic MAC80211"); 
     1651 
     1652        return 0; 
     1653} 
  • trunk/package/iwinfo/src/iwinfo_utils.c

    r29403 r29421  
    125125                close(ioctl_socket); 
    126126} 
     127 
     128struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id) 
     129{ 
     130        const struct iwinfo_hardware_entry *e; 
     131 
     132        for (e = IWINFO_HARDWARE_ENTRIES; e->vendor_name; e++) 
     133        { 
     134                if ((e->vendor_id != 0xffff) && (e->vendor_id != id->vendor_id)) 
     135                        continue; 
     136 
     137                if ((e->device_id != 0xffff) && (e->device_id != id->device_id)) 
     138                        continue; 
     139 
     140                if ((e->subsystem_vendor_id != 0xffff) && 
     141                        (e->subsystem_vendor_id != id->subsystem_vendor_id)) 
     142                        continue; 
     143 
     144                if ((e->subsystem_device_id != 0xffff) && 
     145                        (e->subsystem_device_id != id->subsystem_device_id)) 
     146                        continue; 
     147 
     148                return e; 
     149        } 
     150 
     151        return NULL; 
     152} 
  • trunk/package/iwinfo/src/iwinfo_wext.c

    r29417 r29421  
    463463        return -1; 
    464464} 
     465 
     466static char * wext_sysfs_ifname_file(const char *ifname, const char *path) 
     467{ 
     468        FILE *f; 
     469        static char buf[128]; 
     470        char *rv = NULL; 
     471 
     472        snprintf(buf, sizeof(buf), "/sys/class/net/%s/%s", ifname, path); 
     473 
     474        if ((f = fopen(buf, "r")) != NULL) 
     475        { 
     476                memset(buf, 0, sizeof(buf)); 
     477 
     478                if (fread(buf, 1, sizeof(buf), f)) 
     479                        rv = buf; 
     480 
     481                fclose(f); 
     482        } 
     483 
     484        return rv; 
     485} 
     486 
     487int wext_get_hardware_id(const char *ifname, char *buf) 
     488{ 
     489        char *data; 
     490        struct iwinfo_hardware_id *id = (struct iwinfo_hardware_id *)buf; 
     491 
     492        memset(id, 0, sizeof(struct iwinfo_hardware_id)); 
     493 
     494        data = wext_sysfs_ifname_file(ifname, "device/vendor"); 
     495        if (data) 
     496                id->vendor_id = strtoul(data, NULL, 16); 
     497 
     498        data = wext_sysfs_ifname_file(ifname, "device/device"); 
     499        if (data) 
     500                id->device_id = strtoul(data, NULL, 16); 
     501 
     502        data = wext_sysfs_ifname_file(ifname, "device/subsystem_device"); 
     503        if (data) 
     504                id->subsystem_device_id = strtoul(data, NULL, 16); 
     505 
     506        data = wext_sysfs_ifname_file(ifname, "device/subsystem_vendor"); 
     507        if (data) 
     508                id->subsystem_vendor_id = strtoul(data, NULL, 16); 
     509 
     510        return (id->vendor_id > 0 && id->device_id > 0) ? 0 : -1; 
     511} 
     512 
     513int wext_get_hardware_name(const char *ifname, char *buf) 
     514{ 
     515        sprintf(buf, "Generic WEXT"); 
     516        return 0; 
     517} 
  • trunk/package/iwinfo/src/iwinfo_wl.c

    r29403 r29421  
    136136int wl_get_txpower(const char *ifname, int *buf) 
    137137{ 
     138        /* WLC_GET_VAR "qtxpower" */ 
    138139        return wext_get_txpower(ifname, buf); 
    139140} 
     
    557558        return -1; 
    558559} 
     560 
     561int wl_get_hardware_id(const char *ifname, char *buf) 
     562{ 
     563        wlc_rev_info_t revinfo; 
     564        struct iwinfo_hardware_id *ids = (struct iwinfo_hardware_id *)buf; 
     565 
     566        if (wl_ioctl(ifname, WLC_GET_REVINFO, &revinfo, sizeof(revinfo))) 
     567                return -1; 
     568 
     569        ids->vendor_id = revinfo.vendorid; 
     570        ids->device_id = revinfo.deviceid; 
     571        ids->subsystem_vendor_id = revinfo.boardvendor; 
     572        ids->subsystem_device_id = revinfo.boardid; 
     573 
     574        return 0; 
     575} 
     576 
     577int wl_get_hardware_name(const char *ifname, char *buf) 
     578{ 
     579        struct iwinfo_hardware_id ids; 
     580 
     581        if (wl_get_hardware_id(ifname, (char *)&ids)) 
     582                return -1; 
     583 
     584        sprintf(buf, "Broadcom BCM%04X", ids.device_id); 
     585 
     586        return 0; 
     587} 
Note: See TracChangeset for help on using the changeset viewer.