FossilOrigin-Name: 968d10c26f0cd7ba32e00b75d6af37d689aade5c2098caa9e2113bc3df285fb1
This commit is contained in:
7u83@mail.ru
2015-04-14 05:42:23 +00:00
parent 2adfefefaa
commit 3c831ae8b1
22 changed files with 288 additions and 90 deletions

View File

@ -22,13 +22,16 @@
*/
#ifndef __CAPWAP_H
#define __CAPWAP_H
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <errno.h>
#include <arpa/inet.h>
#include "conn.h"
@ -36,13 +39,23 @@
#include "lwapp.h"
#include "strlist.h"
/* capwap version and iana number */
/**
*@defgroup CAPWAPConstants CAPWAP Constants
*@{
*/
/** CAPWAP Version */
#define CAPWAP_VERSION ((uint8_t)0)
#define CWIANA_ENTERPRISE_NUMBER 0 /* for capwap base the number */
#define CWIANA_ENTERPRISE_NUMBER 0
/* ports */
/** CAPWAP Control Port*/
#define CAPWAP_CONTROL_PORT 5246
/** CAPWAP Control Port as String */
#define CAPWAP_CONTROL_PORT_STR "5246"
@ -60,6 +73,7 @@ enum capwap_states {
CW_STATE_RUN
};
/**@}*/
/* transport header flags */
@ -117,8 +131,65 @@ struct capwap_ctrlhdr
//extern int capwap_parse_trnsprthdr(struct capwap_trnsprthdr * cwh,uint8_t *msg, int msglen);
//extern int capwap_parse_ctrlhdr(struct capwap_ctrlhdr * ch,uint8_t * msg, int len);
/* CAPWAP message types as defined in RFC 5416 */
/**
*@defgroup CAPWAPMessages CAPWAP Messages
*@{
*/
/**
* CAPWAP message types as defined in RFC 5416
*/
typedef enum {
/**Discovery Request */
CW_MSG_DISCOVERY_REQUEST = 1,
/** DIscovery Response */
CW_MSG_DISCOVERY_RESPONSE = 2,
CW_MSG_JOIN_REQUEST = 3,
CW_MSG_JOIN_RESPONSE = 4,
CW_MSG_CONFIGURATION_STATUS_REQUEST = 5,
CW_MSG_CONFIGURATION_STATUS_RESPONSE = 6,
CW_MSG_CONFIGURATION_UPDATE_REQUEST = 7,
CW_MSG_CONFIGURATION_UPDATE_RESPONSE = 8,
CW_MSG_WTP_EVENT_REQUEST = 9,
CW_MSG_WTP_EVENT_RESPONSE = 10,
CW_MSG_CHANGE_STATE_EVENT_REQUEST = 11,
CW_MSG_CHANGE_STATE_EVENT_RESPONSE = 12,
CW_MSG_ECHO_REQUEST = 13,
CW_MSG_ECHO_RESPONSE = 14,
CW_MSG_IMAGE_DATA_REQUEST = 15,
CW_MSG_IMAGE_DATA_RESPONSE = 16,
CW_MSG_RESET_REQUEST = 17,
CW_MSG_RESET_RESPONSE = 18,
CW_MSG_PRIMARY_DISCOVERY_REQUEST = 19,
CW_MSG_PRIMARY_DISCOVERY_RESPONSE = 20,
CW_MSG_DATA_TRANSFER_REQUEST = 21,
CW_MSG_DATA_TRANSFER_RESPONSE = 22,
CW_MSG_CLEAR_CONFIGURATION_REQUEST = 23,
CW_MSG_CLEAR_CONFIGURATION_RESPONSE = 24,
CW_STATION_CONFIGURATION_REQUEST = 25,
CW_STATION_CONFIGURATION_RESPONSE = 26,
CW_MSG_MAXMSG = 26
}cw_msg_t;
/**@}*/
/*
#define CW_MSG_DISCOVERY_REQUEST 1
#define CW_MSG_DISCOVERY_RESPONSE 2
#define CW_MSG_JOIN_REQUEST 3
@ -158,7 +229,7 @@ struct capwap_ctrlhdr
#define CW_STATION_CONFIGURATION_RESPONSE 26
#define CW_MSG_MAXMSG 26
*/
/*
* CAPWAP message elements as defined in RFC 5415
@ -813,28 +884,13 @@ extern int cw_send_configuration_update_response(struct conn *conn, int seqnum,
/* cwmsg methods */
/*
static inline int cw_addelem_result_code(uint8_t * dst, uint32_t code)
{
cw_put_dword(dst + 4, code);
return 4 + cw_put_elem_hdr(dst, CW_ELEM_RESULT_CODE, 4);
}
#define cwmsg_addelem_vendor_specific_payload(cwmsg,vendor_id, type, data,len) \
(cwmsg)->pos+=cw_addelem_vendor_specific_payload((cwmsg)->msgelems+(cwmsg)->pos,vendor_id,type,data,len)
#define cwmsg_addelem_ac_name(cwmsg,name) \
(cwmsg)->pos+=cw_addelem_ac_name((cwmsg)->msgelems+(cwmsg)->pos,name)
#define cwmsg_addelem_session_id(cwmsg,sessid) \
(cwmsg)->pos+=cw_addelem_session_id((cwmsg)->msgelems+(cwmsg)->pos,sessid)
#define cwmsg_addelem_result_code(cwmsg,code) \
(cwmsg)->pos+=cw_addelem_result_code((cwmsg)->msgelems+(cwmsg)->pos,code)
#define cwmsg_addelem_radio_operational_state(cwmsg,ri) \
(cwmsg)->pos+=cw_addelem_radio_operational_state((cwmsg)->msgelems+(cwmsg)->pos,ri)
*/
/* Message to text stuff */
@ -853,11 +909,29 @@ extern struct cw_str capwap_strings_result[];
#define cw_strvendor(id) cw_strlist_get_str(capwap_strings_vendor,id)
#define cw_strresult(id) cw_strlist_get_str(capwap_strings_result,(id))
/*
#define cw_strrc(rc) \
((rc)<0 ? ((rc)!=EAGAIN ? strerror(errno):"Timed out"): cw_strresult(rc))
#define cw_strerror(rc) cw_strrc(rc)
*/
static inline const char * cw_strerror(rc) {
if (rc<0){
if (errno==EAGAIN)
return "Timed out";
return strerror(errno);
}
return cw_strresult(rc);
}
#define cw_strrc cw_strerror
static inline int cw_rcok(int rc)
{
if (rc==0 || rc==2){
return 1;
}
return 0;
}