📄 test.c
字号:
{ "APL4_WORLD", APL4_WORLD }, { "MKK2_MKKA", MKK2_MKKA }, { "APL_RESERVED", APL_RESERVED }, { "APL2_WORLD", APL2_WORLD }, { "APL2_APLC", APL2_APLC }, { "APL3_WORLD", APL3_WORLD }, { "MKK1_FCCA", MKK1_FCCA }, { "APL2_APLD", APL2_APLD }, { "MKK1_MKKA1", MKK1_MKKA1 }, { "MKK1_MKKA2", MKK1_MKKA2 }, { "APL1_WORLD", APL1_WORLD }, { "APL1_FCCA", APL1_FCCA }, { "APL1_APLA", APL1_APLA }, { "APL1_ETSIC", APL1_ETSIC }, { "APL2_ETSIC", APL2_ETSIC }, { "APL5_WORLD", APL5_WORLD }, { "WOR0_WORLD", WOR0_WORLD }, { "WOR1_WORLD", WOR1_WORLD }, { "WOR2_WORLD", WOR2_WORLD }, { "WOR3_WORLD", WOR3_WORLD }, { "WOR4_WORLD", WOR4_WORLD }, { "WOR5_ETSIC", WOR5_ETSIC }, { "WOR01_WORLD",WOR01_WORLD }, { "WOR02_WORLD",WOR02_WORLD }, { "EU1_WORLD", EU1_WORLD }, { "APL1", APL1 }, { "APL2", APL2 }, { "APL3", APL3 }, { "APL4", APL4 }, { "APL5", APL5 }, { "ETSI1", ETSI1 }, { "ETSI2", ETSI2 }, { "ETSI3", ETSI3 }, { "ETSI4", ETSI4 }, { "ETSI5", ETSI5 }, { "ETSI6", ETSI6 }, { "ETSIA", ETSIA }, { "ETSIB", ETSIB }, { "ETSIC", ETSIC }, { "FCC1", FCC1 }, { "FCC2", FCC2 }, { "FCC3", FCC3 }, { "FCCA", FCCA }, { "APLD", APLD }, { "MKK1", MKK1 }, { "MKK2", MKK2 }, { "MKKA", MKKA }, { "NULL1", NULL1 }, { "WORLD", WORLD }, { "DEBUG_REG_DMN", DEBUG_REG_DMN },};static HAL_BOOLrdlookup(const char *name, u_int8_t *rd){#define N(a) (sizeof(a)/sizeof(a[0])) int i; for (i = 0; i < N(domains); i++) if (strcasecmp(domains[i].name, name) == 0) { *rd = domains[i].rd; return AH_TRUE; } return AH_FALSE;#undef N}static const char *getrdname(HAL_REG_DOMAIN rd){#define N(a) (sizeof(a)/sizeof(a[0])) int i; for (i = 0; i < N(domains); i++) if (domains[i].rd == rd) return domains[i].name; return NULL;#undef N}static voidrdlist(){#define N(a) (sizeof(a)/sizeof(a[0])) int i; printf("\nRegulatory domains:\n\n"); for (i = 0; i < N(domains); i++) printf("%-15s%s", domains[i].name, ((i+1)%5) == 0 ? "\n" : ""); printf("\n");#undef N}typedef struct { HAL_CTRY_CODE countryCode; HAL_REG_DOMAIN regDmnEnum; const char* isoName; const char* name; HAL_BOOL allow11g; HAL_BOOL allow11aTurbo; HAL_BOOL allow11gTurbo;} COUNTRY_CODE_TO_ENUM_RD; #define YES AH_TRUE#define NO AH_FALSE/* Index into table to avoid DEBUG and NO COUNTRY SET entries */#define CTRY_ONLY_INDEX 2/* * Country Code Table to Enumerated RD */static const COUNTRY_CODE_TO_ENUM_RD allCountries[] = { {CTRY_DEBUG, NO_ENUMRD, "DB", "DEBUG", YES, YES, YES }, {CTRY_DEFAULT, DEF_REGDMN, "NA", "NO_COUNTRY_SET", YES, YES, YES }, {CTRY_ALBANIA, NULL1_WORLD, "AL", "ALBANIA", YES, NO, YES }, {CTRY_ALGERIA, NULL1_WORLD, "DZ", "ALGERIA", YES, NO, YES }, {CTRY_ARGENTINA, APL3_WORLD, "AR", "ARGENTINA", NO, NO, NO }, {CTRY_ARMENIA, ETSI4_WORLD, "AM", "ARMENIA", YES, NO, YES }, {CTRY_AUSTRALIA, FCC2_WORLD, "AU", "AUSTRALIA", YES, YES, YES }, {CTRY_AUSTRIA, ETSI5_WORLD, "AT", "AUSTRIA", YES, NO, YES }, {CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ", "AZERBAIJAN", YES, YES, YES }, {CTRY_BAHRAIN, NULL1_WORLD, "BH", "BAHRAIN", YES, NO, YES }, {CTRY_BELARUS, NULL1_WORLD, "BY", "BELARUS", YES, NO, YES }, {CTRY_BELGIUM, ETSI4_WORLD, "BE", "BELGIUM", YES, NO, YES }, {CTRY_BELIZE, APL1_ETSIC, "BZ", "BELIZE", YES, YES, YES }, {CTRY_BOLIVIA, APL1_ETSIC, "BO", "BOLVIA", YES, YES, YES }, {CTRY_BRAZIL, NULL1_ETSIC, "BR", "BRAZIL", NO, NO, NO }, {CTRY_BRUNEI_DARUSSALAM,APL1_WORLD,"BN", "BRUNEI DARUSSALAM", YES, YES, YES }, {CTRY_BULGARIA, ETSI6_WORLD, "BG", "BULGARIA", YES, NO, YES }, {CTRY_CANADA, FCC2_FCCA, "CA", "CANADA", YES, YES, YES }, {CTRY_CHILE, APL5_WORLD, "CL", "CHILE", NO, YES, NO }, {CTRY_CHINA, APL1_WORLD, "CN", "CHINA", YES, YES, YES }, {CTRY_COLOMBIA, FCC1_FCCA, "CO", "COLOMBIA", YES, NO, YES }, {CTRY_COSTA_RICA, NULL1_WORLD, "CR", "COSTA RICA", YES, NO, YES }, {CTRY_CROATIA, ETSI3_WORLD, "HR", "CROATIA", YES, NO, YES }, {CTRY_CYPRUS, ETSI1_WORLD, "CY", "CYPRUS", YES, YES, YES }, {CTRY_CZECH, ETSI3_WORLD, "CZ", "CZECH REPUBLIC", NO, NO, NO }, {CTRY_DENMARK, ETSI1_WORLD, "DK", "DENMARK", YES, NO, YES }, {CTRY_DOMINICAN_REPUBLIC,FCC1_FCCA,"DO", "DOMINICAN REPUBLIC", YES, YES, YES }, {CTRY_ECUADOR, NULL1_WORLD, "EC", "ECUADOR", NO, NO,NO }, {CTRY_EGYPT, NULL1_WORLD, "EG", "EGYPT", YES, NO, YES }, {CTRY_EL_SALVADOR, NULL1_WORLD, "SV", "EL SALVADOR",YES, NO, YES }, {CTRY_ESTONIA, ETSI1_WORLD, "EE", "ESTONIA", YES, NO, YES }, {CTRY_FINLAND, ETSI1_WORLD, "FI", "FINLAND", YES, NO, YES }, {CTRY_FRANCE, ETSI3_WORLD, "FR", "FRANCE", YES, NO, YES }, {CTRY_FRANCE2, ETSI3_WORLD, "F2", "FRANCE_RES", YES, NO, YES }, {CTRY_GEORGIA, ETSI4_WORLD, "GE", "GEORGIA", YES, YES, YES }, {CTRY_GERMANY, ETSI1_WORLD, "DE", "GERMANY", YES, NO, YES }, {CTRY_GREECE, NULL1_WORLD, "GR", "GREECE", YES, NO, YES }, {CTRY_GUATEMALA, FCC1_FCCA, "GT", "GUATEMALA", YES, YES, YES }, {CTRY_HONDURAS, NULL1_WORLD, "HN", "HONDURAS", YES, NO, YES }, {CTRY_HONG_KONG, FCC2_WORLD, "HK", "HONG KONG", YES, YES, YES }, {CTRY_HUNGARY, ETSI2_WORLD, "HU", "HUNGARY", YES, NO, YES }, {CTRY_ICELAND, ETSI1_WORLD, "IS", "ICELAND", YES, NO, YES }, {CTRY_INDIA, NULL1_WORLD, "IN", "INDIA", YES, NO, YES }, {CTRY_INDONESIA, NULL1_WORLD, "ID", "INDONESIA", YES, NO, YES }, {CTRY_IRAN, APL1_WORLD, "IR", "IRAN", YES, YES, YES }, {CTRY_IRELAND, ETSI1_WORLD, "IE", "IRELAND", YES, NO, YES }, {CTRY_ISRAEL, NULL1_WORLD, "IL", "ISRAEL", YES, NO, YES }, {CTRY_ITALY, ETSI1_WORLD, "IT", "ITALY", YES, NO, YES }, {CTRY_JAPAN, MKK1_MKKA, "JP", "JAPAN", YES, NO, NO }, {CTRY_JAPAN1, MKK1_MKKB, "J1", "JAPAN1", YES, NO, NO }, {CTRY_JAPAN2, MKK1_FCCA, "J2", "JAPAN2", YES, NO, NO }, {CTRY_JAPAN3, MKK2_MKKA, "J3", "JAPAN3", YES, NO, NO }, {CTRY_JAPAN4, MKK1_MKKA1, "J4", "JAPAN4", YES, NO, NO }, {CTRY_JAPAN5, MKK1_MKKA2, "J5", "JAPAN5", YES, NO, NO }, {CTRY_JORDAN, NULL1_WORLD, "JO", "JORDAN", YES, NO, YES }, {CTRY_KAZAKHSTAN, NULL1_WORLD, "KZ", "KAZAKHSTAN", YES, NO, YES }, {CTRY_KOREA_NORTH, APL2_WORLD, "KP", "NORTH KOREA",YES,YES, YES }, {CTRY_KOREA_ROC, APL2_WORLD, "KR", "KOREA REPUBLIC", YES, NO, NO }, {CTRY_KOREA_ROC2, APL2_APLD, "K2", "KOREA REPUBLIC2", YES, NO, NO }, {CTRY_KUWAIT, NULL1_WORLD, "KW", "KUWAIT", YES, NO, YES }, {CTRY_LATVIA, NULL1_WORLD, "LV", "LATVIA", YES, NO, YES }, {CTRY_LEBANON, NULL1_WORLD, "LB", "LEBANON", YES, NO, YES }, {CTRY_LIECHTENSTEIN,ETSI2_WORLD, "LI", "LIECHTENSTEIN", YES, NO, YES }, {CTRY_LITHUANIA, ETSI1_WORLD, "LT", "LITHUANIA", YES, NO, YES }, {CTRY_LUXEMBOURG, ETSI1_WORLD, "LU", "LUXEMBOURG", YES, NO, YES }, {CTRY_MACAU, FCC2_WORLD, "MO", "MACAU", YES, YES, YES }, {CTRY_MACEDONIA, NULL1_WORLD, "MK", "MACEDONIA", YES, NO, YES }, {CTRY_MALAYSIA, NULL1_WORLD, "MY", "MALAYSIA", NO, NO, NO }, {CTRY_MEXICO, FCC1_FCCA, "MX", "MEXICO", YES, YES, YES }, {CTRY_MONACO, ETSI4_WORLD, "MC", "MONACO", YES, YES, YES }, {CTRY_MOROCCO, NULL1_WORLD, "MA", "MOROCCO", YES, NO, YES }, {CTRY_NETHERLANDS, ETSI1_WORLD, "NL", "NETHERLANDS",YES, NO, YES }, {CTRY_NEW_ZEALAND, FCC2_ETSIC, "NZ", "NEW ZEALAND",YES, NO, YES }, {CTRY_NORWAY, ETSI1_WORLD, "NO", "NORWAY", YES, NO, YES }, {CTRY_OMAN, NULL1_WORLD, "OM", "OMAN", YES, NO, YES }, {CTRY_PAKISTAN, NULL1_WORLD, "PK", "PAKISTAN", YES, NO, YES }, {CTRY_PANAMA, FCC1_FCCA, "PA", "PANAMA", YES, YES, YES }, {CTRY_PERU, NULL1_WORLD, "PE", "PERU", YES, NO, YES }, {CTRY_PHILIPPINES, FCC1_WORLD, "PH", "PHILIPPINES",YES, YES, YES }, {CTRY_POLAND, ETSI1_WORLD, "PL", "POLAND", YES, NO, YES }, {CTRY_PORTUGAL, ETSI1_WORLD, "PT", "PORTUGAL", YES, NO, YES }, {CTRY_PUERTO_RICO, FCC1_FCCA, "PR", "PUERTO RICO",YES, YES, YES }, {CTRY_QATAR, NULL1_WORLD, "QA", "QATAR", YES, NO, YES }, {CTRY_ROMANIA, NULL1_WORLD, "RO", "ROMANIA", YES, NO, YES }, {CTRY_RUSSIA, NULL1_WORLD, "RU", "RUSSIA", YES, NO, YES }, {CTRY_SAUDI_ARABIA,NULL1_WORLD, "SA", "SAUDI ARABIA", YES, NO, YES }, {CTRY_SINGAPORE, APL4_WORLD, "SG", "SINGAPORE", YES, YES, YES }, {CTRY_SLOVAKIA, ETSI3_WORLD, "SK", "SLOVAK REPUBLIC", YES, NO, YES }, {CTRY_SLOVENIA, ETSI1_WORLD, "SI", "SLOVENIA", YES, NO, YES }, {CTRY_SOUTH_AFRICA,ETSI1_WORLD, "ZA", "SOUTH AFRICA", YES, YES, YES }, {CTRY_SPAIN, ETSI1_WORLD, "ES", "SPAIN", YES, NO, YES }, {CTRY_SWEDEN, ETSI1_WORLD, "SE", "SWEDEN", YES, NO, YES }, {CTRY_SWITZERLAND, ETSI2_WORLD, "CH", "SWITZERLAND",YES, NO, YES }, {CTRY_SYRIA, NULL1_WORLD, "SY", "SYRIA", YES, NO, YES }, {CTRY_TAIWAN, APL3_WORLD, "TW", "TAIWAN", YES, YES, YES }, {CTRY_THAILAND, APL2_WORLD, "TH", "THAILAND", YES, YES, YES }, {CTRY_TRINIDAD_Y_TOBAGO,ETSI4_WORLD,"TT", "TRINIDAD & TOBAGO", YES, NO, YES }, {CTRY_TUNISIA, ETSI3_WORLD, "TN", "TUNISIA", YES, NO, YES }, {CTRY_TURKEY, ETSI3_WORLD, "TR", "TURKEY", YES, NO, YES }, {CTRY_UKRAINE, NULL1_WORLD, "UA", "UKRAINE", YES, NO, YES }, {CTRY_UAE, NULL1_WORLD, "AE", "UNITED ARAB EMIRATES", YES, NO, YES }, {CTRY_UNITED_KINGDOM, ETSI1_WORLD, "GB", "UNITED KINGDOM", YES, NO, YES }, {CTRY_UNITED_STATES, FCC1_FCCA, "US", "UNITED STATES", YES, YES, YES }, {CTRY_URUGUAY, APL2_WORLD, "UY", "URUGUAY", YES, NO, YES }, {CTRY_UZBEKISTAN, FCC3_FCCA, "UZ", "UZBEKISTAN", YES, YES, YES }, {CTRY_VENEZUELA, APL2_ETSIC, "VE", "VENEZUELA", YES, NO, YES }, {CTRY_VIET_NAM, NULL1_WORLD, "VN", "VIET NAM", YES, NO, YES }, {CTRY_YEMEN, NULL1_WORLD, "YE", "YEMEN", YES, NO, YES }, {CTRY_ZIMBABWE, NULL1_WORLD, "ZW", "ZIMBABWE", YES, NO, YES } };#undef YES#undef NOstatic HAL_BOOLcclookup(const char *name, u_int8_t *rd, HAL_CTRY_CODE *cc){#define N(a) (sizeof(a)/sizeof(a[0])) int i; for (i = 0; i < N(allCountries); i++) if (strcasecmp(allCountries[i].isoName, name) == 0 || strcasecmp(allCountries[i].name, name) == 0) { *rd = allCountries[i].regDmnEnum; *cc = allCountries[i].countryCode; return AH_TRUE; } return AH_FALSE;#undef N}static const char *getccname(HAL_CTRY_CODE cc){#define N(a) (sizeof(a)/sizeof(a[0])) int i; for (i = 0; i < N(allCountries); i++) if (allCountries[i].countryCode == cc) return allCountries[i].name; return NULL;#undef N}static const char *getccisoname(HAL_CTRY_CODE cc){#define N(a) (sizeof(a)/sizeof(a[0])) int i; for (i = 0; i < N(allCountries); i++) if (allCountries[i].countryCode == cc) return allCountries[i].isoName; return NULL;#undef N}static voidcclist(){#define N(a) (sizeof(a)/sizeof(a[0])) int i; printf("\nCountry codes:\n"); for (i = 0; i < N(allCountries); i++) printf("%2s %-15.15s%s", allCountries[i].isoName, allCountries[i].name, ((i+1)%4) == 0 ? "\n" : " "); printf("\n");#undef N}static HAL_BOOLsetRateTable(struct ath_hal *ah, HAL_CHANNEL *chan, int16_t tpcScaleReduction, int16_t powerLimit, int16_t *pMinPower, int16_t *pMaxPower);static voidcalctxpower(struct ath_hal *ah, int nchan, HAL_CHANNEL *chans, int16_t tpcScaleReduction, int16_t powerLimit, int16_t *txpow){ int16_t minpow; int i; for (i = 0; i < nchan; i++) if (!setRateTable(ah, &chans[i], tpcScaleReduction, powerLimit, &minpow, &txpow[i])) { printf("unable to set rate table\n"); exit(-1); }}int n = 1;const char *sep = "";int dopassive = 0;static voiddumpchannels(struct ath_hal *ah, int nc, HAL_CHANNEL *chans, int16_t *txpow){ int i; for (i = 0; i < nc; i++) { HAL_CHANNEL *c = &chans[i]; int type; printf("%s%u", sep, c->channel); if (IS_CHAN_TURBO(c)) type = 'T'; else if (IS_CHAN_A(c)) type = 'A'; else if (IS_CHAN_G(c)) type = 'G'; else type = 'B'; if (dopassive && IS_CHAN_PASSIVE(c)) type = tolower(type); printf("%c %d.%d", type, txpow[i]/2, (txpow[i]%2)*5); if ((n++ % 6) == 0) sep = "\n"; else sep = " "; }}static voidcheckchannels(struct ath_hal *ah, HAL_CHANNEL *chans, int nchan){ int i; for (i = 0; i < nchan; i++) { HAL_CHANNEL *c = &chans[i]; if (!ath_hal_checkchannel(ah, c)) printf("Channel %u (0x%x) disallowed\n", c->channel, c->channelFlags); }}static voidintersect(HAL_CHANNEL *dst, int16_t *dtxpow, int *nd, const HAL_CHANNEL *src, int16_t *stxpow, int ns){ int i = 0, j, k, l; while (i < *nd) { for (j = 0; j < ns && dst[i].channel != src[j].channel; j++) ; if (j < ns && dtxpow[i] == stxpow[j]) { for (k = i+1, l = i; k < *nd; k++, l++) dst[l] = dst[k]; (*nd)--; } else i++; }}static voidusage(const char *progname){ printf("usage: %s [-o] [-i] [cc | rd]\n", progname); exit(-1);}static int verbose = 1;static intruntest(struct ath_hal_private *ahp, int cc, int modes, int outdoor, int xchanmode){ HAL_CHANNEL chans[IEEE80211_CHAN_MAX]; int i, n; if (verbose) { if (cc != CTRY_DEFAULT) printf("%s (%s, 0x%x, %u) %s (0x%x, %u)\n", getccname(cc), getccisoname(cc), cc, cc, getrdname(ahp->ah_currentRD), ahp->ah_currentRD, ahp->ah_currentRD); else printf("%s (0x%x, %u)\n", getrdname(ahp->ah_currentRD), ahp->ah_currentRD, ahp->ah_currentRD); } if (modes == 0) modes = HAL_MODE_11A | HAL_MODE_11B | HAL_MODE_11G | HAL_MODE_TURBO; if (!ath_hal_init_channels(&ahp->h, chans, IEEE80211_CHAN_MAX, &n, cc, modes, outdoor, xchanmode)) { printf("ath_hal_init_channels failed!\n"); return -1; } for (i = 0; i < n; i++) { if (!ath_hal_checkchannel(&ahp->h, &chans[i])) printf("%u/0x%x: FAIL\n", chans[i].channel, chans[i].channelFlags); else if (verbose > 1) printf("%u/0x%x: ok\n", chans[i].channel, chans[i].channelFlags); } return 0;}intmain(int argc, char *argv[]){#define N(a) (sizeof(a)/sizeof(a[0])) struct ath_hal_private ahp; int i, n; HAL_BOOL extendedChanMode = AH_TRUE; int modes = 0; memset(&ahp, 0, sizeof(ahp)); ahp.ah_getChannelEdges = getChannelEdges; ahp.ah_getWirelessModes = getWirelessModes; ahp.ah_opmode = HAL_M_STA; ahp.ah_currentRD = 16; /* FCC */ while ((i = getopt(argc, argv, "deoilm:pABGTqv")) != -1) switch (i) { case 'd': ath_hal_debug = 1; break; case 'e': extendedChanMode = AH_FALSE; break; case 'o': outdoor = AH_TRUE; break; case 'i': outdoor = AH_FALSE; break; case 'l': cclist(); rdlist(); exit(0); case 'm': if (strncasecmp(optarg, "sta", 2) == 0) ahp.ah_opmode = HAL_M_STA; else if (strncasecmp(optarg, "ibss", 2) == 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -