]> git.decadent.org.uk Git - ap-utils.git/blobdiff - lib/wlan.c
Imported Upstream version 1.5~pre1
[ap-utils.git] / lib / wlan.c
index 33d8f698648facaa2c64c2da401d0f095ce1e4ea..fc8e555ec7a0b0b77fe78e53a265f01948835cd3 100644 (file)
@@ -23,7 +23,6 @@
 #include <unistd.h>
 #include <sys/types.h>
 #include "ap-utils.h"
-#include "ap-curses.h"
 
 #define ESSID _("[E] ESSID: ")
 #define AP_NAME _("[N] AP name: ")
@@ -49,9 +48,7 @@
 #define SIFS_T _("[T] SIFS time (msec): ")
 #define WLAN_HELP _("[key] - set option; W - write conf; Q - quit to menu")
 
-extern short ap_type;
-extern char IS_ATMEL12350_TELLUS;
-extern char IS_ATMEL12350_VERNET;
+extern short ap_type, ap_vendorext;
 
 void atmel_wireless()
 {
@@ -110,26 +107,27 @@ void atmel_wireless()
     };
 
     extern WINDOW *main_sub;
+    extern rdprops regdom_types[];
+    extern char *channels[];
     varbind varbinds[16];
     unsigned short int RTSThreshold, FragmentationThreshold,
-       InterRoaming, m_basic_rates = 0, first_channel = 1, BeaconPeriod = 0,
-       sifs = 0;
+       InterRoaming, m_basic_rates = 0, BeaconPeriod = 0, sifs = 0;
     unsigned char dtim, ch;
     char *AuthenticationTypes[3] = { OSYS, SH_KEY, BOTH_TYPE },
        message[1024];
     char domain[32], basic_rates[4], AutoRateFallBack, SSIDBroadcasting,
-       ap_name[32], ch_num = 0, PreambleType, AuthenticationType, channel;
+       ap_name[32], PreambleType, AuthenticationType, channel;
     char m_channel = 0, m_essid = 0, m_broadcast = 0, m_rts = 0,
        m_fragment = 0, m_auth = 0, m_ap_name = 0, m_preambule = 0,
        m_auto_rate = 0, m_inter_roaming = 0, m_beacon = 0, m_dtim = 0,
        m_sifs = 0;
-    char *item_name[14], *rates[3] = { ON, OFF, BASIC }, *preambules[2] = {
+    char *rates[3] = { ON, OFF, BASIC }, *preambules[2] = {
     _("Short"), _("Long")};
     short __rates[4] = { 2, 4, 11, 22 };
-    int i, c = 0;
+    int i, c = 0, rd_idx;
     unsigned short ap_regdomain;
-    struct SysDeviceInfo_ATMEL410 ptr410;
-    struct SysDeviceInfo_ATMEL12350 ptr12350;
+    struct sysDeviceInfo_ATMEL410 str410;
+    struct sysDeviceInfo_ATMEL12350 str12350;
 
 
     if (ap_type == ATMEL12350) {
@@ -181,14 +179,15 @@ void atmel_wireless()
     varbinds[i++].oid = sysDeviceInfo;
     if (ap_type == ATMEL12350) {
        varbinds[i++].oid = operInterRoaming;
-       if (IS_ATMEL12350_TELLUS) {
+       if (ap_vendorext == TELLUS || ap_vendorext == VERNET) {
            varbinds[i++].oid = operBeaconPeriod;
            varbinds[i++].oid = operDTIM;
        }
-       if (IS_ATMEL12350_VERNET)
+       if (ap_vendorext == VERNET)
            varbinds[i++].oid = operSIFSTIME;
     }
 
+    print_help(WAIT_RET);
     if (snmp(varbinds, i, GET) <= 0) {
        print_helperr(ERR_RET);
        goto exit;
@@ -209,14 +208,14 @@ void atmel_wireless()
     memcpy(ap_name, varbinds[10].value, 32);
     if (ap_type == ATMEL12350) {
        InterRoaming = *(varbinds[12].value);
-       if (IS_ATMEL12350_TELLUS) {
+       if (ap_vendorext == TELLUS || ap_vendorext == VERNET) {
            BeaconPeriod = varbinds[13].len_val == 2 ?
                (varbinds[13].value[0] << 8) | varbinds[13].value[1] :
                varbinds[13].value[0] < 0x80 ?
                varbinds[13].value[0] : 0xff00 | varbinds[13].value[0];
            dtim = *(varbinds[14].value);
        }
-       if (IS_ATMEL12350_VERNET)
+       if (ap_vendorext == VERNET)
            sifs = varbinds[15].len_val == 2 ?
                (varbinds[15].value[0] << 8) | varbinds[15].value[1] :
                varbinds[15].value[0] < 0x80 ?
@@ -224,23 +223,18 @@ void atmel_wireless()
     }
 
     if (ap_type == ATMEL12350) {
-       memcpy(&ptr12350, varbinds[11].value,
-           sizeof(struct SysDeviceInfo_ATMEL12350));
-       ap_regdomain=ptr12350.RegulationDomain;
+       memcpy(&str12350, varbinds[11].value,
+           sizeof(struct sysDeviceInfo_ATMEL12350));
+       ap_regdomain=str12350.RegulatoryDomain;
     } else /* ATMEL410 */{
-       memcpy(&ptr410, varbinds[11].value,
-           sizeof(struct SysDeviceInfo_ATMEL410));
-       ap_regdomain = swap4(ptr410.RegulationDomain);
+       memcpy(&str410, varbinds[11].value,
+           sizeof(struct sysDeviceInfo_ATMEL410));
+       ap_regdomain = swap4(str410.RegulatoryDomain);
     }
 
-    if ((ch_num = ch_list(ap_regdomain, item_name)) == 0) {
-       print_helperr(ERR_RET);
-       goto exit;
-    }
-    if (ap_regdomain == 0x31 || ap_regdomain == 0x32)
-       first_channel=10;
+    rd_idx = regdom_idx(ap_regdomain);
 
-    print_title(_("Wireless Settings"));
+    print_top(NULL, _("Wireless Settings"));
 
     sprintf(message, "%s%02u (%u MHz)", CHANNEL, channel, 2407 + 5 * channel);
     mvwaddstr(main_sub, 0, 0, message);
@@ -271,13 +265,13 @@ void atmel_wireless()
     if (ap_type == ATMEL12350) {
        sprintf(message, "%s%s", INT_ROAMING, (InterRoaming == 1) ? ON : OFF);
        mvwaddstr(main_sub, 15, 0, message);
-       if (IS_ATMEL12350_TELLUS) {
+       if (ap_vendorext == TELLUS || ap_vendorext == VERNET) {
            sprintf(message, "%s%u", BEACON_PER, BeaconPeriod);
            mvwaddstr(main_sub, 16, 0, message);
            sprintf(message, "%s%u", DTIM_I, dtim);
            mvwaddstr(main_sub, 17, 0, message);
        }
-       if (IS_ATMEL12350_VERNET) {
+       if (ap_vendorext == VERNET) {
            sprintf(message, "%s%u", SIFS_T, sifs);
            mvwaddstr(main_sub, 18, 0, message);
        }
@@ -317,8 +311,13 @@ void atmel_wireless()
            break;
        case 'C':
        case 'c':
-           channel = menu_choose(0, strlen(CHANNEL), item_name, ch_num)
-               + first_channel;
+           channel = menu_choose(0, strlen(CHANNEL),
+#ifndef NO_REG_DOMAIN
+               channels + regdom_types[rd_idx].first_ch - 1,
+               regdom_types[rd_idx].chans) + regdom_types[rd_idx].first_ch;
+#else
+               channels, 14) + 1;
+#endif
            sprintf(message, "%02u (%u MHz)", channel, 2407 + 5 * channel);
            print_menusel(0, 0, CHANNEL, message);
            m_channel = 1;
@@ -356,7 +355,7 @@ void atmel_wireless()
        case 'N':
        case 'n':
 //          make_field(2, strlen(AP_NAME), 32);
-           get_value(ap_name, 2, strlen(AP_NAME), 32, ANY_STRING, 0, 0, NULL);
+           get_value(ap_name, 2, strlen(AP_NAME), -32, ANY_STRING, 0, 0, NULL);
            m_ap_name = 1;
            continue;
        case 'E':
@@ -392,7 +391,7 @@ void atmel_wireless()
            continue;
        case 'B':
        case 'b':
-           if (!IS_ATMEL12350_TELLUS)
+           if (ap_vendorext != TELLUS && ap_vendorext != VERNET)
                continue;
            get_value(message, 16, strlen(BEACON_PER), 6, INT_STRING, 0, 65535,
                WLAN_HELP);
@@ -401,7 +400,7 @@ void atmel_wireless()
            continue;
        case 'D':
        case 'd':
-           if (!IS_ATMEL12350_TELLUS)
+           if (ap_vendorext != TELLUS && ap_vendorext != VERNET)
                continue;
            get_value(message, 17, strlen(DTIM_I), 4, INT_STRING, 0, 255,
                WLAN_HELP);
@@ -410,7 +409,7 @@ void atmel_wireless()
            continue;
        case 'T':
        case 't':
-           if (!IS_ATMEL12350_VERNET)
+           if (ap_vendorext != VERNET)
                continue;
            get_value(message, 18, strlen(SIFS_T), 6, INT_STRING, 0, 65535,
                WLAN_HELP);
@@ -564,59 +563,45 @@ void atmel_wireless()
   exit:
     getch();
   quit:
-    /* free memory allocated for channel list */
-    for (i = 0; i < ch_num; i++)
-       free(item_name[i]);
-
-    print_title("");
+    print_top(NULL, NULL);
     clear_main(0);
 }
 
 void nwn_wireless()
 {
-    char *item_name[14];
-
-    char oid_dot11SupportedAntenna[][11] = {
-       {0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x02, 0x01, 0x01},
-       {0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x02, 0x01, 0x02},
-       {0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x03, 0x01, 0x01},
-       {0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x03, 0x01, 0x02},
-       {0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x04, 0x01, 0x01},
-       {0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x04, 0x01, 0x02}
-    };
-
-    char ChannelPref[] =
-       { 0x2b, 0x06, 0x01, 0x04, 0x01, 0x87, 0x29, 0x03, 0x01, 0x02, 0x01,
-       0x06, 0x00
-    };
-    char operChannelID[] =
-       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x05, 0x01, 0x01, 0x01 };
-    char sysTrapSwitch[] =
-       { 0x2B, 0x06, 0x01, 0x02, 0x01, 0x0b, 0x1e, 0x00 };
-
     char operESSID[] =
        { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x01, 0x01, 0x01, 0x09, 0x01 };
-
+    char operBasicRates[] =
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x01, 0x01, 0x01, 0x0b, 0x01 };
+    char OpenSystem[] =
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x01, 0x02, 0x01, 0x03, 0x01, 0x01 };
+    char SharedKey[] =
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x01, 0x02, 0x01, 0x03, 0x01, 0x02 };
     char operRTSThreshold[] =
        { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x01, 0x01, 0x02, 0x01 };
     char operFragmentationThreshold[] =
        { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x02, 0x01, 0x01, 0x05, 0x01 };
-    char OpenSystem[] =
-       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x01, 0x02, 0x01, 0x03, 0x01,
-       0x01
-    };
-    char SharedKey[] =
-       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x01, 0x02, 0x01, 0x03, 0x01,
-       0x02
+    char operChannelID[] =
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x05, 0x01, 0x01, 0x01 };
+    char oid_dot11SupportedAntenna[][11] = {
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x02, 0x01, 0x01 },
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x02, 0x01, 0x02 },
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x03, 0x01, 0x01 },
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x03, 0x01, 0x02 },
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x04, 0x01, 0x01 },
+       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x04, 0x08, 0x01, 0x04, 0x01, 0x02 }
     };
-    char operBasicRates[] =
-       { 0x2a, 0x86, 0x48, 0xce, 0x34, 0x01, 0x01, 0x01, 0xb, 0x01 };
-    char operAccessPointName[] =
-       { 0x2b, 0x06, 0x01, 0x02, 0x01, 0x01, 0x05, 0x00 };
     char operAccessPointContact[] =
        { 0x2b, 0x06, 0x01, 0x02, 0x01, 0x01, 0x04, 0x00 };
+    char operAccessPointName[] =
+       { 0x2b, 0x06, 0x01, 0x02, 0x01, 0x01, 0x05, 0x00 };
     char operAccessPointLocation[] =
        { 0x2b, 0x06, 0x01, 0x02, 0x01, 0x01, 0x06, 0x00 };
+    char sysTrapSwitch[] =
+       { 0x2b, 0x06, 0x01, 0x02, 0x01, 0x0b, 0x1e, 0x00 };
+    char ChannelPref[] =
+       { 0x2b, 0x06, 0x01, 0x04, 0x01, 0x87, 0x29, 0x03, 0x01, 0x02, 0x01,
+       0x06, 0x00 };
 
     unsigned short int i, RTSThreshold, FragmentationThreshold,
        m_basic_rates = 0, authi;
@@ -627,13 +612,15 @@ void nwn_wireless()
         antenna[6],
         channel_pref[2] = { 0, 0 };
     extern WINDOW *main_sub;
+    extern rdprops regdom_types[];
+    extern char *channels[];
     char *domain, basic_rates[] =
        { 0, 0, 0, 0 }, *ap_name, ap_location[32], ap_contact[32],
        m_ap_contact = 0, m_ap_location = 0;
     char m_channel = 0, m_essid = 0, m_rts = 0, m_fragment = 0, m_auth =
        0, m_ap_name = 0, channel, traps, m_traps = 0;
     varbind varbinds[11];
-    int c=0, ch_num = 0, first_channel=1, reg_domain=0;
+    int c = 0, reg_domain = 0, rd_idx;
     short __rates[4] = { 2, 4, 11, 22};
 
     domain = (char *) calloc(32, 1);
@@ -697,16 +684,10 @@ void nwn_wireless()
                basic(basic_rates[i]));
         mvwaddstr(main_sub, 11+i, 2, message);
     }
-    
+
     reg_domain = get_RegDomain();
-    if ((ch_num = ch_list(reg_domain, item_name)) == 0) {
-       print_helperr(ERR_RET);
-       goto exit;
-    }
+    rd_idx = regdom_idx(reg_domain);
 
-    if(reg_domain == 0x31 || reg_domain == 0x32)
-       first_channel = 10;
-       
     for (i = 0; i < 9; i++) {
        varbinds[i].len_val = 0;
        varbinds[i].type = NULL_VALUE;
@@ -764,7 +745,7 @@ void nwn_wireless()
            ANTENNA_DV_RIGHT, (antenna[5] == 1) ? ON : OFF);
     mvwaddstr(main_sub, 19, 1, message);
 
-    print_title(_("General Options"));
+    print_top(NULL, _("General Options"));
     print_help(_
               ("UIOPTY - antenna; SCANLEDFR1234 - options; W - write conf; Q - quit to menu"));
     wrefresh(main_sub);
@@ -863,8 +844,13 @@ void nwn_wireless()
             break;
        case 'C':
        case 'c':
-           channel = menu_choose(0, strlen(CHANNEL), item_name, ch_num)
-               + first_channel;
+           channel = menu_choose(0, strlen(CHANNEL),
+#ifndef NO_REG_DOMAIN
+               channels + regdom_types[rd_idx].first_ch - 1,
+               regdom_types[rd_idx].chans) + regdom_types[rd_idx].first_ch;
+#else
+               channels, 14) + 1;
+#endif
            sprintf(message, "%02u (%u MHz)", channel, 2407 + 5 * channel);
            print_menusel(0, 0, CHANNEL, message);
            m_channel = 1;
@@ -1095,11 +1081,8 @@ void nwn_wireless()
   exit:
     getch();
   quit:
-    print_title("");
+    print_top(NULL, NULL);
 
-    /* free memory allocated for channel list */
-    for (i = 0; i < ch_num; i++)
-       free(item_name[i]);
     free(domain);
     free(ap_name);
     clear_main(0);