Пример #1
0
int ac_global_init()
{
//	mod_set_actions_registered_cb(setup_actions);



    ac_config = mbag_create();
    mbag_set_str(ac_config, CW_ITEM_AC_NAME, conf_acname);
    mbag_set_ptr(ac_config, CW_ITEM_AC_STATUS, &ac_status);

    ac_status.stations = 0;
    ac_status.limit = 1000;
    ac_status.active_wtps = 10;
    ac_status.max_wtps = 200;
    ac_status.security = CW_FLAG_AC_SECURITY_X | CW_FLAG_AC_SECURITY_S;
    ac_status.rmac_field = CW_FLAG_RMAC_SUPPORTED;
    ac_status.dtls_policy = CW_FLAG_DTLS_POLICY_C; // | CW_FLAG_DTLS_POLICY_D;


    mbag_set_bstrv(ac_config, CW_ITEM_AC_HARDWARE_VERSION, 0,
                   bstr_data(conf_hardware_version), bstr_len(conf_hardware_version));
    mbag_set_bstrv(ac_config, CW_ITEM_AC_SOFTWARE_VERSION, 0,
                   bstr_data(conf_software_version), bstr_len(conf_software_version));


    mbag_set_str(ac_config,CW_ITEM_AC_IMAGE_DIR,conf_image_dir);

//	mbag_set_avltree(ac_config, CW_ITEM_AC_IP_LIST, aciplist);


    mbag_set_fun(ac_config, CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST, get_iplist,release_iplist,(void*)771);

    return 1;
}
Пример #2
0
int bstr_to_str(char *dst, bstr_t str,char * def)
{
	if (!str){
		if (!def) 
			return 0;
		return sprintf(dst,"%s",def);
	}

	int printable = cw_is_printable(bstr_data(str),bstr_len(str));
	int l=bstr_len(str);

	if (printable){
		memcpy((char*)dst,bstr_data(str),l);
		*(dst+l)=0;
		return l;
	}

	int i;
	int c=0;
	char *s = dst; 
	for (i=0; i<l; i++){
		if (!c){

			s += sprintf(s,"%02X",bstr_data(str)[i]);
			c=1;
		}
		else
			s += sprintf(s,",%02X",bstr_data(str)[i]);
	}	

	return s-dst;
}
void cwmsg_addelem_80211_add_wlan(struct cwmsg *cwmsg,struct cwwlan *wlan)
{

	uint16_t capab=htons(wlan->capab);
	uint16_t keylen=htons(wlan->key_length);
	
	cwmsg_vaddelem(cwmsg,CW_ELEM_80211_ADD_WLAN,
		&wlan->rid,1,
		&wlan->wid,1,
		&capab,2,
		&wlan->key_index,1,
		&wlan->key_status,1,
		&keylen,2,
		wlan->key,wlan->key_length,
		wlan->group_tsc,6,
		&wlan->qos,1,
		&wlan->auth_type,1,
		&wlan->mac_mode,1,
		&wlan->tunnel_mode,1,
		&wlan->suppress_ssid,1,
		bstr_data(wlan->ssid),bstr_len(wlan->ssid),
		NULL

	);
		
}
Пример #4
0
static int to_str ( const struct cw_KTV *data, char *dst, int max_len )
{

	int l;
	struct sockaddr_storage addr;

	l = bstr_len(data->val.ptr);
	if (l==4){
		addr.ss_family = AF_INET;
		memcpy(&(((struct sockaddr_in*)&addr)->sin_addr),bstr_data(data->val.ptr),4);
		sock_addr2str(&addr,dst);
		return 4;
	}
	if (l==16){
		addr.ss_family = AF_INET6;
		memcpy(&(((struct sockaddr_in6*)&addr)->sin6_addr),bstr_data(data->val.ptr),16);
		sock_addr2str(&addr,dst);
		return 16;
	}
	
	*dst=0;
	return 0;

}
Пример #5
0
static void * data(cw_KTV_t * data)
{
	return bstr_data(data->val.ptr);
}
Пример #6
0
int hdr_print(char *str, uint8_t *packet, int len)
{
	

	char *s = str;


	if (len<1){
		s+=sprintf(s,"\tNo info available.");
		return s-str;
	}

	int preamble = cw_get_hdr_preamble(packet); //CWTH_GET_PREAMBLE(packet);

	if (preamble==01){
		s+=sprintf(s,"\tEncrypted data.");
		return s-str;
	}

	if (preamble!=00){
		s+=sprintf(s,"\tWrong CAPWAP version or encryption type.");
		return s-str;
	}


	if (len < 4){
		s+=sprintf(s,"\tNo more data. Packet too short.");
		return s-str;
	}
	


	int hlen = cw_get_hdr_hlen(packet); //CWTH_GET_HLEN(packet);
	int rid = cw_get_hdr_rid(packet);
	int wbid = cw_get_hdr_wbid(packet);
	s+=sprintf(s,"\tHLEN: %d, RID: %02X, WBID %02X",hlen,rid,wbid);	



	s+=sprintf(s," Flags: (T=%d,F=%d,L=%d,W=%d,M=%d,K=%d)\n",
				cw_get_hdr_flag_t(packet),
				cw_get_hdr_flag_f(packet),
				cw_get_hdr_flag_l(packet),
				cw_get_hdr_flag_w(packet),
				cw_get_hdr_flag_m(packet),
				cw_get_hdr_flag_k(packet)
		);
	if (cw_get_hdr_flag_m(packet)){
		uint8_t * rmac = cw_get_hdr_rmac(packet);
		s+=sprintf(s,"\tRadio MAC: %s\n",sock_hwaddr2str(bstr_data(rmac),
				bstr_len(rmac)));

	}


	if (len < 8){
		s+=sprintf(s,"\tNo more data. Packet too short.");
		return s-str;
	}
	
	int frag_id = cw_get_hdr_fragid(packet);
	int frag_offs = cw_get_hdr_fragoffset(packet);
	s+=sprintf(s,"\tFrag Id: %d, Frag Offs:: %d\n",frag_id,frag_offs);


	int bhlen = 4*hlen;
	if (cw_get_hdr_flag_f(packet) && frag_offs!=0){
		s+=sprintf(s,"\tFragment data ...");
		return s-str;
	}

	
	if (len<bhlen+4){
		s+=sprintf(s,"\tNo more data. Packet too short.");
		return s-str;
	}


	int msgtype = ntohl(*((uint32_t*)(packet+bhlen)));
	s+=sprintf(s,"\tMsgType: %d",msgtype);

	if (len<bhlen+8){
		s+=sprintf(s,"\n\tNo more data. Packet too short.");
		return s-str;
	}

	int seqnum = (ntohl(*((uint32_t*)(packet+bhlen+4))))>>24;
	int msgelemlen = 0xFF & ((ntohl(*((uint32_t*)(packet+bhlen+4))))>>8);

	s+=sprintf(s,", SeqNum: %d, MsgelemLen:%d",seqnum,msgelemlen);


	return s-str;
}
Пример #7
0
int wtpinfo_print(char *str, struct wtpinfo * wtpinfo)
{
	char hstr[64];

	char *s = str;




	s+=sprintf (s,"\tWTP Name: %s\n", (!wtpinfo->name ? (uint8_t*)"Not set" : wtpinfo->name) );
	s+=sprintf (s,"\tLocation: %s\n", (!wtpinfo->location ? (uint8_t*)"Not set" : wtpinfo->location) );

	s+=sprintf (s,"\tMAC Adress: ");
	if (wtpinfo->macaddress){
		sock_hwaddrtostr(wtpinfo->macaddress,wtpinfo->macaddress_len,hstr,":");
		s+=sprintf(s,"%s\n",hstr);

	}
	else
		s+=sprintf(s,"Not set\n");

	char disctypestr[32];
	switch(wtpinfo->discovery_type){
		case CW_DISCOVERY_TYPE_STATIC:
			sprintf(disctypestr,"Static");
			break;
			
		case CW_DISCOVERY_TYPE_DHCP:
			sprintf(disctypestr,"DHCP");
			break;
			
		case CW_DISCOVERY_TYPE_DNS:
			sprintf(disctypestr,"DNS");
			break;

		case CW_DISCOVERY_TYPE_AC_REFERRAL:
			sprintf(disctypestr,"AC Referral");
			break;

		default:
			sprintf(disctypestr,"Unknown");
			break;

	}
	s+=sprintf (s,"\tDiscovery Type: %s\n",disctypestr);



//	sock_addrtostr((struct sockaddr*)&wtpinfo->local_ip,hstr,64);

/*
int i0;
for (i0=0; i0<10; i0++){
	printf("%d\n", ((char*)(&wtpinfo->local_ip))[i0]  );
}

*/	s+=sprintf (s,"\tLocal IP: %s\n",sock_addr2str(&(wtpinfo->local_ip)));



	s+=sprintf (s,"\tVendor ID: %d, %s\n", wtpinfo->vendor_id,lw_vendor_id_to_str(wtpinfo->vendor_id) );

	s+=sprintf (s,"\tModel No.: "); //, (!wtpinfo->model_no ? (uint8_t*)"Not set" : wtpinfo->model_no) );
	s+=bstr_to_str(s,wtpinfo->model_no,0);
	s+=sprintf(s,"\n");
	

//	s+=sprintf (s,"\tSerial No.: %s\n", (!wtpinfo->serial_no ? (uint8_t*)"Not set" : wtpinfo->serial_no) );



	s+=sprintf (s,"\tSerial No.: "); 
	s+=bstr_to_str(s,wtpinfo->serial_no,0);
	s+=sprintf(s,"\n");

	s+=sprintf (s,"\tBoard ID: "); 
	s+=bstr_to_str(s,wtpinfo->board_id,0);
	s+=sprintf(s,"\n");

	s+=sprintf (s,"\tBoard Revision: "); 
	s+=bstr_to_str(s,wtpinfo->board_revision,0);
	s+=sprintf(s,"\n");


//	s+=sprintf (s,"\tBoard Id: %s\n", (!wtpinfo->board_id ? (uint8_t*)"Not set" : wtpinfo->board_id) );



	s+=sprintf (s,"\tSoftware Version: ");
//	s+=version_print(s,wtpinfo->software_version,wtpinfo->software_version_len,wtpinfo->software_vendor_id);
	s+=cw_format_version(s,wtpinfo->software_version,wtpinfo->software_vendor_id,"Not set");
	s+=sprintf (s,"\n");


	s+=sprintf (s,"\tHardware Version: ");
	s+=version_print(s,wtpinfo->hardware_version,wtpinfo->hardware_version_len,wtpinfo->hardware_vendor_id);
	s+=sprintf (s,"\tBootloader Version: ");
	s+=version_print(s,wtpinfo->bootloader_version,wtpinfo->bootloader_version_len,wtpinfo->bootloader_vendor_id);
		



//, (!wtpinfo->software_version ? (uint8_t*)"Not set" : wtpinfo->software_version) );



//	s+=sprintf (s,"\tHardware Version: %s\n", (!wtpinfo->hardware_version ? (uint8_t*)"Not set" : wtpinfo->hardware_version) );


	s+=sprintf (s,"\tMax Radios: %d\n",wtpinfo->max_radios);
	s+=sprintf (s,"\tRadios in use: %d\n",wtpinfo->radios_in_use);


	s+=sprintf (s,"\tSession ID: ");
	if (wtpinfo->session_id) {
		int i;
		for (i=0; i<bstr_len(wtpinfo->session_id); i++)
			s+=sprintf(s,"%02X",bstr_data(wtpinfo->session_id)[i]);
	}
	else 
		s+=sprintf(s,"Not set");
		s+=sprintf(s,"\n");

	s+=sprintf (s,"\tMAC Type: ");
	switch (wtpinfo->mac_type){
		case WTP_MAC_TYPE_LOCAL:
			s+=sprintf(s,"local");
			break;
		case WTP_MAC_TYPE_SPLIT:
			s+=sprintf(s,"split");
			break;
		case WTP_MAC_TYPE_BOTH:
			s+=sprintf(s,"local, split");
			break;
	}
	s+=sprintf(s,"\n");

	s+=sprintf (s,"\tFrame Tunnel Mode: ");
	s+=sprintf(s,"(%08X)",wtpinfo->frame_tunnel_mode);
	char * c="";
	if (wtpinfo->frame_tunnel_mode & WTP_FRAME_TUNNEL_MODE_N){
		s+=printf (s,"%snative",c);c=", ";
	}

	if (wtpinfo->frame_tunnel_mode & WTP_FRAME_TUNNEL_MODE_E){
		s+=sprintf (s,"%s802.3",c);c=", ";
	}

	if (wtpinfo->frame_tunnel_mode & WTP_FRAME_TUNNEL_MODE_L){
		s+=sprintf (s,"%sLocal bridging",c);c=", ";
	}
	if (wtpinfo->frame_tunnel_mode == 0)
		s+=sprintf(s," None");

	s+=sprintf(s,"\n");

	s+=sprintf(s,"\tRadios: %d\n",wtpinfo->max_radios);	
	int i;

	char ristr[2048];
	char *r = ristr;
	for (i=0; i<wtpinfo->max_radios; i++){
		if (wtpinfo->radioinfo[i].set)
			r+=radioinfo_print(r,&wtpinfo->radioinfo[i]);
	}

	s+=sprintf(s,"%s",ristr);


	s+=sprintf(s,"Encryption: %08x\n",wtpinfo->encryption_cap);

	s+=wtp_reboot_statistics_print(s,&wtpinfo->reboot_statistics);
	return s-str;


}