print-lwapp.c revision 53f17a9db278d33517d9888dd77848f554522a38
153f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Copyright (c) 1998-2007 The TCPDUMP project 353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Redistribution and use in source and binary forms, with or without 553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * modification, are permitted provided that: (1) source code 653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * distributions retain the above copyright notice and this paragraph 753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * in its entirety, and (2) distributions including binary code include 853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * the above copyright notice and this paragraph in its entirety in 953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * the documentation or other materials provided with the distribution. 1053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * THIS SOFTWARE IS PROVIDED ``AS IS'' AND 1153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT 1253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 1353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * FOR A PARTICULAR PURPOSE. 1453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 1553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Support for the Light Weight Access Point Protocol as per draft-ohara-capwap-lwapp-04 1653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 1753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Original code by Carles Kishimoto <carles.kishimoto@gmail.com> 1853f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 1953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifndef lint 2153f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const char rcsid[] _U_ = 2253f17a9db278d33517d9888dd77848f554522a38JP Abgrall"@(#) $Header: /tcpdump/master/tcpdump/print-lwapp.c,v 1.1 2007-07-24 16:07:30 hannes Exp $"; 2353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 2453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#ifdef HAVE_CONFIG_H 2653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "config.h" 2753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#endif 2853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 2953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <tcpdump-stdinc.h> 3053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 3153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <stdio.h> 3253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <stdlib.h> 3353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include <string.h> 3453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 3553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "interface.h" 3653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "extract.h" 3753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#include "addrtoname.h" 3853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 3953f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 4053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * LWAPP transport (common) header 4153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 0 1 2 3 4253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 4353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 4453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * |VER| RID |C|F|L| Frag ID | Length | 4553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 4653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * | Status/WLANs | Payload... | 4753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 4853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 4953f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 5053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5153f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct lwapp_transport_header { 5253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t version; 5353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t frag_id; 5453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t length[2]; 5553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int16_t status; 5653f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 5753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 5853f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 5953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * LWAPP control header 6053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 0 1 2 3 6153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 6253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 6353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * | Message Type | Seq Num | Msg Element Length | 6453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 6553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * | Session ID | 6653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 6753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * | Msg Element [0..N] | 6853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 6953f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 7053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7153f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct lwapp_control_header { 7253f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t msg_type; 7353f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t seq_num; 7453f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t len[2]; 7553f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t session_id[4]; 7653f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 7753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 7853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_VERSION 0 7953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_EXTRACT_VERSION(x) (((x)&0xC0)>>6) 8053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_EXTRACT_RID(x) (((x)&0x38)>>3) 8153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_EXTRACT_CONTROL_BIT(x) (((x)&0x04)>>2) 8253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 8353f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok lwapp_header_bits_values[] = { 8453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 0x01, "Last Fragment Bit"}, 8553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 0x02, "Fragment Bit"}, 8653f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 0x04, "Control Bit"}, 8753f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 0, NULL} 8853f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 8953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 9053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_DISCOVERY_REQUEST 1 9153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_DISCOVERY_RESPONSE 2 9253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_JOIN_REQUEST 3 9353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_JOIN_RESPONSE 4 9453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_JOIN_ACK 5 9553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_JOIN_CONFIRM 6 9653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_CONFIGURE_REQUEST 10 9753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_CONFIGURE_RESPONSE 11 9853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_CONF_UPDATE_REQUEST 12 9953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_CONF_UPDATE_RESPONSE 13 10053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_WTP_EVENT_REQUEST 14 10153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_WTP_EVENT_RESPONSE 15 10253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_CHANGE_STATE_EVENT_REQUEST 16 10353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_CHANGE_STATE_EVENT_RESPONSE 17 10453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_ECHO_REQUEST 22 10553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_ECHO_RESPONSE 23 10653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_IMAGE_DATA_REQUEST 24 10753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_IMAGE_DATA_RESPONSE 25 10853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_RESET_REQUEST 26 10953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_RESET_RESPONSE 27 11053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_KEY_UPDATE_REQUEST 30 11153f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_KEY_UPDATE_RESPONSE 31 11253f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_PRIMARY_DISCOVERY_REQUEST 32 11353f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_PRIMARY_DISCOVERY_RESPONSE 33 11453f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_DATA_TRANSFER_REQUEST 34 11553f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_DATA_TRANSFER_RESPONSE 35 11653f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_CLEAR_CONFIG_INDICATION 36 11753f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_WLAN_CONFIG_REQUEST 37 11853f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_WLAN_CONFIG_RESPONSE 38 11953f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_MOBILE_CONFIG_REQUEST 39 12053f17a9db278d33517d9888dd77848f554522a38JP Abgrall#define LWAPP_MSGTYPE_MOBILE_CONFIG_RESPONSE 40 12153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 12253f17a9db278d33517d9888dd77848f554522a38JP Abgrallstatic const struct tok lwapp_msg_type_values[] = { 12353f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_DISCOVERY_REQUEST, "Discovery req"}, 12453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_DISCOVERY_RESPONSE, "Discovery resp"}, 12553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_JOIN_REQUEST, "Join req"}, 12653f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_JOIN_RESPONSE, "Join resp"}, 12753f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_JOIN_ACK, "Join ack"}, 12853f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_JOIN_CONFIRM, "Join confirm"}, 12953f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_CONFIGURE_REQUEST, "Configure req"}, 13053f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_CONFIGURE_RESPONSE, "Configure resp"}, 13153f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_CONF_UPDATE_REQUEST, "Update req"}, 13253f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_CONF_UPDATE_RESPONSE, "Update resp"}, 13353f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_WTP_EVENT_REQUEST, "WTP event req"}, 13453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_WTP_EVENT_RESPONSE, "WTP event resp"}, 13553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_CHANGE_STATE_EVENT_REQUEST, "Change state event req"}, 13653f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_CHANGE_STATE_EVENT_RESPONSE, "Change state event resp"}, 13753f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_ECHO_REQUEST, "Echo req"}, 13853f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_ECHO_RESPONSE, "Echo resp"}, 13953f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_IMAGE_DATA_REQUEST, "Image data req"}, 14053f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_IMAGE_DATA_RESPONSE, "Image data resp"}, 14153f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_RESET_REQUEST, "Channel status req"}, 14253f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_RESET_RESPONSE, "Channel status resp"}, 14353f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_KEY_UPDATE_REQUEST, "Key update req"}, 14453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_KEY_UPDATE_RESPONSE, "Key update resp"}, 14553f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_PRIMARY_DISCOVERY_REQUEST, "Primary discovery req"}, 14653f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_PRIMARY_DISCOVERY_RESPONSE, "Primary discovery resp"}, 14753f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_DATA_TRANSFER_REQUEST, "Data transfer req"}, 14853f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_DATA_TRANSFER_RESPONSE, "Data transfer resp"}, 14953f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_CLEAR_CONFIG_INDICATION, "Clear config ind"}, 15053f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_WLAN_CONFIG_REQUEST, "Wlan config req"}, 15153f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_WLAN_CONFIG_RESPONSE, "Wlan config resp"}, 15253f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_MOBILE_CONFIG_REQUEST, "Mobile config req"}, 15353f17a9db278d33517d9888dd77848f554522a38JP Abgrall { LWAPP_MSGTYPE_MOBILE_CONFIG_RESPONSE, "Mobile config resp"}, 15453f17a9db278d33517d9888dd77848f554522a38JP Abgrall { 0, NULL} 15553f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 15653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 15753f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 15853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * LWAPP message elements 15953f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 16053f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 0 1 2 3 16153f17a9db278d33517d9888dd77848f554522a38JP Abgrall * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 16253f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 16353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * | Type | Length | Value ... | 16453f17a9db278d33517d9888dd77848f554522a38JP Abgrall * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 16553f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 16653f17a9db278d33517d9888dd77848f554522a38JP Abgrallstruct lwapp_message_header { 16753f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t type; 16853f17a9db278d33517d9888dd77848f554522a38JP Abgrall u_int8_t length[2]; 16953f17a9db278d33517d9888dd77848f554522a38JP Abgrall}; 17053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 17153f17a9db278d33517d9888dd77848f554522a38JP Abgrallvoid 17253f17a9db278d33517d9888dd77848f554522a38JP Abgralllwapp_control_print(const u_char *pptr, u_int len, int has_ap_ident) { 17353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 17453f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct lwapp_transport_header *lwapp_trans_header; 17553f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct lwapp_control_header *lwapp_control_header; 17653f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *tptr; 17753f17a9db278d33517d9888dd77848f554522a38JP Abgrall int tlen; 17853f17a9db278d33517d9888dd77848f554522a38JP Abgrall int msg_tlen; 17953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 18053f17a9db278d33517d9888dd77848f554522a38JP Abgrall tptr=pptr; 18153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 18253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (has_ap_ident) { 18353f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* check if enough bytes for AP identity */ 18453f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!TTEST2(*tptr, 6)) 18553f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 18653f17a9db278d33517d9888dd77848f554522a38JP Abgrall lwapp_trans_header = (const struct lwapp_transport_header *)(pptr+6); 18753f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else { 18853f17a9db278d33517d9888dd77848f554522a38JP Abgrall lwapp_trans_header = (const struct lwapp_transport_header *)pptr; 18953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 19053f17a9db278d33517d9888dd77848f554522a38JP Abgrall TCHECK(*lwapp_trans_header); 19153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 19253f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* 19353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Sanity checking of the header. 19453f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 19553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (LWAPP_EXTRACT_VERSION(lwapp_trans_header->version) != LWAPP_VERSION) { 19653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("LWAPP version %u packet not supported", 19753f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_VERSION(lwapp_trans_header->version)); 19853f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 19953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 20053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 20153f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* non-verbose */ 20253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (vflag < 1) { 20353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("LWAPPv%u, %s frame, Flags [%s], length %u", 20453f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_VERSION(lwapp_trans_header->version), 20553f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data", 20653f17a9db278d33517d9888dd77848f554522a38JP Abgrall bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07), 20753f17a9db278d33517d9888dd77848f554522a38JP Abgrall len); 20853f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 20953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 21053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 21153f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* ok they seem to want to know everything - lets fully decode it */ 21253f17a9db278d33517d9888dd77848f554522a38JP Abgrall tlen=EXTRACT_16BITS(lwapp_trans_header->length); 21353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 21453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u", 21553f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_VERSION(lwapp_trans_header->version), 21653f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data", 21753f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_RID(lwapp_trans_header->version), 21853f17a9db278d33517d9888dd77848f554522a38JP Abgrall bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07), 21953f17a9db278d33517d9888dd77848f554522a38JP Abgrall lwapp_trans_header->frag_id, 22053f17a9db278d33517d9888dd77848f554522a38JP Abgrall tlen); 22153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 22253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (has_ap_ident) { 22353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("\n\tAP identity: %s", 22453f17a9db278d33517d9888dd77848f554522a38JP Abgrall etheraddr_string(tptr)); 22553f17a9db278d33517d9888dd77848f554522a38JP Abgrall tptr+=sizeof(const struct lwapp_transport_header)+6; 22653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } else { 22753f17a9db278d33517d9888dd77848f554522a38JP Abgrall tptr+=sizeof(const struct lwapp_transport_header); 22853f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 22953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 23053f17a9db278d33517d9888dd77848f554522a38JP Abgrall while(tlen>0) { 23153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 23253f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* did we capture enough for fully decoding the object header ? */ 23353f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!TTEST2(*tptr, sizeof(struct lwapp_control_header))) 23453f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 23553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 23653f17a9db278d33517d9888dd77848f554522a38JP Abgrall lwapp_control_header = (const struct lwapp_control_header *)tptr; 23753f17a9db278d33517d9888dd77848f554522a38JP Abgrall msg_tlen = EXTRACT_16BITS(lwapp_control_header->len); 23853f17a9db278d33517d9888dd77848f554522a38JP Abgrall 23953f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* print message header */ 24053f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("\n\t Msg type: %s (%u), Seqnum: %u, Msg len: %d, Session: 0x%08x", 24153f17a9db278d33517d9888dd77848f554522a38JP Abgrall tok2str(lwapp_msg_type_values,"Unknown",lwapp_control_header->msg_type), 24253f17a9db278d33517d9888dd77848f554522a38JP Abgrall lwapp_control_header->msg_type, 24353f17a9db278d33517d9888dd77848f554522a38JP Abgrall lwapp_control_header->seq_num, 24453f17a9db278d33517d9888dd77848f554522a38JP Abgrall msg_tlen, 24553f17a9db278d33517d9888dd77848f554522a38JP Abgrall EXTRACT_32BITS(lwapp_control_header->session_id)); 24653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 24753f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* did we capture enough for fully decoding the message */ 24853f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!TTEST2(*tptr, msg_tlen)) 24953f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 25053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 25153f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* XXX - Decode sub messages for each message */ 25253f17a9db278d33517d9888dd77848f554522a38JP Abgrall switch(lwapp_control_header->msg_type) { 25353f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_DISCOVERY_REQUEST: 25453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_DISCOVERY_RESPONSE: 25553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_JOIN_REQUEST: 25653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_JOIN_RESPONSE: 25753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_JOIN_ACK: 25853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_JOIN_CONFIRM: 25953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_CONFIGURE_REQUEST: 26053f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_CONFIGURE_RESPONSE: 26153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_CONF_UPDATE_REQUEST: 26253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_CONF_UPDATE_RESPONSE: 26353f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_WTP_EVENT_REQUEST: 26453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_WTP_EVENT_RESPONSE: 26553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_CHANGE_STATE_EVENT_REQUEST: 26653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_CHANGE_STATE_EVENT_RESPONSE: 26753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_ECHO_REQUEST: 26853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_ECHO_RESPONSE: 26953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_IMAGE_DATA_REQUEST: 27053f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_IMAGE_DATA_RESPONSE: 27153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_RESET_REQUEST: 27253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_RESET_RESPONSE: 27353f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_KEY_UPDATE_REQUEST: 27453f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_KEY_UPDATE_RESPONSE: 27553f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_PRIMARY_DISCOVERY_REQUEST: 27653f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_PRIMARY_DISCOVERY_RESPONSE: 27753f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_DATA_TRANSFER_REQUEST: 27853f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_DATA_TRANSFER_RESPONSE: 27953f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_CLEAR_CONFIG_INDICATION: 28053f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_WLAN_CONFIG_REQUEST: 28153f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_WLAN_CONFIG_RESPONSE: 28253f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_MOBILE_CONFIG_REQUEST: 28353f17a9db278d33517d9888dd77848f554522a38JP Abgrall case LWAPP_MSGTYPE_MOBILE_CONFIG_RESPONSE: 28453f17a9db278d33517d9888dd77848f554522a38JP Abgrall default: 28553f17a9db278d33517d9888dd77848f554522a38JP Abgrall break; 28653f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 28753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 28853f17a9db278d33517d9888dd77848f554522a38JP Abgrall tptr += sizeof(struct lwapp_control_header) + msg_tlen; 28953f17a9db278d33517d9888dd77848f554522a38JP Abgrall tlen -= sizeof(struct lwapp_control_header) + msg_tlen; 29053f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 29153f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 29253f17a9db278d33517d9888dd77848f554522a38JP Abgrall 29353f17a9db278d33517d9888dd77848f554522a38JP Abgrall trunc: 29453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("\n\t\t packet exceeded snapshot"); 29553f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 29653f17a9db278d33517d9888dd77848f554522a38JP Abgrall 29753f17a9db278d33517d9888dd77848f554522a38JP Abgrallvoid 29853f17a9db278d33517d9888dd77848f554522a38JP Abgralllwapp_data_print(const u_char *pptr, u_int len) { 29953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 30053f17a9db278d33517d9888dd77848f554522a38JP Abgrall const struct lwapp_transport_header *lwapp_trans_header; 30153f17a9db278d33517d9888dd77848f554522a38JP Abgrall const u_char *tptr; 30253f17a9db278d33517d9888dd77848f554522a38JP Abgrall int tlen; 30353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 30453f17a9db278d33517d9888dd77848f554522a38JP Abgrall tptr=pptr; 30553f17a9db278d33517d9888dd77848f554522a38JP Abgrall 30653f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* check if enough bytes for AP identity */ 30753f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (!TTEST2(*tptr, 6)) 30853f17a9db278d33517d9888dd77848f554522a38JP Abgrall goto trunc; 30953f17a9db278d33517d9888dd77848f554522a38JP Abgrall lwapp_trans_header = (const struct lwapp_transport_header *)pptr; 31053f17a9db278d33517d9888dd77848f554522a38JP Abgrall TCHECK(*lwapp_trans_header); 31153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 31253f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* 31353f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Sanity checking of the header. 31453f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 31553f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (LWAPP_EXTRACT_VERSION(lwapp_trans_header->version) != LWAPP_VERSION) { 31653f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("LWAPP version %u packet not supported", 31753f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_VERSION(lwapp_trans_header->version)); 31853f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 31953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 32053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 32153f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* non-verbose */ 32253f17a9db278d33517d9888dd77848f554522a38JP Abgrall if (vflag < 1) { 32353f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("LWAPPv%u, %s frame, Flags [%s], length %u", 32453f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_VERSION(lwapp_trans_header->version), 32553f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data", 32653f17a9db278d33517d9888dd77848f554522a38JP Abgrall bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07), 32753f17a9db278d33517d9888dd77848f554522a38JP Abgrall len); 32853f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 32953f17a9db278d33517d9888dd77848f554522a38JP Abgrall } 33053f17a9db278d33517d9888dd77848f554522a38JP Abgrall 33153f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* ok they seem to want to know everything - lets fully decode it */ 33253f17a9db278d33517d9888dd77848f554522a38JP Abgrall tlen=EXTRACT_16BITS(lwapp_trans_header->length); 33353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 33453f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("LWAPPv%u, %s frame, Radio-id %u, Flags [%s], Frag-id %u, length %u", 33553f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_VERSION(lwapp_trans_header->version), 33653f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_CONTROL_BIT(lwapp_trans_header->version) ? "Control" : "Data", 33753f17a9db278d33517d9888dd77848f554522a38JP Abgrall LWAPP_EXTRACT_RID(lwapp_trans_header->version), 33853f17a9db278d33517d9888dd77848f554522a38JP Abgrall bittok2str(lwapp_header_bits_values,"none",(lwapp_trans_header->version)&0x07), 33953f17a9db278d33517d9888dd77848f554522a38JP Abgrall lwapp_trans_header->frag_id, 34053f17a9db278d33517d9888dd77848f554522a38JP Abgrall tlen); 34153f17a9db278d33517d9888dd77848f554522a38JP Abgrall 34253f17a9db278d33517d9888dd77848f554522a38JP Abgrall tptr+=sizeof(const struct lwapp_transport_header); 34353f17a9db278d33517d9888dd77848f554522a38JP Abgrall tlen-=sizeof(const struct lwapp_transport_header); 34453f17a9db278d33517d9888dd77848f554522a38JP Abgrall 34553f17a9db278d33517d9888dd77848f554522a38JP Abgrall /* FIX - An IEEE 802.11 frame follows - hexdump for now */ 34653f17a9db278d33517d9888dd77848f554522a38JP Abgrall print_unknown_data(tptr, "\n\t", tlen); 34753f17a9db278d33517d9888dd77848f554522a38JP Abgrall 34853f17a9db278d33517d9888dd77848f554522a38JP Abgrall return; 34953f17a9db278d33517d9888dd77848f554522a38JP Abgrall 35053f17a9db278d33517d9888dd77848f554522a38JP Abgrall trunc: 35153f17a9db278d33517d9888dd77848f554522a38JP Abgrall printf("\n\t\t packet exceeded snapshot"); 35253f17a9db278d33517d9888dd77848f554522a38JP Abgrall} 35353f17a9db278d33517d9888dd77848f554522a38JP Abgrall 35453f17a9db278d33517d9888dd77848f554522a38JP Abgrall/* 35553f17a9db278d33517d9888dd77848f554522a38JP Abgrall * Local Variables: 35653f17a9db278d33517d9888dd77848f554522a38JP Abgrall * c-style: whitesmith 35753f17a9db278d33517d9888dd77848f554522a38JP Abgrall * c-basic-offset: 8 35853f17a9db278d33517d9888dd77848f554522a38JP Abgrall * End: 35953f17a9db278d33517d9888dd77848f554522a38JP Abgrall */ 360