diff --git a/src/capwap/cwread_discovery_request.c b/src/capwap/cwread_discovery_request.c new file mode 100644 index 00000000..8783c24d --- /dev/null +++ b/src/capwap/cwread_discovery_request.c @@ -0,0 +1,92 @@ +/* + This file is part of libcapwap. + + libcapwap is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + libcapwap is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar. If not, see . + +*/ + +#include +#include + +#include "capwap.h" +#include "capwap_ieee80211.h" + +#include "cw_log.h" +#include "cw_util.h" + + +struct eparm { + int *mand; + struct wtpinfo *wtpinfo; +}; + +static int wtpinfo_readelem_discovery_req(void *eparm, int type, + uint8_t * msgelem, int len) +{ + struct eparm *e = (struct eparm *) eparm; + cw_dbg_msgelem(CWMSG_DISCOVERY_REQUEST, type, msgelem, len); + + /* mandatory message elements */ + if (wtpinfo_readelem_discovery_type + (e->wtpinfo, type, msgelem, len)) + goto foundX; + + if (wtpinfo_readelem_wtp_board_data + (e->wtpinfo, type, msgelem, len)) + goto foundX; + + if (wtpinfo_readelem_wtp_descriptor + (e->wtpinfo, type, msgelem, len)) + goto foundX; + + if (wtpinfo_readelem_wtp_frame_tunnel_mode + (e->wtpinfo, type, msgelem, len)) + goto foundX; + + if (wtpinfo_readelem_wtp_mac_type(e->wtpinfo, type, msgelem, len)) + goto foundX; + + if (wtpinfo_readelem_wtp_radio_info + (e->wtpinfo, type, msgelem, len)) + goto foundX; + + return 0; + foundX: + cw_mand_elem_found(e->mand, type); + return 1; +} + + +void cwread_discovery_request(struct wtpinfo *wtpinfo, uint8_t * msg, + int len) +{ + int mand[] = { + CWMSGELEM_DISCOVERY_TYPE, + CWMSGELEM_WTP_BOARD_DATA, + CWMSGELEM_WTP_DESCRIPTOR, + CWMSGELEM_WTP_FRAME_TUNNEL_MODE, + CWMSGELEM_WTP_MAC_TYPE, + CWMSGELEM_IEEE80211_WTP_RADIO_INFO, + -1 + }; + + struct eparm eparm; + eparm.wtpinfo = wtpinfo; + eparm.mand = mand; + + cw_foreach_msgelem(msg, len, wtpinfo_readelem_discovery_req, + &eparm); + + cw_dbg_missing_mand_elems_(0, CWMSG_DISCOVERY_REQUEST, eparm.mand); +} diff --git a/src/capwap/process_discovery_request.c b/src/capwap/process_discovery_request.c deleted file mode 100644 index c4fefd38..00000000 --- a/src/capwap/process_discovery_request.c +++ /dev/null @@ -1,62 +0,0 @@ -/* - This file is part of libcapwap. - - libcapwap is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - libcapwap is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Foobar. If not, see . - -*/ - -#include -#include - -#include "capwap.h" -#include "capwap_ieee80211.h" - -#include "cw_log.h" -#include "cw_util.h" - -static int wtpinfo_readelem_discovery_req(void * w,int type,uint8_t* msgelem,int len) -{ - struct wtpinfo * wtpinfo = (struct wtpinfo *)w; -// cw_dbg(DBG_CW_MSGELEM,"Process discovery req msgelem, type=%d (%s), len=%d",type,cw_msgelemtostr(type),len); -// cw_dbg_dmp(DBG_CW_MSGELEM_DMP,msgelem,len,"Dump for msgelem ..."); - cw_dbg_msgelem(CWMSG_DISCOVERY_REQUEST, type, msgelem,len); - - if (wtpinfo_readelem_discovery_type(wtpinfo,type,msgelem,len)) - return 1; - - if (wtpinfo_readelem_wtp_board_data(wtpinfo,type,msgelem,len)) - return 1; - - if (wtpinfo_readelem_wtp_descriptor(wtpinfo,type,msgelem,len)) - return 1; - - if (wtpinfo_readelem_wtp_frame_tunnel_mode(wtpinfo,type,msgelem,len)) - return 1; - - if (wtpinfo_readelem_wtp_mac_type(wtpinfo,type,msgelem,len)) - return 1; - - if (wtpinfo_readelem_wtp_radio_info(wtpinfo,type,msgelem,len)) - return 1; - return 0; - -} - - - -void process_discovery_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len) -{ - cw_foreach_msgelem(msg,len,wtpinfo_readelem_discovery_req,wtpinfo); -} -