[libiwinfo] fixup ccode in wl_get_country()
[oweals/luci.git] / contrib / package / iwinfo / src / iwinfo_wl.c
index 1c292948988abcb95721b9f730ee70aff6a3edb0..2dac12b1afd944cc38ddb91a0325c8204cec2fbf 100644 (file)
@@ -15,7 +15,7 @@
  * You should have received a copy of the GNU General Public License along
  * with the iwinfo library. If not, see http://www.gnu.org/licenses/.
  *
- * This code is based on the wlc.c utility published by OpenWrt.org . 
+ * This code is based on the wlc.c utility published by OpenWrt.org .
  */
 
 #include "iwinfo_wl.h"
@@ -265,7 +265,7 @@ int wl_get_encryption(const char *ifname, char *buf)
                                c->auth_algs |= IWINFO_AUTH_SHARED;
 
                        /* ToDo: evaluate WEP key lengths */
-                       c->auth_ciphers = IWINFO_CIPHER_WEP40 | IWINFO_CIPHER_WEP104;
+                       c->pair_ciphers = IWINFO_CIPHER_WEP40 | IWINFO_CIPHER_WEP104;
                        c->auth_suites |= IWINFO_KMGMT_NONE;
                        break;
 
@@ -480,6 +480,61 @@ int wl_get_freqlist(const char *ifname, char *buf, int *len)
        return wext_get_freqlist(ifname, buf, len);
 }
 
+int wl_get_country(const char *ifname, char *buf)
+{
+       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;
+}
+
+int wl_get_countrylist(const char *ifname, char *buf, int *len)
+{
+       int i, count;
+       char cdata[WLC_IOCTL_MAXLEN];
+       struct iwinfo_country_entry *c = (struct iwinfo_country_entry *)buf;
+       wl_country_list_t *cl = (wl_country_list_t *)cdata;
+
+       cl->buflen = sizeof(cdata);
+
+       if( !wl_ioctl(ifname, WLC_GET_COUNTRY_LIST, cl, cl->buflen) )
+       {
+               for( i = 0, count = 0; i < cl->count; i++, c++ )
+               {
+                       sprintf(c->ccode, &cl->country_abbrev[i * WLC_CNTRY_BUF_SZ]);
+                       c->iso3166 = c->ccode[0] * 256 + c->ccode[1];
+
+                       /* IL0 -> World */
+                       if( !strcmp(c->ccode, "IL0") )
+                               c->iso3166 = 0x3030;
+
+                       /* YU -> RS */
+                       else if( !strcmp(c->ccode, "YU") )
+                               c->iso3166 = 0x5253;
+               }
+
+               *len = (i * sizeof(struct iwinfo_country_entry));
+               return 0;
+       }
+
+       return -1;
+}
+
 int wl_get_mbssid_support(const char *ifname, int *buf)
 {
        wlc_rev_info_t revinfo;
@@ -496,4 +551,3 @@ int wl_get_mbssid_support(const char *ifname, int *buf)
 
        return -1;
 }
-