libiwinfo: move duplicated coded into iwinfo_utils.[ch]
[project/luci.git] / contrib / package / iwinfo / src / iwinfo_wl.c
index 1a7d586d9777ceefce635035385136a15070989d..1691e4b3584beba1ab574bb9ce7114f648c61199 100644 (file)
 #include "iwinfo_wl.h"
 #include "iwinfo_wext.h"
 
-static int ioctl_socket = -1;
-
 static int wl_ioctl(const char *name, int cmd, void *buf, int len)
 {
        struct ifreq ifr;
        wl_ioctl_t ioc;
 
-       /* prepare socket */
-       if( ioctl_socket == -1 )
-               ioctl_socket = socket(AF_INET, SOCK_DGRAM, 0);
-
        /* do it */
        ioc.cmd = cmd;
        ioc.buf = buf;
        ioc.len = len;
+
        strncpy(ifr.ifr_name, name, IFNAMSIZ);
        ifr.ifr_data = (caddr_t) &ioc;
 
-       return ioctl(ioctl_socket, SIOCDEVPRIVATE, &ifr);
+       return iwinfo_ioctl(SIOCDEVPRIVATE, &ifr);
 }
 
 static struct wl_maclist * wl_read_assoclist(const char *ifname)
@@ -72,6 +67,11 @@ int wl_probe(const char *ifname)
        return 0;
 }
 
+void wl_close(void)
+{
+       /* Nop */
+}
+
 int wl_get_mode(const char *ifname, char *buf)
 {
        int ret = -1;
@@ -482,8 +482,23 @@ int wl_get_freqlist(const char *ifname, char *buf, int *len)
 
 int wl_get_country(const char *ifname, char *buf)
 {
-       if( !wl_ioctl(ifname, WLC_GET_COUNTRY, buf, WLC_CNTRY_BUF_SZ) )
+       char ccode[WLC_CNTRY_BUF_SZ];
+
+       if( !wl_ioctl(ifname, WLC_GET_COUNTRY, ccode, WLC_CNTRY_BUF_SZ) )
+       {
+               /* IL0 -> World */
+               if( !strcmp(ccode, "IL0") )
+                       sprintf(buf, "00");
+
+               /* YU -> RS */
+               else if( !strcmp(ccode, "YU") )
+                       sprintf(buf, "RS");
+
+               else
+                       memcpy(buf, ccode, 2);
+
                return 0;
+       }
 
        return -1;
 }
@@ -520,6 +535,11 @@ int wl_get_countrylist(const char *ifname, char *buf, int *len)
        return -1;
 }
 
+int wl_get_hwmodelist(const char *ifname, int *buf)
+{
+       return wext_get_hwmodelist(ifname, buf);
+}
+
 int wl_get_mbssid_support(const char *ifname, int *buf)
 {
        wlc_rev_info_t revinfo;