stub binding wifi engine
This commit is contained in:
parent
930b0a6a3a
commit
05ab7a3787
@ -33,7 +33,8 @@ endif
|
|||||||
INCLUDES = \
|
INCLUDES = \
|
||||||
-I$(top_srcdir)/build \
|
-I$(top_srcdir)/build \
|
||||||
-I$(top_srcdir)/src/common \
|
-I$(top_srcdir)/src/common \
|
||||||
-I$(top_srcdir)/src/wtp
|
-I$(top_srcdir)/src/wtp \
|
||||||
|
-I$(top_srcdir)/src/binding/wifi/drivers
|
||||||
|
|
||||||
include $(top_srcdir)/build/Makefile_common.am
|
include $(top_srcdir)/build/Makefile_common.am
|
||||||
|
|
||||||
@ -50,7 +51,8 @@ wtp_SOURCES = \
|
|||||||
$(top_srcdir)/src/wtp/wtp_dfa_datacheck.c \
|
$(top_srcdir)/src/wtp/wtp_dfa_datacheck.c \
|
||||||
$(top_srcdir)/src/wtp/wtp_dfa_run.c \
|
$(top_srcdir)/src/wtp/wtp_dfa_run.c \
|
||||||
$(top_srcdir)/src/wtp/wtp_dfa_reset.c \
|
$(top_srcdir)/src/wtp/wtp_dfa_reset.c \
|
||||||
$(top_srcdir)/src/wtp/wtp_dfa_imagedata.c
|
$(top_srcdir)/src/wtp/wtp_dfa_imagedata.c \
|
||||||
|
$(top_srcdir)/src/binding/wifi/drivers/wifi_drivers.c
|
||||||
|
|
||||||
wtp_LDADD = \
|
wtp_LDADD = \
|
||||||
$(CONFIG_LIBS)
|
$(CONFIG_LIBS)
|
||||||
@ -58,3 +60,7 @@ wtp_LDADD = \
|
|||||||
if DTLS_ENABLED
|
if DTLS_ENABLED
|
||||||
wtp_LDADD += $(SSL_LIBS)
|
wtp_LDADD += $(SSL_LIBS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
if BUILD_WTP_WIFI_DRIVERS_NL80211
|
||||||
|
wtp_SOURCES += $(top_srcdir)/src/binding/wifi/drivers/wifi_nl80211.c
|
||||||
|
endif
|
||||||
|
12
configure.ac
12
configure.ac
@ -93,6 +93,14 @@ AC_ARG_WITH(
|
|||||||
[with_mem_check="internal"]
|
[with_mem_check="internal"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# WTP drivers wifi binding
|
||||||
|
AC_ARG_ENABLE(
|
||||||
|
[wifi-drivers-nl80211],
|
||||||
|
[AS_HELP_STRING([--wifi-drivers-nl80211], [disable WTP support for nl80211 wifi binding @<:@default=yes@:>@])],
|
||||||
|
,
|
||||||
|
[enable_wifi_drivers_nl80211="yes"]
|
||||||
|
)
|
||||||
|
|
||||||
# specify output header file
|
# specify output header file
|
||||||
AM_CONFIG_HEADER(build/config.h)
|
AM_CONFIG_HEADER(build/config.h)
|
||||||
|
|
||||||
@ -213,6 +221,10 @@ test "${enable_logging}" = "yes" && AC_DEFINE([ENABLE_LOGGING], [1], [Enable log
|
|||||||
AM_CONDITIONAL([BUILD_DEBUG], [test "${enable_debug}" = "yes"])
|
AM_CONDITIONAL([BUILD_DEBUG], [test "${enable_debug}" = "yes"])
|
||||||
AM_CONDITIONAL([DTLS_ENABLED], [test "${enable_dtls}" = "yes"])
|
AM_CONDITIONAL([DTLS_ENABLED], [test "${enable_dtls}" = "yes"])
|
||||||
|
|
||||||
|
#
|
||||||
|
test "${enable_wifi_drivers_nl80211}" = "yes" && AC_DEFINE([ENABLE_WIFI_DRIVERS_NL80211], [1], [Enable WTP support for nl80211 wifi binding])
|
||||||
|
AM_CONDITIONAL([BUILD_WTP_WIFI_DRIVERS_NL80211], [test "${enable_wifi_drivers_nl80211}" = "yes"])
|
||||||
|
|
||||||
#
|
#
|
||||||
AC_SUBST([SSL_CFLAGS])
|
AC_SUBST([SSL_CFLAGS])
|
||||||
AC_SUBST([SSL_LIBS])
|
AC_SUBST([SSL_LIBS])
|
||||||
|
0
src/binding/wifi/ap/.hidden
Normal file
0
src/binding/wifi/ap/.hidden
Normal file
48
src/binding/wifi/drivers/wifi_drivers.c
Normal file
48
src/binding/wifi/drivers/wifi_drivers.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#include "wifi_drivers.h"
|
||||||
|
|
||||||
|
/* */
|
||||||
|
struct wifi_driver_instance {
|
||||||
|
struct wifi_driver_ops* ops; /* Driver functions */
|
||||||
|
|
||||||
|
wifi_global_handle handle; /* Global instance handle */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Declare enable wifi driver */
|
||||||
|
#ifdef ENABLE_WIFI_DRIVERS_NL80211
|
||||||
|
extern struct wifi_driver_ops wifi_driver_nl80211_ops;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static struct wifi_driver_instance wifi_driver[] = {
|
||||||
|
#ifdef ENABLE_WIFI_DRIVERS_NL80211
|
||||||
|
{ &wifi_driver_nl80211_ops },
|
||||||
|
#endif
|
||||||
|
{ NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
/* */
|
||||||
|
int wifi_init_driver(void) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; wifi_driver[i].ops != NULL; i++) {
|
||||||
|
if (!wifi_driver[i].ops->global_init) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize driver */
|
||||||
|
wifi_driver[i].handle = wifi_driver[i].ops->global_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* */
|
||||||
|
void wifi_free_driver(void) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; wifi_driver[i].ops != NULL; i++) {
|
||||||
|
/* Free driver */
|
||||||
|
if (wifi_driver[i].ops->global_deinit) {
|
||||||
|
wifi_driver[i].ops->global_deinit(wifi_driver[i].handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
33
src/binding/wifi/drivers/wifi_drivers.h
Normal file
33
src/binding/wifi/drivers/wifi_drivers.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#ifndef __WIFI_DRIVERS_HEADER__
|
||||||
|
#define __WIFI_DRIVERS_HEADER__
|
||||||
|
|
||||||
|
/* config */
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "capwap_debug.h"
|
||||||
|
#include "capwap_logging.h"
|
||||||
|
|
||||||
|
/* */
|
||||||
|
typedef void* wifi_global_handle;
|
||||||
|
|
||||||
|
/* */
|
||||||
|
struct wifi_driver_ops {
|
||||||
|
const char* name; /* Name of wifi driver */
|
||||||
|
const char* description; /* Description of wifi driver */
|
||||||
|
|
||||||
|
/* Global initialize driver */
|
||||||
|
wifi_global_handle (*global_init)(void);
|
||||||
|
void (*global_deinit)(wifi_global_handle handle);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Initialize wifi driver engine */
|
||||||
|
int wifi_init_driver(void);
|
||||||
|
void wifi_free_driver(void);
|
||||||
|
|
||||||
|
#endif /* __WIFI_DRIVERS_HEADER__ */
|
28
src/binding/wifi/drivers/wifi_nl80211.c
Normal file
28
src/binding/wifi/drivers/wifi_nl80211.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include "wifi_drivers.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* */
|
||||||
|
static wifi_global_handle nl80211_global_init(void) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* */
|
||||||
|
void nl80211_global_deinit(wifi_global_handle handle) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Driver function */
|
||||||
|
const struct wifi_driver_ops wifi_driver_nl80211_ops = {
|
||||||
|
.name = "nl80211",
|
||||||
|
.description = "Linux nl80211/cfg80211",
|
||||||
|
.global_init = nl80211_global_init,
|
||||||
|
.global_deinit = nl80211_global_deinit
|
||||||
|
};
|
@ -900,29 +900,47 @@ int main(int argc, char** argv) {
|
|||||||
/* Init capwap */
|
/* Init capwap */
|
||||||
if (geteuid() != 0) {
|
if (geteuid() != 0) {
|
||||||
capwap_logging_fatal("Request root privileges");
|
capwap_logging_fatal("Request root privileges");
|
||||||
return CAPWAP_REQUEST_ROOT;
|
result = CAPWAP_REQUEST_ROOT;
|
||||||
}
|
} else {
|
||||||
|
|
||||||
/* Init random generator */
|
/* Init random generator */
|
||||||
capwap_init_rand();
|
capwap_init_rand();
|
||||||
|
|
||||||
/* Init crypt */
|
/* Init crypt */
|
||||||
if (!capwap_crypt_init()) {
|
if (!capwap_crypt_init()) {
|
||||||
|
result = CAPWAP_CRYPT_ERROR;
|
||||||
capwap_logging_fatal("Error to init crypt engine");
|
capwap_logging_fatal("Error to init crypt engine");
|
||||||
return CAPWAP_CRYPT_ERROR;
|
} else {
|
||||||
}
|
|
||||||
|
|
||||||
/* Alloc a WTP */
|
/* Alloc a WTP */
|
||||||
if (!wtp_init()) {
|
if (!wtp_init()) {
|
||||||
|
result = WTP_ERROR_SYSTEM_FAILER;
|
||||||
capwap_logging_fatal("Error to init WTP engine");
|
capwap_logging_fatal("Error to init WTP engine");
|
||||||
return WTP_ERROR_SYSTEM_FAILER;
|
} else {
|
||||||
}
|
|
||||||
|
|
||||||
/* Read configuration file */
|
/* Read configuration file */
|
||||||
value = wtp_load_configuration(argc, argv);
|
value = wtp_load_configuration(argc, argv);
|
||||||
if (value < 0) {
|
if (value < 0) {
|
||||||
result = WTP_ERROR_LOAD_CONFIGURATION;
|
result = WTP_ERROR_LOAD_CONFIGURATION;
|
||||||
|
capwap_logging_fatal("Error to load configuration");
|
||||||
} else if (value > 0) {
|
} else if (value > 0) {
|
||||||
|
/* Initialize binding */
|
||||||
|
switch (g_wtp.binding) {
|
||||||
|
case CAPWAP_WIRELESS_BINDING_NONE: {
|
||||||
|
value = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CAPWAP_WIRELESS_BINDING_IEEE80211: {
|
||||||
|
/* Initialize wifi binding driver */
|
||||||
|
capwap_logging_info("Initializing wifi binding engine");
|
||||||
|
value = wifi_init_driver();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* */
|
||||||
|
if (value) {
|
||||||
|
result = WTP_ERROR_INIT_BINDING;
|
||||||
|
capwap_logging_fatal("Unable initialize binding engine");
|
||||||
|
} else {
|
||||||
capwap_logging_info("Startup WTP");
|
capwap_logging_info("Startup WTP");
|
||||||
|
|
||||||
/* Start WTP */
|
/* Start WTP */
|
||||||
@ -942,19 +960,34 @@ int main(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
capwap_logging_info("Terminate WTP");
|
capwap_logging_info("Terminate WTP");
|
||||||
|
|
||||||
|
/* Free binding */
|
||||||
|
switch (g_wtp.binding) {
|
||||||
|
case CAPWAP_WIRELESS_BINDING_IEEE80211: {
|
||||||
|
/* Free wifi binding driver */
|
||||||
|
wifi_free_driver();
|
||||||
|
capwap_logging_info("Free wifi binding engine");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free memory */
|
/* Free memory */
|
||||||
wtp_destroy();
|
wtp_destroy();
|
||||||
|
}
|
||||||
|
|
||||||
/* Free crypt */
|
/* Free crypt */
|
||||||
capwap_crypt_free();
|
capwap_crypt_free();
|
||||||
|
}
|
||||||
|
|
||||||
/* Check memory leak */
|
/* Check memory leak */
|
||||||
if (capwap_check_memory_leak(1)) {
|
if (capwap_check_memory_leak(1)) {
|
||||||
if (result == CAPWAP_SUCCESSFUL)
|
if (result == CAPWAP_SUCCESSFUL) {
|
||||||
result = WTP_ERROR_MEMORY_LEAK;
|
result = WTP_ERROR_MEMORY_LEAK;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Close logging */
|
/* Close logging */
|
||||||
capwap_logging_close();
|
capwap_logging_close();
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "capwap_dtls.h"
|
#include "capwap_dtls.h"
|
||||||
#include "capwap_network.h"
|
#include "capwap_network.h"
|
||||||
#include "capwap_protocol.h"
|
#include "capwap_protocol.h"
|
||||||
|
#include "wifi_drivers.h"
|
||||||
|
|
||||||
/* WTP Configuration */
|
/* WTP Configuration */
|
||||||
#define WTP_STANDARD_CONFIGURATION_FILE "/etc/capwap/wtp.conf"
|
#define WTP_STANDARD_CONFIGURATION_FILE "/etc/capwap/wtp.conf"
|
||||||
@ -14,6 +15,7 @@
|
|||||||
#define WTP_ERROR_SYSTEM_FAILER -1000
|
#define WTP_ERROR_SYSTEM_FAILER -1000
|
||||||
#define WTP_ERROR_LOAD_CONFIGURATION -1001
|
#define WTP_ERROR_LOAD_CONFIGURATION -1001
|
||||||
#define WTP_ERROR_NETWORK -1002
|
#define WTP_ERROR_NETWORK -1002
|
||||||
|
#define WTP_ERROR_INIT_BINDING -1003
|
||||||
#define WTP_ERROR_MEMORY_LEAK 1
|
#define WTP_ERROR_MEMORY_LEAK 1
|
||||||
|
|
||||||
/* Min and max dfa values */
|
/* Min and max dfa values */
|
||||||
|
Loading…
Reference in New Issue
Block a user