
/* 用多线程处理每一个ap上来的数据*/
typedef enum {
AC_ENTER_JOIN,
AC_ENTER_CONFIGURE,
AC_ENTER_DATA_CHECK,
AC_ENTER_RUN,
} ACState;
// Message Type Values
#defineMSG_TYPE_DISCOVERY_REQUEST 1
#defineMSG_TYPE_DISCOVERY_RESPONSE 2
#defineMSG_TYPE_JOIN_REQUEST 3
#defineMSG_TYPE_JOIN_RESPONSE 4
#defineMSG_TYPE_CONFIGURE_REQUEST 5
#defineMSG_TYPE_CONFIGURE_RESPONSE 6
#defineMSG_TYPE_CONFIGURE_UPDATE_REQUEST 7
#defineMSG_TYPE_CONFIGURE_UPDATE_RESPONSE 8
#define MSG_TYPE_WTP_EVENT_REQUEST 9
#define MSG_TYPE_WTP_EVENT_RESPONSE 10
#defineMSG_TYPE_CHANGE_STATE_EVENT_REQUEST 11
#defineMSG_TYPE_CHANGE_STATE_EVENT_RESPONSE12
#defineMSG_TYPE_ECHO_REQUEST 13
#defineMSG_TYPE_ECHO_RESPONSE 14
#defineMSG_TYPE_IMAGE_DATA_REQUEST 15
#defineMSG_TYPE_IMAGE_DATA_RESPONSE 16
#defineMSG_TYPE_RESET_REQUEST 17
#defineMSG_TYPE_RESET_RESPONSE 18
#defineMSG_TYPE_PRIMARY_DISCOVERY_REQUEST 19
#defineMSG_TYPE_PRIMARY_DISCOVERY_RESPONSE 20
#defineMSG_TYPE_DATA_TRANSFER_REQUEST 21
#defineMSG_TYPE_DATA_TRANSFER_RESPONSE 22
#defineMSG_TYPE_CLEAR_CONFIGURATION_REQUEST23
#defineMSG_TYPE_CLEAR_CONFIGURATION_RESPONSE24
#defineMSG_TYPE_STATION_CONFIGURATION_REQUEST25
#defineMSG_TYPE_STATION_CONFIGURATION_RESPONSE 26
#define MSG_TYPE_WLAN_CONFIGURATION_REQUEST 33913
#define MSG_TYPE_WLAN_CONFIGURATION_RESPONSE 33914
// Message Elements Type Values
#define MSG_ELEMENT_AC_DESCRIPTOR 1
#define MSG_ELEMENT_AC_IPV4_LIST 2
#define MSG_ELEMENT_AC_IPV6_LIST 3
#define MSG_ELEMENT_AC_NAME 4
#define MSG_ELEMENT_AC_NAME_INDEX 5
#define MSG_ELEMENT_TIMESTAMP 6
#defineMSG_ELEMENT_ADD_MAC_ACL 7
#defineMSG_ELEMENT_ADD_STATION 8
#defineMSG_ELEMENT_ADD_STATIC_MAC_ACL 9
#define MSG_ELEMENT_CW_CONTROL_IPV4_ADDRESS10
#define MSG_ELEMENT_CW_CONTROL_IPV6_ADDRESS11
#defineMSG_ELEMENT_CW_TIMERS 12
#defineMSG_ELEMENT_DATA_TRANSFER_DATA13
#defineMSG_ELEMENT_DATA_TRANSFER_MODE14
#define MSG_ELEMENT_CW_DECRYPT_ER_REPORT15
#define MSG_ELEMENT_CW_DECRYPT_ER_REPORT_PERIOD16
#define MSG_ELEMENT_DELETE_MAC_ACL17
#define MSG_ELEMENT_DELETE_STATION 18
#define MSG_ELEMENT_DELETE_STATIC_MAC_ACL19
#define MSG_ELEMENT_DISCOVERY_TYPE 20
#define MSG_ELEMENT_DUPLICATE_IPV4_ADDRESS21
#define MSG_ELEMENT_DUPLICATE_IPV6_ADDRESS22
#define MSG_ELEMENT_IDLE_TIMEOUT 23
#define MSG_ELEMENT_IMAGE_DATA 24
#define MSG_ELEMENT_IMAGE_IDENTIFIER25
#define
MSG_ELEMENT_IMAGE_INFO 26
#define MSG_ELEMENT_INITIATED_DOWNLOAD 27
#define MSG_ELEMENT_LOCATION_DATA 28
#define MSG_ELEMENT_MAX_MSG_LEN 29
#define MSG_ELEMENT_MTU_DISCOVERY_PADDING30
#define MSG_ELEMENT_RADIO_ADMIN_STATE 31
#define MSG_ELEMENT_RADIO_OPERAT_STATE32
#define MSG_ELEMENT_RESULT_CODE 33
#define MSG_ELEMENT_RETURNED_MSG_ELEM34
#define MSG_ELEMENT_SESSION_ID 35
#define MSG_ELEMENT_STATISTICS_TIMER36
#define MSG_ELEMENT_VENDOR_SPEC_PAYLOAD37
#define MSG_ELEMENT_WTP_BOARD_DATA38
#define MSG_ELEMENT_WTP_DESCRIPTOR39
#define MSG_ELEMENT_WTP_FALLBACK 40
#define MSG_ELEMENT_WTP_FRAME_TUNNEL_MODE41
#define MSG_ELEMENT_WTP_IPV4_ADDRESS42
#define MSG_ELEMENT_WTP_MAC_TYPE 43
#define MSG_ELEMENT_WTP_NAME 44
#define MSG_ELEMENT_WTP_OPERAT_STATISTICS45
#define MSG_ELEMENT_WTP_RADIO_STATISTICS46
#define MSG_ELEMENT_WTP_REBOOT_STATISTICS47
#define MSG_ELEMENT_WTP_STATIC_IP 48
// wireless Message Elements Type Values
#define ADD_WLAN 1024
#define ANTENNA 1025
#define ASSIGNED_WTP_BSSID 1026
#define DELETE_WALN 1027
#define DIRECT_SEQUENCE_CONTROL 1028
#define INFORMATION_ELEMENT 1029
#define MAC_OPERATION 1030
#define MIC_COUNTERMEASURES 1031
#define NULTI_DOMAIN_CAPABILITY 1032
#define OFDM_CONTROL 1033
#define RATE_SET 1034
#define RSNA_ERROR_REPORT_FROM_STATION 1035
#define STATION 1036
#define STATION_QOS_PROFILE 1037
#define STATION_SESSION_KEY 1038
#define STATISTICS 1039
#define SUPPORTED_RATES 1040
#define TX_POWER 1041
#define TX_POWER_LEVEL 1042
#define UPDATE_STATION_QOS 1043
#define UPDATE_WLAN 1044
#define WTP_QUALITY_OF_SERVICE 1045
#define WTP_RADIO_CONFIGURATION
1046
#define WTP_RADIO_FAIL_AlARM_INDICATION 1047
#define WTP_RADIO_INFORMATION 1048
s32 ac_init()
{
/*定时器初始化函数*/
if( ERR_SUCCESS != timer_init())
{
/*错误处理*/
}
/*socket 初始化 */
/* openssl 初始化 */
}
s32 ACParseJoinReqMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_LOCATION_DATA:
{/* 取出wtp传过来的 LocationData */
ACParseLocationData():
break;
}
case MSG_ELEMENT_WTP_BOARD_DATA:
{/* 取出wtp传过来的 WTPBoardData*/
ACParseWTPBoardData();
break;
}
case MSG_ELEMENT_SESSION_ID:
{/*取出wtp传过来的 SessionID*/
ACParseSessionID();
break;
}
case MSG_ELEMENT_WTP_DESCRIPTOR:
{/*取出wtp传过来的 WTPDescriptor*/
ACParseWTPDescriptor();
break;
}
case MSG_ELEMENT_WTP_IPV4_ADDRESS:
{/*取出wtp传过来的 IPv4Address*/
ACParseWTPIPv4Address();
break;
}
case MSG_ELEMENT_WTP_NAME:
{/*取出wtp传过来的 WTPName*/
ACParseWTPName();
break;
}
case MSG_ELEMENT_WTP_FRAME_TUNNEL_MODE:
{/*取出wtp传过来的 WTPFrameTunnelMode*/
ACParseWTPFrameTunnelMode();
break;
}
case MSG_ELEMENT_WTP_MAC_TYPE:
{/*取出wtp传过来的WTPMACType */
ACParseWTPMACType();
break;
}
default:
}
}
s32 ACSaveJoinReqMsg()
{
/* 加入请求报文存入 全局 结构G_WTP*/
}
s32 ACAssembleJoinRepMsg()
{
}
s32 ACSendJoinRepMsg()
{
}
s32 ACEnterJoin()
{
/* 取消 waitJoin timer */
/* ac 分析加入请求报文*/
ACParseJoinReqMsg();
/* ac 保存加入请求报文*/
ACSaveJoinReqMsg();
/* ac 组装加入应答报文*/
ACAssembleJoinRepMsg();
/* ac 发送加入应答报文*/
ACSendJoinRepMsg();
/* 开启 ChangeStatePendingTimer */
}
s32 ACParseConfReqMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_AC_NAME:
{
break;
}
case MSG_ELEMENT_AC_NAME_INDEX:
{
break;
}
case MSG_ELEMENT_RADIO_ADMIN_STATE:
{
break;
}
case MSG_ELEMENT_STATISTICS_TIMER:
{
break;
}
case MSG_ELEMENT_WTP_REBOOT_STATISTICS:
{
break;
}
case MAC_OPERATION:
{
break;
}
case NULTI_DOMAIN_CAPABILITY:
{
break;
}
case WTP_RADIO_CONFIGURATION:
{
break;
}
case WTP_RADIO_INFORMATION:
{
break;
}
default:
}
}
s32 ACSaveConfReqMsg()
{
/* 配置下发请求报文存入 全局 结构G_WTP*/
}
s32 ACAssembleConfRepMsg()
{
}
s32 ACSendConfRepMsg()
{
}
s32 ACEnterConfigure()
{
/*取消 ChangeStatePendingtimer*/
/* ac 分析配置下发请求报文*/
ACParseConfReqMsg();
/* ac 保存配置下发请求报文*/
ACSaveConfReqMsg();
/* ac 组装配置下发应答报文*/
ACAssembleConfRepMsg();
/* ac 发送配置下发应答报文*/
ACSendConfRepMsg();
/* 开始 DataCheckTimer */
}
s32 ACParseDataCheckReqMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_RADIO_OPERAT_STATE:
{
break;
}
case MSG_ELEMENT_RESULT_CODE:
{
break;
}
default:
}
}
s32 ACSaveDataCheckReqMsg()
{
/* 配置确认请求报文存入 全局 结构G_WTP*/
}
s32 ACAssembleDataCheckRepMsg()
{
}
s32 ACSendDataCheckRepMsg()
{
}
s32 ACEnterDataCheck()
{
/*停止DataCheckTimer */
/* ac 分析配置确认请求报文*/
ACParseDataCheckReqMsg();
/* ac 保存配置确认请求报文*/
ACSaveDataCheckReqMsg();
/* ac 组装配置确认应答报文*/
ACAssembleDataCheckRepMsg();
/* ac 发送配置确认应答报文*/
ACSendDataCheckRepMsg();
}
s32 ACParseConfUpdateRespMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_RESULT_CODE:
{
break;
}
case MSG_ELEMENT_RESULT_CODE_CW_TYPE_WITH_PAYLOAD:
{
break;
}
default:
}
}
s32 ACParseChangeStateEventReqMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_RADIO_OPERAT_STATE:
{
break;
}
case MSG_ELEMENT_RESULT_CODE:
{
break;
}
default:
}
}
s32 ACParseEchoReqMsg()
{
/*分析消息元素*/
switch(elemType)
{
default:
}
}
s32 ACParseStaConfRespMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_RESULT_CODE:
{
break;
}
default:
}
}
s32 ACParseClearConfRespMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_RESULT_CODE:
{
break;
}
default:
}
}
s32 ACParseDatatransferReqMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_DATA_TRANSFER_DATA:
{
break;
}
default:
}
}
s32 ACParseWtpEventReqMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_CW_DECRYPT_ER_REPORT:
{
break;
}
case MSG_E
LEMENT_DUPLICATE_IPV4_ADDRESS:
{
break;
}
case MSG_ELEMENT_DUPLICATE_IPV6_ADDRESS:
{
break;
}
case MSG_ELEMENT_WTP_OPERAT_STATISTICS:
{
break;
}
case MSG_ELEMENT_WTP_RADIO_STATISTICS:
{
break;
}
case MSG_ELEMENT_WTP_REBOOT_STATISTICS:
{
break;
}
default:
}
}
s32 ACParseWlanConfRespMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_RESULT_CODE:
{
break;
}
default:
}
}
s32 ACEnterRun()
{
/*分析消息类型*/
switch(elemType)
{
case MSG_TYPE_CONFIGURE_UPDATE_RESPONSE :
{
/*分析ConfUpdate应答报文*/
ACParseConfUpdateRespMsg();
/*保存报文*/
ACSaveConfUpdateRespMsg();
/* 这里发送 WLAN Configuration Request 报文*/
break;
}
case MSG_TYPE_CHANGE_STATE_EVENT_REQUEST :
{
/*分析ChangeStateEvent请求报文*/
ACParseChangeStateEventReqMsg();
/*保存报文*/
ACSaveChangeStateEventReqMsg();
/*组装应答报文*/
ACAssembleChangeStateEventRespMsg();
break;
}
case MSG_TYPE_ECHO_REQUEST:
{
/*分析Echo请求报文*/
ACParseEchoReqMsg();
/*保存报文*/
ACSaveEchoReqMsg();
/*组装应答报文*/
ACAssembleEchoRespMsg();
break;
}
case MSG_TYPE_STATION_CONFIGURATION_RESPONSE:
{
/*分析StaConf应答报文*/
ACParseStaConfRespMsg();
/*保存报文*/
ACSaveStaConfRespMsg();
break;
}
case MSG_TYPE_CLEAR_CONFIGURATION_RESPONSE:
{
/*分析ClearConf应答报文*/
ACParseClearConfRespMsg();
/*保存报文*/
ACSaveClearConfRespMsg();
break;
}
case MSG_TYPE_DATA_TRANSFER_REQUEST:
{
/*分析Datatransfer请求报文*/
ACParseDatatransferReqMsg();
/*保存报文*/
ACSaveDatatransferReqMsg();
/*组装应答报文*/
ACAssembleDatatransferRespMsg();
break;
}
case MSG_TYPE_WTP_EVENT_REQUEST:
{
/*分析WtpEvent请求报文*/
ACParseWtpEventReqMsg();
/*保存报文*/
ACSaveWtpEventReqMsg();
/*组装应答报文*/
ACAssembleWtpEventRespMsg();
break;
}
case MSG_TYPE_WLAN_CONFIGURATION_RESPONSE:
{
/*分析WlanConf应答报文*/
ACParseWlanConfRespMsg();
/*保存报文*/
ACSaveWlanConfRespMsg();
break;
}
default:
break;
}
/* 发送报文*/
}
s32 ac_manage_ap()
{
/* 开启 WaitJoin timer */
......
/* 初始化 DTLS Session*/
......
/*此线程,处理加入,配置下发,配置确认,运行状态的报文,实现状态机*/
switch(ACState)
{
case AC_ENTER_JOIN:
{
ACEnterJoin();
break;
}
case AC_ENTER_CONFIGURE:
{
ACEnterConfigure();
break;
}
case AC_ENTER_DATA_CHECK:
{
ACEnterDataCheck();
break;
}
case AC_ENTER_RUN:
{
ACEnterRun();
break;
}
default:
break;
}
}
/*假线程注册函数*/
s32 dloop_register_read_sock(s32 sock, dloop_sock_handler handler,
void *dloop_data, void *user_data)
{
return dloop_register_sock(sock, SOCK_TYPE_READ, handler,
dloop_data, user_data);
}
s32 ACParseDiscoveryReqMsg()
{
/*分析消息元素*/
switch(elemType)
{
case MSG_ELEMENT_DISCOVERY_TYPE:
{/*从wtp报文中取出 DiscoveryType*/
ACParseDiscoveryType();
break;
}
case MSG_ELEMENT_WTP_BOARD_DATA:
{/*从wtp报文中取出 WTPBoardData*/
ACParseWTPBoardData();
break;
}
case MSG_ELEMENT_WTP_DESCRIPTOR:
{/*取出wtp传过来的 WTPDescriptor*/
ACParseWTPDescri
ptor();
break;
}
case MSG_ELEMENT_WTP_FRAME_TUNNEL_MODE:
{
/*取出wtp传过来的 WTPFrameTunnelMode*/
ACParseWTPFrameTunnelMode();
break;
}
case MSG_ELEMENT_WTP_MAC_TYPE:
{
/*取出wtp传过来的WTPMACType */
ACParseWTPMACType();
break;
}
default:
}
}
/* 循环接收报文处理函数*/
s32 ac_Incoming_packet()
{
/* 主进程处理发现阶段报文*/
/* 主进程创建 管理线程 管理每一个ap,处理加入,配置,数据核实,运行状态的报文*/
if()
{
/* 分析发现请求报文*/
ACParseDiscoveryReqMsg();
/* 组装发现应答报文*/
ACAssembleDiscoveryResp();
/* 发送发现应答报文*/
ACSendUnsafeUnconnected();
}
else
{
/*创建一个线程【假线程】,处理加入,配置,数据核实,运行状态的报文 */
dloop_register_read_sock( sock ,ac_manage_ap, dloop_data,user_data);
}
}
}
/* 定义了 ac各个接口上处理capwap 报文*/
s32 ac_unsafenetwork_sock( s8 * socket , void (* ac_Incoming_packet)(),s32 flag)
{
/*select 系统调用监听sock描述符 用一个socket监听所有ac接口*/
ac_Incoming_packet();
}
s32 ac_main_loop()
{
/* 进程循环接收报文*/
while(1)
{
ret=ac_unsafenetwork_sock(&gACSocket,
ac_Incoming_packet,
0 ));
if( ret != ERR_SUCCESS)
{
/* 错误处理*/
exit(1);
}
}
}
s32 ac_destroy()
{
/*释放资源*/
}
#define WIRELESS_CONTROL_PID_FILE "/var/run/wirelessControl.pid"
s32 main()
{
/* 创建进程,可以调用以下函数*/
ret = make_daemon (WIRELESS_CONTROL_PID_FILE);
if( ERR_SUCCESS != ret)
{
/*错误处理*/
}
/*初始化*/
ac_init();
/*主循环*/
ac_main_loop();
/*释放资源*/
ac_destroy();
}
