NLSR with CCN Sync

This commit is contained in:
akmhoque committed 2012-12-10 11:50:43 -06:00
1 parent 8fdd641b8c
commit 4ae1694c47
6 files changed
+215 -38

No files matched your search

+4 -4
View File
@@ -1,10 +1,10 @@
#----configuration file for macbook----------
#
router-name /ndn/memphis.edu/netlab/macbook/
ccnneighbor /ndn/memphis.edu/dunhall/castor face9
ccnneighbor /ndn/memphis.edu/netlab/maia face11
ccnneighbor /ndn/memphis.edu/pollux face38
ccnname /ndn/memphis.edu/patterson
ccnname /ndn/memphis.edu/houston/
ccnname /ndn/memphis.edu/macbook/patterson
ccnname /ndn/memphis.edu/macbook/houston/
#------lsdb-synch-interval-----
lsdb-synch-interval 350
interest-retry 2
@@ -12,6 +12,6 @@ interest-resend-time 5
lsa-refresh-time 600
router-dead-interval 900
multi-path-face-num 2
#debug on
debug on
logdir /Users/akmhoque/NLSR2.0
+2 -2
View File
@@ -1067,8 +1067,8 @@ main(int argc, char *argv[])
//write_data_to_repo();
nlsr->sched = ccn_schedule_create(nlsr, &ndn_rtr_ticker);
//nlsr->event_send_info_interest = ccn_schedule_event(nlsr->sched, 1, &send_info_interest, NULL, 0);
//nlsr->event = ccn_schedule_event(nlsr->sched, 60000000, &refresh_lsdb, NULL, 0);
nlsr->event_send_info_interest = ccn_schedule_event(nlsr->sched, 1, &send_info_interest, NULL, 0);
nlsr->event = ccn_schedule_event(nlsr->sched, 60000000, &refresh_lsdb, NULL, 0);
while(1)
+59 -6
View File
@@ -69,9 +69,6 @@ void
make_name_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, long int ls_id,char *orig_time,char *slice_prefix)
{
//printf("Orig Router: %s LS Type: %d LS Id: %ld\n",orig_router,ls_type,ls_id);
char lst[2];
memset(lst,0,2);
sprintf(lst,"%d",ls_type);
@@ -88,7 +85,22 @@ make_name_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, long in
memcpy(key+strlen(key),orig_time,strlen(orig_time));
memcpy(key+strlen(key),orig_router,strlen(orig_router));
//printf("Key: %s\n",key);
}
void
make_adj_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, char *orig_time,char *slice_prefix)
{
char lst[2];
memset(lst,0,2);
sprintf(lst,"%d",ls_type);
memcpy(key+strlen(key),slice_prefix,strlen(slice_prefix));
memcpy(key+strlen(key),"/",1);
memcpy(key+strlen(key),lst,strlen(lst));
memcpy(key+strlen(key),"/",1);
memcpy(key+strlen(key),orig_time,strlen(orig_time));
memcpy(key+strlen(key),orig_router,strlen(orig_router));
}
void
@@ -668,6 +680,32 @@ build_and_install_adj_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_
build_adj_lsa(adj_lsa);
install_adj_lsa(adj_lsa);
char lst[2];
memset(lst,2,0);
sprintf(lst,"%d",LS_TYPE_ADJ);
char *repo_con_name=(char *)malloc(strlen(nlsr->slice_prefix)+strlen(adj_lsa->header->orig_time)+strlen(adj_lsa->header->orig_router->name) + strlen(lst) + 5);
memset(repo_con_name,strlen(nlsr->slice_prefix)+strlen(adj_lsa->header->orig_time)+strlen(adj_lsa->header->orig_router->name) + strlen(lst) + 5,0);
make_adj_lsa_prefix_for_repo(repo_con_name, adj_lsa->header->orig_router->name,LS_TYPE_ADJ,adj_lsa->header->orig_time,nlsr->slice_prefix);
printf("Adj LSA Repo Key: %s \n",repo_con_name);
char *key=(char *)malloc(adj_lsa->header->orig_router->length+2+2);
memset(key,0,adj_lsa->header->orig_router->length+2);
make_adj_lsa_key(key,adj_lsa);
struct name_prefix *lsaid=(struct name_prefix *)malloc(sizeof(struct name_prefix));
lsaid->name=(char *)malloc(strlen(key)+1);
memset(lsaid->name,strlen(key)+1,0);
memcpy(lsaid->name,key,strlen(key));
lsaid->length=strlen(key)+1;
//write_adj_lsa_to_repo(repo_key, lsaid);
//free(key);
//free(repo_con_name);
free(adj_lsa->header->orig_router->name);
free(adj_lsa->header->orig_router);
free(adj_lsa->header->orig_time);
@@ -741,11 +779,11 @@ build_adj_lsa(struct alsa * adj_lsa)
if( !nlsr->is_send_lsdb_interest_scheduled )
/*if( !nlsr->is_send_lsdb_interest_scheduled )
{
nlsr->event_send_lsdb_interest= ccn_schedule_event(nlsr->sched, 1000, &send_lsdb_interest, NULL, 0);
nlsr->is_send_lsdb_interest_scheduled=1;
}
}*/
nlsr->adj_build_count++;
@@ -2021,6 +2059,21 @@ refresh_lsdb(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_eve
return 0;
}
void
write_adj_lsa_to_repo(char *repo_content_prefix, struct name_prefix *lsa_id)
{
printf("Content Preifx: %s\n",repo_content_prefix);
struct ccn_charbuf *lsa_data=ccn_charbuf_create();
get_adj_lsa_data(lsa_data,lsa_id);
printf("Name LSA Data: %s \n",ccn_charbuf_as_string(lsa_data));
write_data_to_repo(ccn_charbuf_as_string(lsa_data), repo_content_prefix);
ccn_charbuf_destroy(&lsa_data);
}
void
write_name_lsa_to_repo(char *repo_content_prefix, struct name_prefix *lsa_id)
{
+1
View File
@@ -87,5 +87,6 @@ void make_name_lsa_invalid(struct name_prefix *np,int ls_type, long int ls_id);
void write_name_lsdb_to_repo(char *slice_prefix);
void write_name_lsa_to_repo(char *repo_content_prefix, struct name_prefix *lsa_id);
void make_name_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, long int ls_id,char *orig_time,char *slice_prefix);
void write_adj_lsa_to_repo(char *repo_content_prefix, struct name_prefix *lsa_id);
#endif
+2 -2
View File
@@ -731,14 +731,14 @@ process_incoming_content(struct ccn_closure *selfp, struct ccn_upcall_info* info
{
process_incoming_content_info(selfp,info);
}
if(!strcmp((char *)comp_ptr1,"lsdb"))
/*if(!strcmp((char *)comp_ptr1,"lsdb"))
{
process_incoming_content_lsdb(selfp,info);
}
if(!strcmp((char *)comp_ptr1,"lsa"))
{
process_incoming_content_lsa(selfp,info);
}
}*/
}
+147 -24
View File
@@ -28,6 +28,7 @@
#include "nlsr.h"
#include "nlsr_sync.h"
#include "nlsr_lsdb.h"
#include "utility.h"
int
get_lsa_position(struct ccn_charbuf * ccnb, struct ccn_indexbuf *comps)
@@ -173,6 +174,101 @@ get_content_by_content_name(char *content_name)
return (char *)ptr;
}
void
process_incoming_sync_content_lsa(char *content_data)
{
if ( nlsr->debugging )
printf("process_incoming_sync_content_lsa called \n");
//if ( nlsr->detailed_logging )
//writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_content_lsa called \n");
char *sep="|";
char *rem;
char *orig_router;
char *orl;
int orig_router_length;
char *lst;
int ls_type;
char *lsid;
long int ls_id;
char *isvld;
int isValid;
char *num_link;
int no_link;
char *np;
char *np_length;
int name_length;
char *data;
char *orig_time;
if ( nlsr->debugging )
printf("LSA Data \n");
//if ( nlsr->detailed_logging )
// writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Data\n");
if( strlen(content_data ) > 0 )
{
orig_router=strtok_r((char *)content_data,sep,&rem);
orl=strtok_r(NULL,sep,&rem);
orig_router_length=atoi(orl);
if ( nlsr->debugging )
{
printf(" Orig Router Name : %s\n",orig_router);
printf(" Orig Router Length: %d\n",orig_router_length);
}
lst=strtok_r(NULL,sep,&rem);
ls_type=atoi(lst);
if ( nlsr->debugging )
printf(" LS Type : %d\n",ls_type);
if ( ls_type == LS_TYPE_NAME )
{
lsid=strtok_r(NULL,sep,&rem);
ls_id=atoi(lsid);
orig_time=strtok_r(NULL,sep,&rem);
isvld=strtok_r(NULL,sep,&rem);
isValid=atoi(isvld);
np=strtok_r(NULL,sep,&rem);
np_length=strtok_r(NULL,sep,&rem);
name_length=atoi(np_length);
if ( nlsr->debugging )
{
printf(" LS ID : %ld\n",ls_id);
printf(" isValid : %d\n",isValid);
printf(" Name Prefix : %s\n",np);
printf(" Orig Time : %s\n",orig_time);
printf(" Name Prefix length: %d\n",name_length);
}
build_and_install_others_name_lsa(orig_router,ls_type,ls_id,orig_time,isValid,np);
print_name_lsdb();
}
else if ( ls_type == LS_TYPE_ADJ )
{
orig_time=strtok_r(NULL,sep,&rem);
num_link=strtok_r(NULL,sep,&rem);
no_link=atoi(num_link);
data=rem;
if ( nlsr->debugging )
{
printf(" No Link : %d\n",no_link);
printf(" Data : %s\n",data);
}
build_and_install_others_adj_lsa(orig_router,ls_type,orig_time,no_link,data);
}
}
}
void
process_content_from_sync(struct ccn_charbuf *content_name, struct ccn_indexbuf *components)
{
@@ -186,6 +282,10 @@ process_content_from_sync(struct ccn_charbuf *content_name, struct ccn_indexbuf
int ls_type;
long int ls_id=0;
char *time_stamp=(char *)malloc(20);
memset(time_stamp,0,20);
get_current_timestamp_micro(time_stamp);
struct ccn_charbuf *uri = ccn_charbuf_create();
ccn_uri_append(uri, content_name->buf, content_name->length, 0);
@@ -195,28 +295,40 @@ process_content_from_sync(struct ccn_charbuf *content_name, struct ccn_indexbuf
res=ccn_name_comp_get(content_name->buf, components,lsa_position+1,&lst, &comp_size);
printf("Ls Type: %s\n",lst);
//printf("Ls Type: %s\n",lst);
ls_type=atoi((char *)lst);
if(ls_type == LS_TYPE_NAME)
{
res=ccn_name_comp_get(content_name->buf, components,lsa_position+2,&lsid, &comp_size);
ls_id=atoi((char *)lsid);
res=ccn_name_comp_get(content_name->buf, components,lsa_position+3,&origtime, &comp_size);
get_name_part(orig_router,content_name,components,3);
printf("Ls ID: %s\nOrig Time: %s\nOrig Router: %s\n",lsid,origtime,orig_router->name);
int is_new_name_lsa=check_is_new_name_lsa(orig_router->name,(char *)lst,(char *)lsid,(char *)origtime);
if ( is_new_name_lsa == 1 )
int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
//printf("Ls ID: %s\nOrig Time: %s\nOrig Router: %s\n",lsid,origtime,orig_router->name);
if ( (strcmp((char *)orig_router,nlsr->router_name) == 0 && lsa_life_time < nlsr->lsa_refresh_time) || (strcmp((char *)orig_router,nlsr->router_name) != 0 && lsa_life_time < nlsr->router_dead_interval) )
{
printf("New NAME LSA.....\n");
char *content_data=get_content_by_content_name(ccn_charbuf_as_string(uri));
printf("Content Data: %s \n",content_data);
int is_new_name_lsa=check_is_new_name_lsa(orig_router->name,(char *)lst,(char *)lsid,(char *)origtime);
if ( is_new_name_lsa == 1 )
{
printf("New NAME LSA.....\n");
char *content_data=get_content_by_content_name(ccn_charbuf_as_string(uri));
printf("Content Data: %s \n",content_data);
process_incoming_sync_content_lsa(content_data);
}
else
{
printf("Name LSA / Newer Name LSA already xists in LSDB\n");
char *content_data=get_content_by_content_name(ccn_charbuf_as_string(uri));
printf("Content Data: %s \n",content_data);
}
}
else
{
printf("Name LSA / Newer Name LSA already xists in LSDB\n");
char *content_data=get_content_by_content_name(ccn_charbuf_as_string(uri));
printf("Content Data: %s \n",content_data);
printf("Lsa is older than Router LSA refresh time/ Dead Interval\n");
}
}
else if(ls_type == LS_TYPE_ADJ)
@@ -224,22 +336,33 @@ process_content_from_sync(struct ccn_charbuf *content_name, struct ccn_indexbuf
res=ccn_name_comp_get(content_name->buf, components,lsa_position+2,&origtime, &comp_size);
get_name_part(orig_router,content_name,components,2);
printf("Orig Time: %s\nOrig Router: %s\n",origtime,orig_router->name);
int is_new_adj_lsa=check_is_new_adj_lsa(orig_router->name,(char *)lst,(char *)origtime);
if ( is_new_adj_lsa == 1 )
{
printf("New Adj LSA.....\n");
char *content_data=get_content_by_content_name(ccn_charbuf_as_string(uri));
printf("Content Data: %s \n",content_data);
}
else
{
printf("Adj LSA / Newer Adj LSA already exists in LSDB\n");
char *content_data=get_content_by_content_name(ccn_charbuf_as_string(uri));
printf("Content Data: %s \n",content_data);
}
int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
//printf("Ls ID: %s\nOrig Time: %s\nOrig Router: %s\n",lsid,origtime,orig_router->name);
if ( (strcmp((char *)orig_router,nlsr->router_name) == 0 && lsa_life_time < nlsr->lsa_refresh_time) || (strcmp((char *)orig_router,nlsr->router_name) != 0 && lsa_life_time < nlsr->router_dead_interval) )
{
int is_new_adj_lsa=check_is_new_adj_lsa(orig_router->name,(char *)lst,(char *)origtime);
if ( is_new_adj_lsa == 1 )
{
printf("New Adj LSA.....\n");
char *content_data=get_content_by_content_name(ccn_charbuf_as_string(uri));
printf("Content Data: %s \n",content_data);
process_incoming_sync_content_lsa(content_data);
}
else
{
printf("Adj LSA / Newer Adj LSA already exists in LSDB\n");
char *content_data=get_content_by_content_name(ccn_charbuf_as_string(uri));
printf("Content Data: %s \n",content_data);
}
}
else
{
printf("Lsa is older than Router LSA refresh time/ Dead Interval\n");
}
}
ccn_charbuf_destroy(&uri);