Not needed anymore.
FossilOrigin-Name: 234c72e0c7bed55dd1b648a39721a8d7dca868e4c03a3611cc307c2a8b13069e
This commit is contained in:
		| @ -1,102 +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 <http://www.gnu.org/licenses/>. |  | ||||||
|  |  | ||||||
| */ |  | ||||||
| #include <string.h> |  | ||||||
| #include <netinet/in.h> |  | ||||||
|  |  | ||||||
| #include "capwap.h" |  | ||||||
| #include "acinfo.h" |  | ||||||
| #include "cw_log.h" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #include "sock.h" |  | ||||||
|  |  | ||||||
| //static int cwmsg_addelem_acip(struct cwmsg * msg,ACIP *ip,int ctr) |  | ||||||
| static int cwmsg_addelem_acip(void *priv, void *data)	//,int ctr) |  | ||||||
| { |  | ||||||
| //      cw_log_debug2("Adding Ctrl IP %s",sock_addr2str((struct sockaddr*)data)); |  | ||||||
|  |  | ||||||
| 	struct cwmsg *msg = (struct cwmsg *) priv; |  | ||||||
| 	ACIP *acip = (ACIP *) data; |  | ||||||
|  |  | ||||||
| 	uint8_t ipmsg[18]; |  | ||||||
|  |  | ||||||
| 	switch (acip->ip.ss_family) { |  | ||||||
| 		case AF_INET: |  | ||||||
| 			{ |  | ||||||
| 				struct sockaddr_in *sain = (struct sockaddr_in *) &acip->ip; |  | ||||||
| 				memcpy(ipmsg, &sain->sin_addr.s_addr, sizeof(sain->sin_addr.s_addr)); |  | ||||||
| 				*((uint16_t *) (ipmsg + 4)) = htons(acip->wtp_count);	/* number of wtps */ |  | ||||||
| 				cwmsg_addelem(msg, CW_ELEM_CONTROL_IPV4_ADDRESS, ipmsg, 6); |  | ||||||
| 			} |  | ||||||
| 			break; |  | ||||||
| #ifdef WITH_IPV6 |  | ||||||
| 		case AF_INET6: |  | ||||||
| 			{ |  | ||||||
| 				struct sockaddr_in6 *sain = (struct sockaddr_in6 *) &acip->ip; |  | ||||||
| 				memcpy(ipmsg, &sain->sin6_addr.s6_addr, sizeof(sain->sin6_addr.s6_addr)); |  | ||||||
| 				*((uint16_t *) (ipmsg + 16)) = htons(acip->wtp_count);	/* number of wtps */ |  | ||||||
| 				cwmsg_addelem(msg, CW_ELEM_CONTROL_IPV6_ADDRESS, ipmsg, 18); |  | ||||||
| 			} |  | ||||||
| 			break; |  | ||||||
| #endif |  | ||||||
| 	} |  | ||||||
| 	return 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void cwmsg_addelem_ctrl_ip_addrs(struct cwmsg *msg, struct ac_info *acinfo) |  | ||||||
| { |  | ||||||
| //      printf("Counter in the list: %i\n",acinfo->aciplist->count); |  | ||||||
| 	aciplist_foreach(acinfo->aciplist, cwmsg_addelem_acip, msg); |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  |  | ||||||
| void ucwmsg_addelem_ctrl_ip_addrs(struct cwmsg *msg, struct ac_info *acinfo) |  | ||||||
| { |  | ||||||
| 	int i; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	for (i=0; i<acinfo->salist_len; i++) |  | ||||||
| 	{ |  | ||||||
| 		uint8_t ipmsg [18]; |  | ||||||
| 		switch (acinfo->salist[i].sa_family){ |  | ||||||
| 			case AF_INET: |  | ||||||
| 			{ |  | ||||||
| 				struct sockaddr_in  * sain = (struct sockaddr_in*)&acinfo->salist[i]; |  | ||||||
| 				memcpy(ipmsg,&sain->sin_addr, sizeof(sain->sin_addr)); |  | ||||||
| 				*((uint16_t*)(ipmsg+4))= htons(0); // number of wtps  |  | ||||||
| 				cwmsg_addelem(msg,CWMSGELEM_CONTROL_IPV4_ADDRESS,ipmsg,6); |  | ||||||
| 			} |  | ||||||
| 			break; |  | ||||||
| #ifdef WITH_IPV6				 |  | ||||||
| 			case AF_INET6: |  | ||||||
| 			{ |  | ||||||
| 				struct sockaddr_in6  * sain = (struct sockaddr_in6*)&acinfo->salist[i]; |  | ||||||
| 				memcpy(ipmsg,&sain->sin6_addr, sizeof(sain->sin6_addr)); |  | ||||||
| 				*((uint16_t*)(ipmsg+16))= htons(0); // number of wtps  |  | ||||||
| 				cwmsg_addelem(msg,CWMSGELEM_CONTROL_IPV6_ADDRESS,ipmsg,18); |  | ||||||
| 			} |  | ||||||
| 			break; |  | ||||||
| #endif				 |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| */ |  | ||||||
| @ -1,128 +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 <http://www.gnu.org/licenses/>. |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #include "capwap.h" |  | ||||||
| #include "capwap_80211.h" |  | ||||||
|  |  | ||||||
| #include <stdio.h>  |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <string.h> |  | ||||||
|  |  | ||||||
| #include "wtpinfo.h" |  | ||||||
|  |  | ||||||
| #include "cw_util.h" |  | ||||||
| #include "cw_log.h" |  | ||||||
|  |  | ||||||
| struct eparm { |  | ||||||
| 	int *mand; |  | ||||||
| 	struct wtpinfo *wtpinfo; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| static int process_elem(void *eparm,int type,uint8_t* msgelem,int len) |  | ||||||
| { |  | ||||||
|  |  | ||||||
| 	struct eparm *e = (struct eparm *) eparm; |  | ||||||
|  |  | ||||||
| 	struct wtpinfo * wtpinfo = e->wtpinfo; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	cw_dbg_msgelem(CW_MSG_JOIN_REQUEST, type, msgelem, len); |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	/* mandatory elements */ |  | ||||||
| 	if (wtpinfo_readelem_location_data(wtpinfo,type,msgelem,len))  |  | ||||||
| 		goto foundX; |  | ||||||
|  |  | ||||||
| 	if (wtpinfo_readelem_wtp_board_data(wtpinfo,type,msgelem,len)) |  | ||||||
| 		goto foundX; |  | ||||||
|  |  | ||||||
| 	if (wtpinfo_readelem_wtp_descriptor(wtpinfo,type,msgelem,len))  |  | ||||||
| 		goto foundX; |  | ||||||
|  |  | ||||||
| 	if (wtpinfo_readelem_wtp_name(wtpinfo,type,msgelem,len))  |  | ||||||
| 		goto foundX; |  | ||||||
|  |  | ||||||
| 	if (wtpinfo_readelem_session_id(wtpinfo,type,msgelem,len))  |  | ||||||
| 		goto foundX; |  | ||||||
| 	 |  | ||||||
| 	if (wtpinfo_readelem_wtp_frame_tunnel_mode(wtpinfo,type,msgelem,len))  |  | ||||||
| 		goto foundX; |  | ||||||
|  |  | ||||||
| 	if (wtpinfo_readelem_wtp_mac_type(wtpinfo,type,msgelem,len))  |  | ||||||
| 		goto foundX; |  | ||||||
|  |  | ||||||
| 	if (wtpinfo_readelem_ecn_support(wtpinfo,type,msgelem,len)) |  | ||||||
| 		goto foundX; |  | ||||||
|  |  | ||||||
| 	if (cw_readelem_capwap_local_ip_addr((struct sockaddr*)&wtpinfo->local_ip,type,msgelem,len)){ |  | ||||||
| 		cw_mand_elem_found(e->mand, XCWMSGELEM_CAPWAP_LOCAL_IP_ADDRESS); |  | ||||||
| 		return 1; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/* understood capwap bindings */ |  | ||||||
| 	if (wtpinfo_readelem_wtp_radio_info(wtpinfo,type,msgelem,len)){ |  | ||||||
| 		cw_mand_elem_found(e->mand, XCWMSGELEM_CAPWAP_RADIO_INFO); |  | ||||||
| 		return 1; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	/* non-mandatory messages */ |  | ||||||
| 	 |  | ||||||
| 	uint16_t ml; |  | ||||||
| 	if (cw_readelem_maximum_message_length(&ml,type,msgelem,len)){ |  | ||||||
| 		return 1; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (cw_readelem_wtp_reboot_statistics(&e->wtpinfo->reboot_statistics,type,msgelem,len)) |  | ||||||
| 		goto foundX; |  | ||||||
|  |  | ||||||
| 	return 0; |  | ||||||
|  |  | ||||||
|       foundX: |  | ||||||
| 	cw_mand_elem_found(e->mand, type); |  | ||||||
| 	return 1; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| void process_join_request(struct wtpinfo * wtpinfo, uint8_t * msg, int len) |  | ||||||
| { |  | ||||||
| 	int mand[] = { |  | ||||||
| 		CWMSGELEM_LOCATION_DATA, |  | ||||||
| 		CW_ELEM_WTP_BOARD_DATA, |  | ||||||
| 		CW_ELEM_WTP_DESCRIPTOR, |  | ||||||
| 		CW_ELEM_WTP_NAME, |  | ||||||
| 		CW_ELEM_WTP_FRAME_TUNNEL_MODE, |  | ||||||
| 		CW_ELEM_WTP_MAC_TYPE, |  | ||||||
| 		CWMSGELEM_ECN_SUPPORT, |  | ||||||
| 		XCWMSGELEM_CAPWAP_LOCAL_IP_ADDRESS, |  | ||||||
| 		XCWMSGELEM_CAPWAP_RADIO_INFO, |  | ||||||
| 		-1 |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	struct eparm eparm; |  | ||||||
| 	eparm.wtpinfo = wtpinfo; |  | ||||||
| 	eparm.mand = mand; |  | ||||||
|  |  | ||||||
| 	cw_foreach_msgelem(msg, len, process_elem, |  | ||||||
| 			   &eparm); |  | ||||||
|  |  | ||||||
| 	cw_dbg_missing_mand_elems_(0, CW_MSG_JOIN_REQUEST, eparm.mand); |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user