WTP can join and send cfg request
This commit is contained in:
@ -4,6 +4,7 @@
|
||||
#include "cw/mlist.h"
|
||||
#include "mavl.h"
|
||||
#include "cw/mod.h"
|
||||
#include "cw/dbg.h"
|
||||
|
||||
#include "discovery_cache.h"
|
||||
struct cw_DiscoveryCacheElem{
|
||||
@ -108,15 +109,25 @@ errX:
|
||||
void discovery_cache_add(struct cw_DiscoveryCache *cache,
|
||||
struct sockaddr * addr, struct cw_Mod * mod_capwap, struct cw_Mod * mod_bindings)
|
||||
{
|
||||
|
||||
{
|
||||
cw_dbg(DBG_X,"////////////////////////// ADDD CAHCE ///////////////////////");
|
||||
char str[128];
|
||||
sock_addrtostr(addr,str,128,1);
|
||||
printf("Add addr: %s\n",str);
|
||||
}
|
||||
|
||||
struct cw_DiscoveryCacheElem * cur = cache->queue+cache->qpos;
|
||||
if (cur->cmod!=NULL){
|
||||
/* delete here */
|
||||
|
||||
cw_dbg(DBG_X,"DOIN MAVL DEL ----- ///////////");
|
||||
|
||||
void * ptr = &cur;
|
||||
mavl_del(cache->byaddr,ptr);
|
||||
mavl_del(cache->byaddr,ptr);
|
||||
|
||||
mavl_del(cache->byaddrp,ptr);
|
||||
}
|
||||
|
||||
|
||||
cur->cmod=mod_capwap;
|
||||
cur->bmod=mod_bindings;
|
||||
sock_copyaddr(&cur->addr,addr);
|
||||
@ -144,9 +155,24 @@ int discovery_cache_get(struct cw_DiscoveryCache * cache,struct sockaddr *addr,
|
||||
sock_copyaddr(&search.addr,addr);
|
||||
search.ctrhi=search.ctrlo=0;
|
||||
|
||||
{
|
||||
cw_dbg(DBG_X,"DISCOVERY CACHE ---------------------------- GET ENTER");
|
||||
char str[128];
|
||||
sock_addrtostr(addr,str,128,1);
|
||||
printf("Add addr: %s\n",str);
|
||||
}
|
||||
|
||||
search_ptr = &search;
|
||||
result = mavl_get(cache->byaddrp ,&search_ptr);
|
||||
if (result != NULL){
|
||||
{
|
||||
cw_dbg(DBG_X,"DISCOVERY CACHE ---------------------------- FOUND 1 with Port");
|
||||
char str[128];
|
||||
sock_addrtostr(addr,str,128,1);
|
||||
printf("Add addr: %s\n",str);
|
||||
}
|
||||
|
||||
|
||||
elem = *result;
|
||||
if (elem != NULL){
|
||||
mavl_del(cache->byaddr,result);
|
||||
@ -166,14 +192,37 @@ int discovery_cache_get(struct cw_DiscoveryCache * cache,struct sockaddr *addr,
|
||||
result = mavl_get_first(cache->byaddr, &search_ptr);
|
||||
if (result == NULL)
|
||||
return 0;
|
||||
{
|
||||
cw_dbg(DBG_X,"DISCOVERY CACHE ---------------------------- DOUND BY ADDR");
|
||||
char str[128];
|
||||
sock_addrtostr(addr,str,128,1);
|
||||
printf("Add addr: %s\n",str);
|
||||
}
|
||||
|
||||
|
||||
elem = *result;
|
||||
if (elem != NULL){
|
||||
cw_dbg(DBG_X,"elem != NULL");
|
||||
|
||||
{
|
||||
cw_dbg(DBG_X,"DISCOVERY CACHE ---------------------------- DOUND BY ADDR");
|
||||
char str[128];
|
||||
sock_addrtostr(&elem->addr,str,128,1);
|
||||
printf("ELEM addr: %s\n",str);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (sock_cmpaddr((struct sockaddr*)&elem->addr,addr,0)!=0)
|
||||
return 0;
|
||||
|
||||
mavl_del(cache->byaddr,result);
|
||||
mavl_del(cache->byaddrp,result);
|
||||
cw_dbg(DBG_X,"DOIN MAVL DEL HERO ----- ///////////");
|
||||
mavl_del(cache->byaddr,&elem);
|
||||
cw_dbg(DBG_X,"DOIN MAVL DEL HERXXXXXXO ----- ///////////");
|
||||
mavl_del(cache->byaddrp,&elem);
|
||||
cw_dbg(DBG_X,"DOIN MAVL DEL HERO 0000 ----- ///////////");
|
||||
|
||||
*modcapwap=elem->cmod;
|
||||
*modbindings=elem->bmod;
|
||||
|
@ -310,7 +310,7 @@ static void *wtpman_main(void *arg)
|
||||
wtpman->conn->seqnum = 0;
|
||||
conn = wtpman->conn;
|
||||
|
||||
wtpman->conn->remote_cfg = cw_cfg_create();
|
||||
// wtpman->conn->remote_cfg = cw_cfg_create();
|
||||
|
||||
|
||||
if (!wtpman->dtlsmode) {
|
||||
@ -358,32 +358,6 @@ static void *wtpman_main(void *arg)
|
||||
|
||||
|
||||
while (!cw_timer_timeout(timer)) {
|
||||
if (conn->update_cfg != NULL) {
|
||||
mavl_t tmp;
|
||||
|
||||
|
||||
tmp = conn->local_cfg;
|
||||
|
||||
/* mavl_merge(conn->default_cfg, conn->local_cfg);*/
|
||||
/* mavl_merge(conn->default_cfg, conn->remote_cfg);*/
|
||||
|
||||
conn->local_cfg = conn->update_cfg;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
cw_dbg(DBG_INFO, "Updating WTP %s",
|
||||
sock_addr2str(&conn->addr, sock_buf));
|
||||
|
||||
rc = cw_send_request(conn,
|
||||
CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST);
|
||||
mavl_merge(conn->remote_cfg, conn->update_cfg);
|
||||
|
||||
conn->update_cfg = NULL;
|
||||
conn->local_cfg = tmp;
|
||||
}
|
||||
|
||||
|
||||
rc = cw_read_messages(wtpman->conn);
|
||||
if (rc < 0) {
|
||||
@ -627,13 +601,16 @@ void wtpman_destroy(struct wtpman *wtpman)
|
||||
static void copy(struct cw_ElemHandlerParams * params)
|
||||
{
|
||||
struct wtpman * wtpman;
|
||||
struct cw_Conn * conn;
|
||||
wtpman = (struct wtpman*)params->conn->data;
|
||||
conn = (struct cw_Conn*)params->conn;
|
||||
|
||||
|
||||
cw_dbg(DBG_X,"------------- Here is the config we ve got from WTP ---------------- ");
|
||||
cw_cfg_dump(params->cfg);
|
||||
cw_dbg(DBG_X,"------------- This was the config we ve got from WTP ---------------- ");
|
||||
cw_dbg(DBG_X,"Now copying:");
|
||||
cw_cfg_copy(params->cfg,wtpman->wtp_cfg);
|
||||
cw_cfg_copy(params->cfg,conn->local_cfg);
|
||||
cw_dbg(DBG_X,"Copying done.");
|
||||
}
|
||||
|
||||
@ -647,17 +624,32 @@ static int discovery_cb(struct cw_ElemHandlerParams * params, uint8_t * elems_pt
|
||||
|
||||
static int join_cb(struct cw_ElemHandlerParams * params, uint8_t * elems_ptr, int elems_len)
|
||||
{
|
||||
struct cw_Conn * conn = (struct cw_Conn*)params->conn;
|
||||
char filename[200];
|
||||
|
||||
cw_dbg(DBG_X,"JOIN Callback");
|
||||
copy(params);
|
||||
const char * wtpname = cw_cfg_get(conn->local_cfg,"wtp-name","default");
|
||||
sprintf(filename,"wtp-join-%s.ckv",wtpname);
|
||||
cw_cfg_save(filename,params->cfg);
|
||||
cw_cfg_clear(params->cfg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int update_cb(struct cw_ElemHandlerParams * params, uint8_t * elems_ptr, int elems_len)
|
||||
{
|
||||
struct cw_Conn * conn = (struct cw_Conn*)params->conn;
|
||||
char filename[200];
|
||||
|
||||
|
||||
|
||||
cw_dbg(DBG_X,"UPDATE Callback");
|
||||
copy(params);
|
||||
cw_cfg_clear(params->cfg);
|
||||
|
||||
const char * wtpname = cw_cfg_get(conn->local_cfg,"wtp-name","default");
|
||||
sprintf(filename,"wtp-status-%s.ckv",wtpname);
|
||||
cw_cfg_save(filename,params->cfg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user