1/* 2 * Test harness for WLAN functions. 3 * 4 * Copyright (C) 2015, Broadcom Corporation 5 * All Rights Reserved. 6 * 7 * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation; 8 * the contents of this file may not be disclosed to third parties, copied 9 * or duplicated in any form, in whole or in part, without the prior 10 * written permission of Broadcom Corporation. 11 * 12 * $Id:$ 13 */ 14 15#include <stdio.h> 16#include <stdlib.h> 17#include <string.h> 18#include <unistd.h> 19#include "trace.h" 20#include "test.h" 21#include "dsp.h" 22#include "wlu_api.h" 23#include "wlan.h" 24 25TEST_DECLARE(); 26 27static void wlanEventCallback(void *context, uint32 eventType, 28 wl_event_msg_t *wlEvent, uint8 *data, uint32 length) 29{ 30 TEST((int)context == 0x12345678, "invalid context"); 31 if (eventType == WLC_E_ESCAN_RESULT) { 32 if (wlEvent->status == WLC_E_STATUS_SUCCESS) { 33 TRACE(TRACE_DEBUG, 34 "WLC_E_ESCAN_RESULT - WLC_E_STATUS_SUCCESS %d\n", length); 35 } 36 else if (wlEvent->status == WLC_E_STATUS_PARTIAL) { 37 wl_escan_result_t *escan_data = (wl_escan_result_t*)data; 38 39 TRACE(TRACE_DEBUG, 40 "WLC_E_ESCAN_RESULT - WLC_E_STATUS_PARTIAL\n"); 41 42 if (length >= sizeof(*escan_data)) { 43 wl_bss_info_t *bi = &escan_data->bss_info[0]; 44 dump_bss_info(bi); 45 } 46 } 47 } 48} 49 50/* --------------------------------------------------------------- */ 51 52static void testIfName(void) 53{ 54 wlanT *wlan; 55 56 wlan = wlanCreate(); 57 TEST(wlan != 0, "wlanCreate failed"); 58 TEST(strcmp(wlanIfName(wlan), "wlan0") == 0, "wlanIfName failed"); 59 TEST(wlanDestroy(wlan), "wlanDestroy failed"); 60} 61 62static void testEtherAddr(void) 63{ 64 wlanT *wlan; 65 struct ether_addr addr; 66 67 wlan = wlanCreate(); 68 TEST(wlan != 0, "wlanCreate failed"); 69 TEST(wlanEtherAddr(wlan, &addr), "wlanEtherAddr failed"); 70 TRACE_MAC_ADDR(TRACE_PRINTF, "ether addr", &addr); 71 TEST(wlanDestroy(wlan), "wlanDestroy failed"); 72} 73 74static void testEventMsg(void) 75{ 76 wlanT *wlan; 77 78 wlan = wlanCreate(); 79 TEST(wlan != 0, "wlanCreate failed"); 80 TEST(wlanDisableEventMsg(wlan, WLC_E_ACTION_FRAME_RX), "wlanEnableEventMsg failed"); 81 TEST(wlanEnableEventMsg(wlan, WLC_E_ACTION_FRAME_RX), "wlanEnableEventMsg failed"); 82 TEST(wlanDestroy(wlan), "wlanDestroy failed"); 83} 84 85static void testVendorIe(void) 86{ 87 wlanT *wlan; 88 uint8 ie[] = "\x50\x6F\x9A\x10\x01\x02\x03"; 89 90 wlan = wlanCreate(); 91 TEST(wlan != 0, "wlanCreate failed"); 92 TEST(wlanAddVendorIe(wlan, VNDR_IE_PRBREQ_FLAG, sizeof(ie), ie), 93 "wlanAddVendorIe failed"); 94 TEST(wlanDeleteVendorIe(wlan, VNDR_IE_PRBREQ_FLAG, sizeof(ie), ie), 95 "wlanDeleteVendorIe failed"); 96 TEST(wlanDestroy(wlan), "wlanDestroy failed"); 97} 98 99static void testEscan(void) 100{ 101 wlanT *wlan; 102 103 wlan = wlanCreate(); 104 TEST(wlan != 0, "wlanCreate failed"); 105 TEST(wlanStartEscan(wlan, TRUE, -1, -1, -1), "wlanStartEscan failed"); 106 sleep(1); 107 TEST(wlanStopScan(wlan), "wlanStopScan failed"); 108 TEST(wlanDestroy(wlan), "wlanDestroy failed"); 109} 110 111static void testBssTransitionQuery(void) 112{ 113 wlanT *wlan; 114 115 wlan = wlanCreate(); 116 TEST(wlan != 0, "wlanCreate failed"); 117 TEST(wlanBssTransitionQuery(wlan), "wlanBssTransitionQuery failed"); 118 TEST(wlanDestroy(wlan), "wlanDestroy failed"); 119} 120 121static void testActionFrame(void) 122{ 123 wlanT *wlan; 124 struct ether_addr da = {{0x00, 0x11, 0x11, 0x11, 0x11, 0x11}}; 125 char data[256]; 126 int i; 127 128 data[DOT11_ACTION_CAT_OFF] = DOT11_ACTION_CAT_PUBLIC; 129 data[DOT11_ACTION_ACT_OFF] = GAS_REQUEST_ACTION_FRAME; 130 for (i = DOT11_ACTION_ACT_OFF + 1; i < (int)sizeof(data); i++) 131 data[i] = i; 132 133 wlan = wlanCreate(); 134 TEST(wlan != 0, "wlanCreate failed"); 135 TEST(wlanActionFrame(wlan, (int)data, 1, 500, &da, &da, sizeof(data), (uint8 *)data), 136 "wlanActionFrame faile"); 137 TEST(wlanDestroy(wlan), "wlanDestroy failed"); 138} 139 140static void testAssociationStatus(void) 141{ 142 wlanT *wlan; 143 int isAssociated; 144 char buffer[1024]; 145 146 wlan = wlanCreate(); 147 TEST(wlan != 0, "wlanCreate failed"); 148 TEST(wlanAssociationStatus(wlan, &isAssociated, sizeof(buffer), (wl_bss_info_t *)buffer), 149 "wlanAssociationStatus failed"); 150 if (isAssociated) { 151 dump_bss_info((wl_bss_info_t *)buffer); 152 } 153 else { 154 printf("not associated\n"); 155 } 156 TEST(wlanDestroy(wlan), "wlanDestroy failed"); 157} 158 159static void testWnm(void) 160{ 161 wlanT *wlan; 162 int wMask, rMask; 163 164 wlan = wlanCreate(); 165 TEST(wlan != 0, "wlanCreate failed"); 166 for (wMask = 0; wMask < 0x10; wMask++) { 167 TEST(wlanWnm(wlan, wMask), "wlanWnm failed"); 168 TEST(wlanWnmGet(wlan, &rMask), "wlanWnmGet failed"); 169 TEST(wMask == rMask, "invalid data"); 170 } 171 TEST(wlanDestroy(wlan), "wlanDestroy failed"); 172} 173int main(int argc, char **argv) 174{ 175 (void) argc; 176 (void) argv; 177 178 TRACE_LEVEL_SET(TRACE_ALL); 179 TEST_INITIALIZE(); 180 181 wlanSubscribeEvent((void *)0x12345678, wlanEventCallback); 182 wlanInitialize(); 183 184 testIfName(); 185 testEtherAddr(); 186 testEventMsg(); 187 testVendorIe(); 188 testEscan(); 189 testBssTransitionQuery(); 190 testActionFrame(); 191 testAssociationStatus(); 192 testWnm(); 193 194 wlFree(); 195 dspFree(); 196 197 wlanDeinitialize(); 198 wlanUnsubscribeEvent(wlanEventCallback); 199 200 TEST_FINALIZE(); 201 return 0; 202} 203