Example #1
0
void wcom_neighbors_v_receive_msg( wcom_mac_addr_t *addr, 
                                   wcom_mac_rx_options_t *options, 
                                   uint8_t *data, 
                                   uint8_t len ){

    // get message
    uint8_t *type = data;
    
    // get version field
    uint8_t *version = type + 1;
   
    // check protocol version
    if( *version != WCOM_NEIGHBOR_PROTOCOL_VERSION ){
        
        return;
    }
    
    // process message
    if( *type == WCOM_NEIGHBOR_MSG_TYPE_BEACON ){

        process_beacon( (wcom_msg_beacon_t *)type, addr, options );
    }	
    else if( *type == WCOM_NEIGHBOR_MSG_TYPE_FLASH ){
        
        process_flash( (wcom_msg_flash_t *)type, addr, options );
    }
    else if( *type == WCOM_NEIGHBOR_MSG_TYPE_THUNDER ){
        
        process_thunder( (wcom_msg_thunder_t *)type, addr, options );
    }
    else if( *type == WCOM_NEIGHBOR_MSG_TYPE_EVICT ){
        
        process_evict( (wcom_msg_evict_t *)type, addr, options );
    }
}
Example #2
0
static void process_packet(void *packet, const int len)
{
	struct ieee80211_frame *wh = (struct ieee80211_frame *) packet;

#if 0
	printf("GOT %d\n", len);
	hexdump(packet, len);
#endif

	if (len < (int) sizeof(*wh)) return;

	switch (wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK)
	{
		case IEEE80211_FC0_TYPE_MGT:
			switch (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK)
			{
				case IEEE80211_FC0_SUBTYPE_BEACON:
					process_beacon(wh, len);
					break;

				case IEEE80211_FC0_SUBTYPE_ASSOC_REQ:
					grab_hidden_ssid(wh->i_addr3, wh, len, 2 + 2);
					break;

				case IEEE80211_FC0_SUBTYPE_REASSOC_REQ:
					grab_hidden_ssid(wh->i_addr3, wh, len, 2 + 2 + 6);
					break;

				case IEEE80211_FC0_SUBTYPE_PROBE_RESP:
					grab_hidden_ssid(wh->i_addr3, wh, len, 8 + 2 + 2);
					break;
			}
			break;

		case IEEE80211_FC0_TYPE_DATA:
			process_data(wh, len);
			break;
	}
}