freewtp/src/ac/ac.h

170 lines
3.7 KiB
C

#ifndef __CAPWAP_AC_HEADER__
#define __CAPWAP_AC_HEADER__
/* standard include */
#include "capwap.h"
#include "capwap_network.h"
#include "capwap_protocol.h"
#include "capwap_event.h"
#include "capwap_lock.h"
#include "capwap_rwlock.h"
#include "capwap_list.h"
#include "capwap_hash.h"
#include "capwap_element.h"
#include <pthread.h>
#include <linux/if_ether.h>
#include <ac_kmod.h>
/* AC Configuration */
#define AC_DEFAULT_CONFIGURATION_FILE "/etc/capwap/ac.conf"
#define AC_DEFAULT_MAXSTATION 128
#define AC_DEFAULT_MAXSESSIONS 128
/* AC runtime error return code */
#define AC_ERROR_SYSTEM_FAILER -1000
#define AC_ERROR_LOAD_CONFIGURATION -1001
#define AC_ERROR_NETWORK -1002
#define AC_ERROR_MEMORY_LEAK 1
/* Min and max dfa values */
#define AC_DTLS_INTERVAL 60000
#define AC_JOIN_INTERVAL 60000
#define AC_CHANGE_STATE_PENDING_INTERVAL 25000
#define AC_DATA_CHECK_INTERVAL 30000
#define AC_RETRANSMIT_INTERVAL 3000
#define AC_MAX_RETRANSMIT 5
#define AC_DTLS_SESSION_DELETE_INTERVAL 5000
#define AC_MIN_ECHO_INTERVAL 1000
#define AC_ECHO_INTERVAL 30000
#define AC_MAX_ECHO_INTERVAL 256000
#define AC_MAX_DATA_KEEPALIVE_INTERVAL 256000
#define AC_MIN_DISCOVERY_INTERVAL 2000
#define AC_DISCOVERY_INTERVAL 20000
#define AC_MAX_DISCOVERY_INTERVAL 180000
#define AC_DECRYPT_ERROR_PERIOD_INTERVAL 120000
#define AC_IDLE_TIMEOUT_INTERVAL 300000
#define AC_WTP_FALLBACK_MODE CAPWAP_WTP_FALLBACK_ENABLED
/* */
#define AC_STATIONS_HASH_SIZE 65536
#define AC_STATIONS_KEY_SIZE MACADDRESS_EUI48_LENGTH
/* */
#define compat_json_object_object_get(obj, key) ({ \
json_bool error; struct json_object* result = NULL; \
error = json_object_object_get_ex(obj, key, &result); \
(error ? result : NULL); \
})
/* */
struct ac_state {
struct capwap_ecnsupport_element ecn;
struct capwap_transport_element transport;
struct capwap_timers_element timers;
unsigned short decrypterrorreport_interval;
struct capwap_idletimeout_element idletimeout;
struct capwap_wtpfallback_element wtpfallback;
/* */
struct capwap_acipv4list_element acipv4list;
struct capwap_acipv6list_element acipv6list;
};
/* */
struct ac_fds {
int fdstotalcount;
struct pollfd* fdspoll;
int fdsnetworkcount;
int msgqueuecount;
int msgqueuestartpos;
struct ac_kmod_event* kmodevents;
int kmodeventscount;
int kmodeventsstartpos;
};
/* AC */
struct ac_t {
int standalone;
int running;
/* */
struct ac_state dfa;
struct capwap_network net;
struct capwap_list* addrlist;
unsigned short mtu;
struct capwap_array* binding;
struct capwap_acname_element acname;
struct capwap_acdescriptor_element descriptor;
/* Sessions message queue */
int fdmsgsessions[2];
/* */
struct ac_kmod_handle kmodhandle;
/* Sessions */
struct capwap_list* sessions;
struct capwap_list* sessionsdata;
struct capwap_list* sessionsthread;
capwap_rwlock_t sessionslock;
/* Stations */
struct capwap_hash* stations;
capwap_rwlock_t stationslock;
/* Dtls */
int enabledtls;
struct capwap_dtls_context dtlscontext;
/* Backend Management */
char* backendacid;
char* backendversion;
struct capwap_array* availablebackends;
};
/* AC session thread */
struct ac_session_thread_t {
pthread_t threadid;
};
/* AC session message queue item */
#define AC_MESSAGE_QUEUE_CLOSE_THREAD 1
struct ac_session_msgqueue_item_t {
unsigned long message;
union {
struct {
pthread_t threadid;
} message_close_thread;
};
};
extern struct ac_t g_ac;
/* Primary thread */
int ac_execute(void);
int ac_execute_update_fdspool(struct ac_fds* fds);
int ac_valid_binding(unsigned short binding);
void ac_update_statistics(void);
#endif /* __CAPWAP_AC_HEADER__ */