1/* 2 * Test harness for encoding and decoding information elements. 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 "proto/802.11.h" 19#include "test.h" 20#include "trace.h" 21#include "bcm_encode_ie.h" 22#include "bcm_decode_ie.h" 23 24TEST_DECLARE(); 25 26#define BUFFER_SIZE 256 27static uint8 buffer[BUFFER_SIZE]; 28static bcm_encode_t enc; 29 30/* --------------------------------------------------------------- */ 31 32static void testEncode(void) 33{ 34 uint8 adBuffer[BUFFER_SIZE]; 35 bcm_encode_t ad; 36 37 TEST(bcm_encode_init(&enc, sizeof(buffer), buffer), "bcm_encode_init failed"); 38 39 TEST(bcm_encode_ie_hotspot_indication2(&enc, TRUE, HSPOT_RELEASE_2), 40 "bcm_encode_ie_hotspot_indication2 failed"); 41 42 TEST(bcm_encode_ie_interworking(&enc, 43 IW_ANT_WILDCARD_NETWORK, FALSE, FALSE, FALSE, FALSE, 44 TRUE, 0, 0, (struct ether_addr *)"\xff\xff\xff\xff\xff\xff"), 45 "bcm_encode_ie_interworking failed"); 46 47 TEST(bcm_encode_init(&ad, sizeof(adBuffer), adBuffer), 48 "bcm_encode_init failed"); 49 TEST(bcm_encode_ie_advertisement_protocol_tuple(&ad, 50 ADVP_PAME_BI_DEPENDENT, 0xff, ADVP_ANQP_PROTOCOL_ID), 51 "bcm_encode_ie_advertisement_protocol_tuple failed"); 52 TEST(bcm_encode_ie_advertisement_protocol_from_tuple(&enc, 53 bcm_encode_length(&ad), bcm_encode_buf(&ad)), 54 "bcm_encode_ie_advertisement_protocol_from_tuple failed"); 55 56 TEST(bcm_encode_ie_roaming_consortium(&enc, 0xff, 3, (uint8 *)"\x00\x11\x22", 57 4, (uint8 *)"\x55\x66\x77\x88", 4, (uint8 *)"\xaa\xbb\xcc\xdd"), 58 "bcm_encode_ie_roaming_consortium failed"); 59 60 TEST(bcm_encode_ie_extended_capabilities(&enc, 0x80000000), 61 "bcm_encode_ie_extended_capabilities failed"); 62 63 WL_PRPKT("encoded IEs", bcm_encode_buf(&enc), bcm_encode_length(&enc)); 64} 65 66static void testDecode(void) 67{ 68 bcm_decode_t dec; 69 bcm_decode_ie_t ie; 70 bcm_decode_t dec1; 71 bcm_decode_hotspot_indication_t hotspot; 72 bcm_decode_interworking_t interworking; 73 bcm_decode_advertisement_protocol_t advertise; 74 bcm_decode_roaming_consortium_t roam; 75 uint32 cap; 76 77 TEST(bcm_decode_init(&dec, bcm_encode_length(&enc), 78 bcm_encode_buf(&enc)), "bcm_decode_init failed"); 79 WL_PRPKT("decode packet", bcm_decode_buf(&dec), bcm_decode_buf_length(&dec)); 80 81 TEST(bcm_decode_ie(&dec, &ie) == 5, "bcm_decode_ie failed"); 82 83 TEST(bcm_decode_init(&dec1, ie.hotspotIndicationLength, 84 ie.hotspotIndication), "bcm_decode_init failed"); 85 TEST(bcm_decode_ie_hotspot_indication2(&dec1, &hotspot), 86 "bcm_decode_ie_hotspot_indication2 failed"); 87 TEST(hotspot.isDgafDisabled == TRUE, "invalid data"); 88 TEST(hotspot.releaseNumber == HSPOT_RELEASE_2, "invalid data"); 89 90 TEST(bcm_decode_init(&dec1, ie.interworkingLength, 91 ie.interworking), "bcm_decode_init failed"); 92 TEST(bcm_decode_ie_interworking(&dec1, &interworking), "bcm_decode_ie_interworking failed"); 93 TEST(interworking.accessNetworkType == IW_ANT_WILDCARD_NETWORK, "invalid data"); 94 TEST(interworking.isInternet == FALSE, "invalid data"); 95 TEST(interworking.isAsra == FALSE, "invalid data"); 96 TEST(interworking.isEsr == FALSE, "invalid data"); 97 TEST(interworking.isUesa == FALSE, "invalid data"); 98 TEST(interworking.isVenue == TRUE, "invalid data"); 99 TEST(interworking.venueGroup == 0, "invalid data"); 100 TEST(interworking.venueType == 0, "invalid data"); 101 TEST(interworking.isHessid == TRUE, "invalid data"); 102 TEST(memcmp(&interworking.hessid, "\xff\xff\xff\xff\xff\xff", 103 sizeof(interworking.hessid)) == 0, "invalid data"); 104 105 TEST(bcm_decode_init(&dec1, ie.advertisementProtocolLength, 106 ie.advertisementProtocol), "bcm_decode_init failed"); 107 TEST(bcm_decode_ie_advertisement_protocol(&dec1, &advertise), 108 "bcm_decode_ie_advertisement_protocol failed"); 109 TEST(advertise.count == 1, "invalid data"); 110 TEST(advertise.protocol[0].queryResponseLimit == 0x7f, "invalid data"); 111 TEST(advertise.protocol[0].isPamebi == FALSE, "invalid data"); 112 TEST(advertise.protocol[0].protocolId == ADVP_ANQP_PROTOCOL_ID, "invalid data"); 113 114 TEST(bcm_decode_init(&dec1, ie.roamingConsortiumLength, 115 ie.roamingConsortium), "bcm_decode_init failed"); 116 TEST(bcm_decode_ie_roaming_consortium(&dec1, &roam), 117 "pktDecodeRoamingConsortium failed"); 118 TEST(roam.anqpOiCount == 0xff, "invalid data"); 119 TEST(roam.count == 3, "invalid data"); 120 TEST(memcmp(roam.oi[0].data, "\x00\x11\x22", roam.oi[0].length) == 0, 121 "invalid data"); 122 TEST(memcmp(roam.oi[1].data, "\x55\x66\x77\x88", roam.oi[1].length) == 0, 123 "invalid data"); 124 TEST(memcmp(roam.oi[2].data, "\xaa\xbb\xcc\xdd", roam.oi[2].length) == 0, 125 "invalid data"); 126 127 TEST(bcm_decode_init(&dec1, ie.extendedCapabilityLength, 128 ie.extendedCapability), "bcm_decode_init failed"); 129 TEST(bcm_decode_ie_extended_capabilities(&dec1, &cap), 130 "bcm_decode_ie_extended_capabilities failed"); 131 TEST(cap == 0x80000000, "invalid data"); 132} 133 134static void testDecodeCorruptLength(void) 135{ 136 bcm_decode_t dec; 137 bcm_decode_ie_t ie; 138 uint8 *lenPtr; 139 uint8 save; 140 141 TEST(bcm_decode_init(&dec, bcm_encode_length(&enc), 142 bcm_encode_buf(&enc)), "bcm_decode_init failed"); 143 WL_PRPKT("decode packet", bcm_decode_buf(&dec), bcm_decode_buf_length(&dec)); 144 145 lenPtr = &bcm_decode_buf(&dec)[1]; 146 save = *lenPtr; 147 *lenPtr += 1; 148 TEST(bcm_decode_ie(&dec, &ie) == 1, "bcm_decode_ie failed"); 149 *lenPtr = 0xff; 150 TEST(bcm_decode_ie(&dec, &ie) == 0, "bcm_decode_ie failed"); 151 *lenPtr = save; 152} 153 154int main(int argc, char **argv) 155{ 156 (void) argc; 157 (void) argv; 158 159 TRACE_LEVEL_SET(TRACE_ALL); 160 TEST_INITIALIZE(); 161 162 testEncode(); 163 testDecode(); 164 testDecodeCorruptLength(); 165 166 TEST_FINALIZE(); 167 return 0; 168} 169