cw_select_ac function is done
FossilOrigin-Name: 664aa92562692cc3d73e2540649b3896fac26401247a2a9d0059aa874c2ef914
This commit is contained in:
@ -32,7 +32,7 @@ endif
|
||||
|
||||
|
||||
#SRC=$(wildcard *.c)
|
||||
SRC=wtp_main.c discovery.c
|
||||
SRC=wtp_main.c discovery.c
|
||||
|
||||
OBJS=$(patsubst %.c,%.o,$(SRC))
|
||||
OBJS:=$(patsubst %.o,$(OBJDIR)/%.o,$(OBJS))
|
||||
|
@ -1,5 +1,7 @@
|
||||
capwap/vars/MaxDiscoveries:Word:10
|
||||
capwap/vars/MaxRetransmit:Word:4
|
||||
|
||||
|
||||
# hallo
|
||||
windows:Word:124
|
||||
|
||||
basic/mod:Bstr16:cisco
|
||||
@ -24,9 +26,17 @@ wtp-descriptor/software/vendor:Dword:906090
|
||||
wtp-descriptor/software/version:Bstr16:.x171312
|
||||
wtp-descriptor/bootloader/vendor:Dword:906090
|
||||
wtp-descriptor/bootloader/version:Bstr16:.x171312
|
||||
wtp-descriptor/max-radios:Byte:2
|
||||
wtp-descriptor/max-radios:Byte:3
|
||||
|
||||
radio/0/wtp-radio-information:Dword:01
|
||||
radio/1/wtp-radio-information:Dword:02
|
||||
|
||||
wtp-name:Bstr16:WFAT01
|
||||
|
||||
|
||||
wtp-fallback:Byte:1
|
||||
"ac-name-with-priority/TubesAC":Byte:3
|
||||
ac-name-with-priority/"ac2":Byte:01
|
||||
|
||||
|
||||
|
||||
|
@ -16,44 +16,80 @@
|
||||
#include "wtp.h"
|
||||
|
||||
|
||||
int cw_select_ac(mlist_t aclist){
|
||||
int cw_select_ac(mavl_t local_cfg,mlist_t aclist){
|
||||
mlistelem_t * e;
|
||||
mavl_t best_ac;
|
||||
|
||||
best_ac=NULL;
|
||||
int en;
|
||||
mavl_t iplist;
|
||||
|
||||
iplist=cw_ktv_create();
|
||||
if (iplist == NULL)
|
||||
return 0;
|
||||
|
||||
en=0;
|
||||
|
||||
/* for each discovery response */
|
||||
mlist_foreach(e,aclist){
|
||||
char str[1024];
|
||||
char key[CW_KTV_MAX_KEY_LEN];
|
||||
mavl_t cfg;
|
||||
mavl_t remote_cfg;
|
||||
int i;
|
||||
|
||||
cw_KTV_t * val;
|
||||
cfg = mlistelem_get_ptr(e);
|
||||
val = cw_ktv_get(cfg,"ac-name", CW_TYPE_BSTR16);
|
||||
int prio;
|
||||
|
||||
remote_cfg = mlistelem_get_ptr(e);
|
||||
|
||||
/* get ac name */
|
||||
val = cw_ktv_get(remote_cfg,"ac-name", CW_TYPE_BSTR16);
|
||||
if (val==NULL)
|
||||
continue;
|
||||
if (best_ac==NULL){
|
||||
best_ac=cfg;
|
||||
}
|
||||
|
||||
|
||||
val->type->to_str(val,str,1024);
|
||||
sprintf(key,"ac-name-with-priority/%s",str);
|
||||
|
||||
printf("Get prio: %s\n",key);
|
||||
|
||||
prio = cw_ktv_get_byte(local_cfg,key,255);
|
||||
|
||||
i=0;
|
||||
do {
|
||||
cw_KTV_t * ipval;
|
||||
sprintf(key,"%s.%d","capwap-control-ip-address/wtps",i);
|
||||
val = cw_ktv_get(cfg,key,CW_TYPE_WORD);
|
||||
val = cw_ktv_get(remote_cfg,key,CW_TYPE_WORD);
|
||||
if (val == NULL)
|
||||
break;
|
||||
|
||||
sprintf(key,"%s.%d","capwap-control-ip-address/address",i);
|
||||
printf("ipvalkey: %s\n",key);
|
||||
ipval = cw_ktv_get(remote_cfg,key,CW_TYPE_IPADDRESS);
|
||||
|
||||
sprintf(key,"%04d%05d%04d",prio,val->val.word,en);
|
||||
en++;
|
||||
printf("This is the key: %s\n",key);
|
||||
|
||||
cw_ktv_add(iplist,key,CW_TYPE_SYSPTR,(uint8_t*)(&ipval),sizeof(ipval));
|
||||
i++;
|
||||
}while(1);
|
||||
printf("Here we have an AC: %s\n",str);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
cw_dbg_ktv_dump(iplist,DBG_INFO,"=== IP list ===", "IP", "=== END IP List ===");
|
||||
{
|
||||
mavliter_t i;
|
||||
mavliter_init(&i,iplist);
|
||||
|
||||
mavliter_foreach(&i){
|
||||
char ipstr[100];
|
||||
char *rk;
|
||||
cw_KTV_t * val;
|
||||
val = mavliter_get(&i);
|
||||
rk = val->key;
|
||||
val = val->val.ptr;
|
||||
val->type->to_str(val,ipstr,100);
|
||||
printf("PTRVAL(%s): %s - %s\n",rk,val->key,ipstr);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -100,7 +136,7 @@ static int run_discovery(struct conn *conn)
|
||||
conn->remote_cfg=cw_ktv_create();
|
||||
}
|
||||
|
||||
cw_select_ac(discovery_results);
|
||||
cw_select_ac(conn->local_cfg,discovery_results);
|
||||
|
||||
|
||||
/*
|
||||
|
@ -14,8 +14,8 @@
|
||||
#include "cw/sock.h"
|
||||
#include "cw/dtls.h"
|
||||
#include "cw/aciplist.h"
|
||||
#include "cw/capwap_items.h"
|
||||
#include "cw/mbag.h"
|
||||
|
||||
|
||||
|
||||
/*
|
||||
#define acinfo_log acinfo_log_
|
||||
@ -96,6 +96,7 @@ acinfo.result_code=99;
|
||||
|
||||
int run_join_d(struct sockaddr *sa)
|
||||
{
|
||||
char addrstr[SOCK_ADDR_BUFSIZE];
|
||||
struct conn *conn = get_conn();
|
||||
conn->capwap_state = CAPWAP_STATE_JOIN;
|
||||
|
||||
@ -125,7 +126,7 @@ int run_join_d(struct sockaddr *sa)
|
||||
}
|
||||
*/
|
||||
|
||||
cw_dbg(DBG_DTLS, "Establishing DTLS session with %s", sock_addr2str(sa));
|
||||
cw_dbg(DBG_DTLS, "Establishing DTLS session with %s", sock_addr2str(sa, addrstr));
|
||||
|
||||
int dtls_conf_ok=0;
|
||||
|
||||
@ -147,7 +148,7 @@ int run_join_d(struct sockaddr *sa)
|
||||
|
||||
if (!dtls_conf_ok){
|
||||
cw_log(LOG_ERR,"Can't establish DTLS connection with %s, neither psk nor cert set in config",
|
||||
sock_addr2str(sa));
|
||||
sock_addr2str(sa,addrstr));
|
||||
close(sockfd);
|
||||
return 0;
|
||||
}
|
||||
@ -157,14 +158,14 @@ int run_join_d(struct sockaddr *sa)
|
||||
if (rc != 1) {
|
||||
dtls_shutdown(conn);
|
||||
cw_log(LOG_ERR, "Can't establish DTLS connection with %s",
|
||||
sock_addr2str(sa));
|
||||
sock_addr2str(sa,addrstr));
|
||||
close(sockfd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
cw_dbg(DBG_DTLS, "DTLS Connection successful established with %s",
|
||||
sock_addr2str(sa));
|
||||
sock_addr2str(sa,addrstr));
|
||||
|
||||
|
||||
|
||||
@ -172,36 +173,41 @@ int run_join_d(struct sockaddr *sa)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int run_join(struct conn *conn)
|
||||
{
|
||||
|
||||
char addrstr[SOCK_ADDR_BUFSIZE];
|
||||
/*
|
||||
// cw_init_request(conn, CW_MSG_JOIN_REQUEST);
|
||||
// if ( cw_put_msg(conn, conn->req_buffer) == -1 )
|
||||
// return 0;
|
||||
//
|
||||
// conn_send_msg(conn, conn->req_buffer);
|
||||
*/
|
||||
|
||||
/* mbag_del_all(conn->incomming);*/
|
||||
|
||||
mbag_del_all(conn->incomming);
|
||||
|
||||
//mbag_del (conn->incomming,CW_ITEM_RESULT_CODE);
|
||||
/* //mbag_del (conn->incomming,CW_ITEM_RESULT_CODE);*/
|
||||
|
||||
int rc = cw_send_request(conn, CAPWAP_MSG_JOIN_REQUEST);
|
||||
|
||||
if (!cw_result_is_ok(rc)) {
|
||||
if (rc > 0) {
|
||||
cw_log(LOG_ERR, "Can't Join AC at %s, AC said: %d - %s.",
|
||||
sock_addr2str(&conn->addr), rc, cw_strerror(rc));
|
||||
sock_addr2str(&conn->addr,addrstr), rc, cw_strerror(rc));
|
||||
|
||||
} else {
|
||||
cw_log(LOG_ERR, "Can't Join AC at %s: %d - %s.",
|
||||
sock_addr2str(&conn->addr), errno, cw_strerror(rc));
|
||||
sock_addr2str(&conn->addr,addrstr), errno, cw_strerror(rc));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
cw_dbg(DBG_ELEM_IN, "Joined AC at %s, Join Result: %d - %s",
|
||||
sock_addr2str(&conn->addr), rc, cw_strresult(rc));
|
||||
sock_addr2str(&conn->addr,addrstr), rc, cw_strresult(rc));
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -211,12 +217,13 @@ int run_join(struct conn *conn)
|
||||
int join()
|
||||
{
|
||||
struct conn *conn = get_conn();
|
||||
|
||||
mavliter_t ii;
|
||||
char addrstr[SOCK_ADDR_BUFSIZE];
|
||||
printf("Join\n");
|
||||
|
||||
mbag_del_all(conn->incomming);
|
||||
/*mbag_del_all(conn->incomming);*/
|
||||
|
||||
cw_aciplist_t iplist =
|
||||
/* cw_aciplist_t iplist =
|
||||
mbag_get_mavl(conn->local, CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST);
|
||||
if (!iplist) {
|
||||
cw_log(LOG_ERR, "No IPs to join controller.");
|
||||
@ -227,16 +234,16 @@ int join()
|
||||
cw_log(LOG_ERR, "No IPs to join controller. IP list is empty.");
|
||||
return 0;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
DEFINE_AVLITER(ii, iplist);
|
||||
avliter_foreach(&ii) {
|
||||
/*DEFINE_AVLITER(ii, iplist);*/
|
||||
mavliter_foreach(&ii) {
|
||||
|
||||
cw_acip_t *ip = avliter_get(&ii);
|
||||
|
||||
|
||||
cw_dbg(DBG_INFO, "Going to join CAWAP controller on %s",
|
||||
sock_addr2str_p(&ip->ip));
|
||||
sock_addr2str_p(&ip->ip,addrstr));
|
||||
|
||||
int rc = run_join_d((struct sockaddr *) &ip->ip);
|
||||
|
||||
|
@ -129,7 +129,7 @@ extern long conf_echo_interval;
|
||||
extern long conf_max_retransmit;
|
||||
extern long conf_retransmit_interval;
|
||||
|
||||
//extern long conf_dbg_level;
|
||||
|
||||
extern int conf_mtu_discovery;
|
||||
extern int conf_mtu;
|
||||
|
||||
|
Reference in New Issue
Block a user