freewtp/src/common/capwap_element.h

150 lines
7.0 KiB
C

#ifndef __CAPWAP_ELEMENT_HEADER__
#define __CAPWAP_ELEMENT_HEADER__
#include "capwap_array.h"
#include "capwap_list.h"
/* */
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 {
/* Build message element */
void (*create_message_element)(void* data, capwap_message_elements_handle handle, struct capwap_write_message_elements_ops* func);
/* Parsing message element */
void* (*parsing_message_element)(capwap_message_elements_handle handle, struct capwap_read_message_elements_ops* func);
/* Memory management */
void* (*clone_message_element)(void*);
void (*free_message_element)(void*);
};
struct capwap_message_elements_ops* capwap_get_message_element_ops(unsigned short code);
/*********************************************************************************************************************/
/* Standard message elements */
#include "capwap_element_acdescriptor.h" /* 00001 */
#include "capwap_element_acipv4list.h" /* 00002 */
#include "capwap_element_acipv6list.h" /* 00003 */
#include "capwap_element_acname.h" /* 00004 */
#include "capwap_element_acnamepriority.h" /* 00005 */
#include "capwap_element_actimestamp.h" /* 00006 */
#include "capwap_element_addmacacl.h" /* 00007 */
#include "capwap_element_addstation.h" /* 00008 */
/* Reserved */ /* 00009 */
#include "capwap_element_controlipv4.h" /* 00010 */
#include "capwap_element_controlipv6.h" /* 00011 */
#include "capwap_element_timers.h" /* 00012 */
#include "capwap_element_datatransferdata.h" /* 00013 */
#include "capwap_element_datatransfermode.h" /* 00014 */
#include "capwap_element_decrypterrorreport.h" /* 00015 */
#include "capwap_element_decrypterrorreportperiod.h" /* 00016 */
#include "capwap_element_deletemacacl.h" /* 00017 */
#include "capwap_element_deletestation.h" /* 00018 */
/* Reserved */ /* 00019 */
#include "capwap_element_discoverytype.h" /* 00020 */
#include "capwap_element_duplicateipv4.h" /* 00021 */
#include "capwap_element_duplicateipv6.h" /* 00022 */
#include "capwap_element_idletimeout.h" /* 00023 */
#include "capwap_element_imagedata.h" /* 00024 */
#include "capwap_element_imageidentifier.h" /* 00025 */
#include "capwap_element_imageinfo.h" /* 00026 */
#include "capwap_element_initdownload.h" /* 00027 */
#include "capwap_element_location.h" /* 00028 */
#include "capwap_element_maximumlength.h" /* 00029 */
#include "capwap_element_localipv4.h" /* 00030 */
#include "capwap_element_radioadmstate.h" /* 00031 */
#include "capwap_element_radiooprstate.h" /* 00032 */
#include "capwap_element_resultcode.h" /* 00033 */
#include "capwap_element_returnedmessage.h" /* 00034 */
#include "capwap_element_sessionid.h" /* 00035 */
#include "capwap_element_statisticstimer.h" /* 00036 */
#include "capwap_element_vendorpayload.h" /* 00037 */
#include "capwap_element_wtpboarddata.h" /* 00038 */
#include "capwap_element_wtpdescriptor.h" /* 00039 */
#include "capwap_element_wtpfallback.h" /* 00040 */
#include "capwap_element_wtpframetunnelmode.h" /* 00041 */
/* Reserved */ /* 00042 */
/* Reserved */ /* 00043 */
#include "capwap_element_wtpmactype.h" /* 00044 */
#include "capwap_element_wtpname.h" /* 00045 */
/* Reserved */ /* 00046 */
#include "capwap_element_wtpradiostat.h" /* 00047 */
#include "capwap_element_wtprebootstat.h" /* 00048 */
#include "capwap_element_wtpstaticipaddress.h" /* 00049 */
#include "capwap_element_localipv6.h" /* 00050 */
#include "capwap_element_transport.h" /* 00051 */
#include "capwap_element_mtudiscovery.h" /* 00052 */
#include "capwap_element_ecnsupport.h" /* 00053 */
/* IEEE 802.11 message elements */
#include "capwap_element_80211_addwlan.h" /* 01024 */
#include "capwap_element_80211_antenna.h" /* 01025 */
#include "capwap_element_80211_assignbssid.h" /* 01026 */
#include "capwap_element_80211_deletewlan.h" /* 01027 */
#include "capwap_element_80211_directsequencecontrol.h" /* 01028 */
#include "capwap_element_80211_ie.h" /* 01029 */
#include "capwap_element_80211_macoperation.h" /* 01030 */
#include "capwap_element_80211_miccountermeasures.h" /* 01031 */
#include "capwap_element_80211_multidomaincapability.h" /* 01032 */
#include "capwap_element_80211_ofdmcontrol.h" /* 01033 */
#include "capwap_element_80211_rateset.h" /* 01034 */
#include "capwap_element_80211_rsnaerrorreport.h" /* 01035 */
#include "capwap_element_80211_station.h" /* 01036 */
#include "capwap_element_80211_stationqos.h" /* 01037 */
#include "capwap_element_80211_stationkey.h" /* 01038 */
#include "capwap_element_80211_statistics.h" /* 01039 */
#include "capwap_element_80211_supportedrates.h" /* 01040 */
#include "capwap_element_80211_txpower.h" /* 01041 */
#include "capwap_element_80211_txpowerlevel.h" /* 01042 */
#include "capwap_element_80211_updatestationqos.h" /* 01043 */
#include "capwap_element_80211_updatewlan.h" /* 01044 */
#include "capwap_element_80211_wtpqos.h" /* 01045 */
#include "capwap_element_80211_wtpradioconf.h" /* 01046 */
#include "capwap_element_80211_wtpradiofailalarm.h" /* 01047 */
#include "capwap_element_80211_wtpradioinformation.h" /* 01048 */
/*********************************************************************************************************************/
#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 {
uint16_t type;
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, uint16_t type);
void* capwap_get_message_element_data(struct capwap_parsed_packet* packet, uint16_t type);
#endif /* __CAPWAP_ELEMENT_HEADER__ */