170 lines
6.9 KiB
C
170 lines
6.9 KiB
C
|
#ifndef __CAPWAP_ELEMENT_HEADER__
|
||
|
#define __CAPWAP_ELEMENT_HEADER__
|
||
|
|
||
|
#include "array.h"
|
||
|
#include "list.h"
|
||
|
|
||
|
struct capwap_message_element_id
|
||
|
{
|
||
|
uint32_t vendor;
|
||
|
uint16_t type;
|
||
|
};
|
||
|
|
||
|
#define message_element_id_eq(a, b) \
|
||
|
(((a).vendor == (b).vendor) && ((a).type == (b).type))
|
||
|
|
||
|
/* */
|
||
|
typedef void* capwap_message_elements_handle;
|
||
|
struct capwap_write_message_elements_ops {
|
||
|
int (*write_u8)(capwap_message_elements_handle handle, uint8_t data);
|
||
|
int (*write_u16)(capwap_message_elements_handle handle, uint16_t data);
|
||
|
int (*write_u32)(capwap_message_elements_handle handle, uint32_t data);
|
||
|
int (*write_block)(capwap_message_elements_handle handle, const uint8_t* data, unsigned short length);
|
||
|
};
|
||
|
|
||
|
struct capwap_read_message_elements_ops {
|
||
|
unsigned short (*read_ready)(capwap_message_elements_handle handle);
|
||
|
int (*read_u8)(capwap_message_elements_handle handle, uint8_t* data);
|
||
|
int (*read_u16)(capwap_message_elements_handle handle, uint16_t* data);
|
||
|
int (*read_u32)(capwap_message_elements_handle handle, uint32_t* data);
|
||
|
int (*read_block)(capwap_message_elements_handle handle, uint8_t* data, unsigned short length);
|
||
|
};
|
||
|
|
||
|
struct capwap_message_elements_ops
|
||
|
{
|
||
|
int category;
|
||
|
|
||
|
/* Build message element */
|
||
|
void (*create)(void* data, capwap_message_elements_handle handle, struct capwap_write_message_elements_ops* func);
|
||
|
|
||
|
/* Parsing message element */
|
||
|
void* (*parse)(capwap_message_elements_handle handle, struct capwap_read_message_elements_ops* func);
|
||
|
|
||
|
/* Memory management */
|
||
|
void* (*clone)(void*);
|
||
|
void (*free)(void*);
|
||
|
};
|
||
|
|
||
|
const struct capwap_message_elements_ops *capwap_get_message_element_ops(const struct capwap_message_element_id id);
|
||
|
|
||
|
/*********************************************************************************************************************/
|
||
|
|
||
|
/* Standard message elements */
|
||
|
#include "element_acdescriptor.h" /* 00001 */
|
||
|
#include "element_acipv4list.h" /* 00002 */
|
||
|
#include "element_acipv6list.h" /* 00003 */
|
||
|
#include "element_acname.h" /* 00004 */
|
||
|
#include "element_acnamepriority.h" /* 00005 */
|
||
|
#include "element_actimestamp.h" /* 00006 */
|
||
|
#include "element_addmacacl.h" /* 00007 */
|
||
|
#include "element_addstation.h" /* 00008 */
|
||
|
/* Reserved */ /* 00009 */
|
||
|
#include "element_controlipv4.h" /* 00010 */
|
||
|
#include "element_controlipv6.h" /* 00011 */
|
||
|
#include "element_timers.h" /* 00012 */
|
||
|
#include "element_datatransferdata.h" /* 00013 */
|
||
|
#include "element_datatransfermode.h" /* 00014 */
|
||
|
#include "element_decrypterrorreport.h" /* 00015 */
|
||
|
#include "element_decrypterrorreportperiod.h" /* 00016 */
|
||
|
#include "element_deletemacacl.h" /* 00017 */
|
||
|
#include "element_deletestation.h" /* 00018 */
|
||
|
/* Reserved */ /* 00019 */
|
||
|
#include "element_discoverytype.h" /* 00020 */
|
||
|
#include "element_duplicateipv4.h" /* 00021 */
|
||
|
#include "element_duplicateipv6.h" /* 00022 */
|
||
|
#include "element_idletimeout.h" /* 00023 */
|
||
|
#include "element_imagedata.h" /* 00024 */
|
||
|
#include "element_imageidentifier.h" /* 00025 */
|
||
|
#include "element_imageinfo.h" /* 00026 */
|
||
|
#include "element_initdownload.h" /* 00027 */
|
||
|
#include "element_location.h" /* 00028 */
|
||
|
#include "element_maximumlength.h" /* 00029 */
|
||
|
#include "element_localipv4.h" /* 00030 */
|
||
|
#include "element_radioadmstate.h" /* 00031 */
|
||
|
#include "element_radiooprstate.h" /* 00032 */
|
||
|
#include "element_resultcode.h" /* 00033 */
|
||
|
#include "element_returnedmessage.h" /* 00034 */
|
||
|
#include "element_sessionid.h" /* 00035 */
|
||
|
#include "element_statisticstimer.h" /* 00036 */
|
||
|
#include "element_vendorpayload.h" /* 00037 */
|
||
|
#include "element_wtpboarddata.h" /* 00038 */
|
||
|
#include "element_wtpdescriptor.h" /* 00039 */
|
||
|
#include "element_wtpfallback.h" /* 00040 */
|
||
|
#include "element_wtpframetunnelmode.h" /* 00041 */
|
||
|
/* Reserved */ /* 00042 */
|
||
|
/* Reserved */ /* 00043 */
|
||
|
#include "element_wtpmactype.h" /* 00044 */
|
||
|
#include "element_wtpname.h" /* 00045 */
|
||
|
/* Reserved */ /* 00046 */
|
||
|
#include "element_wtpradiostat.h" /* 00047 */
|
||
|
#include "element_wtprebootstat.h" /* 00048 */
|
||
|
#include "element_wtpstaticipaddress.h" /* 00049 */
|
||
|
#include "element_localipv6.h" /* 00050 */
|
||
|
#include "element_transport.h" /* 00051 */
|
||
|
#include "element_mtudiscovery.h" /* 00052 */
|
||
|
#include "element_ecnsupport.h" /* 00053 */
|
||
|
|
||
|
/* IEEE 802.11 message elements */
|
||
|
#include "element_80211_addwlan.h" /* 01024 */
|
||
|
#include "element_80211_antenna.h" /* 01025 */
|
||
|
#include "element_80211_assignbssid.h" /* 01026 */
|
||
|
#include "element_80211_deletewlan.h" /* 01027 */
|
||
|
#include "element_80211_directsequencecontrol.h" /* 01028 */
|
||
|
#include "element_80211_ie.h" /* 01029 */
|
||
|
#include "element_80211_macoperation.h" /* 01030 */
|
||
|
#include "element_80211_miccountermeasures.h" /* 01031 */
|
||
|
#include "element_80211_multidomaincapability.h" /* 01032 */
|
||
|
#include "element_80211_ofdmcontrol.h" /* 01033 */
|
||
|
#include "element_80211_rateset.h" /* 01034 */
|
||
|
#include "element_80211_rsnaerrorreport.h" /* 01035 */
|
||
|
#include "element_80211_station.h" /* 01036 */
|
||
|
#include "element_80211_stationqos.h" /* 01037 */
|
||
|
#include "element_80211_stationkey.h" /* 01038 */
|
||
|
#include "element_80211_statistics.h" /* 01039 */
|
||
|
#include "element_80211_supportedrates.h" /* 01040 */
|
||
|
#include "element_80211_txpower.h" /* 01041 */
|
||
|
#include "element_80211_txpowerlevel.h" /* 01042 */
|
||
|
#include "element_80211_updatestationqos.h" /* 01043 */
|
||
|
#include "element_80211_updatewlan.h" /* 01044 */
|
||
|
#include "element_80211_wtpqos.h" /* 01045 */
|
||
|
#include "element_80211_wtpradioconf.h" /* 01046 */
|
||
|
#include "element_80211_wtpradiofailalarm.h" /* 01047 */
|
||
|
#include "element_80211_wtpradioinformation.h" /* 01048 */
|
||
|
#include "element_80211_supported_mac_profiles.h" /* 01060 */
|
||
|
#include "element_80211_mac_profile.h" /* 01061 */
|
||
|
|
||
|
#include "vendor_travelping.h"
|
||
|
|
||
|
/*********************************************************************************************************************/
|
||
|
#define CAPWAP_MESSAGE_ELEMENT_SINGLE 0
|
||
|
#define CAPWAP_MESSAGE_ELEMENT_ARRAY 1
|
||
|
int capwap_get_message_element_category(uint16_t type);
|
||
|
|
||
|
struct capwap_message_element_itemlist
|
||
|
{
|
||
|
struct capwap_message_element_id id;
|
||
|
int category;
|
||
|
void* data;
|
||
|
};
|
||
|
|
||
|
struct capwap_parsed_packet {
|
||
|
struct capwap_packet_rxmng* rxmngpacket;
|
||
|
struct capwap_list* messages;
|
||
|
};
|
||
|
|
||
|
/* */
|
||
|
#define PARSING_COMPLETE 0
|
||
|
#define UNRECOGNIZED_MESSAGE_ELEMENT 1
|
||
|
#define INVALID_MESSAGE_ELEMENT 2
|
||
|
|
||
|
int capwap_parsing_packet(struct capwap_packet_rxmng* rxmngpacket, struct capwap_parsed_packet* packet);
|
||
|
int capwap_validate_parsed_packet(struct capwap_parsed_packet* packet, struct capwap_array* returnedmessage);
|
||
|
void capwap_free_parsed_packet(struct capwap_parsed_packet* packet);
|
||
|
|
||
|
struct capwap_list_item *capwap_get_message_element(struct capwap_parsed_packet *packet,
|
||
|
const struct capwap_message_element_id id);
|
||
|
void *capwap_get_message_element_data(struct capwap_parsed_packet *packet,
|
||
|
const struct capwap_message_element_id id);
|
||
|
|
||
|
#endif /* __CAPWAP_ELEMENT_HEADER__ */
|