Merge branch 'master' of github.com:NDN-Routing/NLSR0.0
diff --git a/Makefile b/Makefile
index 3236fe6..f9d826c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,20 +1,20 @@
-CC = cc
-CFLAGS = -g -Wall -Wpointer-arith -Wreturn-type -Wstrict-prototypes
-LIBS = -lccn -lcrypto
+CC = gcc
+CFLAGS = -Wall -gdwarf-2 -g3
+LIBS = -lccn -lccnsync -lcrypto
PROGRAMS = nlsrc nlsr
INSTALL_PATH=/usr/local/bin/
-NLSR_SRCS=nlsr.c nlsr_ndn.c nlsr_npl.c nlsr_adl.c nlsr_lsdb.c nlsr_route.c nlsr_npt.c nlsr_fib.c utility.c
+NLSR_SRCS=nlsr.c nlsr_ndn.c nlsr_npl.c nlsr_adl.c nlsr_lsdb.c nlsr_route.c nlsr_npt.c nlsr_fib.c nlsr_sync.c nlsr_face.c utility.c
NLSRC_SRCS=nlsrc.c
all: $(PROGRAMS)
nlsr: $(NLSR_SRCS)
- $(CC) $(CFLAGS) $(NLSR_SRCS) -o nlsr $(LIBS) -lm
+ $(CC) $(CFLAGS) $(NLSR_SRCS) $(LIBS) -lm -o nlsr
nlsrc: $(NLSRC_SRCS)
- $(CC) $(CFLAGS) $(NLSRC_SRCS) -o nlsrc $(LIBS) -lm
+ $(CC) $(CFLAGS) $(NLSRC_SRCS) $(LIBS) -lm -o nlsrc
install: $(PROGRAMS)
cp $(PROGRAMS) $(INSTALL_PATH)
diff --git a/NLSR_Timing_Diagram.odg b/NLSR_Timing_Diagram.odg
index 41e9837..820b307 100644
--- a/NLSR_Timing_Diagram.odg
+++ b/NLSR_Timing_Diagram.odg
Binary files differ
diff --git a/nlsr-sync-0.0/docs/FigureSource.odg b/docs/FigureSource.odg
similarity index 100%
rename from nlsr-sync-0.0/docs/FigureSource.odg
rename to docs/FigureSource.odg
Binary files differ
diff --git a/nlsr-sync-0.0/docs/NLSR Sync-v1.pptx b/docs/NLSR Sync-v1.pptx
similarity index 100%
rename from nlsr-sync-0.0/docs/NLSR Sync-v1.pptx
rename to docs/NLSR Sync-v1.pptx
Binary files differ
diff --git a/nlsr-sync-0.0/docs/NLSR Sync.pptx b/docs/NLSR Sync.pptx
similarity index 100%
rename from nlsr-sync-0.0/docs/NLSR Sync.pptx
rename to docs/NLSR Sync.pptx
Binary files differ
diff --git a/docs/NLSR_Design_Doc.odg b/docs/NLSR_Design_Doc.odg
new file mode 100644
index 0000000..bd38d2c
--- /dev/null
+++ b/docs/NLSR_Design_Doc.odg
Binary files differ
diff --git a/nlsr-sync-0.0/docs/NLSR_Manual.doc b/docs/NLSR_Manual.doc
similarity index 60%
rename from nlsr-sync-0.0/docs/NLSR_Manual.doc
rename to docs/NLSR_Manual.doc
index aa63d0c..9449934 100644
--- a/nlsr-sync-0.0/docs/NLSR_Manual.doc
+++ b/docs/NLSR_Manual.doc
Binary files differ
diff --git a/macbook.conf b/macbook.conf
index 19b6c30..52e84f7 100644
--- a/macbook.conf
+++ b/macbook.conf
@@ -1,17 +1,25 @@
#----configuration file for macbook----------
#
-router-name /ndn/memphis.edu/netlab/macbook/
-ccnneighbor /ndn/memphis.edu/dunhall/castor face9
-ccnneighbor /ndn/memphis.edu/pollux face38
-ccnname /ndn/memphis.edu/patterson
-ccnname /ndn/memphis.edu/houston/
+router-name /ndn/memphis.edu/netlab/macbook
+ccnneighbor /ndn/memphis.edu/cs/maia
+ccnneighbor /ndn/memphis.edu/cs/mira
+ccnneighbor /ndn/memphis.edu/cs/castor
+ccnneighbor /ndn/memphis.edu/cs/pollux 141.225.11.132
+ccnname /ndn/memphis.edu/macbook/patterson
+ccnname /ndn/memphis.edu/macbook/houston/
#------lsdb-synch-interval-----
-lsdb-synch-interval 350
+#lsdb-synch-interval 350
interest-retry 2
interest-resend-time 5
lsa-refresh-time 600
router-dead-interval 900
-multi-path-face-num 2
-#debug on
+max_faces_per_prefix 1
+debug on
+#hyperbolic-routing on
+hyperbolic-cordinate 1234.0 0.875
+tunnel-type udp
+
+topo-prefix /ndn/routing/nlsr/
+slice-prefix /ndn/routing/nlsr/LSA
logdir /Users/akmhoque/NLSR2.0
diff --git a/nlsr-sync-0.0/1 b/nlsr-sync-0.0/1
deleted file mode 100755
index dfc274e..0000000
--- a/nlsr-sync-0.0/1
+++ /dev/null
@@ -1,8 +0,0 @@
-router-name /ndn/memphis.edu/netlab/macbook
-ccnneighbor /ndn/memphis.edu/dunhall/castor face9
-ccnneighbor /ndn/memphis.edu/joneshall/mira face11
-ccnname /ndn/memphis.edu/patterson
-ccnname /ndn/memphis.edu/houston
-lsdb-synch-interval 350
-interest-retry 4
-interest-resend-time 5
diff --git a/nlsr-sync-0.0/Makefile b/nlsr-sync-0.0/Makefile
deleted file mode 100755
index 313a3ac..0000000
--- a/nlsr-sync-0.0/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-CC = gcc
-CFLAGS = -g -Wall -gdwarf-2 -g3
-LIBS = -lccn -lccnsync -lcrypto
-
-PROGRAMS = nlsrc nlsr
-INSTALL_PATH=/usr/local/bin/
-
-NLSR_SRCS=nlsr.c nlsr_ndn.c nlsr_npl.c nlsr_adl.c nlsr_lsdb.c nlsr_route.c nlsr_npt.c nlsr_fib.c nlsr_sync.c nlsr_face.c utility.c
-NLSRC_SRCS=nlsrc.c
-
-all: $(PROGRAMS)
-
-nlsr: $(NLSR_SRCS)
- $(CC) $(CFLAGS) $(NLSR_SRCS) $(LIBS) -lm -o nlsr
-
-nlsrc: $(NLSRC_SRCS)
- $(CC) $(CFLAGS) $(NLSRC_SRCS) $(LIBS) -lm -o nlsrc
-
-install: $(PROGRAMS)
- cp $(PROGRAMS) $(INSTALL_PATH)
- cd $(INSTALL_PATH); chown root:0 $(PROGRAMS); chmod 755 $(PROGRAMS)
-
-uninstall:
- cd $(INSTALL_PATH); rm -f $(PROGRAMS)
-
-clean:
- rm -f *.o
- rm -f $(PROGRAMS)
- rm -rf *.dSYM
-
-.c.o:
- $(CC) $(CFLAGS) -c $<
-
-.PHONY: all clean
diff --git a/nlsr-sync-0.0/NLSR_Design.docx b/nlsr-sync-0.0/NLSR_Design.docx
deleted file mode 100755
index c9070c6..0000000
--- a/nlsr-sync-0.0/NLSR_Design.docx
+++ /dev/null
Binary files differ
diff --git a/nlsr-sync-0.0/NLSR_Timing_Diagram.odg b/nlsr-sync-0.0/NLSR_Timing_Diagram.odg
deleted file mode 100755
index 820b307..0000000
--- a/nlsr-sync-0.0/NLSR_Timing_Diagram.odg
+++ /dev/null
Binary files differ
diff --git a/nlsr-sync-0.0/README b/nlsr-sync-0.0/README
deleted file mode 100644
index bd4039a..0000000
--- a/nlsr-sync-0.0/README
+++ /dev/null
@@ -1,4 +0,0 @@
-Only experimental code here for nlsr using parc's sync implementation.
-It's not a working version, so don't rely on it at all.
-This README will be updated once the code is in working condition.
-
diff --git a/nlsr-sync-0.0/README.md b/nlsr-sync-0.0/README.md
deleted file mode 100755
index 18880a1..0000000
--- a/nlsr-sync-0.0/README.md
+++ /dev/null
@@ -1,111 +0,0 @@
-NLSR0.0
-=======
-
-Named-data Link State Routing ( NLSR ):
- NLSR is routing protocol caluclate routing table dynamically and manipulate
-ccnd forwarding information base (FIB) based on routing table.
-
-1. Download:
- Check out the code from the github by following
-git://github.com/NDN-Routing/NLSR0.0.git
-
-2. Installation:
- For installation of NLSR you must need to have ccnd installed. Go to NLSR0.0.
-Then make it and install by following
-
-$make
-$sudo make install
-
-3. Configuring NLSR:
- For the explanation of configuring NLSR, we will consider following network topology.
-
-
- ---------
- | |
- | | /ndn/memphis.edu/castor
- ---------
- face9/ \ face11
- / \
- / \
- / \
- face7/ \ face10
- --------- --------- ---------
- | |face8 face11 | |face13 face7| |
- | |---------------| |--------------------| |
- --------- --------- ---------
- -/ndn/memphis.edu/pollux /ndn/memphis.edu/mira /ndn/memphis.edu/sirius
-
-
-3.1 Creating faces for neighbors
- For configuring of NLSR first system admin first need to create faces for the neighbors.
-For router having router-name /ndn/memphis.edu/castor, system admin need to create two faces for
-neighbors routers /ndn/memphis.edu/pollux and /ndn/memphis.edu/mira. By ccndc utility one can
-create face as below
-
-$ccndc add /ndn/memphis.edu/pollux udp pollux.cs.memphis.edu
-$ccndc add /ndn/memphis.edu/mira udp mira.cs.memphis.edu
-
-Let us assume that that face id for /ndn/memphis.edu/pollux is 9 and /ndn/memphis.edu/mira is 11.
-
-3.2 Configuration Commands
-3.2.1 router-name /name/prefix/of/router
- router-name commands assigns name of the router. Router-name is unique in the network and
-maintained by name management. This is mandatory configuration command.
-
-3.2.2 ccnneighbor /name/prefix/of/neighbor/router faceX.
- By this command router configures neighboring router. X is integer and must be precedeed
-by "face". faceX is the connecting face for that neighbors.
-
-3.2.3 ccnname /name/prefix/to/be/advertised
- With this configuration command router advertise name prefix
-
-3.2.4 lsdb-synch-interval secs
- its the time interval after which neighbors will synchronize Link State Database. Default
-value is 300.
-
-3.2.5 interest-retry tries
- its number of tries router will try if interest is timed out. Defualt value is 3.
-
-3.2.6 interest-resend-time secs
- its the amount of time after which interest for a content will timed out. Defualt value
-is 15.
-
-3.2.7 lsa-refresh-time secs
- its the amount of time after which router will regenerate its own LSDB and regenerate
-every LSA. Default value is 1800.
-
-3.2.8 router-dead-interval secs
- its the amounnt of time after which a router will consider its neighbor dead if it does
-not hear anything from the neighbor. Default value 3600.
-
-3.2.9 multi-path-face-num n
- with this command one activate to do multi-path routing. If n is greater than 1 then
-multi-path is triggered on and n faces will be added in ccnd fib after routing table calculation.
-Default value is 0 and then NLSR perform single path routing.
-
-3.2.10 logdir path/to/log/dir
- By this command one can configure where NLSR will write logfiles. By default NLSR will
-write log file to /home/nlsrLog/ directory.
-
-3.3 Sample configuration file
- Let assume that router /ndn/memphis.edu/castor wants to advertise two names
-/ndn/memphis.edu/cslab/netlab and /ndn/memphis.edu/cslab/wisemanet. Configuration file for
-/ndn/memphis.edu/castor will look like below
-
-!-----Configuration file starts here
-
-router-name /ndn/memphis.edu/castor
-ccnneighbor /ndn/memphis.edu/mira face10
-ccnneighbor /ndn/memphis.edu/pollux face9
-ccnname /ndn/memphis.edu/cslab/netlab
-ccnname /ndn/memphis.edu/cslab/wisemanet
-
-lsdb-synch-interval 350
-interest-retry 3
-interest-resend-time 10
-lsa-refresh-time 1800
-router-dead-interval 3600
-multi-path-face-num 2
-logdir /home/nlsrLog/
-
-!-----Configuration file ends here
diff --git a/nlsr-sync-0.0/docs/NLSR_Design_Doc.odg b/nlsr-sync-0.0/docs/NLSR_Design_Doc.odg
deleted file mode 100644
index 6dba61e..0000000
--- a/nlsr-sync-0.0/docs/NLSR_Design_Doc.odg
+++ /dev/null
Binary files differ
diff --git a/nlsr-sync-0.0/macbook.conf b/nlsr-sync-0.0/macbook.conf
deleted file mode 100755
index d29553f..0000000
--- a/nlsr-sync-0.0/macbook.conf
+++ /dev/null
@@ -1,24 +0,0 @@
-#----configuration file for macbook----------
-#
-router-name /ndn/memphis.edu/netlab/macbook
-ccnneighbor /ndn/memphis.edu/cs/maia
-ccnneighbor /ndn/memphis.edu/cs/mira
-ccnneighbor /ndn/memphis.edu/cs/castor
-ccnname /ndn/memphis.edu/macbook/patterson
-ccnname /ndn/memphis.edu/macbook/houston/
-#------lsdb-synch-interval-----
-lsdb-synch-interval 350
-interest-retry 2
-interest-resend-time 5
-lsa-refresh-time 600
-router-dead-interval 900
-multi-path-face-num 2
-debug on
-hyperbolic-routing on
-hyperbolic-cordinate 1234.0 0.875
-tunnel-type tcp
-
-topo-prefix /ndn/routing/nlsr/
-slice-prefix /ndn/routing/nlsr/LSA
-
-logdir /Users/akmhoque/NLSR2.0
diff --git a/nlsr-sync-0.0/nlsr.c b/nlsr-sync-0.0/nlsr.c
deleted file mode 100755
index 14244af..0000000
--- a/nlsr-sync-0.0/nlsr.c
+++ /dev/null
@@ -1,1370 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-#include <assert.h>
-#include <sys/types.h>
-#include <signal.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <ccn/ccn.h>
-#include <ccn/uri.h>
-#include <ccn/keystore.h>
-#include <ccn/signing.h>
-#include <ccn/schedule.h>
-#include <ccn/hashtb.h>
-#include <ccn/sync.h>
-#include <ccn/seqwriter.h>
-
-#include "nlsr.h"
-#include "nlsr_ndn.h"
-#include "nlsr_lsdb.h"
-#include "utility.h"
-#include "nlsr_npl.h"
-#include "nlsr_adl.h"
-#include "nlsr_npt.h"
-#include "nlsr_route.h"
-#include "nlsr_sync.h"
-#include "nlsr_face.h"
-#include "nlsr_fib.h"
-
-
-#define ON_ERROR_DESTROY(resval) \
-{ \
- if ((resval) < 0) { \
- nlsr_destroy(); \
- exit(1);\
- } \
-}
-
-
-#define ON_ERROR_EXIT(resval) \
-{ \
- if ((resval) < 0) { \
- exit(1); \
- } \
-}
-
-struct option longopts[] =
-{
- { "daemon", no_argument, NULL, 'd'},
- { "config_file", required_argument, NULL, 'f'},
- { "api_port", required_argument, NULL, 'p'},
- { "help", no_argument, NULL, 'h'},
- { 0 }
-};
-
-static int
-usage(char *progname)
-{
-
- printf("Usage: %s [OPTIONS...]\n\
- NDN routing....\n\
- -d, --daemon Run in daemon mode\n\
- -f, --config_file Specify configuration file name\n\
- -p, --api_port port where api client will connect\n\
- -h, --help Display this help message\n", progname);
-
- exit(1);
-}
-
-void ndn_rtr_gettime(const struct ccn_gettime *self, struct ccn_timeval *result)
-{
- struct timeval now = {0};
- gettimeofday(&now, 0);
- result->s = now.tv_sec;
- result->micros = now.tv_usec;
-}
-
-static struct ccn_gettime ndn_rtr_ticker = {
- "timer",
- &ndn_rtr_gettime,
- 1000000,
- NULL
-};
-
-void
-nlsr_lock(void)
-{
- nlsr->semaphor=NLSR_LOCKED;
-}
-
-void
-nlsr_unlock(void)
-{
- nlsr->semaphor=NLSR_UNLOCKED;
-}
-
-void
-nlsr_stop_signal_handler(int sig)
-{
- signal(sig, SIG_IGN);
- nlsr_destroy();
- exit(0);
-}
-
-void
-daemonize_nlsr(void)
-{
- int ret;
- pid_t process_id = 0;
- pid_t sid = 0;
- process_id = fork();
- if (process_id < 0)
- {
- printf("Daemonization failed!\n");
- ON_ERROR_DESTROY(process_id);
- }
- if (process_id > 0)
- {
- printf("Process daemonized. Process id: %d \n", process_id);
- ret=process_id;
- exit(0);
- }
-
- umask(0);
- sid = setsid();
- if(sid < 0)
- {
- ON_ERROR_DESTROY(sid);
- }
-
- chdir("/");
- close(STDIN_FILENO);
- close(STDOUT_FILENO);
- close(STDERR_FILENO);
-}
-
-void
-process_command_ccnneighbor(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( ccnneighbor router_name faceX)\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *rtr_name;
- //char *face;
-
- rtr_name=strtok_r(command,sep,&rem);
- if(rtr_name==NULL)
- {
- printf(" Wrong Command Format ( ccnneighbor router_name faceX)\n");
- return;
- }
-
- /*face=strtok_r(NULL,sep,&rem);
- if(face==NULL)
- {
- printf(" Wrong Command Format ( ccnneighbor router_name faceX)\n");
- return;
- }
-
- printf("Router: %s face: %s\n",rtr_name,face);
- int face_id;
- int res;
- res=sscanf(face,"face%d",&face_id);
-
- if(res != 1 )
- {
- printf(" Wrong Command Format ( ccnneighbor router_name faceX) where X is integer\n");
- return;
- }*/
-
- if ( rtr_name[strlen(rtr_name)-1] == '/' )
- {
- rtr_name[strlen(rtr_name)-1]='\0';
- }
- struct name_prefix *nbr=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- nbr->name=(char *)malloc(strlen(rtr_name)+1);
- memset(nbr->name,0,strlen(rtr_name)+1);
- memcpy(nbr->name,rtr_name,strlen(rtr_name)+1);
- nbr->length=strlen(rtr_name)+1;
-
- //add_nbr_to_adl(nbr,face_id);
-
- struct name_prefix *nbr_name=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- get_host_name_from_command_string(nbr_name,nbr->name,0);
- printf("Hostname of neighbor: %s ",nbr_name->name);
-
-
- char *ip_addr=(char *)malloc(13);
- memset(ip_addr,0,13);
- get_ip_from_hostname_02(nbr_name->name,ip_addr);
- printf("IP Address: %s \n",ip_addr);
-
- add_nbr_to_adl(nbr,0,ip_addr);
-
-
- free(nbr->name);
- free(nbr);
-}
-
-void
-process_command_ccnname(char *command)
-{
-
- if(command==NULL)
- {
- printf(" Wrong Command Format ( ccnname /name/prefix)\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *name;
- name=strtok_r(command,sep,&rem);
- if(name==NULL)
- {
- printf(" Wrong Command Format ( ccnname /name/prefix/ )\n");
- return;
- }
-
- printf("Name Prefix: %s \n",name);
-
- if ( name[strlen(name)-1] == '/' )
- name[strlen(name)-1]='\0';
-
- struct name_prefix *np=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- np->name=(char *)malloc(strlen(name)+1);
- memset(np->name,0,strlen(name)+1);
- memcpy(np->name,name,strlen(name)+1);
- np->length=strlen(name)+1;
-
- add_name_to_npl(np);
-
- free(np->name);
- free(np);
-}
-
-
-void
-process_command_router_name(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( router-name /router/name )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *rtr_name;
-
- rtr_name=strtok_r(command,sep,&rem);
- if(rtr_name==NULL)
- {
- printf(" Wrong Command Format ( router-name /router/name )\n");
- return;
- }
-
-
- if ( rtr_name[strlen(rtr_name)-1] == '/' )
- rtr_name[strlen(rtr_name)-1]='\0';
-
- nlsr->router_name=(char *)malloc(strlen(rtr_name)+1);
- memset(nlsr->router_name,0,strlen(rtr_name)+1);
- memcpy(nlsr->router_name,rtr_name,strlen(rtr_name)+1);
-
-
-}
-
-void
-process_command_lsdb_synch_interval(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( lsdb-synch-interval secs )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *secs;
- long int seconds;
-
- secs=strtok_r(command,sep,&rem);
- if(secs==NULL)
- {
- printf(" Wrong Command Format ( lsdb-synch-interval secs)\n");
- return;
- }
-
- seconds=atoi(secs);
- if ( seconds >= 120 && seconds <= 3600 )
- {
- nlsr->lsdb_synch_interval=seconds;
- }
-
-}
-
-
-void
-process_command_interest_retry(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( interest-retry number )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *retry;
- long int retry_number;
-
- retry=strtok_r(command,sep,&rem);
- if(retry==NULL)
- {
- printf(" Wrong Command Format ( interest-retry number)\n");
- return;
- }
-
- retry_number=atoi(retry);
- if ( retry_number >= 1 && retry_number<=10 )
- {
- nlsr->interest_retry=retry_number;
- }
-
-}
-
-void
-process_command_interest_resend_time(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( interest-resend-time secs )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *secs;
- long int seconds;
-
- secs=strtok_r(command,sep,&rem);
- if(secs==NULL)
- {
- printf(" Wrong Command Format ( interest-resend-time secs)\n");
- return;
- }
-
- seconds=atoi(secs);
- if ( seconds <= 60 && seconds >= 1 )
- {
- nlsr->interest_resend_time=seconds;
- }
-}
-
-
-void
-process_command_lsa_refresh_time(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( lsa-refresh-time secs )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *secs;
- long int seconds;
-
- secs=strtok_r(command,sep,&rem);
- if(secs==NULL)
- {
- printf(" Wrong Command Format ( lsa-refresh-time secs)\n");
- return;
- }
-
- seconds=atoi(secs);
- if ( seconds >= 240 && seconds <= 3600 )
- {
- nlsr->lsa_refresh_time=seconds;
- }
-
-}
-
-void
-process_command_router_dead_interval(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( router-dead-interval secs )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *secs;
- long int seconds;
-
- secs=strtok_r(command,sep,&rem);
- if(secs==NULL)
- {
- printf(" Wrong Command Format ( router-dead-interval secs)\n");
- return;
- }
-
- seconds=atoi(secs);
- if ( seconds >= 360 && seconds <= 5400 )
- {
- nlsr->router_dead_interval=seconds;
- }
-
-}
-
-void
-process_command_multi_path_face_num(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( multi-path-face-num n )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *num;
- long int number;
-
- num=strtok_r(command,sep,&rem);
- if(num==NULL)
- {
- printf(" Wrong Command Format ( multi-path-face-num n)\n");
- return;
- }
-
- number=atoi(num);
- if ( number >= 0 && number <= 60 )
- {
- nlsr->multi_path_face_num=number;
- }
-
-}
-
-void
-process_command_logdir(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( logdir /path/to/logdir )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *dir;
-
- dir=strtok_r(command,sep,&rem);
- if(dir==NULL)
- {
- printf(" Wrong Command Format ( logdir /path/to/logdir/ )\n");
- return;
- }
-
- nlsr->logDir=(char *)malloc(strlen(dir)+1);
- memset(nlsr->logDir,0,strlen(dir)+1);
- memcpy(nlsr->logDir,dir,strlen(dir));
-}
-
-void
-process_command_detailed_log(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( detailed-log on/off )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *on_off;
-
- on_off=strtok_r(command,sep,&rem);
- if(on_off==NULL)
- {
- printf(" Wrong Command Format ( detailed-log on/off )\n");
- return;
- }
-
- if ( strcmp(on_off,"ON") == 0 || strcmp(on_off,"on") == 0)
- {
- nlsr->detailed_logging=1;
- }
-}
-
-void
-process_command_debug(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( debug on/off )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *on_off;
-
- on_off=strtok_r(command,sep,&rem);
- if(on_off==NULL)
- {
- printf(" Wrong Command Format ( debug on/off )\n");
- return;
- }
-
- if ( strcmp(on_off,"ON") == 0 || strcmp(on_off,"on") == 0 )
- {
- nlsr->debugging=1;
- }
-}
-
-
-void
-process_command_topo_prefix(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( topo-prefix )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *topo_prefix;
-
- topo_prefix=strtok_r(command,sep,&rem);
- if(topo_prefix==NULL)
- {
- printf(" Wrong Command Format ( topo-prefix /name/prefix )\n");
- return;
- }
- else
- {
- if( nlsr->topo_prefix != NULL)
- free(nlsr->topo_prefix);
- if ( topo_prefix[strlen(topo_prefix)-1] == '/' )
- topo_prefix[strlen(topo_prefix)-1]='\0';
-
- nlsr->topo_prefix=(char *)malloc(strlen(topo_prefix)+1);
- memset(nlsr->topo_prefix,0,strlen(topo_prefix)+1);
- puts(topo_prefix);
- memcpy(nlsr->topo_prefix,topo_prefix,strlen(topo_prefix));
-
- }
-}
-
-
-void
-process_command_slice_prefix(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( slice-prefix /name/prefix )\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *slice_prefix;
-
- slice_prefix=strtok_r(command,sep,&rem);
- if(slice_prefix==NULL)
- {
- printf(" Wrong Command Format ( slice-prefix /name/prefix )\n");
- return;
- }
- else
- {
- if ( nlsr->slice_prefix != NULL)
- free(nlsr->slice_prefix);
- if ( slice_prefix[strlen(slice_prefix)-1] == '/' )
- slice_prefix[strlen(slice_prefix)-1]='\0';
-
- nlsr->slice_prefix=(char *)malloc(strlen(slice_prefix)+1);
- memset(nlsr->slice_prefix,0,strlen(slice_prefix)+1);
- memcpy(nlsr->slice_prefix,slice_prefix,strlen(slice_prefix));
- }
-}
-
-void
-process_command_hyperbolic_routing(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( hyperbolic-routing on)\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *on_off;
-
- on_off=strtok_r(command,sep,&rem);
- if(on_off==NULL)
- {
- printf(" Wrong Command Format ( hyperbolic-routing on )\n");
- return;
- }
-
- if ( strcmp(on_off,"ON") == 0 || strcmp(on_off,"on") == 0 )
- {
- nlsr->is_hyperbolic_calc=1;
- }
-}
-
-void
-process_command_hyperbolic_cordinate(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( hyperbolic r 0 )\n");
- return;
- }
-
- char *rem;
- const char *sep=" \t\n\r";
- char *radious;
- char *theta;
-
- radious=strtok_r(command,sep,&rem);
- if (radious == NULL )
- {
- printf(" Wrong Command Format ( hyperbolic r 0 )\n");
- return;
- }
-
- theta=strtok_r(NULL,sep,&rem);
- if (theta == NULL )
- {
- printf(" Wrong Command Format ( hyperbolic r 0 )\n");
- return;
- }
-
- nlsr->cor_r=strtof(radious,NULL);
- nlsr->cor_theta=strtof(theta,NULL);
-
-}
-
-void
-process_command_tunnel_type(char *command)
-{
- if(command==NULL)
- {
- printf(" Wrong Command Format ( tunnel-type udp/tcp)\n");
- return;
- }
- char *rem;
- const char *sep=" \t\n";
- char *on_off;
-
- on_off=strtok_r(command,sep,&rem);
- if(on_off==NULL)
- {
- printf(" Wrong Command Format ( tunnel-type udp/tcp )\n");
- return;
- }
-
- if ( strcmp(on_off,"TCP") == 0 || strcmp(on_off,"tcp") == 0 )
- {
- nlsr->tunnel_type=IPPROTO_TCP;
- }
-}
-
-void
-process_conf_command(char *command)
-{
- const char *separators=" \t\n";
- char *remainder=NULL;
- char *cmd_type=NULL;
-
- if(command==NULL || strlen(command)==0 || command[0]=='!')
- return;
-
- cmd_type=strtok_r(command,separators,&remainder);
-
- if(!strcmp(cmd_type,"router-name") )
- {
- process_command_router_name(remainder);
- }
- else if(!strcmp(cmd_type,"ccnneighbor") )
- {
- process_command_ccnneighbor(remainder);
- }
- else if(!strcmp(cmd_type,"ccnname") )
- {
- process_command_ccnname(remainder);
- }
- else if(!strcmp(cmd_type,"lsdb-synch-interval") )
- {
- process_command_lsdb_synch_interval(remainder);
- }
- else if(!strcmp(cmd_type,"interest-retry") )
- {
- process_command_interest_retry(remainder);
- }
- else if(!strcmp(cmd_type,"interest-resend-time") )
- {
- process_command_interest_resend_time(remainder);
- }
- else if(!strcmp(cmd_type,"lsa-refresh-time") )
- {
- process_command_lsa_refresh_time(remainder);
- }
- else if(!strcmp(cmd_type,"router-dead-interval") )
- {
- process_command_router_dead_interval(remainder);
- }
- else if(!strcmp(cmd_type,"multi-path-face-num") )
- {
- process_command_multi_path_face_num(remainder);
- }
- else if(!strcmp(cmd_type,"logdir") )
- {
- process_command_logdir(remainder);
- }
- else if(!strcmp(cmd_type,"detailed-log") )
- {
- process_command_detailed_log(remainder);
- }
- else if(!strcmp(cmd_type,"debug") )
- {
- process_command_debug(remainder);
- }
- else if(!strcmp(cmd_type,"topo-prefix") )
- {
- process_command_topo_prefix(remainder);
- }
- else if(!strcmp(cmd_type,"slice-prefix") )
- {
- process_command_slice_prefix(remainder);
- }
- else if(!strcmp(cmd_type,"hyperbolic-cordinate") )
- {
- process_command_hyperbolic_cordinate(remainder);
- }
- else if(!strcmp(cmd_type,"hyperbolic-routing") )
- {
- process_command_hyperbolic_routing(remainder);
- }
- else if(!strcmp(cmd_type,"tunnel-type") )
- {
- process_command_tunnel_type(remainder);
- }
- else
- {
- printf("Wrong configuration Command %s \n",cmd_type);
- }
-}
-
-
-int
-readConfigFile(const char *filename)
-{
- FILE *cfg;
- char buf[1024];
- int len;
-
- cfg=fopen(filename, "r");
-
- if(cfg == NULL)
- {
- printf("\nConfiguration File does not exists\n");
- exit(1);
- }
-
- while(fgets((char *)buf, sizeof(buf), cfg))
- {
- len=strlen(buf);
- if(buf[len-1] == '\n')
- buf[len-1]='\0';
- if ( buf[0] != '#' && buf[0] != '!')
- process_conf_command(buf);
- }
-
- fclose(cfg);
-
- return 0;
-}
-
-
-void
-add_faces_for_nbrs(void)
-{
- int i, adl_element;
- struct ndn_neighbor *nbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- adl_element=hashtb_n(nlsr->adl);
-
- for(i=0;i<adl_element;i++)
- {
- nbr=e->data;
- int face_id=add_ccn_face(nlsr->ccn, (const char *)nbr->neighbor->name, (const char *)nbr->ip_address, 9695,nlsr->tunnel_type);
- update_face_to_adl_for_nbr(nbr->neighbor->name, face_id);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->topo_prefix, OP_REG, face_id);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-}
-
-void
-destroy_faces_for_nbrs(void)
-{
- int i, adl_element;
- struct ndn_neighbor *nbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- adl_element=hashtb_n(nlsr->adl);
-
- for(i=0;i<adl_element;i++)
- {
- nbr=e->data;
- if ( nbr->face > 0 )
- {
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->topo_prefix, OP_UNREG, nbr->face);
- add_delete_ccn_face_by_face_id(nlsr->ccn,(const char *)nbr->neighbor->name,OP_UNREG,nbr->face);
- }
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-}
-
-char *
-process_api_client_command(char *command)
-{
- char *msg;
- msg=(char *)malloc(100);
- memset(msg,0,100);
-
- const char *sep=" \t\n";
- char *rem=NULL;
- char *cmd_type=NULL;
- char *op_type=NULL;
- char *name=NULL;
- char *face=NULL;
- int face_id;
- int res;
-
- op_type=strtok_r(command,sep,&rem);
- cmd_type=strtok_r(NULL,sep,&rem);
- name=strtok_r(NULL,sep,&rem);
- if ( name[strlen(name)-1] == '/' )
- name[strlen(name)-1]='\0';
-
- struct name_prefix *np=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- np->name=(char *)malloc(strlen(name)+1);
- memset(np->name,0,strlen(name)+1);
- memcpy(np->name,name,strlen(name)+1);
- np->length=strlen(name)+1;
-
- if ( strcmp(cmd_type,"name")!= 0 )
- {
- face=strtok_r(NULL,sep,&rem);
- sscanf(face,"face%d",&face_id);
- }
-
- if ( strcmp(cmd_type,"name")== 0 )
- {
- if ( strcmp(op_type,"del") == 0 )
- {
- res=does_name_exist_in_npl(np);
- if ( res == 0)
- {
- sprintf(msg,"Name %s does not exist !!",name);
- }
- else
- {
- long int ls_id=get_lsa_id_from_npl(np);
- if ( ls_id != 0 )
- {
- make_name_lsa_invalid(np,LS_TYPE_NAME,ls_id);
- sprintf(msg,"Name %s has been deleted and Advertised.",name);
- }
- else
- {
- sprintf(msg,"Name %s does not have an Name LSA yet !!",name);
- }
- }
- }
- else if ( strcmp(op_type,"add") == 0 )
- {
- res=does_name_exist_in_npl(np);
- if ( res == 0)
- {
- add_name_to_npl(np);
- build_and_install_single_name_lsa(np);
- sprintf(msg,"Name %s has been added to advertise.",name);
- }
- else
- {
- sprintf(msg,"Name %s has already been advertised from this router !!",name);
- }
- }
- }
- else if ( strcmp(cmd_type,"neighbor") == 0 )
- {
- if ( strcmp(op_type,"del") == 0 )
- {
- res=is_neighbor(np->name);
- if ( res == 0)
- {
- sprintf(msg,"Neighbor %s does not exist !!",name);
- }
- else
- {
- update_adjacent_status_to_adl(np,NBR_DOWN);
- delete_nbr_from_adl(np);
- if(!nlsr->is_build_adj_lsa_sheduled)
- {
- nlsr->event_build_adj_lsa = ccn_schedule_event(nlsr->sched, 1000, &build_and_install_adj_lsa, NULL, 0);
- nlsr->is_build_adj_lsa_sheduled=1;
- }
- sprintf(msg,"Neighbor %s has been deleted from adjacency list.",name);
- }
- }
- else if ( strcmp(op_type,"add") == 0 )
- {
- res=is_neighbor(np->name);
- if ( res == 0 )
- {
- struct name_prefix *nbr_name=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- get_host_name_from_command_string(nbr_name,np->name,0);
- printf("Hostname of neighbor: %s ",nbr_name->name);
-
- char *ip_addr=(char *)malloc(13);
- memset(ip_addr,0,13);
- get_ip_from_hostname_02(nbr_name->name,ip_addr);
- printf("IP Address: %s \n",ip_addr);
- int face_id=add_ccn_face(nlsr->ccn, (const char *)nbr_name->name, (const char *)ip_addr, 9695,nlsr->tunnel_type);
- update_face_to_adl_for_nbr(nbr_name->name, face_id);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->topo_prefix, OP_REG, face_id);
-
- add_nbr_to_adl(np,face_id,ip_addr);
-
- sprintf(msg,"Neighbor %s has been added to adjacency list.",name);
-
- }
- else
- {
- sprintf(msg,"Neighbor %s already exists in adjacency list.",name);
- }
- }
- }
-
-
- return msg;
-}
-
-int
-nlsr_api_server_poll(long int time_out_micro_sec, int ccn_fd)
-{
- struct timeval timeout;
- if (time_out_micro_sec< 500000 && time_out_micro_sec> 0 )
- {
- timeout.tv_sec=0;
- timeout.tv_usec=time_out_micro_sec;
- }
- else
- {
- timeout.tv_sec = 0;
- timeout.tv_usec = 500000;
- }
-
- int fd;
- int nread;
- int result;
- fd_set testfds;
- unsigned int client_len;
- int client_sockfd;
- char recv_buffer[1024];
- bzero(recv_buffer,1024);
- struct sockaddr_in client_address;
-
- testfds=nlsr->readfds;
- result = select(FD_SETSIZE, &testfds, NULL,NULL, &timeout);
-
- for(fd = 0; fd < FD_SETSIZE && result > 0; fd++)
- {
- if(FD_ISSET(fd,&testfds))
- {
- if ( fd == ccn_fd )
- {
- return 0;
- }
- else if(fd == nlsr->nlsr_api_server_sock_fd)
- {
- client_len = sizeof(client_address);
- client_sockfd = accept(nlsr->nlsr_api_server_sock_fd,(struct sockaddr *)&client_address, &client_len);
- FD_SET(client_sockfd, &nlsr->readfds);
- }
- else
- {
-
- ioctl(fd, FIONREAD, &nread);
- if(nread == 0)
- {
- close(fd);
- FD_CLR(fd, &nlsr->readfds);
- }
- else
- {
- recv(fd, recv_buffer, 1024, 0);
- printf("Received Data from NLSR API cleint: %s \n",recv_buffer);
- char *msg=process_api_client_command(recv_buffer);
- send(fd, msg, strlen(msg),0);
- free(msg);
- close(fd);
- FD_CLR(fd, &nlsr->readfds);
- }
- }
- }
- }
-
- return 0;
-}
-
-void
-nlsr_destroy( void )
-{
- if ( nlsr->debugging )
- {
- printf("Freeing Allocated Memory....\n");
- }
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Freeing Allocated Memory....\n");
- /* Destroying all face created by nlsr in CCND */
- destroy_all_face_by_nlsr();
- destroy_faces_for_nbrs();
- /* Destroying every hash table attached to each neighbor in ADL before destorying ADL */
- hashtb_destroy(&nlsr->npl);
- hashtb_destroy(&nlsr->adl);
- hashtb_destroy(&nlsr->lsdb->name_lsdb);
- hashtb_destroy(&nlsr->lsdb->adj_lsdb);
- hashtb_destroy(&nlsr->pit_alsa);
-
-
-
- hashtb_destroy(&nlsr->routing_table);
-
-
- int i, npt_element;
- struct npt_entry *ne;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- hashtb_start(nlsr->npt, e);
- npt_element=hashtb_n(nlsr->npt);
- for(i=0;i<npt_element;i++)
- {
- ne=e->data;
- hashtb_destroy(&ne->name_list);
- hashtb_destroy(&ne->face_list);
- hashtb_next(e);
- }
-
- hashtb_end(e);
- hashtb_destroy(&nlsr->npt);
-
-
- ccns_close(&nlsr->ccns, NULL, NULL);
- ccns_slice_destroy(&nlsr->slice);
-
-
-
- close(nlsr->nlsr_api_server_sock_fd);
-
- ccn_schedule_destroy(&nlsr->sched);
- ccn_destroy(&nlsr->ccn);
-
- free(nlsr->lsdb->lsdb_version);
- free(nlsr->lsdb);
- free(nlsr->router_name);
- free(nlsr);
- if ( nlsr->debugging )
- {
- printf("Finished freeing allocated memory\n");
- }
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Finished freeing allocated memory\n");
-
-}
-
-
-
-void
-init_api_server(int ccn_fd)
-{
- int server_sockfd;
- int server_len;
- struct sockaddr_in server_address;
- unsigned int yes=1;
-
- server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
-
- int flags = fcntl(server_sockfd, F_GETFL, 0);
- fcntl(server_sockfd, F_SETFL, O_NONBLOCK|flags);
-
- if (setsockopt(server_sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(yes)) < 0)
- {
- ON_ERROR_DESTROY(-1);
- }
-
- server_address.sin_family = AF_INET;
- server_address.sin_addr.s_addr = INADDR_ANY;
- server_address.sin_port = htons(nlsr->api_port);
-
- server_len = sizeof(server_address);
- bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
- listen(server_sockfd, 100);
- FD_ZERO(&nlsr->readfds);
- FD_SET(server_sockfd, &nlsr->readfds);
- FD_SET(ccn_fd, &nlsr->readfds);
- nlsr->nlsr_api_server_sock_fd=server_sockfd;
-
-}
-
-int
-init_nlsr(void)
-{
- if (signal(SIGQUIT, nlsr_stop_signal_handler ) == SIG_ERR)
- {
- perror("SIGQUIT install error\n");
- return -1;
- }
- if (signal(SIGTERM, nlsr_stop_signal_handler ) == SIG_ERR)
- {
- perror("SIGTERM install error\n");
- return -1;
- }
- if (signal(SIGINT, nlsr_stop_signal_handler ) == SIG_ERR)
- {
- perror("SIGTERM install error\n");
- return -1;
- }
-
- nlsr=(struct nlsr *)malloc(sizeof(struct nlsr));
-
- struct hashtb_param param_adl = {0};
- nlsr->adl=hashtb_create(sizeof(struct ndn_neighbor), ¶m_adl);
- struct hashtb_param param_npl = {0};
- nlsr->npl = hashtb_create(sizeof(struct name_prefix_list_entry), ¶m_npl);
- struct hashtb_param param_pit_alsa = {0};
- nlsr->pit_alsa = hashtb_create(sizeof(struct pending_interest), ¶m_pit_alsa);
- struct hashtb_param param_npt = {0};
- nlsr->npt = hashtb_create(sizeof(struct npt_entry), ¶m_npt);
- struct hashtb_param param_rte = {0};
- nlsr->routing_table = hashtb_create(sizeof(struct routing_table_entry), ¶m_rte);
-
- nlsr->in_interest.p = &incoming_interest;
- nlsr->in_content.p = &incoming_content;
-
- nlsr->lsdb=(struct linkStateDatabase *)malloc(sizeof(struct linkStateDatabase));
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
- nlsr->lsdb->lsdb_version=(char *)malloc(strlen(time_stamp)+1);
- memset(nlsr->lsdb->lsdb_version,0,strlen(time_stamp));
- free(time_stamp);
-
- struct hashtb_param param_adj_lsdb = {0};
- nlsr->lsdb->adj_lsdb = hashtb_create(sizeof(struct alsa), ¶m_adj_lsdb);
- struct hashtb_param param_name_lsdb = {0};
- nlsr->lsdb->name_lsdb = hashtb_create(sizeof(struct nlsa), ¶m_name_lsdb);
- struct hashtb_param param_cor_lsdb = {0};
- nlsr->lsdb->cor_lsdb = hashtb_create(sizeof(struct clsa), ¶m_cor_lsdb);
-
-
-
-
- nlsr->is_synch_init=1;
- nlsr->nlsa_id=0;
- nlsr->adj_build_flag=0;
- nlsr->adj_build_count=0;
- nlsr->is_build_adj_lsa_sheduled=0;
- nlsr->is_send_lsdb_interest_scheduled=0;
- nlsr->is_route_calculation_scheduled=0;
-
- nlsr->detailed_logging=0;
- nlsr->debugging=0;
-
- nlsr->lsdb_synch_interval = LSDB_SYNCH_INTERVAL;
- nlsr->interest_retry = INTEREST_RETRY;
- nlsr->interest_resend_time = INTEREST_RESEND_TIME;
- nlsr->lsa_refresh_time=LSA_REFRESH_TIME;
- nlsr->router_dead_interval=ROUTER_DEAD_INTERVAL;
- nlsr->multi_path_face_num=MULTI_PATH_FACE_NUM;
- nlsr->semaphor=NLSR_UNLOCKED;
-
- nlsr->api_port=API_PORT;
-
- nlsr->topo_prefix=(char *)malloc(strlen("/ndn/routing/nlsr")+1);
- memset(nlsr->topo_prefix,0,strlen("/ndn/routing/nlsr")+1);
- memcpy(nlsr->topo_prefix,"/ndn/routing/nlsr",strlen("/ndn/routing/nlsr"));
-
- nlsr->slice_prefix=(char *)malloc(strlen("/ndn/routing/nlsr/LSA")+1);
- memset(nlsr->slice_prefix, 0, strlen("/ndn/routing/nlsr/LSA")+1);
- memcpy(nlsr->slice_prefix,"/ndn/routing/nlsr/LSA",strlen("/ndn/routing/nlsr/LSA"));
-
- nlsr->is_hyperbolic_calc=0;
- nlsr->cor_r=-1.0;
- nlsr->cor_theta=-1.0;
-
- nlsr->tunnel_type=IPPROTO_UDP;
-
- return 0;
-}
-
-
-int
-main(int argc, char *argv[])
-{
- int res, ret;
- char *config_file;
- int daemon_mode=0;
- int port=0;
-
-
-
- while ((res = getopt_long(argc, argv, "df:p:h", longopts, 0)) != -1)
- {
- switch (res)
- {
- case 'd':
- daemon_mode = 1;
- break;
- case 'f':
- config_file = optarg;
- break;
- case 'p':
- port = atoi(optarg);
- break;
- case 'h':
- default:
- usage(argv[0]);
- }
- }
-
- ret=init_nlsr();
- ON_ERROR_EXIT(ret);
-
- if ( port !=0 )
- nlsr->api_port=port;
-
- readConfigFile(config_file);
-
- if ( nlsr->is_hyperbolic_calc == 1 && (nlsr->cor_r == -1.0 && nlsr->cor_theta== -1.0) )
- {
- fprintf(stderr,"Hyperbolic codinate has not been defined :(\n");
- ON_ERROR_DESTROY(-1);
- }
- print_adjacent_from_adl();
-
- if ( daemon_mode == 1 )
- {
- nlsr->debugging=0;
- daemonize_nlsr();
- }
-
- startLogging(nlsr->logDir);
-
- nlsr->ccn=ccn_create();
- int ccn_fd=ccn_connect(nlsr->ccn, NULL);
- if(ccn_fd == -1)
- {
- fprintf(stderr,"Could not connect to ccnd\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Could not connect to ccnd\n");
- ON_ERROR_DESTROY(-1);
- }
-
- init_api_server(ccn_fd);
-
- res=create_sync_slice(nlsr->topo_prefix, nlsr->slice_prefix);
- if(res<0)
- {
- fprintf(stderr, "Can not create slice for prefix %s\n",nlsr->slice_prefix);
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Can not create slice for prefix %s\n",nlsr->slice_prefix);
- ON_ERROR_DESTROY(res);
- }
- struct ccn_charbuf *router_prefix;
- router_prefix=ccn_charbuf_create();
- res=ccn_name_from_uri(router_prefix,nlsr->router_name);
- if(res<0)
- {
- fprintf(stderr, "Bad ccn URI: %s\n",nlsr->router_name);
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Bad ccn URI: %s\n",nlsr->router_name);
- ON_ERROR_DESTROY(res);
- }
-
- ccn_name_append_str(router_prefix,"nlsr");
- nlsr->in_interest.data=nlsr->router_name;
- res=ccn_set_interest_filter(nlsr->ccn,router_prefix,&nlsr->in_interest);
- if ( res < 0 )
- {
- fprintf(stderr,"Failed to register interest for router\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Failed to register interest for router\n");
- ON_ERROR_DESTROY(res);
- }
- ccn_charbuf_destroy(&router_prefix);
-
- if ( nlsr->debugging )
- printf("Router Name : %s\n",nlsr->router_name);
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Router Name : %s\n",nlsr->router_name);
- if ( nlsr->debugging )
- printf("lsdb_version: %s\n",nlsr->lsdb->lsdb_version);
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"lsdb_version: %s\n",nlsr->lsdb->lsdb_version);
-
- add_faces_for_nbrs();
- print_name_prefix_from_npl();
- print_adjacent_from_adl();
- build_and_install_name_lsas();
-
- sync_monitor(nlsr->topo_prefix,nlsr->slice_prefix);
-
-
- print_name_lsdb();
- build_and_install_cor_lsa();
- write_name_lsdb_to_repo(nlsr->slice_prefix);
-
- 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);
-
-
- while(1)
- {
- if ( nlsr->semaphor == NLSR_UNLOCKED )
- {
- if( nlsr->sched != NULL )
- {
- long int micro_sec=ccn_schedule_run(nlsr->sched);
- res=nlsr_api_server_poll(micro_sec,ccn_fd);
- ON_ERROR_DESTROY(res);
- }
- if(nlsr->ccn != NULL)
- {
- res = ccn_run(nlsr->ccn, 1);
- }
- if (!(nlsr->sched && nlsr->ccn))
- {
- break;
- }
- }
-
- }
-
-
- return 0;
-}
-
diff --git a/nlsr-sync-0.0/nlsr.conf b/nlsr-sync-0.0/nlsr.conf
deleted file mode 100755
index ced844f..0000000
--- a/nlsr-sync-0.0/nlsr.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-router-name /ndn/memphis.edu/netlab/macbook
-ccnneighbor /ndn/memphis.edu/netlab/pollux face2 10
-ccnneighbor /ndn/memphis.edu/netlab/castor face3 8
-ccnname /ndn/memphis.edu/netlab/macbook/name1
-ccnname /ndn/memphis.edu/netlab/macbook/test
-lsdb-synch-interval 310
-interest-retry 4
-interest-resend-time 5
-
-
diff --git a/nlsr-sync-0.0/nlsr.h b/nlsr-sync-0.0/nlsr.h
deleted file mode 100755
index b1b279f..0000000
--- a/nlsr-sync-0.0/nlsr.h
+++ /dev/null
@@ -1,131 +0,0 @@
-#ifndef _NLSR_H_
-#define _NLSR_H_
-
-
-#define LSDB_SYNCH_INTERVAL 300
-#define INTEREST_RETRY 3
-#define INTEREST_RESEND_TIME 15
-#define NLSR_LOCKED 1
-#define NLSR_UNLOCKED 0
-#define LSA_REFRESH_TIME 1800
-#define ROUTER_DEAD_INTERVAL 3600
-#define MULTI_PATH_FACE_NUM 0
-
-#define LINK_METRIC 10
-
-#define NAME_LSA_VALID 1
-#define NAME_LSA_INVALID 0
-
-#define API_PORT 9999
-
-
-struct name_prefix
-{
- char *name;
- int length;
-};
-
-struct linkStateDatabase
-{
- struct hashtb *name_lsdb;
- struct hashtb *adj_lsdb;
- struct hashtb *cor_lsdb;
-
- char *lsdb_version;
-};
-
-struct pending_interest
-{
- char *int_name;
- int timed_out;
-};
-
-struct nlsr
-{
-
- struct ccn_closure in_interest;
- struct ccn_closure in_content;
-
- struct ccns_name_closure *closure;
-
- struct ccns_slice *slice;
- struct ccns_handle *ccns;
-
- struct ccn_schedule *sched;
- struct ccn_scheduled_event *event;
- struct ccn_scheduled_event *event_send_lsdb_interest;
- struct ccn_scheduled_event *event_send_info_interest;
- struct ccn_scheduled_event *event_build_name_lsa;
- struct ccn_scheduled_event *event_build_adj_lsa;
- struct ccn_scheduled_event *event_calculate_route;
-
- struct hashtb *adl;
- struct hashtb *npl;
- struct hashtb *pit_alsa;
- struct hashtb *map;
- struct hashtb *rev_map;
- struct hashtb *npt;
- struct hashtb *routing_table;
-
-
- struct linkStateDatabase *lsdb;
-
- struct ccn *ccn;
- char *router_name;
-
-
-
- int is_synch_init;
- long int nlsa_id;
- int adj_build_flag;
- long int adj_build_count;
- int is_build_adj_lsa_sheduled;
- int is_send_lsdb_interest_scheduled;
- int is_route_calculation_scheduled;
-
- long int lsdb_synch_interval;
- int interest_retry;
- long int interest_resend_time;
- long int lsa_refresh_time;
- long int router_dead_interval;
- long int multi_path_face_num;
- char *logDir;
- int detailed_logging;
- int debugging;
-
- int semaphor;
-
- int nlsr_api_server_sock_fd;
- fd_set readfds;
- int api_port;
-
- char *topo_prefix;
- char *slice_prefix;
-
- int is_hyperbolic_calc;
- double cor_r;
- double cor_theta;
-
- int tunnel_type;
-
-
-};
-
-struct nlsr *nlsr;
-
-void process_command_ccnneighbor(char *command);
-void process_command_ccnname(char *command);
-void process_command_lsdb_synch_interval(char *command);
-void process_command_interest_retry(char *command);
-void process_command_interest_resend_time(char *command);
-void process_conf_command(char *command);
-int readConfigFile(const char *filename);
-
-void nlsr_lock(void);
-void nlsr_unlock(void);
-
-int init_nlsr(void);
-void nlsr_destroy( void );
-void nlsr_stop_signal_handler(int sig);
-
-#endif
diff --git a/nlsr-sync-0.0/nlsr_adl.c b/nlsr-sync-0.0/nlsr_adl.c
deleted file mode 100755
index 042466a..0000000
--- a/nlsr-sync-0.0/nlsr_adl.c
+++ /dev/null
@@ -1,978 +0,0 @@
-#include<stdio.h>
-#include<string.h>
-#include<stdlib.h>
-#include<math.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/time.h>
-#include <assert.h>
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-
-
-#include <ccn/ccn.h>
-#include <ccn/uri.h>
-#include <ccn/keystore.h>
-#include <ccn/signing.h>
-#include <ccn/schedule.h>
-#include <ccn/hashtb.h>
-
-#include "nlsr.h"
-#include "nlsr_npl.h"
-#include "nlsr_adl.h"
-#include "utility.h"
-#include "nlsr_npt.h"
-
-void
-add_nbr_to_adl(struct name_prefix *new_nbr,int face,char *ip)
-{
- struct ndn_neighbor *nbr=(struct ndn_neighbor *)malloc(sizeof(struct ndn_neighbor )); //free
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, new_nbr->name, new_nbr->length, 0);
-
- if(res == HT_NEW_ENTRY )
- {
-
- nbr = e->data;
-
- nbr->neighbor=(struct name_prefix *)malloc(sizeof( struct name_prefix )); //free
- nbr->neighbor->name=(char *)malloc(new_nbr->length);
- memcpy(nbr->neighbor->name,new_nbr->name,new_nbr->length);
- nbr->neighbor->length=new_nbr->length;
- nbr->face=face;
- nbr->status=NBR_DOWN;
- nbr->info_interest_timed_out=0;
- nbr->lsdb_interest_timed_out=0;
- nbr->lsdb_random_time_component=(int)(LSDB_SYNCH_INTERVAL/2);
- nbr->lsdb_synch_interval=LSDB_SYNCH_INTERVAL;
- nbr->metric=LINK_METRIC;
- nbr->is_lsdb_send_interest_scheduled=0;
-
- nbr->ip_address=(char *)malloc(13);
- memset(nbr->ip_address,0,13);
- memcpy(nbr->ip_address,ip,strlen(ip));
-
- char *time_stamp=(char *)malloc(20);
- get_current_timestamp_micro(time_stamp);
- nbr->last_lsdb_version=(char *)malloc(strlen(time_stamp)+1); //free
- memcpy(nbr->last_lsdb_version,time_stamp,strlen(time_stamp)+1);
- memset(nbr->last_lsdb_version,'0',strlen(time_stamp));
- nbr->last_info_version=(char *)malloc(strlen(time_stamp)+1); //free
- memcpy(nbr->last_info_version,time_stamp,strlen(time_stamp)+1);
- memset(nbr->last_info_version,'0',strlen(time_stamp));
- free(time_stamp);
-
- nbr->last_lsdb_requested=0;
- }
-
- hashtb_end(e);
-}
-
-
-void
-print_adjacent(struct ndn_neighbor *nbr)
-{
- if ( nlsr->debugging )
- {
- printf("print_adjacent called\n");
- printf("--------Neighbor---------------------------\n");
- printf(" Neighbor: %s \n",nbr->neighbor->name);
- printf(" Length : %d \n",nbr->neighbor->length);
- printf(" Ip Address: %s \n",nbr->ip_address);
- printf(" Face : %d \n",nbr->face);
- printf(" Metric : %d \n",nbr->metric);
- printf(" Status : %d \n",nbr->status);
- printf(" LSDB Version: %s \n",nbr->last_lsdb_version);
- printf(" Info Version: %s \n",nbr->last_info_version);
- printf(" Info Interest Timed Out : %d \n",nbr->info_interest_timed_out);
- printf(" LSDB Interest Timed Out : %d \n",nbr->lsdb_interest_timed_out);
- printf(" LSDB Synch Interval : %ld \n",nbr->lsdb_synch_interval);
- printf(" LSDB Random Time comp : %d \n",nbr->lsdb_random_time_component);
- printf(" Las Time LSDB Requested: %ld \n",nbr->last_lsdb_requested);
- printf(" IS_lsdb_send_interest_scheduled : %d \n",nbr->is_lsdb_send_interest_scheduled);
-
- printf("\n");
- }
-
- if ( nlsr->detailed_logging )
- {
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"print_adjacent called\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"--------Neighbor---------------------------\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Neighbor: %s \n",nbr->neighbor->name);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Length : %d \n",nbr->neighbor->length);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Face : %d \n",nbr->face);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Metric : %d \n",nbr->metric);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Status : %d \n",nbr->status);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," LSDB Version: %s \n",nbr->last_lsdb_version);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Info Version: %s \n",nbr->last_info_version);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Info Interest Timed Out : %d \n",nbr->info_interest_timed_out);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," LSDB Interest Timed Out : %d \n",nbr->lsdb_interest_timed_out);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," LSDB Synch Interval : %ld \n",nbr->lsdb_synch_interval);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," LSDB Random Time comp : %d \n",nbr->lsdb_random_time_component);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Las Time LSDB Requested: %ld \n",nbr->last_lsdb_requested);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," IS_lsdb_send_interest_scheduled : %d \n",nbr->is_lsdb_send_interest_scheduled);
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
- }
-
-}
-
-void
-print_adjacent_from_adl(void)
-{
- if ( nlsr->debugging )
- printf("print_adjacent_from_adl called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"print_adjacent_from_adl called \n");
-
- int i, adl_element;
- struct ndn_neighbor *nbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- adl_element=hashtb_n(nlsr->adl);
-
- for(i=0;i<adl_element;i++)
- {
- nbr=e->data;
- print_adjacent(nbr);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-}
-
-int
-get_adjacent_status(struct name_prefix *nbr)
-{
-
- if ( nlsr->debugging )
- printf("get_adjacent_status called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_adjacent_status called \n");
-
- int res;
- int status=-1;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
- if (res == HT_OLD_ENTRY)
- {
- nnbr=e->data;
- status=nnbr->status;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return status;
-
-}
-
-int
-get_timed_out_number(struct name_prefix *nbr)
-{
-
- if ( nlsr->debugging )
- printf("get_timed_out_number called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_timed_out_number called \n");
-
-
- int res,ret=-1;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nnbr=e->data;
- ret=nnbr->info_interest_timed_out;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return ret;
-}
-
-int
-get_lsdb_interest_timed_out_number(struct name_prefix *nbr)
-{
-
- if ( nlsr->debugging )
- printf("get_lsdb_interest_timed_out_number called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_lsdb_interest_timed_out_number called \n");
-
- int res,ret=-1;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nnbr=e->data;
- ret=nnbr->lsdb_interest_timed_out;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return ret;
-}
-
-void
-update_adjacent_timed_out_to_adl(struct name_prefix *nbr, int increment)
-{
- if ( nlsr->debugging )
- printf("update_adjacent_timed_out_to_adl called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_adjacent_timed_out_to_adl called \n");
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nnbr=e->data;
- nnbr->info_interest_timed_out += increment;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-void
-update_adjacent_timed_out_zero_to_adl(struct name_prefix *nbr)
-{
- if ( nlsr->debugging )
- printf("update_adjacent_timed_out_zero_to_adl called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_adjacent_timed_out_zero_to_adl called \n");
-
- int time_out_number=get_timed_out_number(nbr);
- update_adjacent_timed_out_to_adl(nbr,-time_out_number);
-
-}
-
-
-void
-update_lsdb_interest_timed_out_to_adl(struct name_prefix *nbr, int increment)
-{
- if ( nlsr->debugging )
- printf("update_lsdb_interest_timed_out_to_adl called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_lsdb_interest_timed_out_to_adl called \n");
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
-
- res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nnbr=e->data;
- nnbr->lsdb_interest_timed_out += increment;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
- hashtb_end(e);
-}
-
-void
-update_lsdb_interest_timed_out_zero_to_adl(struct name_prefix *nbr)
-{
- if ( nlsr->debugging )
- printf("update_adjacent_timed_out_zero_to_adl called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_adjacent_timed_out_zero_to_adl called\n");
-
- int time_out_number=get_lsdb_interest_timed_out_number(nbr);
- update_lsdb_interest_timed_out_to_adl(nbr,-time_out_number);
-
-}
-
-void
-update_adjacent_status_to_adl(struct name_prefix *nbr, int status)
-{
- if ( nlsr->debugging )
- printf("update_adjacent_status_to_adl called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_adjacent_status_to_adl called \n");
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
-
- if (res == HT_OLD_ENTRY)
- {
- nnbr=e->data;
- if ( nnbr->status!=status )
- {
- nnbr->status=status;
- nlsr->adj_build_flag++;
- }
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-
-void
-delete_nbr_from_adl(struct name_prefix *nbr)
-{
- if ( nlsr->debugging )
- printf("delete_nbr_from_adl called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_nbr_from_adl called \n");
-
- int res;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
-
- if (res == HT_OLD_ENTRY)
- {
- hashtb_delete(e);
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-void
-update_lsdb_synch_interval_to_adl(struct name_prefix *nbr, long int interval)
-{
- if ( nlsr->debugging )
- printf("update_lsdb_synch_interval_to_adl called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_lsdb_synch_interval_to_adl called \n");
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
-
- if (res == HT_OLD_ENTRY)
- {
- nnbr=e->data;
- if ( nnbr->lsdb_synch_interval!= interval )
- {
- nnbr->lsdb_synch_interval=interval;
- nnbr->lsdb_random_time_component=(int)(interval/2);
-
- }
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-
-int
-no_active_nbr(void)
-{
- int i, adl_element;
- int no_link=0;
- struct ndn_neighbor *nbr;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- hashtb_start(nlsr->adl, e);
- adl_element=hashtb_n(nlsr->adl);
-
- for(i=0;i<adl_element;i++)
- {
- nbr=e->data;
- if( nbr->status == 1 )
- no_link++;
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- return no_link;
-
-}
-
-int
-is_adj_lsa_build(void)
-{
- int ret=0;
-
- int nbr_count=0;
-
- int i, adl_element;
- struct ndn_neighbor *nbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- adl_element=hashtb_n(nlsr->adl);
-
- for(i=0;i<adl_element;i++)
- {
- nbr=e->data;
- if(nbr->status == 1 )
- {
- nbr_count++;
- }
- else if ( (nbr->status == 0) && (nbr->info_interest_timed_out >= nlsr->interest_retry || nbr->lsdb_interest_timed_out >= nlsr->interest_retry))
- {
- nbr_count++;
- }
- hashtb_next(e);
- }
-
- hashtb_end(e);
- if(nbr_count == adl_element)
- ret=1;
-
- return ret;
-}
-
-
-void
-get_active_nbr_adj_data(struct ccn_charbuf *c)
-{
-
- int i, adl_element;
- struct ndn_neighbor *nbr;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- hashtb_start(nlsr->adl, e);
- adl_element=hashtb_n(nlsr->adl);
-
- for(i=0;i<adl_element;i++)
- {
- nbr=e->data;
- if( nbr->status == 1 )
- {
- ccn_charbuf_append_string(c,nbr->neighbor->name);
- ccn_charbuf_append_string(c,"|");
-
- char *temp_length=(char *)malloc(20);
- memset(temp_length,0,20);
- sprintf(temp_length,"%d",nbr->neighbor->length);
- ccn_charbuf_append_string(c,temp_length);
- free(temp_length);
- ccn_charbuf_append_string(c,"|");
-
- char *temp_face=(char *)malloc(20);
- memset(temp_face,0,20);
- sprintf(temp_face,"%d",nbr->face);
- ccn_charbuf_append_string(c,temp_face);
- free(temp_face);
- ccn_charbuf_append_string(c,"|");
-
- char *temp_metric=(char *)malloc(20);
- memset(temp_metric,0,20);
- sprintf(temp_metric,"%d",nbr->metric);
- ccn_charbuf_append_string(c,temp_metric);
- free(temp_metric);
- ccn_charbuf_append_string(c,"|");
-
- }
- hashtb_next(e);
- }
-
- hashtb_end(e);
-}
-
-long int
-get_nbr_time_diff_lsdb_req(char *nbr)
-{
- if ( nlsr->debugging )
- printf("get_nbr_time_diff_lsdb_req called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_nbr_time_diff_lsdb_req called\n");
-
- long int time_diff=get_lsdb_synch_interval(nbr)+1;
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if (res == HT_OLD_ENTRY)
- {
- nnbr=e->data;
-
- if (nnbr->last_lsdb_requested == 0)
- time_diff=get_lsdb_synch_interval(nbr)+1;
- else time_diff=get_current_time_sec() - get_nbr_last_lsdb_requested(nbr);
-
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return time_diff;
-}
-
-long int
-get_nbr_last_lsdb_requested(char *nbr)
-{
- if ( nlsr->debugging )
- printf("get_timed_out_number called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_timed_out_number called\n");
-
- long int last_lsdb_requested=0;
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if (res == HT_OLD_ENTRY)
- {
- nnbr=e->data;
- last_lsdb_requested=nnbr->last_lsdb_requested;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return last_lsdb_requested;
-}
-
-
-int
-get_nbr_random_time_component(char *nbr)
-{
- if ( nlsr->debugging )
- printf("get_nbr_random_time_component called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_nbr_random_time_component called\n");
-
- int time=0;
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if (res == HT_OLD_ENTRY)
- {
- nnbr=e->data;
- time=nnbr->lsdb_random_time_component * (int)pow(-1,nnbr->lsdb_interest_timed_out+1);
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return time;
-}
-
-long int
-get_lsdb_synch_interval(char *nbr)
-{
- if ( nlsr->debugging )
- printf("get_lsdb_synch_interval called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_lsdb_synch_interval called \n");
-
- long int lsdb_synch_interval=300;
-
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if (res == HT_OLD_ENTRY)
- {
- nnbr=e->data;
- lsdb_synch_interval=nnbr->lsdb_synch_interval;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return lsdb_synch_interval;
-
-}
-
-char *
-get_nbr_lsdb_version(char *nbr)
-{
- if ( nlsr->debugging )
- printf("get_nbr_lsdb_version called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_nbr_lsdb_version called \n");
-
- char *version=NULL;
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if (res == HT_OLD_ENTRY)
- {
- nnbr=e->data;
- version=(char *)malloc(strlen(nnbr->last_lsdb_version)+1);
- memset(version,0,strlen(nnbr->last_lsdb_version)+1);
- memcpy(version,nnbr->last_lsdb_version,strlen(nnbr->last_lsdb_version)+1);
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return version;
-}
-
-void
-update_adjacent_last_lsdb_requested_to_adl(char *nbr, long int timestamp)
-{
- if ( nlsr->debugging )
- printf("update_adjacent_last_lsdb_requested_to_adl called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_adjacent_last_lsdb_requested_to_adl called \n");
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nnbr=e->data;
- nnbr->last_lsdb_requested=timestamp;
-
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-void
-set_is_lsdb_send_interest_scheduled_to_zero(char *nbr)
-{
- if ( nlsr->debugging )
- printf("set_is_lsdb_send_interest_scheduled_to_zero called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"set_is_lsdb_send_interest_scheduled_to_zero called\n");
-
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if (res == HT_OLD_ENTRY)
- {
- nnbr=e->data;
- nnbr->is_lsdb_send_interest_scheduled=0;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-void
-update_adjacent_lsdb_version_to_adl(struct name_prefix *nbr, char *version)
-{
- if ( nlsr->debugging )
- printf("update_adjacent_timed_out_to_adl called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_adjacent_timed_out_to_adl called\n");
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr->name, nbr->length, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nnbr=e->data;
- free(nnbr->last_lsdb_version);
- nnbr->last_lsdb_version=(char *)malloc(strlen(version)+1);
- memset(nnbr->last_lsdb_version,0,strlen(version)+1);
- memcpy(nnbr->last_lsdb_version,version,strlen(version)+1);
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
-}
-
-void
-adjust_adjacent_last_lsdb_requested_to_adl(char *nbr, long int sec)
-{
- printf("update_adjacent_last_lsdb_requested_to_adl called \n");
-
- if ( nlsr->debugging )
- printf("update_adjacent_last_lsdb_requested_to_adl called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_adjacent_last_lsdb_requested_to_adl called\n");
-
-
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nnbr=e->data;
- nnbr->last_lsdb_requested=nnbr->last_lsdb_requested-sec;
-
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
-}
-
-int
-get_next_hop_face_from_adl(char *nbr)
-{
- int res;
- int connecting_face=NO_FACE;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nnbr=e->data;
- connecting_face=nnbr->face;
-
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
- return connecting_face;
-}
-
-void
-update_face_to_adl_for_nbr(char *nbr, int face)
-{
- int res;
- struct ndn_neighbor *nnbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nnbr=e->data;
- nnbr->face=face;
-
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-int
-is_neighbor(char *nbr)
-{
- int ret=0;
-
- int res;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- ret=1;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return ret;
-}
-
-int
-is_active_neighbor(char *nbr)
-{
- int ret=0;
-
- int res;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- struct ndn_neighbor *nnbr;
- nnbr=e->data;
- if (nnbr->status == NBR_ACTIVE )
- {
- ret=1;
- }
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return ret;
-}
-
diff --git a/nlsr-sync-0.0/nlsr_adl.h b/nlsr-sync-0.0/nlsr_adl.h
deleted file mode 100755
index 1eb74d6..0000000
--- a/nlsr-sync-0.0/nlsr_adl.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef _NLSR_ADL_H_
-#define _NLSR_ADL_H_
-
-#define NBR_DOWN 0
-#define NBR_ACTIVE 1
-
-struct ndn_neighbor
-{
- struct name_prefix *neighbor;
- int face;
- int status;
- char * last_lsdb_version;
- char * last_info_version;
- char *ip_address;
- int info_interest_timed_out;
- int lsdb_interest_timed_out;
- int lsdb_random_time_component;
- long int lsdb_synch_interval;
- long int last_lsdb_requested;
- int is_lsdb_send_interest_scheduled;
- int metric;
-};
-
-void add_nbr_to_adl(struct name_prefix *new_nbr,int face,char *ip);
-void delete_nbr_from_adl(struct name_prefix *nbr);
-void print_adjacent(struct ndn_neighbor *nbr);
-void print_adjacent_from_adl(void);
-int get_adjacent_status(struct name_prefix *nbr);
-int get_timed_out_number(struct name_prefix *nbr);
-int get_lsdb_interest_timed_out_number(struct name_prefix *nbr);
-void update_adjacent_timed_out_to_adl(struct name_prefix *nbr, int increment);
-void update_adjacent_timed_out_zero_to_adl(struct name_prefix *nbr);
-void update_lsdb_interest_timed_out_to_adl(struct name_prefix *nbr, int increment);
-void update_lsdb_interest_timed_out_zero_to_adl(struct name_prefix *nbr);
-void update_adjacent_status_to_adl(struct name_prefix *nbr, int status);
-void update_lsdb_synch_interval_to_adl(struct name_prefix *nbr, long int interval);
-int no_active_nbr(void);
-int is_adj_lsa_build(void);
-void get_active_nbr_adj_data(struct ccn_charbuf *c);
-long int get_nbr_time_diff_lsdb_req(char *nbr);
-long int get_nbr_last_lsdb_requested(char *nbr);
-long int get_nbr_last_lsdb_requested(char *nbr);
-long int get_lsdb_synch_interval(char *nbr);
-int get_nbr_random_time_component(char *nbr);
-char * get_nbr_lsdb_version(char *nbr);
-void update_adjacent_last_lsdb_requested_to_adl(char *nbr, long int timestamp);
-void set_is_lsdb_send_interest_scheduled_to_zero(char *nbr);
-void update_adjacent_lsdb_version_to_adl(struct name_prefix *nbr, char *version);
-void adjust_adjacent_last_lsdb_requested_to_adl(char *nbr, long int sec);
-int get_next_hop_face_from_adl(char *nbr);
-int is_neighbor(char *nbr);
-int is_active_neighbor(char *nbr);
-void update_face_to_adl_for_nbr(char *nbr, int face);
-#endif
diff --git a/nlsr-sync-0.0/nlsr_fib.c b/nlsr-sync-0.0/nlsr_fib.c
deleted file mode 100755
index 6ef81cb..0000000
--- a/nlsr-sync-0.0/nlsr_fib.c
+++ /dev/null
@@ -1,231 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <unistd.h>
-#include <stdarg.h>
-#include <string.h>
-
-#include <ccn/ccn.h>
-#include <ccn/uri.h>
-#include <ccn/face_mgmt.h>
-#include <ccn/reg_mgmt.h>
-#include <ccn/charbuf.h>
-
-#include "nlsr_fib.h"
-#include "nlsr.h"
-
-
-static void
-ccn_fib_warn(int lineno, const char *format, ...)
-{
- struct timeval t;
- va_list ap;
- va_start(ap, format);
- gettimeofday(&t, NULL);
- fprintf(stderr, "%d.%06d ccn_fib[%d]:%d: ", (int)t.tv_sec, (unsigned)t.tv_usec, (int)getpid(), lineno);
- vfprintf(stderr, format, ap);
- va_end(ap);
-}
-
-#define ON_ERROR_CLEANUP(resval) \
-{ \
- if ((resval) < 0) { \
- ccn_fib_warn (__LINE__, "OnError cleanup\n"); \
- goto cleanup; \
- } \
-}
-
-#define ON_NULL_CLEANUP(resval) \
-{ \
- if ((resval) == NULL) { \
- ccn_fib_warn(__LINE__, "OnNull cleanup\n"); \
- goto cleanup; \
- } \
-}
-
-
-
-static int
-register_unregister_prefix(struct ccn *h, struct ccn_charbuf *local_scope_template,
- struct ccn_charbuf *no_name, struct ccn_charbuf *name_prefix,const unsigned char *ccndid, size_t ccnd_id_size, int faceid, int operation)
-{
- struct ccn_charbuf *temp = NULL;
- struct ccn_charbuf *resultbuf = NULL;
- struct ccn_charbuf *signed_info = NULL;
- struct ccn_charbuf *name = NULL;
- struct ccn_charbuf *prefixreg = NULL;
- struct ccn_parsed_ContentObject pcobuf = {0};
- struct ccn_forwarding_entry forwarding_entry_storage = {0};
- struct ccn_forwarding_entry *forwarding_entry = &forwarding_entry_storage;
- struct ccn_forwarding_entry *new_forwarding_entry;
- const unsigned char *ptr = NULL;
- size_t length = 0;
- int res;
-
- /* Register or unregister the prefix */
- forwarding_entry->action = (operation == OP_REG) ? "prefixreg" : "unreg";
- forwarding_entry->name_prefix = name_prefix;
- forwarding_entry->ccnd_id = ccndid;
- forwarding_entry->ccnd_id_size =ccnd_id_size;
- forwarding_entry->faceid = faceid;
- forwarding_entry->flags = -1;
- forwarding_entry->lifetime = 2100;
-
- prefixreg = ccn_charbuf_create();
- ccnb_append_forwarding_entry(prefixreg, forwarding_entry);
- temp = ccn_charbuf_create();
- res = ccn_sign_content(h, temp, no_name, NULL, prefixreg->buf, prefixreg->length);
- resultbuf = ccn_charbuf_create();
-
- /* construct Interest containing prefixreg request */
- name = ccn_charbuf_create();
- ccn_name_init(name);
- ccn_name_append_str(name, "ccnx");
- ccn_name_append(name, ccndid, ccnd_id_size);
- ccn_name_append_str(name, (operation == OP_REG) ? "prefixreg" : "unreg");
- ccn_name_append(name, temp->buf, temp->length);
-
- /* send Interest, get Data */
- res = ccn_get(h, name, local_scope_template, 1000, resultbuf, &pcobuf, NULL, 0);
- ON_ERROR_CLEANUP(res);
-
- res = ccn_content_get_value(resultbuf->buf, resultbuf->length, &pcobuf, &ptr, &length);
- ON_ERROR_CLEANUP(res);
-
- /* extract new forwarding entry from Data */
- new_forwarding_entry = ccn_forwarding_entry_parse(ptr, length);
- ON_NULL_CLEANUP(new_forwarding_entry);
-
- res = new_forwarding_entry->faceid;
-
- ccn_forwarding_entry_destroy(&new_forwarding_entry);
- ccn_charbuf_destroy(&signed_info);
- ccn_charbuf_destroy(&temp);
- ccn_charbuf_destroy(&resultbuf);
- ccn_charbuf_destroy(&name);
- ccn_charbuf_destroy(&prefixreg);
-
- return res;
-
- cleanup:
- ccn_forwarding_entry_destroy(&new_forwarding_entry);
- ccn_charbuf_destroy(&signed_info);
- ccn_charbuf_destroy(&temp);
- ccn_charbuf_destroy(&resultbuf);
- ccn_charbuf_destroy(&name);
- ccn_charbuf_destroy(&prefixreg);
-
- return -1;
-}
-
-
-static int
-get_ccndid(struct ccn *h, struct ccn_charbuf *local_scope_template,
- unsigned char *ccndid)
-{
- struct ccn_charbuf *name = NULL;
- struct ccn_charbuf *resultbuf = NULL;
- struct ccn_parsed_ContentObject pcobuf = {0};
- char ccndid_uri[] = "ccnx:/%C1.M.S.localhost/%C1.M.SRV/ccnd/KEY";
- const unsigned char *ccndid_result;
- static size_t ccndid_result_size;
- int res;
-
- name = ccn_charbuf_create();
- resultbuf = ccn_charbuf_create();
-
- res = ccn_name_from_uri(name, ccndid_uri);
- ON_ERROR_CLEANUP(res);
-
- /* get Data */
- res = ccn_get(h, name, local_scope_template, 4500, resultbuf, &pcobuf, NULL, 0);
- ON_ERROR_CLEANUP(res);
-
- /* extract from Data */
- res = ccn_ref_tagged_BLOB(CCN_DTAG_PublisherPublicKeyDigest,
- resultbuf->buf,
- pcobuf.offset[CCN_PCO_B_PublisherPublicKeyDigest],
- pcobuf.offset[CCN_PCO_E_PublisherPublicKeyDigest],
- &ccndid_result, &ccndid_result_size);
- ON_ERROR_CLEANUP(res);
-
- memcpy((void *)ccndid, ccndid_result, ccndid_result_size);
-
- ccn_charbuf_destroy(&name);
- ccn_charbuf_destroy(&resultbuf);
-
- return (ccndid_result_size);
-
- cleanup:
- ccn_charbuf_destroy(&name);
- ccn_charbuf_destroy(&resultbuf);
-
- return -1;
-}
-
-static void
-init_data(struct ccn_charbuf *local_scope_template,
- struct ccn_charbuf *no_name)
-{
- ccn_charbuf_append_tt(local_scope_template, CCN_DTAG_Interest, CCN_DTAG);
- ccn_charbuf_append_tt(local_scope_template, CCN_DTAG_Name, CCN_DTAG);
- ccn_charbuf_append_closer(local_scope_template); /* </Name> */
- ccnb_tagged_putf(local_scope_template, CCN_DTAG_Scope, "1");
- ccn_charbuf_append_closer(local_scope_template); /* </Interest> */
-
- ccn_name_init(no_name);
-}
-
-int
-add_delete_ccn_face_by_face_id(struct ccn *h, const char *uri, int operation, int faceid)
-{
- if ( nlsr->debugging )
- {
- printf("add_delete_ccn_face_by_face_id called\n");
- printf("Uri: %s Face: %d Operation: %s \n",(char *)uri , faceid, operation == OP_REG ? "Registration" : "Unregistration");
- }
-
- struct ccn_charbuf *prefix;
- struct ccn_charbuf *local_scope_template = ccn_charbuf_create();
- struct ccn_charbuf *no_name = ccn_charbuf_create();
- unsigned char ccndid_storage[32] = {0};
- unsigned char *ccndid = ccndid_storage;
- size_t ccndid_size = 0;
- int res;
-
- prefix = ccn_charbuf_create();
- res = ccn_name_from_uri(prefix, uri);
- ON_ERROR_CLEANUP(res);
-
-
- init_data(local_scope_template, no_name);
-
- ccndid_size = get_ccndid(h, local_scope_template, ccndid);
- if (ccndid_size != sizeof(ccndid_storage))
- {
- fprintf(stderr, "Incorrect size for ccnd id in response\n");
- ON_ERROR_CLEANUP(-1);
- }
-
- res = register_unregister_prefix(h, local_scope_template, no_name, prefix,ccndid, ccndid_size,faceid, operation);
-
- ON_ERROR_CLEANUP(res);
-
- ccn_charbuf_destroy(&local_scope_template);
- ccn_charbuf_destroy(&no_name);
- ccn_charbuf_destroy(&prefix);
-
- return 0;
-
- cleanup:
- ccn_charbuf_destroy(&prefix);
- ccn_charbuf_destroy(&local_scope_template);
- ccn_charbuf_destroy(&no_name);
-
- return -1;
-}
-
-
diff --git a/nlsr-sync-0.0/nlsr_fib.h b/nlsr-sync-0.0/nlsr_fib.h
deleted file mode 100755
index ce5e6d1..0000000
--- a/nlsr-sync-0.0/nlsr_fib.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _NLSR_FIB_H_
-#define _NLSR_FIB_H_
-
-#define CCN_FIB_LIFETIME ((~0U) >> 1)
-#define CCN_FIB_MCASTTTL (-1)
-#define OP_REG 0
-#define OP_UNREG 1
-
-int add_delete_ccn_face_by_face_id(struct ccn *h, const char *uri, int operation, int faceid);
-
-#endif
diff --git a/nlsr-sync-0.0/nlsr_lsdb.c b/nlsr-sync-0.0/nlsr_lsdb.c
deleted file mode 100755
index e36a922..0000000
--- a/nlsr-sync-0.0/nlsr_lsdb.c
+++ /dev/null
@@ -1,2519 +0,0 @@
-#include<stdio.h>
-#include<string.h>
-#include<stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/time.h>
-#include <assert.h>
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include <ccn/ccn.h>
-#include <ccn/uri.h>
-#include <ccn/keystore.h>
-#include <ccn/signing.h>
-#include <ccn/schedule.h>
-#include <ccn/hashtb.h>
-
-#include "nlsr.h"
-#include "nlsr_ndn.h"
-#include "nlsr_lsdb.h"
-#include "utility.h"
-#include "nlsr_npl.h"
-#include "nlsr_adl.h"
-#include "nlsr_route.h"
-#include "nlsr_npt.h"
-#include "nlsr_sync.h"
-
-void
-set_new_lsdb_version(void)
-{
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
- free(nlsr->lsdb->lsdb_version);
- nlsr->lsdb->lsdb_version=(char *)malloc(strlen(time_stamp)+1);
- memset(nlsr->lsdb->lsdb_version,0,strlen(time_stamp)+1);
- memcpy(nlsr->lsdb->lsdb_version,time_stamp,strlen(time_stamp)+1);
-
- free(time_stamp);
-
-}
-
-void
-make_name_lsa_key(char *key, char *orig_router, int ls_type, long int ls_id)
-{
-
- char lst[2];
- memset(lst,0,2);
- sprintf(lst,"%d",ls_type);
-
- char lsid[10];
- memset(lsid,0,10);
- sprintf(lsid,"%ld",ls_id);
-
- memcpy(key+strlen(key),orig_router,strlen(orig_router));
- memcpy(key+strlen(key),"/",1);
- memcpy(key+strlen(key),lst,strlen(lst));
- memcpy(key+strlen(key),"/",1);
- memcpy(key+strlen(key),lsid,strlen(lsid));
-
- if ( nlsr->debugging )
- printf("name LSA Key: %s\n", key);
-}
-
-
-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)
-{
- sprintf(key,"%s/%d/%ld/%s%s",slice_prefix, ls_type, ls_id, orig_time, orig_router);
-
- if ( nlsr->debugging )
- printf("Name LSA prefix for repo content: %s\n",key);
-}
-
-void
-make_adj_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, char *orig_time,char *slice_prefix)
-{
-
- sprintf(key,"%s/%d/%s%s",slice_prefix,ls_type, orig_time, orig_router);
-
- if ( nlsr->debugging )
- printf("Name LSA prefix for repo content:%s\n",key);
-}
-
-void
-make_cor_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, char *orig_time,char *slice_prefix)
-{
-
- sprintf(key,"%s/%d/%s%s",slice_prefix,ls_type, orig_time, orig_router);
-
- if ( nlsr->debugging )
- printf("Cor LSA prefix for repo content:%s\n",key);
-}
-
-void
-build_and_install_name_lsas(void)
-{
- if ( nlsr->debugging )
- printf("build_and_install_name_lsas called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_name_lsas called\n");
-
- int i, npl_element;
- struct name_prefix_list_entry *npe;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->npl, e);
- npl_element=hashtb_n(nlsr->npl);
-
- for(i=0;i<npl_element;i++)
- {
- npe=e->data;
- struct nlsa *name_lsa=(struct nlsa *)malloc(sizeof( struct nlsa ));
- build_name_lsa(name_lsa,npe->np);
-
- install_name_lsa(name_lsa);
- update_nlsa_id_for_name_in_npl(npe->np,name_lsa->header->ls_id);
- free(name_lsa->header->orig_router->name);
- free(name_lsa->header->orig_router);
- free(name_lsa->header);
- free(name_lsa->name_prefix->name);
- free(name_lsa->name_prefix);
- free(name_lsa);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- print_name_prefix_from_npl();
-
-}
-
-void
-build_and_install_single_name_lsa(struct name_prefix *np)
-{
- if ( nlsr->debugging )
- printf("build_and_install_single_name_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_single_name_lsa called\n");
-
- struct nlsa *name_lsa=(struct nlsa *)malloc(sizeof( struct nlsa ));
- build_name_lsa(name_lsa,np);
-
- install_name_lsa(name_lsa);
- update_nlsa_id_for_name_in_npl(np,name_lsa->header->ls_id);
-
- free(name_lsa->header->orig_router->name);
- free(name_lsa->header->orig_router);
- free(name_lsa->header);
- free(name_lsa->name_prefix->name);
- free(name_lsa->name_prefix);
- free(name_lsa);
-
- print_name_prefix_from_npl();
-
-}
-
-void
-build_name_lsa(struct nlsa *name_lsa, struct name_prefix *np)
-{
- name_lsa->header=(struct nlsa_header *)malloc(sizeof(struct nlsa_header ));
- name_lsa->header->ls_type=LS_TYPE_NAME;
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
- name_lsa->header->orig_time=(char *)malloc(strlen(time_stamp)+1); //free
- memset(name_lsa->header->orig_time,0,strlen(time_stamp)+1);
- memcpy(name_lsa->header->orig_time,time_stamp,strlen(time_stamp)+1);
-
- free(time_stamp);
-
- name_lsa->header->ls_id=++nlsr->nlsa_id;
- name_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- name_lsa->header->orig_router->name=(char *)malloc(strlen(nlsr->router_name)+1);
- memset(name_lsa->header->orig_router->name,0,strlen(nlsr->router_name)+1);
- memcpy(name_lsa->header->orig_router->name,nlsr->router_name,strlen(nlsr->router_name)+1);
- name_lsa->header->orig_router->length=strlen(nlsr->router_name)+1;
- name_lsa->header->isValid=1;
-
-
- name_lsa->name_prefix=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- name_lsa->name_prefix->name=(char *)malloc(np->length);
- memcpy(name_lsa->name_prefix->name,np->name,np->length);
- name_lsa->name_prefix->length=np->length;
-
-}
-
-void
-install_name_lsa(struct nlsa *name_lsa)
-{
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
-
- char lst[2];
- memset(lst,0,2);
- sprintf(lst,"%d",name_lsa->header->ls_type);
-
- char lsid[10];
- memset(lsid,0,10);
- sprintf(lsid,"%ld",name_lsa->header->ls_id);
-
-
- char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
- memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
-
-
- make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
- if ( nlsr->debugging )
- printf("Key:%s Length:%d\n",key,(int)strlen(key));
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Key:%s Length:%d\n",key,(int)strlen(key));
-
-
- struct nlsa *new_name_lsa=(struct nlsa*)malloc(sizeof(struct nlsa )); //free
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- res = hashtb_seek(e, key, strlen(key), 0);
-
- if(res == HT_NEW_ENTRY )
- {
-
- if ( nlsr->debugging )
- printf("New Name LSA... Adding to LSDB\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Name LSA... Adding to LSDB\n");
-
-
- new_name_lsa = e->data;
-
- new_name_lsa->header=(struct nlsa_header *)malloc(sizeof(struct nlsa_header )); //free
- new_name_lsa->header->ls_type=name_lsa->header->ls_type;
-
- new_name_lsa->header->orig_time=(char *)malloc(strlen(name_lsa->header->orig_time)+1);
- memset(new_name_lsa->header->orig_time,0,strlen(name_lsa->header->orig_time)+1);
- memcpy(new_name_lsa->header->orig_time,name_lsa->header->orig_time,strlen(name_lsa->header->orig_time)+1);
-
- new_name_lsa->header->ls_id=name_lsa->header->ls_id;
- new_name_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix )); //free
- new_name_lsa->header->orig_router->name=(char *)malloc(name_lsa->header->orig_router->length);
- memcpy(new_name_lsa->header->orig_router->name,name_lsa->header->orig_router->name,name_lsa->header->orig_router->length);
- new_name_lsa->header->orig_router->length=name_lsa->header->orig_router->length;
- new_name_lsa->header->isValid=name_lsa->header->isValid;
-
-
- new_name_lsa->name_prefix=(struct name_prefix *)malloc(sizeof(struct name_prefix )); //free
- new_name_lsa->name_prefix->name=(char *)malloc(name_lsa->name_prefix->length);
- memcpy(new_name_lsa->name_prefix->name,name_lsa->name_prefix->name,name_lsa->name_prefix->length);
- new_name_lsa->name_prefix->length=name_lsa->name_prefix->length;
-
- if ( nlsr->debugging )
- {
- printf("New Name LSA Added....\n");
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Name LSA Added....\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- }
- set_new_lsdb_version();
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
-
- int num_next_hop=get_number_of_next_hop(new_name_lsa->header->orig_router->name);
- if ( num_next_hop < 0 )
- {
- int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,NO_NEXT_HOP,NULL,NULL);
- if ( check == HT_NEW_ENTRY )
- {
- if ( nlsr->debugging )
- printf("Added in npt \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Added in npt \n");
- }
- }
- else
- {
- int *faces=malloc(num_next_hop*sizeof(int));
- int *route_costs=malloc(num_next_hop*sizeof(int));
- int next_hop=get_next_hop(new_name_lsa->header->orig_router->name,faces,route_costs);
- if ( nlsr->debugging )
- {
- printf("Printing from install_name_lsa \n");
- int j;
- for(j=0;j<num_next_hop;j++)
- printf("Face: %d Route Cost: %d \n",faces[j],route_costs[j]);
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Printing from install_name_lsa \n");
- int j;
- for(j=0;j<num_next_hop;j++)
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Face: %d Route Cost: %d \n",faces[j],route_costs[j]);
- }
- int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,next_hop,faces,route_costs);
- if ( check == HT_NEW_ENTRY )
- {
- if ( nlsr->debugging )
- printf("Added in npt \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Added in npt \n");
- }
- free(faces);
- free(route_costs);
-
- }
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding name lsa\n");
- write_log_for_name_lsa(new_name_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
-
- free(time_stamp);
-
- }
- else if(res == HT_OLD_ENTRY)
- {
- new_name_lsa=e->data;
- if(strcmp(name_lsa->header->orig_time,new_name_lsa->header->orig_time)<0)
- {
- if ( nlsr->debugging )
- printf("Older Adj LSA. Discarded... \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Older Adj LSA. Discarded...\n");
- }
- else if( strcmp(name_lsa->header->orig_time,new_name_lsa->header->orig_time) == 0 )
- {
- if ( nlsr->debugging )
- printf("Duplicate Adj LSA. Discarded... \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Duplicate Adj LSA. Discarded...\n");
- }
- else
- {
- if ( name_lsa->header->isValid == 0 )
- {
- // have to call to delete npt table entry
- delete_npt_entry_by_router_and_name_prefix(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name);
-
- if ( strcmp(name_lsa->header->orig_router->name,nlsr->router_name)!= 0)
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
- write_log_for_name_lsa(new_name_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
-
- hashtb_delete(e);
- if ( nlsr->debugging )
- printf("isValid bit not set for Router %s so LSA Deleted from LSDB\n",name_lsa->header->orig_router->name);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"isValid bit not set for Router %s so LSA Deleted from LSDB\n",name_lsa->header->orig_router->name);
- }
- else
- {
- new_name_lsa->header->isValid=name_lsa->header->isValid;
- free(new_name_lsa->header->orig_time);
- new_name_lsa->header->orig_time=(char *)malloc(strlen(name_lsa->header->orig_time)+1);
- memset(new_name_lsa->header->orig_time,0,strlen(name_lsa->header->orig_time)+1);
- memcpy(new_name_lsa->header->orig_time,name_lsa->header->orig_time,strlen(name_lsa->header->orig_time)+1);
- }
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- set_new_lsdb_version();
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- }
- else
- {
- int is_npt_update=0;
- if ( strcmp(new_name_lsa->name_prefix->name,name_lsa->name_prefix->name) != 0 )
- {
- is_npt_update=1;
- delete_npt_entry_by_router_and_name_prefix(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name);
- }
-
- // copying LSA content with header
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
- write_log_for_name_lsa(new_name_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
-
-
- free(new_name_lsa->header->orig_time);
- new_name_lsa->header->orig_time=(char *)malloc(strlen(name_lsa->header->orig_time)+1);
- memset(new_name_lsa->header->orig_time,0,strlen(name_lsa->header->orig_time)+1);
- memcpy(new_name_lsa->header->orig_time,name_lsa->header->orig_time,strlen(name_lsa->header->orig_time)+1);
-
- new_name_lsa->header->isValid=name_lsa->header->isValid;
-
- free(new_name_lsa->name_prefix->name);
- free(new_name_lsa->name_prefix);
- new_name_lsa->name_prefix=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- new_name_lsa->name_prefix->name=(char *)malloc(name_lsa->name_prefix->length);
- memcpy(new_name_lsa->name_prefix->name,name_lsa->name_prefix->name,name_lsa->name_prefix->length);
- new_name_lsa->name_prefix->length=name_lsa->name_prefix->length;
-
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding name lsa\n");
- write_log_for_name_lsa(new_name_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
-
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- set_new_lsdb_version();
-
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
-
- if( is_npt_update == 1 )
- {
- //struct hashtb *face_list;
- int num_next_hop=get_number_of_next_hop(new_name_lsa->header->orig_router->name);
- if ( num_next_hop < 0 )
- {
-
- int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,NO_NEXT_HOP,NULL,NULL);
- if ( check == HT_NEW_ENTRY )
- {
- if ( nlsr->debugging )
- printf("Added in npt \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Added in npt \n");
- }
- }
- else
- {
- int *faces=malloc(num_next_hop*sizeof(int));
- int *route_costs=malloc(num_next_hop*sizeof(int));
- int next_hop=get_next_hop(new_name_lsa->header->orig_router->name,faces,route_costs);
-
- if ( nlsr->debugging )
- {
- printf("Printing from install_name_lsa \n");
- int j;
- for(j=0;j<num_next_hop;j++)
- printf("Face: %d Route Cost: %d \n",faces[j],route_costs[j]);
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Printing from install_name_lsa \n");
- int j;
- for(j=0;j<num_next_hop;j++)
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Face: %d Route Cost: %d \n",faces[j],route_costs[j]);
- }
-
-
- int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,next_hop,faces,route_costs);
- if ( check == HT_NEW_ENTRY )
- {
- if ( nlsr->debugging )
- printf("Added in npt \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Added in npt \n");
- }
- free(faces);
- free(route_costs);
-
- }
-
- }
- }
- }
-
- }
-
- hashtb_end(e);
-
- free(key);
-}
-
-void
-write_log_for_name_lsa(struct nlsa *name_lsa)
-{
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"-----------Name LSA Content---------------\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router: %s\n",name_lsa->header->orig_router->name);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router Length: %d\n",name_lsa->header->orig_router->length);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," LS Type: %d\n",name_lsa->header->ls_type);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," LS Id: %ld\n",name_lsa->header->ls_id);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Time: %s\n",name_lsa->header->orig_time);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Is Valid: %d\n",name_lsa->header->isValid);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," LSA Data \n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name Prefix: %s\n",name_lsa->name_prefix->name);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name Prefix Length: %d\n",name_lsa->name_prefix->length);
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-}
-
-void
-print_name_lsa(struct nlsa *name_lsa)
-{
-
- if ( nlsr->debugging )
- {
- printf("-----------Name LSA Content---------------\n");
- printf(" Origination Router : %s\n",name_lsa->header->orig_router->name);
- printf(" Origination Router Length: %d\n",name_lsa->header->orig_router->length);
- printf(" LS Type : %d\n",name_lsa->header->ls_type);
- printf(" LS Id : %ld\n",name_lsa->header->ls_id);
- printf(" Origination Time : %s\n",name_lsa->header->orig_time);
- printf(" Is Valid : %d\n",name_lsa->header->isValid);
- printf(" LSA Data \n");
- printf(" Name Prefix: : %s\n",name_lsa->name_prefix->name);
- printf(" Name Prefix Length : %d\n",name_lsa->name_prefix->length);
-
- printf("\n");
- }
-}
-
-void
-print_name_lsdb(void)
-{
- if ( nlsr->debugging )
- printf("print_name_lsdb called \n");
- int i, name_lsdb_element;
- struct nlsa *name_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- name_lsdb_element=hashtb_n(nlsr->lsdb->name_lsdb);
-
- for(i=0;i<name_lsdb_element;i++)
- {
- if ( nlsr->debugging )
- printf("-----------Name LSA (%d)---------------\n",i+1);
- name_lsa=e->data;
- print_name_lsa(name_lsa);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-}
-
-
-void
-build_and_install_others_name_lsa(char *orig_router,int ls_type,long int ls_id,char *orig_time, int isValid,char *np)
-{
- if ( nlsr->debugging )
- printf("build_and_install_others_name_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_others_name_lsa called \n");
-
- struct nlsa *name_lsa=(struct nlsa *)malloc(sizeof( struct nlsa ));
- build_others_name_lsa(name_lsa,orig_router,ls_type,ls_id,orig_time, isValid,np);
- print_name_lsa(name_lsa);
- install_name_lsa(name_lsa);
- print_name_lsdb();
- print_npt();
-
- free(name_lsa->header->orig_router->name);
- free(name_lsa->header->orig_router);
- free(name_lsa->header);
- free(name_lsa->name_prefix->name);
- free(name_lsa->name_prefix);
- free(name_lsa);
-
-}
-
-void
-build_others_name_lsa(struct nlsa *name_lsa, char *orig_router,int ls_type,long int ls_id,char *orig_time, int isValid,char *np)
-{
- if ( nlsr->debugging )
- printf("build_others_name_lsa called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_others_name_lsa called \n");
-
- name_lsa->header=(struct nlsa_header *)malloc(sizeof(struct nlsa_header ));
- name_lsa->header->ls_type=LS_TYPE_NAME;
-
- name_lsa->header->orig_time=(char *)malloc(strlen(orig_time)+1);
- memset(name_lsa->header->orig_time,0,strlen(orig_time)+1);
- memcpy(name_lsa->header->orig_time,orig_time,strlen(orig_time)+1);
-
- name_lsa->header->ls_id=ls_id;
- name_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- name_lsa->header->orig_router->name=(char *)malloc(strlen(orig_router)+1);
- memset(name_lsa->header->orig_router->name,0,strlen(orig_router)+1);
- memcpy(name_lsa->header->orig_router->name,orig_router,strlen(orig_router)+1);
- name_lsa->header->orig_router->length=strlen(orig_router)+1;
- name_lsa->header->isValid=isValid;
-
- name_lsa->name_prefix=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- name_lsa->name_prefix->name=(char *)malloc(strlen(np)+1);
- memset(name_lsa->name_prefix->name,0,strlen(np)+1);
- memcpy(name_lsa->name_prefix->name,np,strlen(np)+1);
- name_lsa->name_prefix->length=strlen(np)+1;
-}
-
-
-void
-make_cor_lsa_key(char *key,struct clsa *cor_lsa)
-{
- memcpy(key+strlen(key),cor_lsa->header->orig_router->name,cor_lsa->header->orig_router->length);
- memcpy(key+strlen(key),"/",1);
- char ls_type[2];
- sprintf(ls_type,"%d",cor_lsa->header->ls_type);
- memcpy(key+strlen(key),ls_type,strlen(ls_type));
- key[strlen(key)]='\0';
-}
-
-
-void
-make_adj_lsa_key(char *key,struct alsa *adj_lsa)
-{
- memcpy(key+strlen(key),adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->length);
- memcpy(key+strlen(key),"/",1);
- char ls_type[2];
- sprintf(ls_type,"%d",adj_lsa->header->ls_type);
- memcpy(key+strlen(key),ls_type,strlen(ls_type));
- key[strlen(key)]='\0';
-}
-
-int
-build_and_install_adj_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
-{
- if(flags == CCN_SCHEDULE_CANCEL)
- {
- return -1;
- }
-
- nlsr_lock();
-
- if ( nlsr->debugging )
- printf("build_and_install_adj_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_adj_lsa called \n");
-
- if ( nlsr->debugging )
- printf("adj_build_flag = %d \n",nlsr->adj_build_flag);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"adj_build_flag = %d \n",nlsr->adj_build_flag);
-
- if(nlsr->adj_build_flag > 0)
- {
- if ( nlsr->debugging )
- printf("is_adj_lsa_build = %d \n",is_adj_lsa_build());
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"is_adj_lsa_build = %d \n",is_adj_lsa_build());
-
- if ( is_adj_lsa_build()> 0)
- {
- struct alsa *adj_lsa=(struct alsa *)malloc(sizeof( struct alsa ));
- build_adj_lsa(adj_lsa);
- install_adj_lsa(adj_lsa);
-
- char lst[2];
- memset(lst,0,2);
- sprintf(lst,"%d",LS_TYPE_ADJ);
-
- char *repo_key=(char *)malloc(strlen(nlsr->slice_prefix)+strlen(adj_lsa->header->orig_time)+strlen(adj_lsa->header->orig_router->name) + strlen(lst) + 5);
- memset(repo_key, 0, strlen(nlsr->slice_prefix)+strlen(adj_lsa->header->orig_time)+strlen(adj_lsa->header->orig_router->name) + strlen(lst) + 5);
- make_adj_lsa_prefix_for_repo(repo_key, adj_lsa->header->orig_router->name,LS_TYPE_ADJ,adj_lsa->header->orig_time,nlsr->slice_prefix);
-
- if ( nlsr->debugging )
- printf("Adj LSA Repo Key: %s \n",repo_key);
-
- char *key=(char *)malloc(adj_lsa->header->orig_router->length+2+2);
- memset(key,0,adj_lsa->header->orig_router->length+2+2);
- make_adj_lsa_key(key,adj_lsa);
- if ( nlsr->debugging )
- printf("Adj LSA: %s \n",key);
-
- struct name_prefix *lsaid=(struct name_prefix *)malloc(sizeof(struct name_prefix));
- lsaid->name=(char *)malloc(strlen(key)+1);
- memset(lsaid->name, 0, strlen(key)+1);
- memcpy(lsaid->name,key,strlen(key));
- lsaid->length=strlen(key)+1;
-
-
- write_adj_lsa_to_repo(repo_key, lsaid);
-
- free(key);
- free(repo_key);
- free(lsaid->name);
- free(lsaid);
-
-
-
- free(adj_lsa->header->orig_router->name);
- free(adj_lsa->header->orig_router);
- free(adj_lsa->header->orig_time);
- free(adj_lsa->header);
- free(adj_lsa->body);
- free(adj_lsa);
- nlsr->adj_build_flag=0;
- print_adj_lsdb();
- }
- else
- {
- if ( nlsr->debugging )
- printf("Can not build adj LSA now\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Can not build adj LSA now\n");
- }
- }
- nlsr->is_build_adj_lsa_sheduled=0;
-
- nlsr_unlock();
-
- return 0;
-}
-
-
-void
-build_adj_lsa(struct alsa * adj_lsa)
-{
- if ( nlsr->debugging )
- printf("build_adj_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_adj_lsa called \n");
-
- int no_link=no_active_nbr();
-
- adj_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
- adj_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- adj_lsa->header->orig_router->name=(char *)malloc(strlen(nlsr->router_name)+1);
- memset(adj_lsa->header->orig_router->name,0,strlen(nlsr->router_name)+1);
- memcpy(adj_lsa->header->orig_router->name,nlsr->router_name,strlen(nlsr->router_name)+1);
- adj_lsa->header->orig_router->length=strlen(nlsr->router_name)+1;
-
- adj_lsa->header->ls_type=(unsigned)LS_TYPE_ADJ;
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
- adj_lsa->header->orig_time=(char *)malloc(strlen(time_stamp)+1);
- memset(adj_lsa->header->orig_time,0,strlen(time_stamp)+1);
- memcpy(adj_lsa->header->orig_time,time_stamp,strlen(time_stamp)+1);
- free(time_stamp);
-
- adj_lsa->no_link=no_link;
-
-
- struct ccn_charbuf *c=ccn_charbuf_create();
- get_active_nbr_adj_data(c);
- char *data=ccn_charbuf_as_string(c);
-
- adj_lsa->body=(char *)malloc(strlen(data)+1);
- memset(adj_lsa->body,0,strlen(data)+1);
- memcpy(adj_lsa->body,(char *)data,strlen(data)+1);
- ccn_charbuf_destroy(&c);
-
- nlsr->adj_build_count++;
-
-
-}
-
-
-void
-install_adj_lsa(struct alsa * adj_lsa)
-{
-
- if ( nlsr->debugging )
- printf("install_adj_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"install_adj_lsa called \n");
-
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
-
- 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 alsa *new_adj_lsa=(struct alsa*)malloc(sizeof(struct alsa ));
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- res = hashtb_seek(e, key, strlen(key), 0);
-
-
-
- if(res == HT_NEW_ENTRY)
- {
- if ( adj_lsa->no_link > 0)
- {
- if ( nlsr->debugging )
- printf("New ADJ LSA... Adding to LSDB\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New ADJ LSA... Adding to LSDB\n");
- new_adj_lsa = e->data;
-
- new_adj_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
- new_adj_lsa->header->ls_type=adj_lsa->header->ls_type;
- new_adj_lsa->header->orig_time=(char *)malloc(strlen(adj_lsa->header->orig_time)+1);
- memcpy(new_adj_lsa->header->orig_time,adj_lsa->header->orig_time,strlen(adj_lsa->header->orig_time)+1);
-
- new_adj_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- new_adj_lsa->header->orig_router->name=(char *)malloc(adj_lsa->header->orig_router->length);
- memcpy(new_adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->length);
- new_adj_lsa->header->orig_router->length=adj_lsa->header->orig_router->length;
-
- new_adj_lsa->no_link=adj_lsa->no_link;
-
- new_adj_lsa->body=(char *)malloc(strlen(adj_lsa->body)+1);
- memset(new_adj_lsa->body,0,strlen(adj_lsa->body)+1);
- memcpy(new_adj_lsa->body,adj_lsa->body,strlen(adj_lsa->body)+1);
-
- add_next_hop_router(new_adj_lsa->header->orig_router->name);
- add_next_hop_from_lsa_adj_body(new_adj_lsa->body,new_adj_lsa->no_link);
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding adj lsa\n");
- write_log_for_adj_lsa(new_adj_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
- }
- else
- {
- hashtb_delete(e);
- }
-
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- set_new_lsdb_version();
-
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- }
- else if(res == HT_OLD_ENTRY)
- {
- new_adj_lsa = e->data;
- if(strcmp(adj_lsa->header->orig_time,new_adj_lsa->header->orig_time)<=0)
- {
- if ( nlsr->debugging )
- printf("Older/Duplicate Adj LSA. Discarded...\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Older/Duplicate Adj LSA. Discarded...\n");
- }
- else
- {
-
- if ( adj_lsa->no_link > 0)
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
- write_log_for_adj_lsa(new_adj_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
-
- free(new_adj_lsa->header->orig_time);
- new_adj_lsa->header->orig_time=(char *)malloc(strlen(adj_lsa->header->orig_time)+1);
- memcpy(new_adj_lsa->header->orig_time,adj_lsa->header->orig_time,strlen(adj_lsa->header->orig_time)+1);
-
- new_adj_lsa->no_link=adj_lsa->no_link;
-
- new_adj_lsa->body=(char *)malloc(strlen(adj_lsa->body)+1);
- memset(new_adj_lsa->body,0,strlen(adj_lsa->body)+1);
- memcpy(new_adj_lsa->body,adj_lsa->body,strlen(adj_lsa->body)+1);
-
- add_next_hop_from_lsa_adj_body(new_adj_lsa->body,new_adj_lsa->no_link);
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding adj lsa\n");
- write_log_for_adj_lsa(new_adj_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
- }
- else
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
- write_log_for_adj_lsa(new_adj_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
-
- hashtb_delete(e);
- }
-
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- set_new_lsdb_version();
-
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- }
-
- }
- hashtb_end(e);
-
- if ( !nlsr->is_route_calculation_scheduled )
- {
- nlsr->event_calculate_route = ccn_schedule_event(nlsr->sched, 1000000, &route_calculate, NULL, 0);
- nlsr->is_route_calculation_scheduled=1;
- }
-
-
- free(key);
-
- free(time_stamp);
-}
-
-void
-write_log_for_adj_lsa_body(const char *body, int no_link)
-{
- int i=0;
- char *lsa_data=(char *)malloc(strlen(body)+1);
- memset( lsa_data,0,strlen(body)+1);
- memcpy(lsa_data,body,strlen(body)+1);
- char *sep="|";
- char *rem;
- char *rtr_id;
- char *length;
- char *face;
- char *metric;
-
- if(no_link >0 )
- {
- rtr_id=strtok_r(lsa_data,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Link %d \n",i+1);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router: %s \n",rtr_id);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router Length: %s \n",length);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Connecting Face: %s \n",face);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Metric: %s \n",metric);
-
-
- for(i=1;i<no_link;i++)
- {
- rtr_id=strtok_r(NULL,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Link %d \n",i+1);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router: %s \n",rtr_id);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router Length: %s \n",length);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Connecting Face: %s \n",face);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Metric: %s \n",metric);
-
- }
- }
-
- free(lsa_data);
-}
-
-
-void
-write_log_for_adj_lsa(struct alsa * adj_lsa)
-{
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"-----------Adj LSA Content---------------\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router: %s\n",adj_lsa->header->orig_router->name);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router Length: %d\n",adj_lsa->header->orig_router->length);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," LS Type: %d\n",adj_lsa->header->ls_type);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Time: %s\n",adj_lsa->header->orig_time);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Lsa Data:\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," No of Link: %d\n",adj_lsa->no_link);
-
- write_log_for_adj_lsa_body(adj_lsa->body,adj_lsa->no_link);
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-
-}
-
-void
-print_adj_lsa_body(const char *body, int no_link)
-{
- int i=0;
- char *lsa_data=(char *)malloc(strlen(body)+1);
- memset( lsa_data,0,strlen(body)+1);
- memcpy(lsa_data,body,strlen(body)+1);
- char *sep="|";
- char *rem;
- char *rtr_id;
- char *length;
- char *face;
- char *metric;
-
- if(no_link >0 )
- {
- rtr_id=strtok_r(lsa_data,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
-
- if ( nlsr->debugging ) {
- printf(" Link %d \n",i+1);
- printf(" Neighbor : %s \n",rtr_id);
- printf(" Neighbor Length : %s \n",length);
- printf(" Connecting Face : %s \n",face);
- printf(" Metric : %s \n",metric);
- }
-
- for(i=1;i<no_link;i++)
- {
- rtr_id=strtok_r(NULL,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
- printf(" Link %d \n",i+1);
- printf(" Neighbor : %s \n",rtr_id);
- printf(" Neighbor Length : %s \n",length);
- printf(" Connecting Face : %s \n",face);
- printf(" Metric : %s \n",metric);
-
- }
- }
-
- free(lsa_data);
-}
-
-void
-print_adj_lsa(struct alsa * adj_lsa)
-{
- if ( nlsr->debugging )
- {
- printf("-----------ADJ LSA Content---------------\n");
- printf(" Origination Router : %s\n",adj_lsa->header->orig_router->name);
- printf(" Origination Router Length: %d\n",adj_lsa->header->orig_router->length);
- printf(" LS Type : %d\n",adj_lsa->header->ls_type);
- printf(" Origination Time : %s\n",adj_lsa->header->orig_time);
- printf(" Lsa Data:\n");
- printf(" No of Link : %d\n",adj_lsa->no_link);
-
- print_adj_lsa_body(adj_lsa->body,adj_lsa->no_link);
- printf("\n");
- }
-
-}
-
-void
-print_adj_lsdb(void)
-{
- if ( nlsr->debugging )
- printf("print_name_lsdb called \n");
- int i, adj_lsdb_element;
- struct alsa *adj_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- adj_lsdb_element=hashtb_n(nlsr->lsdb->adj_lsdb);
-
- for(i=0;i<adj_lsdb_element;i++)
- {
- if ( nlsr->debugging )
- printf("-----------Adj LSA (%d)---------------\n",i+1);
- adj_lsa=e->data;
- print_adj_lsa(adj_lsa);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-}
-
-void
-build_and_install_others_adj_lsa(char *orig_router,int ls_type,char *orig_time, int no_link,char *data)
-{
- if ( nlsr->debugging )
- printf("build_and_install_others_adj_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_others_adj_lsa called \n");
- struct alsa *adj_lsa=(struct alsa *)malloc(sizeof( struct alsa ));
- build_others_adj_lsa(adj_lsa,orig_router,ls_type,orig_time,no_link,data);
- install_adj_lsa(adj_lsa);
-
-
- free(adj_lsa->header->orig_router->name);
- free(adj_lsa->header->orig_router);
- free(adj_lsa->header->orig_time);
- free(adj_lsa->header);
- free(adj_lsa->body);
- free(adj_lsa);
-
- print_adj_lsdb();
-
-}
-
-
-void
-build_others_adj_lsa(struct alsa *adj_lsa,char *orig_router,int ls_type,char *orig_time,int no_link,char *data)
-{
- if ( nlsr->debugging )
- printf("build_others_adj_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_others_adj_lsa called \n");
-
- /*Filling Up Header Data */
- adj_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
- adj_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- adj_lsa->header->orig_router->name=(char *)malloc(strlen(orig_router)+1);
- memset(adj_lsa->header->orig_router->name,0,strlen(orig_router)+1);
- memcpy(adj_lsa->header->orig_router->name,orig_router,strlen(orig_router)+1);
-
- adj_lsa->header->orig_router->length=strlen(orig_router)+1;
-
-
- adj_lsa->header->ls_type=(unsigned)LS_TYPE_ADJ;
-
- adj_lsa->header->orig_time=(char *)malloc(strlen(orig_time)+1);
- memset(adj_lsa->header->orig_time,0,strlen(orig_time)+1);
- memcpy(adj_lsa->header->orig_time,orig_time,strlen(orig_time)+1);
-
- adj_lsa->no_link=no_link;
-
- adj_lsa->body=(char *)malloc(strlen(data)+1);
- memset(adj_lsa->body,0,strlen(data)+1);
- memcpy(adj_lsa->body,(char *)data,strlen(data)+1);
-
-}
-
-
-long int
-get_name_lsdb_num_element(void)
-{
- long int num_element;
-
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- num_element=hashtb_n(nlsr->lsdb->name_lsdb);
- hashtb_end(e);
-
- return num_element;
-}
-
-long int
-get_adj_lsdb_num_element(void)
-{
- long int num_element;
-
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- num_element=hashtb_n(nlsr->lsdb->adj_lsdb);
- hashtb_end(e);
-
- return num_element;
-}
-
-
-int
-check_is_new_name_lsa(char *orig_router,char *lst,char *lsid,char *orig_time)
-{
- int ret=0;
- struct ccn_charbuf *key=ccn_charbuf_create();
- ccn_charbuf_append_string(key,orig_router);
- ccn_charbuf_append_string(key,"/");
- ccn_charbuf_append_string(key,lst);
- ccn_charbuf_append_string(key,"/");
- ccn_charbuf_append_string(key,lsid);
-
- int res;
- struct nlsa *name_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- res = hashtb_seek(e, ccn_charbuf_as_string(key), key->length, 0);
-
- if( res == HT_NEW_ENTRY )
- {
- hashtb_delete(e);
- ret=1;
-
- }
- else if(res == HT_OLD_ENTRY)
- {
- name_lsa=e->data;
- if( strcmp ( orig_time , name_lsa->header->orig_time ) > 0 )
- {
- ret=1;
- }
- }
-
- hashtb_end(e);
-
- ccn_charbuf_destroy(&key);
-
- return ret;
-}
-
-int
-check_is_new_adj_lsa(char *orig_router,char *lst,char *orig_time)
-{
- int ret=0;
- struct ccn_charbuf *key=ccn_charbuf_create();
- ccn_charbuf_append_string(key,orig_router);
- ccn_charbuf_append_string(key,"/");
- ccn_charbuf_append_string(key,lst);
-
- int res;
- struct alsa *adj_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- res = hashtb_seek(e, ccn_charbuf_as_string(key), key->length, 0);
-
- if( res == HT_NEW_ENTRY )
- {
- hashtb_delete(e);
- ret=1;
-
- }
- else if(res == HT_OLD_ENTRY)
- {
- adj_lsa=e->data;
- if( strcmp ( orig_time , adj_lsa->header->orig_time ) > 0 )
- {
- ret=1;
- }
- }
-
- hashtb_end(e);
-
- ccn_charbuf_destroy(&key);
-
- return ret;
-}
-
-int
-check_is_new_cor_lsa(char *orig_router,char *lst,char *orig_time)
-{
- int ret=0;
- struct ccn_charbuf *key=ccn_charbuf_create();
- ccn_charbuf_append_string(key,orig_router);
- ccn_charbuf_append_string(key,"/");
- ccn_charbuf_append_string(key,lst);
-
- int res;
- struct clsa *cor_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->cor_lsdb, e);
- res = hashtb_seek(e, ccn_charbuf_as_string(key), key->length, 0);
-
- if( res == HT_NEW_ENTRY )
- {
- hashtb_delete(e);
- ret=1;
-
- }
- else if(res == HT_OLD_ENTRY)
- {
- cor_lsa=e->data;
- if( strcmp ( orig_time , cor_lsa->header->orig_time ) > 0 )
- {
- ret=1;
- }
- }
-
- hashtb_end(e);
-
- ccn_charbuf_destroy(&key);
-
- return ret;
-}
-
-void
-get_name_lsa_data(struct ccn_charbuf *lsa_data, struct name_prefix *lsaId)
-{
- if ( nlsr->debugging )
- printf("get_name_lsa_data called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_name_lsa_data called \n");
-
- struct nlsa *name_lsa=(struct nlsa*)malloc(sizeof(struct nlsa ));
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- res = hashtb_seek(e, lsaId->name, lsaId->length-1, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- name_lsa=e->data;
-
- if ( nlsr->debugging )
- printf("NAME LSA found \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Name LSA found \n");
-
- ccn_charbuf_append_string(lsa_data,name_lsa->header->orig_router->name);
- ccn_charbuf_append_string(lsa_data,"|");
-
- char *temp_length=(char *)malloc(20);
- memset(temp_length,0,20);
- sprintf(temp_length,"%d",name_lsa->header->orig_router->length);
- ccn_charbuf_append_string(lsa_data,temp_length);
- free(temp_length);
- ccn_charbuf_append_string(lsa_data,"|");
-
- char *temp_ltype=(char *)malloc(20);
- memset(temp_ltype,0,20);
- sprintf(temp_ltype,"%d",name_lsa->header->ls_type);
- ccn_charbuf_append_string(lsa_data,temp_ltype);
- free(temp_ltype);
- ccn_charbuf_append_string(lsa_data,"|");
-
- char *temp_lsid=(char *)malloc(20);
- memset(temp_lsid,0,20);
- sprintf(temp_lsid,"%ld",name_lsa->header->ls_id);
- ccn_charbuf_append_string(lsa_data,temp_lsid);
- free(temp_lsid);
- ccn_charbuf_append_string(lsa_data,"|");
-
- ccn_charbuf_append_string(lsa_data,name_lsa->header->orig_time);
- ccn_charbuf_append_string(lsa_data,"|");
-
- char *temp_valid=(char *)malloc(20);
- memset(temp_valid,0,20);
- sprintf(temp_valid,"%d",name_lsa->header->isValid);
- ccn_charbuf_append_string(lsa_data,temp_valid);
- free(temp_valid);
- ccn_charbuf_append_string(lsa_data,"|");
-
- ccn_charbuf_append_string(lsa_data,name_lsa->name_prefix->name);
- ccn_charbuf_append_string(lsa_data,"|");
-
- char *temp_npl=(char *)malloc(20);
- memset(temp_npl,0,20);
- sprintf(temp_npl,"%d",name_lsa->name_prefix->length);
- ccn_charbuf_append_string(lsa_data,temp_npl);
- free(temp_npl);
- ccn_charbuf_append_string(lsa_data,"|");
-
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-void
-get_adj_lsa_data(struct ccn_charbuf *lsa_data,struct name_prefix *lsaId)
-{
- if ( nlsr->debugging )
- printf("get_adj_lsa_data called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_adj_lsa_data called \n");
-
- struct alsa *adj_lsa=(struct alsa*)malloc(sizeof(struct alsa ));
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- res = hashtb_seek(e, lsaId->name, lsaId->length-1, 0);
-
- if( res == HT_OLD_ENTRY )
- {
- adj_lsa=e->data;
-
- if ( nlsr->debugging )
- printf("Adj LSA found \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Adj LSA found \n");
-
- ccn_charbuf_append_string(lsa_data,adj_lsa->header->orig_router->name);
- ccn_charbuf_append_string(lsa_data,"|");
-
- char *temp_length=(char *)malloc(20);
- memset(temp_length,0,20);
- sprintf(temp_length,"%d",adj_lsa->header->orig_router->length);
- ccn_charbuf_append_string(lsa_data,temp_length);
- ccn_charbuf_append_string(lsa_data,"|");
- free(temp_length);
-
- char *temp_ltype=(char *)malloc(20);
- memset(temp_ltype,0,20);
- sprintf(temp_ltype,"%d",adj_lsa->header->ls_type);
- ccn_charbuf_append_string(lsa_data,temp_ltype);
- ccn_charbuf_append_string(lsa_data,"|");
- free(temp_ltype);
-
- ccn_charbuf_append_string(lsa_data,adj_lsa->header->orig_time);
- ccn_charbuf_append_string(lsa_data,"|");
-
- char *temp_nl=(char *)malloc(20);
- memset(temp_nl,0,20);
- sprintf(temp_nl,"%d",adj_lsa->no_link);
- ccn_charbuf_append_string(lsa_data,temp_nl);
- ccn_charbuf_append_string(lsa_data,"|");
- free(temp_nl);
-
- ccn_charbuf_append_string(lsa_data,adj_lsa->body);
-
-
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-void
-make_name_lsa_invalid(struct name_prefix *np,int ls_type, long int ls_id)
-{
-
- if ( nlsr->debugging )
- printf("make_name_lsa_invalid called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"make_name_lsa_invalid called \n");
-
-
- char lst[2];
- memset(lst,0,2);
- sprintf(lst,"%d",ls_type);
-
- char lsid[10];
- memset(lsid,0,10);
- sprintf(lsid,"%ld",ls_id);
-
-
- char *key=(char *)malloc(strlen(np->name)+1+strlen(lst)+1+strlen(lsid)+1);
- memset(key,0,strlen(np->name)+1+strlen(lst)+1+strlen(lsid)+1);
-
-
- make_name_lsa_key(key, np->name,ls_type,ls_id);
-
- if ( nlsr->debugging )
- printf("Key:%s Length:%d\n",key,(int)strlen(key));
-
- struct nlsa *nlsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- int res;
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- res = hashtb_seek(e, key,strlen(key) , 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nlsa=e->data;
-
- nlsa->header->isValid=0;
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
- write_log_for_name_lsa(nlsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
-
- hashtb_delete(e);
- }
- else if( res == HT_NEW_ENTRY )
- {
- hashtb_delete(e);
- }
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- set_new_lsdb_version();
-
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
-}
-
-int
-delete_name_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
-{
-
- if ( nlsr->debugging )
- printf("delete_name_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_name_lsa called \n");
-
- if(flags == CCN_SCHEDULE_CANCEL)
- {
- return -1;
- }
-
-
-
- nlsr_lock();
-
- if ( nlsr->debugging )
- printf("LSA Key: %s \n",(char *)ev->evdata);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Key: %s \n",(char *)ev->evdata);
-
- struct nlsa *nlsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- int res;
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- res = hashtb_seek(e, (char *)ev->evdata, strlen((char *)ev->evdata), 0);
-
- if( res == HT_OLD_ENTRY )
- {
- nlsa=e->data;
- delete_npt_entry_by_router_and_name_prefix(nlsa->header->orig_router->name, nlsa->name_prefix->name);
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
- write_log_for_name_lsa(nlsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
-
- hashtb_delete(e);
- }
- else if( res == HT_NEW_ENTRY )
- {
- hashtb_delete(e);
- }
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- set_new_lsdb_version();
-
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- nlsr_unlock();
-
- return 0;
-}
-
-int
-delete_adj_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
-{
- if ( nlsr->debugging )
- printf("delete_adj_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_adj_lsa called \n");
-
- if(flags == CCN_SCHEDULE_CANCEL)
- {
- return -1;
- }
- nlsr_lock();
-
- if ( nlsr->debugging )
- printf("LSA Key: %s \n",(char *)ev->evdata);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Key: %s \n",(char *)ev->evdata);
-
- struct alsa *alsa;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- res = hashtb_seek(e, (char *)ev->evdata, strlen((char *)ev->evdata), 0);
-
- if( res == HT_OLD_ENTRY )
- {
- alsa=e->data;
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
- write_log_for_adj_lsa(alsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
-
- hashtb_delete(e);
- }
- else if( res == HT_OLD_ENTRY )
- {
- hashtb_delete(e);
- }
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- set_new_lsdb_version();
-
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
-
- if ( !nlsr->is_route_calculation_scheduled)
- {
- nlsr->event_calculate_route = ccn_schedule_event(nlsr->sched, 1000000, &route_calculate, NULL, 0);
- nlsr->is_route_calculation_scheduled=1;
- }
-
- nlsr_unlock();
-
- return 0;
-}
-
-void
-refresh_name_lsdb(void)
-{
- if ( nlsr->debugging )
- printf("refresh_name_lsdb called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_name_lsdb called \n");
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
- long int lsa_life_time;
-
- int i, name_lsdb_element;
- struct nlsa *name_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- name_lsdb_element=hashtb_n(nlsr->lsdb->name_lsdb);
-
- for(i=0;i<name_lsdb_element;i++)
- {
- name_lsa=e->data;
-
- lsa_life_time=get_time_diff(time_stamp,name_lsa->header->orig_time);
- if ( nlsr->debugging )
- printf("LSA Life Time: %ld \n",lsa_life_time);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Life Time: %ld \n",lsa_life_time);
-
- if ( strcmp(name_lsa->header->orig_router->name,nlsr->router_name) == 0)
- {
- if ( lsa_life_time > nlsr->lsa_refresh_time )
- {
- if ( name_lsa->header->isValid == NAME_LSA_VALID )
- {
- if ( nlsr->debugging )
- printf("Own Name LSA need to be refrshed\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Own Name LSA need to be refrshed\n");
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
- write_log_for_name_lsa(name_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
-
-
- char *current_time_stamp=(char *)malloc(20);
- memset(current_time_stamp,0,20);
- get_current_timestamp_micro(current_time_stamp);
-
- free(name_lsa->header->orig_time);
- name_lsa->header->orig_time=(char *)malloc(strlen(current_time_stamp)+1); //free
- memset(name_lsa->header->orig_time,0,strlen(current_time_stamp)+1);
- memcpy(name_lsa->header->orig_time,current_time_stamp,strlen(current_time_stamp)+1);
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding name lsa\n");
- write_log_for_name_lsa(name_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
-
- free(current_time_stamp);
- }
- else
- {
- char lst[2];
- memset(lst,0,2);
- sprintf(lst,"%d",name_lsa->header->ls_type);
-
- char lsid[10];
- memset(lsid,0,10);
- sprintf(lsid,"%ld",name_lsa->header->ls_id);
-
-
- char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
- memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
-
-
- make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
-
- nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_name_lsa, (void *)key, 0);
- }
-
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- set_new_lsdb_version();
-
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
-
-
- print_name_lsdb();
- }
- }
- else
- {
- if ( lsa_life_time > nlsr->router_dead_interval )
- {
- if ( nlsr->debugging )
- printf("Others Name LSA need to be deleted\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Others Name LSA need to be deleted\n");
-
- char lst[2];
- memset(lst,0,2);
- sprintf(lst,"%d",name_lsa->header->ls_type);
-
- char lsid[10];
- memset(lsid,0,10);
- sprintf(lsid,"%ld",name_lsa->header->ls_id);
-
-
- char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
- memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
-
-
- make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
-
- nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_name_lsa, (void *)key, 0);
- }
- }
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- free(time_stamp);
-
-
-}
-
-void
-refresh_adj_lsdb(void)
-{
-
- if ( nlsr->debugging )
- printf("refresh_adj_lsdb called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_adj_lsdb called \n");
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
- long int lsa_life_time;
-
- int i, adj_lsdb_element;
- struct alsa *adj_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- adj_lsdb_element=hashtb_n(nlsr->lsdb->adj_lsdb);
-
- for(i=0;i<adj_lsdb_element;i++)
- {
- adj_lsa=e->data;
-
- lsa_life_time=get_time_diff(time_stamp,adj_lsa->header->orig_time);
-
- if ( nlsr->debugging )
- printf("LSA Life Time: %ld \n",lsa_life_time);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Life Time: %ld \n",lsa_life_time);
-
- if ( strcmp(adj_lsa->header->orig_router->name,nlsr->router_name) == 0)
- {
- if ( lsa_life_time > nlsr->lsa_refresh_time )
- {
- if ( nlsr->debugging )
- printf("Own Adj LSA need to be refrshed\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Own Adj LSA need to be refrshed\n");
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
- write_log_for_adj_lsa(adj_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
-
- char *current_time_stamp=(char *)malloc(20);
- memset(current_time_stamp,0,20);
- get_current_timestamp_micro(current_time_stamp);
-
- free(adj_lsa->header->orig_time);
- adj_lsa->header->orig_time=(char *)malloc(strlen(current_time_stamp)+1); //free
- memset(adj_lsa->header->orig_time,0,strlen(current_time_stamp)+1);
- memcpy(adj_lsa->header->orig_time,current_time_stamp,strlen(current_time_stamp)+1);
-
- free(current_time_stamp);
-
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding adj lsa\n");
- write_log_for_adj_lsa(adj_lsa);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
-
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- set_new_lsdb_version();
-
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- print_adj_lsdb();
- }
- }
- else
- {
- if ( lsa_life_time > nlsr->router_dead_interval )
- {
-
- if ( nlsr->debugging )
- printf("Others Adj LSA need to be deleted\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Others Adj LSA need to be deleted\n");
-
- 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);
-
- nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_adj_lsa, (void *)key, 0);
- }
- }
-
-
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- free(time_stamp);
-}
-
-
-void
-refresh_cor_lsdb(void)
-{
-
- if ( nlsr->debugging )
- printf("refresh_cor_lsdb called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_cor_lsdb called \n");
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
- long int lsa_life_time;
-
- int i, cor_lsdb_element;
- struct clsa *cor_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->cor_lsdb, e);
- cor_lsdb_element=hashtb_n(nlsr->lsdb->cor_lsdb);
-
- for(i=0;i<cor_lsdb_element;i++)
- {
- cor_lsa=e->data;
-
- lsa_life_time=get_time_diff(time_stamp,cor_lsa->header->orig_time);
-
- if ( nlsr->debugging )
- printf("LSA Life Time: %ld \n",lsa_life_time);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Life Time: %ld \n",lsa_life_time);
-
- if ( strcmp(cor_lsa->header->orig_router->name,nlsr->router_name) == 0)
- {
- if ( lsa_life_time > nlsr->lsa_refresh_time )
- {
- if ( nlsr->debugging )
- printf("Own Cor LSA need to be refrshed\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Own Cor LSA need to be refrshed\n");
-
- //writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
- //writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
- //write_log_for_adj_lsa(adj_lsa);
- //writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
-
- char *current_time_stamp=(char *)malloc(20);
- memset(current_time_stamp,0,20);
- get_current_timestamp_micro(current_time_stamp);
-
- free(cor_lsa->header->orig_time);
- cor_lsa->header->orig_time=(char *)malloc(strlen(current_time_stamp)+1); //free
- memset(cor_lsa->header->orig_time,0,strlen(current_time_stamp)+1);
- memcpy(cor_lsa->header->orig_time,current_time_stamp,strlen(current_time_stamp)+1);
-
- free(current_time_stamp);
-
- //writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
- //writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding adj lsa\n");
- //write_log_for_adj_lsa(adj_lsa);
- //writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
-
- if ( nlsr->debugging )
- printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- set_new_lsdb_version();
-
- if ( nlsr->debugging )
- printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
- print_adj_lsdb();
- }
- }
- else
- {
- if ( lsa_life_time > nlsr->router_dead_interval )
- {
-
- if ( nlsr->debugging )
- printf("Others Adj LSA need to be deleted\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Others Adj LSA need to be deleted\n");
-
- hashtb_delete(e);
- i++;
- }
- }
-
-
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- free(time_stamp);
-}
-
-int
-refresh_lsdb(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
-{
- if(flags == CCN_SCHEDULE_CANCEL)
- {
- return -1;
- }
-
- nlsr_lock();
-
- if ( nlsr->debugging )
- printf("refresh_lsdb called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_lsdb called\n");
-
- refresh_name_lsdb();
- refresh_adj_lsdb();
- refresh_cor_lsdb();
-
- nlsr->event = ccn_schedule_event(nlsr->sched, 60000000, &refresh_lsdb, NULL, 0);
-
- nlsr_unlock();
- return 0;
-}
-
-void
-write_adj_lsa_to_repo(char *repo_content_prefix, struct name_prefix *lsa_id)
-{
- if ( nlsr->debugging )
- printf("write_adj_lsa_to_repo called\n");
- if ( nlsr->debugging )
- printf("Content Prefix: %s\n",repo_content_prefix);
-
- struct ccn_charbuf *lsa_data=ccn_charbuf_create();
- get_adj_lsa_data(lsa_data,lsa_id);
- if ( nlsr->debugging )
- printf("Adj 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)
-{
- if ( nlsr->debugging )
- printf("write_name_lsa_to_repo called\n");
- if ( nlsr->debugging )
- printf("Content Prefix: %s\n",repo_content_prefix);
-
- struct ccn_charbuf *lsa_data=ccn_charbuf_create();
- get_name_lsa_data(lsa_data,lsa_id);
-
- if ( nlsr->debugging )
- 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_lsdb_to_repo(char *slice_prefix)
-{
- int i, name_lsdb_element;
-
- struct nlsa *name_lsa;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- name_lsdb_element=hashtb_n(nlsr->lsdb->name_lsdb);
-
- for(i=0;i<name_lsdb_element;i++)
- {
- name_lsa=e->data;
-
- char lst[2];
- memset(lst,0,2);
- sprintf(lst,"%d",name_lsa->header->ls_type);
-
- char lsid[10];
- memset(lsid,0,10);
- sprintf(lsid,"%ld",name_lsa->header->ls_id);
-
-
- char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
- memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
-
-
- make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
-
- if ( nlsr->debugging )
- printf("Name LSA Key: %s \n",key);
-
-
- char *repo_key=(char *)malloc(strlen(slice_prefix)+1+strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1+strlen(name_lsa->header->orig_time)+1);
- memset(repo_key,0,strlen(slice_prefix)+1+strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1+strlen(name_lsa->header->orig_time)+1);
- make_name_lsa_prefix_for_repo(repo_key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id,name_lsa->header->orig_time,slice_prefix);
-
- if ( nlsr->debugging )
- printf("Name LSA Repo Key: %s \n",repo_key);
-
- struct name_prefix *lsaid=(struct name_prefix *)malloc(sizeof(struct name_prefix));
- lsaid->name=(char *)malloc(strlen(key)+1);
- memset(lsaid->name, 0, strlen(key)+1);
- memcpy(lsaid->name,key,strlen(key));
- lsaid->length=strlen(key)+1;
-
-
- write_name_lsa_to_repo(repo_key, lsaid);
-
- free(key);
- free(repo_key);
- free(lsaid->name);
- free(lsaid);
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-
-}
-
-void
-print_cor_lsa(struct clsa *cor_lsa)
-{
- if ( nlsr->debugging )
- {
- printf("-----------Cor LSA Content---------------\n");
- printf(" Origination Router : %s\n",cor_lsa->header->orig_router->name);
- printf(" Origination Router Length: %d\n",cor_lsa->header->orig_router->length);
- printf(" LS Type : %d\n",cor_lsa->header->ls_type);
- printf(" Origination Time : %s\n",cor_lsa->header->orig_time);
- printf(" LSA Data \n");
- printf(" Cor R: : %f\n",cor_lsa->cor_r);
- printf(" Cor Theta : %f\n",cor_lsa->cor_theta);
-
- printf("\n");
- }
-}
-
-void
-print_cor_lsdb()
-{
-
- if ( nlsr->debugging )
- printf("print_cor_lsdb called \n");
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- int i=1;
-
- for (hashtb_start(nlsr->lsdb->cor_lsdb, e); e->key != NULL; hashtb_next(e))
- {
- if ( nlsr->debugging )
- printf("-----------Cor LSA (%d)---------------\n",i);
- struct clsa *cor_lsa=e->data;
- print_cor_lsa(cor_lsa);
- i++;
- }
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-}
-
-void
-install_cor_lsa(struct clsa *cor_lsa)
-{
- if ( nlsr->debugging )
- printf("install_cor_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"install_cor_lsa called \n");
-
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
-
- char *key=(char *)malloc(cor_lsa->header->orig_router->length+2+2);
- memset(key,0,cor_lsa->header->orig_router->length+2);
- make_cor_lsa_key(key,cor_lsa);
-
- if ( nlsr->debugging )
- printf("Cor LSA key: %s \n",key);
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->lsdb->cor_lsdb, e);
- res = hashtb_seek(e, key, strlen(key), 0);
-
- if ( res == HT_NEW_ENTRY )
- {
- if ( nlsr->debugging )
- printf("New Cor LSA... \n");
-
- struct clsa *new_cor_lsa=(struct clsa *)malloc(sizeof( struct clsa ));
- new_cor_lsa=e->data;
- new_cor_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
-
- new_cor_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- new_cor_lsa->header->orig_router->name=(char *)malloc(strlen(cor_lsa->header->orig_router->name)+1);
- memset(new_cor_lsa->header->orig_router->name,0,strlen(cor_lsa->header->orig_router->name)+1);
- memcpy(new_cor_lsa->header->orig_router->name,cor_lsa->header->orig_router->name,strlen(cor_lsa->header->orig_router->name)+1);
- new_cor_lsa->header->orig_router->length=cor_lsa->header->orig_router->length;
-
- new_cor_lsa->header->orig_time=(char *)malloc(strlen(cor_lsa->header->orig_time)+1); //free
- memset(new_cor_lsa->header->orig_time,0,strlen(cor_lsa->header->orig_time)+1);
- memcpy(new_cor_lsa->header->orig_time,cor_lsa->header->orig_time,strlen(cor_lsa->header->orig_time)+1);
-
- new_cor_lsa->header->ls_type=cor_lsa->header->ls_type;
-
- new_cor_lsa->cor_r=cor_lsa->cor_r;
- new_cor_lsa->cor_theta=cor_lsa->cor_theta;
- }
- else if ( res == HT_OLD_ENTRY )
- {
- if ( nlsr->debugging )
- printf("Cor LSA exists (Old)... \n");
- }
- hashtb_end(e);
-
- free(key);
-
-}
-
-void
-build_cor_lsa(struct clsa *cor_lsa, double cor_r, double cor_theta)
-{
- cor_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
- cor_lsa->header->ls_type=LS_TYPE_COR;
-
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
- get_current_timestamp_micro(time_stamp);
-
- cor_lsa->header->orig_time=(char *)malloc(strlen(time_stamp)+1); //free
- memset(cor_lsa->header->orig_time,0,strlen(time_stamp)+1);
- memcpy(cor_lsa->header->orig_time,time_stamp,strlen(time_stamp)+1);
- free(time_stamp);
-
- cor_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- cor_lsa->header->orig_router->name=(char *)malloc(strlen(nlsr->router_name)+1);
- memset(cor_lsa->header->orig_router->name,0,strlen(nlsr->router_name)+1);
- memcpy(cor_lsa->header->orig_router->name,nlsr->router_name,strlen(nlsr->router_name)+1);
- cor_lsa->header->orig_router->length=strlen(nlsr->router_name)+1;
-
- cor_lsa->cor_r=cor_r;
- cor_lsa->cor_theta=cor_theta;
-
-}
-
-void
-build_others_cor_lsa(struct clsa *cor_lsa,char *orig_router, int ls_type,char *orig_time, double cor_r, double cor_theta)
-{
- cor_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
- cor_lsa->header->ls_type=ls_type;
-
- cor_lsa->header->orig_time=(char *)malloc(strlen(orig_time)+1);
- memset(cor_lsa->header->orig_time,0,strlen(orig_time)+1);
- memcpy(cor_lsa->header->orig_time,orig_time,strlen(orig_time)+1);
-
- cor_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- cor_lsa->header->orig_router->name=(char *)malloc(strlen(orig_router)+1);
- memset(cor_lsa->header->orig_router->name,0,strlen(orig_router)+1);
- memcpy(cor_lsa->header->orig_router->name,orig_router,strlen(orig_router)+1);
- cor_lsa->header->orig_router->length=strlen(orig_router)+1;
-
- cor_lsa->cor_r=cor_r;
- cor_lsa->cor_theta=cor_theta;
-
-}
-
-void
-build_and_install_others_cor_lsa(char *orig_router,int ls_type,char *orig_time, double cor_r, double cor_theta)
-{
- struct clsa *cor_lsa=(struct clsa *)malloc(sizeof( struct clsa ));
- build_others_cor_lsa(cor_lsa,orig_router,ls_type, orig_time, cor_r, cor_theta);
- install_cor_lsa(cor_lsa);
-
- print_cor_lsdb();
-
- free(cor_lsa->header->orig_router);
- free(cor_lsa->header->orig_time);
- free(cor_lsa->header);
- free(cor_lsa);
-
-}
-
-
-void
-build_and_install_cor_lsa()
-{
-
- struct clsa *cor_lsa=(struct clsa *)malloc(sizeof( struct clsa ));
-
- build_cor_lsa(cor_lsa,nlsr->cor_r,nlsr->cor_theta);
- install_cor_lsa(cor_lsa);
-
- write_cor_lsa_to_repo(cor_lsa);
-
- print_cor_lsdb();
-
- free(cor_lsa->header->orig_router);
- free(cor_lsa->header->orig_time);
- free(cor_lsa->header);
- free(cor_lsa);
-
-}
-
-void
-get_cor_lsa_data(struct ccn_charbuf *lsa_data,char *cor_lsa_key)
-{
- if ( nlsr->debugging )
- printf("get_cor_lsa_data called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_adj_lsa_data called \n");
-
- struct clsa *cor_lsa=(struct clsa*)malloc(sizeof(struct clsa ));
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->lsdb->cor_lsdb, e);
- res = hashtb_seek(e, cor_lsa_key, strlen(cor_lsa_key), 0);
-
- if( res == HT_OLD_ENTRY )
- {
- cor_lsa=e->data;
-
- if ( nlsr->debugging )
- printf("Cor LSA found \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Cor LSA found \n");
-
- ccn_charbuf_append_string(lsa_data,cor_lsa->header->orig_router->name);
- ccn_charbuf_append_string(lsa_data,"|");
-
- char *temp_length=(char *)malloc(20);
- memset(temp_length,0,20);
- sprintf(temp_length,"%d",cor_lsa->header->orig_router->length);
- ccn_charbuf_append_string(lsa_data,temp_length);
- ccn_charbuf_append_string(lsa_data,"|");
- free(temp_length);
-
- char *temp_ltype=(char *)malloc(20);
- memset(temp_ltype,0,20);
- sprintf(temp_ltype,"%d",cor_lsa->header->ls_type);
- ccn_charbuf_append_string(lsa_data,temp_ltype);
- ccn_charbuf_append_string(lsa_data,"|");
- free(temp_ltype);
-
- ccn_charbuf_append_string(lsa_data,cor_lsa->header->orig_time);
- ccn_charbuf_append_string(lsa_data,"|");
-
- char *cor_r=(char *)malloc(20);
- memset(cor_r,0,20);
- sprintf(cor_r,"%f",cor_lsa->cor_r);
- ccn_charbuf_append_string(lsa_data,cor_r);
- ccn_charbuf_append_string(lsa_data,"|");
- free(cor_r);
-
- char *cor_theta=(char *)malloc(20);
- memset(cor_theta,0,20);
- sprintf(cor_theta,"%f",cor_lsa->cor_theta);
- ccn_charbuf_append_string(lsa_data,cor_theta);
- ccn_charbuf_append_string(lsa_data,"|");
- free(cor_theta);
-
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-void
-write_cor_lsa_to_repo(struct clsa *cor_lsa)
-{
-
-
- if ( nlsr->debugging )
- printf("write_cor_lsa_to_repo called\n");
-
-
- char *key=(char *)malloc(cor_lsa->header->orig_router->length+2+2);
- memset(key,0,cor_lsa->header->orig_router->length+2+2);
- make_cor_lsa_key(key,cor_lsa);
-
- struct ccn_charbuf *lsa_data=ccn_charbuf_create();
- get_cor_lsa_data(lsa_data,key);
-
- if ( nlsr->debugging )
- printf("Cor LSA Data: %s \n",ccn_charbuf_as_string(lsa_data));
- char *lst=(char *)malloc(20);
- memset(lst,0,20);
- sprintf(lst,"%d",cor_lsa->header->ls_type);
- char *repo_key=(char *)malloc(strlen(nlsr->slice_prefix)+strlen(cor_lsa->header->orig_time)+strlen(cor_lsa->header->orig_router->name) + strlen(lst) + 5);
- memset(repo_key, 0, strlen(nlsr->slice_prefix)+strlen(cor_lsa->header->orig_time)+strlen(cor_lsa->header->orig_router->name) + strlen(lst) + 5);
- make_cor_lsa_prefix_for_repo(repo_key, cor_lsa->header->orig_router->name,LS_TYPE_COR,cor_lsa->header->orig_time,nlsr->slice_prefix);
-
- if ( nlsr->debugging )
- printf("Cor LSA Repo Key: %s \n",repo_key);
-
- write_data_to_repo(ccn_charbuf_as_string(lsa_data), repo_key);
-
-
-
- free(lst);
- free(key);
- free(repo_key);
- ccn_charbuf_destroy(&lsa_data);
-}
-
-void
-make_cor_lsa_key_by_router_name(char *key,char *router_name)
-{
- memcpy(key+strlen(key),router_name,strlen(router_name));
- memcpy(key+strlen(key),"/",1);
- char ls_type[2];
- sprintf(ls_type,"%d",LS_TYPE_COR);
- memcpy(key+strlen(key),ls_type,strlen(ls_type));
- key[strlen(key)]='\0';
-}
-
-
-double
-get_hyperbolic_r(char *router)
-{
- double ret=-1.0;
- char *cor_lsa_key=(char *)calloc(strlen(router)+4,sizeof(char));
- make_cor_lsa_key_by_router_name(cor_lsa_key,router);
-
-
- struct clsa *cor_lsa;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->lsdb->cor_lsdb, e);
- res = hashtb_seek(e, cor_lsa_key, strlen(cor_lsa_key), 0);
-
- if ( res == HT_OLD_ENTRY)
- {
- cor_lsa=e->data;
- ret=cor_lsa->cor_r;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- free(cor_lsa_key);
- return ret;
-}
-
-double
-get_hyperbolic_theta(char *router)
-{
- double ret=-1.0;
- char *cor_lsa_key=(char *)calloc(strlen(router)+4,sizeof(char));
- make_cor_lsa_key_by_router_name(cor_lsa_key,router);
-
- struct clsa *cor_lsa;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->lsdb->cor_lsdb, e);
- res = hashtb_seek(e, cor_lsa_key, strlen(cor_lsa_key), 0);
-
- if ( res == HT_OLD_ENTRY)
- {
- cor_lsa=e->data;
- ret=cor_lsa->cor_theta;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- free(cor_lsa_key);
- return ret;
-}
diff --git a/nlsr-sync-0.0/nlsr_lsdb.h b/nlsr-sync-0.0/nlsr_lsdb.h
deleted file mode 100755
index c67348e..0000000
--- a/nlsr-sync-0.0/nlsr_lsdb.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef _NLSR_LSDB_H_
-#define _NLSR_LSDB_H_
-
-#define LS_TYPE_ADJ 1
-#define LS_TYPE_NAME 2
-#define LS_TYPE_COR 3
-
-struct link
-{
- struct name_prefix *nbr;
- int face;
- int metric;
-};
-
-
-struct alsa_header
-{
- unsigned int ls_type;
- char *orig_time;
- struct name_prefix *orig_router;
-
-};
-
-struct alsa
-{
- struct alsa_header *header;
- int no_link;
- struct link *links;
- char * body;
-};
-
-struct nlsa_header
-{
- unsigned int ls_type;
- char *orig_time;
- long int ls_id;
- struct name_prefix *orig_router;
- unsigned int isValid;
-
-};
-
-struct nlsa
-{
- struct nlsa_header *header;
- struct name_prefix *name_prefix;
-};
-
-struct clsa
-{
- struct alsa_header *header;
- double cor_r;
- double cor_theta;
-};
-
-
-void set_new_lsdb_version(void);
-void build_and_install_name_lsas(void);
-void build_and_install_single_name_lsa(struct name_prefix *np);
-void build_name_lsa(struct nlsa *name_lsa, struct name_prefix *np);
-void install_name_lsa(struct nlsa *name_lsa);
-void print_name_lsa(struct nlsa *name_lsa);
-void write_log_for_name_lsa(struct nlsa *name_lsa);
-void print_name_lsdb(void);
-void build_and_install_others_name_lsa(char *orig_router,int ls_type,long int ls_id,char *orig_time, int isValid,char *np);
-void build_others_name_lsa(struct nlsa *name_lsa, char *orig_router,int ls_type,long int ls_id, char *orig_time, int isValid, char *np);
-void make_name_lsa_key(char *key, char *orig_router, int ls_type, long int ls_id);
-int refresh_lsdb(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
-
-int build_and_install_adj_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
-void build_adj_lsa(struct alsa * adj_lsa);
-void install_adj_lsa(struct alsa * adj_lsa);
-void print_adj_lsa_body(const char *body, int no_link);
-void print_adj_lsa(struct alsa * adj_lsa);
-void write_log_for_adj_lsa(struct alsa * adj_lsa);
-void print_adj_lsdb(void);
-void make_adj_lsa_key(char *key,struct alsa *adj_lsa);
-void build_and_install_others_adj_lsa(char *orig_router,int ls_type,char *orig_time, int no_link,char *data);
-void build_others_adj_lsa(struct alsa *adj_lsa,char *orig_router,int ls_type,char *orig_time,int no_link,char *data);
-
-long int get_name_lsdb_num_element(void);
-long int get_adj_lsdb_num_element(void);
-
-int check_is_new_name_lsa(char *orig_router,char *lst,char *lsid,char *orig_time);
-int check_is_new_adj_lsa(char *orig_router,char *lst,char *orig_time);
-int check_is_new_cor_lsa(char *orig_router,char *lst,char *orig_time);
-
-void get_name_lsa_data(struct ccn_charbuf *lsa_data,struct name_prefix *lsaId);
-void get_adj_lsa_data(struct ccn_charbuf *lsa_data,struct name_prefix *lsaId);
-
-void make_name_lsa_invalid(struct name_prefix *np,int ls_type, long int ls_id);
-
-void build_and_install_cor_lsa();
-void print_cor_lsdb();
-
-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);
-
-void write_cor_lsa_to_repo(struct clsa *cor_lsa);
-void build_and_install_others_cor_lsa(char *orig_router,int ls_type,char *orig_time, double cor_r, double cor_theta);
-double get_hyperbolic_r(char *router);
-double get_hyperbolic_theta(char *router);
-
-#endif
diff --git a/nlsr-sync-0.0/nlsr_ndn.c b/nlsr-sync-0.0/nlsr_ndn.c
deleted file mode 100755
index 6ad79d5..0000000
--- a/nlsr-sync-0.0/nlsr_ndn.c
+++ /dev/null
@@ -1,726 +0,0 @@
-#include<stdio.h>
-#include<string.h>
-#include<stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/time.h>
-#include <assert.h>
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include <ccn/ccn.h>
-#include <ccn/uri.h>
-#include <ccn/keystore.h>
-#include <ccn/signing.h>
-#include <ccn/schedule.h>
-#include <ccn/hashtb.h>
-
-#include "nlsr.h"
-#include "nlsr_ndn.h"
-#include "nlsr_npl.h"
-#include "nlsr_adl.h"
-#include "nlsr_lsdb.h"
-#include "utility.h"
-
-int
-appendLifetime(struct ccn_charbuf *cb, int lifetime)
-{
- unsigned char buf[sizeof(int32_t)];
- int32_t dreck = lifetime << 12;
- int pos = sizeof(int32_t);
- int res = 0;
- while (dreck > 0 && pos > 0)
- {
- pos--;
- buf[pos] = dreck & 255;
- dreck = dreck >> 8;
- }
- res |= ccnb_append_tagged_blob(cb, CCN_DTAG_InterestLifetime, buf+pos, sizeof(buf)-pos);
- return res;
-}
-
-
-void
-get_nbr(struct name_prefix *nbr,struct ccn_closure *selfp, struct ccn_upcall_info *info)
-{
- if ( nlsr->debugging )
- printf("get_nbr called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_nbr called\n");
-
- int res,i;
- int nlsr_position=0;
- int name_comps=(int)info->interest_comps->n;
- int len=0;
-
- for(i=0;i<name_comps;i++)
- {
- res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
- if( res == 0)
- {
- nlsr_position=i;
- break;
- }
- }
-
-
- const unsigned char *comp_ptr1;
- size_t comp_size;
- for(i=0;i<nlsr_position;i++)
- {
- res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,i,&comp_ptr1, &comp_size);
- len+=1;
- len+=(int)comp_size;
- }
- len++;
-
- char *neighbor=(char *)malloc(len);
- memset(neighbor,0,len);
-
- for(i=0; i<nlsr_position;i++)
- {
- res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,i,&comp_ptr1, &comp_size);
- memcpy(neighbor+strlen(neighbor),"/",1);
- memcpy(neighbor+strlen(neighbor),(char *)comp_ptr1,strlen((char *)comp_ptr1));
-
- }
-
- nbr->name=(char *)malloc(strlen(neighbor)+1);
- memcpy(nbr->name,neighbor,strlen(neighbor)+1);
- nbr->length=strlen(neighbor)+1;
-
- if ( nlsr->debugging )
- printf("Neighbor: %s Length: %d\n",nbr->name,nbr->length);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Neighbor: %s Length: %d\n",nbr->name,nbr->length);
-
-
-
-}
-
-void
-get_lsa_identifier(struct name_prefix *lsaId,struct ccn_closure *selfp, struct ccn_upcall_info *info, int offset)
-{
-
- //printf("get_lsa_identifier called\n");
-
- if ( nlsr->debugging )
- printf("get_lsa_identifier called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_lsa_identifier called\n");
-
- int res,i;
- int nlsr_position=0;
- int name_comps=(int)info->interest_comps->n;
- int len=0;
-
- for(i=0;i<name_comps;i++)
- {
- res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
- if( res == 0)
- {
- nlsr_position=i;
- break;
- }
- }
-
-
- const unsigned char *comp_ptr1;
- size_t comp_size;
- for(i=nlsr_position+3+offset;i<info->interest_comps->n-1;i++)
- {
- res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,i,&comp_ptr1, &comp_size);
- len+=1;
- len+=(int)comp_size;
- }
- len++;
-
- char *neighbor=(char *)malloc(len);
- memset(neighbor,0,len);
-
- for(i=nlsr_position+3+offset; i<info->interest_comps->n-1;i++)
- {
- res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,i,&comp_ptr1, &comp_size);
- memcpy(neighbor+strlen(neighbor),"/",1);
- memcpy(neighbor+strlen(neighbor),(char *)comp_ptr1,strlen((char *)comp_ptr1));
-
- }
-
- lsaId->name=(char *)malloc(strlen(neighbor)+1);
- memset(lsaId->name,0,strlen(neighbor)+1);
- memcpy(lsaId->name,neighbor,strlen(neighbor)+1);
- lsaId->length=strlen(neighbor)+1;
-
- if ( nlsr->debugging )
- printf("LSA Identifier: %s Length: %d\n",lsaId->name,lsaId->length-1);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Identifier: %s Length: %d\n",lsaId->name,lsaId->length-1);
-
- //printf("LSA Identifier: %s Length: %d\n",lsaId->name,lsaId->length-1);
-
-
-}
-
-int
-get_ls_type(struct ccn_closure *selfp, struct ccn_upcall_info *info)
-{
- int res,i;
- int nlsr_position=0;
- int name_comps=(int)info->interest_comps->n;
-
- int ret=0;
-
- for(i=0;i<name_comps;i++)
- {
- res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
- if( res == 0)
- {
- nlsr_position=i;
- break;
- }
- }
-
-
- const unsigned char *comp_ptr1;
- size_t comp_size;
- res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,nlsr_position+2,&comp_ptr1, &comp_size);
-
- ret=atoi((char *)comp_ptr1);
-
- return ret;
-
-}
-
-void
-get_lsdb_version(char *lsdb_version,struct ccn_closure *selfp, struct ccn_upcall_info *info )
-{
- const unsigned char *comp_ptr1;
- size_t comp_size;
- ccn_name_comp_get(info->content_ccnb, info->content_comps,info->content_comps->n-2,&comp_ptr1, &comp_size);
- memcpy(lsdb_version,(char *)comp_ptr1,(int)comp_size);
-
-}
-
-
-/* Call back function registered in ccnd to get all interest coming to NLSR application */
-
-enum ccn_upcall_res
-incoming_interest(struct ccn_closure *selfp,
- enum ccn_upcall_kind kind, struct ccn_upcall_info *info)
-{
-
- nlsr_lock();
-
- switch (kind) {
- case CCN_UPCALL_FINAL:
- break;
- case CCN_UPCALL_INTEREST:
- // printing the name prefix for which it received interest
- if ( nlsr->debugging )
- printf("Interest Received for name: ");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Interest Received for name: ");
-
- struct ccn_charbuf*c;
- c=ccn_charbuf_create();
- ccn_uri_append(c,info->interest_ccnb,info->pi->offset[CCN_PI_E_Name],0);
-
- if ( nlsr->debugging )
- printf("%s\n",ccn_charbuf_as_string(c));
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"%s\n",ccn_charbuf_as_string(c));
-
- ccn_charbuf_destroy(&c);
-
- process_incoming_interest(selfp, info);
-
- break;
-
- default:
- break;
- }
-
- nlsr_unlock();
-
- return CCN_UPCALL_RESULT_OK;
-}
-
-/* Function for processing incoming interest and reply with content/NACK content */
-
-void
-process_incoming_interest(struct ccn_closure *selfp, struct ccn_upcall_info *info)
-{
- if ( nlsr->debugging )
- printf("process_incoming_interest called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_interest called \n");
-
- const unsigned char *comp_ptr1;
- size_t comp_size;
- int res,i;
- int nlsr_position=0;
- int name_comps=(int)info->interest_comps->n;
-
- for(i=0;i<name_comps;i++)
- {
- res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
- if( res == 0)
- {
- nlsr_position=i;
- break;
- }
- }
-
- res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,nlsr_position+1,&comp_ptr1, &comp_size);
-
-
- if(!strcmp((char *)comp_ptr1,"info"))
- {
- process_incoming_interest_info(selfp,info);
- }
-
-}
-
-void
-process_incoming_interest_info(struct ccn_closure *selfp, struct ccn_upcall_info *info)
-{
- if ( nlsr->debugging )
- {
- printf("process_incoming_interest_info called \n");
- printf("Sending Info Content back.....\n");
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_interest_info called \n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending Info Content back.....\n");
- }
-
-
- int res;
- struct ccn_charbuf *data=ccn_charbuf_create();
- struct ccn_charbuf *name=ccn_charbuf_create();
- struct ccn_signing_params sp=CCN_SIGNING_PARAMS_INIT;
-
- res=ccn_charbuf_append(name, info->interest_ccnb + info->pi->offset[CCN_PI_B_Name],info->pi->offset[CCN_PI_E_Name] - info->pi->offset[CCN_PI_B_Name]);
- if (res >= 0)
- {
- sp.template_ccnb=ccn_charbuf_create();
- ccn_charbuf_append_tt(sp.template_ccnb,CCN_DTAG_SignedInfo, CCN_DTAG);
- ccnb_tagged_putf(sp.template_ccnb, CCN_DTAG_FreshnessSeconds, "%ld", 10);
- sp.sp_flags |= CCN_SP_TEMPL_FRESHNESS;
- ccn_charbuf_append_closer(sp.template_ccnb);
-
-
- char *raw_data=(char *)malloc(16);
- memset(raw_data,0,16);
- sprintf(raw_data,"%ld", nlsr->lsdb_synch_interval);
-
- res= ccn_sign_content(nlsr->ccn, data, name, &sp, raw_data,strlen(raw_data));
- if(res >= 0)
- {
- if ( nlsr->debugging )
- printf("Signing info Content is successful \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Signing info Content is successful \n");
-
- }
- res=ccn_put(nlsr->ccn,data->buf,data->length);
- if(res >= 0)
- {
- if ( nlsr->debugging )
- printf("Sending Info Content is successful \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending info Content is successful \n");
- }
-
-
-
- struct name_prefix *nbr=(struct name_prefix * )malloc(sizeof(struct name_prefix *));
- get_lsa_identifier(nbr,selfp,info,-1);
-
- if ( nlsr->debugging )
- printf("Neighbor : %s Length : %d Status : %d\n",nbr->name,nbr->length,get_adjacent_status(nbr));
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Neighbor : %s Length : %d Status : %d\n",nbr->name,nbr->length,get_adjacent_status(nbr));
-
- //printf("Neighbor : %s Length : %d Status : %d\n",nbr->name,nbr->length,get_adjacent_status(nbr));
-
-
- if( get_adjacent_status(nbr) == 0 && get_timed_out_number(nbr)>=nlsr->interest_retry )
- {
- update_adjacent_timed_out_zero_to_adl(nbr);
- send_info_interest_to_neighbor(nbr);
- }
-
- free(nbr);
- free(raw_data);
- ccn_charbuf_destroy(&sp.template_ccnb);
- }
-
- ccn_charbuf_destroy(&data);
- ccn_charbuf_destroy(&name);
-
-}
-
-
-/* Call back function registered in ccnd to get all content coming to NLSR application */
-
-enum ccn_upcall_res incoming_content(struct ccn_closure* selfp,
- enum ccn_upcall_kind kind, struct ccn_upcall_info* info)
-{
-
- nlsr_lock();
-
- switch(kind) {
- case CCN_UPCALL_FINAL:
- break;
- case CCN_UPCALL_CONTENT:
- if ( nlsr->debugging )
- printf("Content Received for Name: ");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Content Received for Name: ");
-
- struct ccn_charbuf*c;
- c=ccn_charbuf_create();
- ccn_uri_append(c,info->interest_ccnb,info->pi->offset[CCN_PI_E],0);
- if ( nlsr->debugging )
- printf("%s\n",ccn_charbuf_as_string(c));
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"%s\n",ccn_charbuf_as_string(c));
-
- ccn_charbuf_destroy(&c);
-
- process_incoming_content(selfp,info);
-
- break;
- case CCN_UPCALL_INTEREST_TIMED_OUT:
- //printf("Interest Timed Out Received for Name: ");
- if ( nlsr->debugging )
- printf("Interest Timed Out Received for Name: ");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Interest Timed Out Received for Name: ");
-
- struct ccn_charbuf*ito;
- ito=ccn_charbuf_create();
- ccn_uri_append(ito,info->interest_ccnb,info->pi->offset[CCN_PI_E],0);
-
- if ( nlsr->debugging )
- printf("%s\n",ccn_charbuf_as_string(ito));
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"%s\n",ccn_charbuf_as_string(ito));
-
- //printf("%s\n",ccn_charbuf_as_string(ito));
- ccn_charbuf_destroy(&ito);
-
- process_incoming_timed_out_interest(selfp,info);
-
- break;
- default:
- fprintf(stderr, "Unexpected response of kind %d\n", kind);
- if ( nlsr->debugging )
- printf("Unexpected response of kind %d\n", kind);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Unexpected response of kind %d\n", kind);
- break;
- }
-
- nlsr_unlock();
-
- return CCN_UPCALL_RESULT_OK;
-}
-
-
-void
-process_incoming_content(struct ccn_closure *selfp, struct ccn_upcall_info* info)
-{
- if ( nlsr->debugging )
- printf("process_incoming_content called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_content called \n");
-
- const unsigned char *comp_ptr1;
- size_t comp_size;
- int res,i;
- int nlsr_position=0;
- int name_comps=(int)info->interest_comps->n;
-
- for(i=0;i<name_comps;i++)
- {
- res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
- if( res == 0)
- {
- nlsr_position=i;
- break;
- }
- }
-
- res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,nlsr_position+1,&comp_ptr1, &comp_size);
-
-
- if(!strcmp((char *)comp_ptr1,"info"))
- {
- process_incoming_content_info(selfp,info);
- }
-
-}
-
-
-void
-process_incoming_content_info(struct ccn_closure *selfp, struct ccn_upcall_info* info)
-{
- if ( nlsr->debugging )
- printf("process_incoming_content_info called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_content_info called \n");
-
- struct name_prefix *nbr=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- get_nbr(nbr,selfp,info);
-
- if ( nlsr->debugging )
- printf("Info Content Received For Neighbor: %s Length:%d\n",nbr->name,nbr->length);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Info Content Received For Neighbor: %s Length:%d\n",nbr->name,nbr->length);
-
-
- const unsigned char *ptr;
- size_t length;
- ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E_Content]-info->pco->offset[CCN_PCO_B_Content], info->pco, &ptr, &length);
-
- long int interval=atoi((char *)ptr);
-
-
-
- update_adjacent_timed_out_zero_to_adl(nbr);
- update_adjacent_status_to_adl(nbr,NBR_ACTIVE);
- update_lsdb_synch_interval_to_adl(nbr,interval);
- print_adjacent_from_adl();
-
-
-
- if(!nlsr->is_build_adj_lsa_sheduled)
- {
- if ( nlsr->debugging )
- printf("Scheduling Build and Install Adj LSA...\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Scheduling Build and Install Adj LSA...\n");
- nlsr->event_build_adj_lsa = ccn_schedule_event(nlsr->sched, 100000, &build_and_install_adj_lsa, NULL, 0);
- nlsr->is_build_adj_lsa_sheduled=1;
- }
- else
- {
- if ( nlsr->debugging )
- printf("Build and Install Adj LSA already scheduled\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Build and Install Adj LSA already scheduled\n");
- }
-
-
- free(nbr);
-
-
-}
-
-
-
-
-void
-process_incoming_timed_out_interest(struct ccn_closure* selfp, struct ccn_upcall_info* info)
-{
-
-
- if ( nlsr->debugging )
- printf("process_incoming_timed_out_interest called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_timed_out_interest called \n");
-
- int res,i;
- int nlsr_position=0;
- int name_comps=(int)info->interest_comps->n;
-
- for(i=0;i<name_comps;i++)
- {
- res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
- if( res == 0)
- {
- nlsr_position=i;
- break;
- }
- }
-
- if(ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,nlsr_position+1,"info") == 0)
- {
- process_incoming_timed_out_interest_info(selfp,info);
- }
-}
-
-void
-process_incoming_timed_out_interest_info(struct ccn_closure* selfp, struct ccn_upcall_info* info)
-{
-
- if ( nlsr->debugging )
- printf("process_incoming_timed_out_interest_info called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_timed_out_interest_info called \n");
-
- struct name_prefix *nbr=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- get_nbr(nbr,selfp,info);
-
- if ( nlsr->debugging )
- printf("Info Interest Timed Out for for Neighbor: %s Length:%d\n",nbr->name,nbr->length);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Info Interest Timed Out for for Neighbor: %s Length:%d\n",nbr->name,nbr->length);
-
-
-
- update_adjacent_timed_out_to_adl(nbr,1);
- print_adjacent_from_adl();
- int timed_out=get_timed_out_number(nbr);
-
- if ( nlsr->debugging )
- printf("Neighbor: %s Info Interest Timed Out: %d times\n",nbr->name,timed_out);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Neighbor: %s Info Interest Timed Out: %d times\n",nbr->name,timed_out);
-
-
- if(timed_out<nlsr->interest_retry && timed_out>0) // use configured variables
- {
- send_info_interest_to_neighbor(nbr);
- }
- else
- {
- update_adjacent_status_to_adl(nbr,NBR_DOWN);
- if(!nlsr->is_build_adj_lsa_sheduled)
- {
- nlsr->event_build_adj_lsa = ccn_schedule_event(nlsr->sched, 1000, &build_and_install_adj_lsa, NULL, 0);
- nlsr->is_build_adj_lsa_sheduled=1;
- }
- }
-
- free(nbr);
-
-
-}
-
-
-int
-send_info_interest(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
-{
- if(flags == CCN_SCHEDULE_CANCEL)
- {
- return -1;
- }
-
- nlsr_lock();
-
- if ( nlsr->debugging )
- printf("send_info_interest called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"send_info_interest called \n");
-
- if ( nlsr->debugging )
- printf("\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-
- int adl_element,i;
- struct ndn_neighbor *nbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- adl_element=hashtb_n(nlsr->adl);
-
- for(i=0;i<adl_element;i++)
- {
- nbr=e->data;
- send_info_interest_to_neighbor(nbr->neighbor);
- hashtb_next(e);
- }
- hashtb_end(e);
-
- nlsr_unlock();
-
- nlsr->event = ccn_schedule_event(nlsr->sched, 60000000, &send_info_interest, NULL, 0);
-
- return 0;
-}
-
-void
-send_info_interest_to_neighbor(struct name_prefix *nbr)
-{
-
- if ( nlsr->debugging )
- printf("send_info_interest_to_neighbor called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"send_info_interest_to_neighbor called \n");
-
-
- int res;
- char info_str[5];
- char nlsr_str[5];
-
- memset(&nlsr_str,0,5);
- sprintf(nlsr_str,"nlsr");
- memset(&info_str,0,5);
- sprintf(info_str,"info");
-
-
- struct ccn_charbuf *name;
- name=ccn_charbuf_create();
-
- char *int_name=(char *)malloc(strlen(nbr->name)+1+strlen(nlsr_str)+1+strlen(info_str)+strlen(nlsr->router_name)+1);
- memset(int_name,0,strlen(nbr->name)+1+strlen(nlsr_str)+1+strlen(info_str)+strlen(nlsr->router_name)+1);
- memcpy(int_name+strlen(int_name),nbr->name,strlen(nbr->name));
- memcpy(int_name+strlen(int_name),"/",1);
- memcpy(int_name+strlen(int_name),nlsr_str,strlen(nlsr_str));
- memcpy(int_name+strlen(int_name),"/",1);
- memcpy(int_name+strlen(int_name),info_str,strlen(info_str));
- memcpy(int_name+strlen(int_name),nlsr->router_name,strlen(nlsr->router_name));
-
-
- res=ccn_name_from_uri(name,int_name);
- if ( res >=0 )
- {
- /* adding InterestLifeTime and InterestScope filter */
-
- struct ccn_charbuf *templ;
- templ = ccn_charbuf_create();
-
- ccn_charbuf_append_tt(templ, CCN_DTAG_Interest, CCN_DTAG);
- ccn_charbuf_append_tt(templ, CCN_DTAG_Name, CCN_DTAG);
- ccn_charbuf_append_closer(templ); /* </Name> */
- ccn_charbuf_append_tt(templ, CCN_DTAG_Scope, CCN_DTAG);
- ccn_charbuf_append_tt(templ, 1, CCN_UDATA);
- /* Adding InterestLifeTime and InterestScope filter done */
- ccn_charbuf_append(templ, "2", 1); //scope of interest: 2 (not further than next host)
- ccn_charbuf_append_closer(templ); /* </Scope> */
-
- appendLifetime(templ,nlsr->interest_resend_time);
- unsigned int face_id=get_next_hop_face_from_adl(nbr->name);
- ccnb_tagged_putf(templ, CCN_DTAG_FaceID, "%u", face_id);
- ccn_charbuf_append_closer(templ); /* </Interest> */
-
-
- if ( nlsr->debugging )
- printf("Sending info interest on name prefix : %s through Face:%u\n",int_name,face_id);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending info interest on name prefix : %s through Face:%u\n",int_name,face_id);
-
- res=ccn_express_interest(nlsr->ccn,name,&(nlsr->in_content),templ);
-
- if ( res >= 0 )
- {
- if ( nlsr->debugging )
- printf("Info interest sending Successfull .... \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Info interest sending Successfull .... \n");
- }
- ccn_charbuf_destroy(&templ);
- }
- ccn_charbuf_destroy(&name);
- free(int_name);
-
-}
diff --git a/nlsr-sync-0.0/nlsr_ndn.h b/nlsr-sync-0.0/nlsr_ndn.h
deleted file mode 100755
index 1e34284..0000000
--- a/nlsr-sync-0.0/nlsr_ndn.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _NLSR_NDN_H_
-#define _NLSR_NDN_H_
-
-int appendLifetime(struct ccn_charbuf *cb, int lifetime);
-void get_nbr(struct name_prefix *nbr,struct ccn_closure *selfp, struct ccn_upcall_info *info);
-void get_lsa_identifier(struct name_prefix *lsaId,struct ccn_closure *selfp, struct ccn_upcall_info *info,int offset);
-void get_lsdb_version(char *lsdb_version,struct ccn_closure *selfp, struct ccn_upcall_info *info );
-int get_ls_type(struct ccn_closure *selfp, struct ccn_upcall_info *info);
-
-enum ccn_upcall_res incoming_interest(struct ccn_closure *selfp, enum ccn_upcall_kind kind, struct ccn_upcall_info *info);
-void process_incoming_interest(struct ccn_closure *selfp, struct ccn_upcall_info *info);
-void process_incoming_interest_info(struct ccn_closure *selfp, struct ccn_upcall_info *info);
-
-enum ccn_upcall_res incoming_content(struct ccn_closure* selfp, enum ccn_upcall_kind kind, struct ccn_upcall_info* info);
-void process_incoming_content(struct ccn_closure *selfp, struct ccn_upcall_info* info);
-void process_incoming_content_info(struct ccn_closure *selfp, struct ccn_upcall_info* info);
-
-void process_incoming_timed_out_interest(struct ccn_closure* selfp, struct ccn_upcall_info* info);
-void process_incoming_timed_out_interest_info(struct ccn_closure* selfp, struct ccn_upcall_info* info);
-
-int send_info_interest(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
-void send_info_interest_to_neighbor(struct name_prefix *nbr);
-
-
-#endif
diff --git a/nlsr-sync-0.0/nlsr_npl.c b/nlsr-sync-0.0/nlsr_npl.c
deleted file mode 100755
index a2e2271..0000000
--- a/nlsr-sync-0.0/nlsr_npl.c
+++ /dev/null
@@ -1,174 +0,0 @@
-#include<stdio.h>
-#include<string.h>
-#include<stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/time.h>
-#include <assert.h>
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include <ccn/ccn.h>
-#include <ccn/uri.h>
-#include <ccn/keystore.h>
-#include <ccn/signing.h>
-#include <ccn/schedule.h>
-#include <ccn/hashtb.h>
-
-#include "nlsr.h"
-#include "nlsr_npl.h"
-#include "utility.h"
-
-
-void
-add_name_to_npl(struct name_prefix *np)
-{
- struct name_prefix_list_entry *npe=(struct name_prefix_list_entry *)malloc(sizeof(struct name_prefix_list_entry));
- //struct name_prefix *hnp=(struct name_prefix *)malloc(sizeof(struct name_prefix )); //free
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->npl, e);
- res = hashtb_seek(e, np->name, np->length, 0);
-
- if(res == HT_NEW_ENTRY)
- {
- npe=e->data;
- npe->np=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- npe->np->length=np->length;
- npe->np->name=(char *)malloc(np->length);
- memcpy(npe->np->name,np->name,np->length);
- npe->name_lsa_id=0;
- //hnp = e->data;
- //hnp->length=np->length;
- //hnp->name=(char *)malloc(np->length); //free
- //memcpy(hnp->name,np->name,np->length);
- }
-
- hashtb_end(e);
-
-}
-
-int
-does_name_exist_in_npl(struct name_prefix *np)
-{
- int ret=0;
-
- //struct name_prefix_entry *npe;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->npl, e);
- res = hashtb_seek(e, np->name, np->length, 0);
-
- if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- ret=0;
- }
- else
- {
- ret=1;
- }
- hashtb_end(e);
-
- return ret;
-
-}
-
-
-long int
-get_lsa_id_from_npl(struct name_prefix *np)
-{
- int ret=0;
-
- struct name_prefix_list_entry *npe;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->npl, e);
- res = hashtb_seek(e, np->name, np->length, 0);
-
- if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- ret=0;
- }
- else
- {
- npe=e->data;
- ret=npe->name_lsa_id;
- }
- hashtb_end(e);
-
- return ret;
-
-}
-
-void
-print_name_prefix_from_npl(void)
-{
- if ( nlsr->debugging )
- printf("print_name_prefix_from_npl called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"print_name_prefix_from_npl called\n");
- int i, npl_element;
- //struct name_prefix *np;
- struct name_prefix_list_entry *npe;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->npl, e);
- npl_element=hashtb_n(nlsr->npl);
-
- for(i=0;i<npl_element;i++)
- {
- npe=e->data;
- if ( nlsr->debugging )
- printf("Name Prefix: %s and Length: %d and LSA Id: %ld\n",npe->np->name,npe->np->length,npe->name_lsa_id);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Name Prefix: %s and Length: %d \n",npe->np->name,npe->np->length);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-}
-
-void
-update_nlsa_id_for_name_in_npl(struct name_prefix *np, long int nlsa_id)
-{
- struct name_prefix_list_entry *npe;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->npl, e);
- res = hashtb_seek(e, np->name, np->length, 0);
-
- if(res == HT_OLD_ENTRY)
- {
- npe=e->data;
- npe->name_lsa_id=nlsa_id;
- }
- else
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
diff --git a/nlsr-sync-0.0/nlsr_npl.h b/nlsr-sync-0.0/nlsr_npl.h
deleted file mode 100755
index 4fce119..0000000
--- a/nlsr-sync-0.0/nlsr_npl.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _NLSR_NPL_H_
-#define _NLSR_NPL_H_
-
-struct name_prefix_list_entry
-{
- struct name_prefix *np;
- long int name_lsa_id;
-};
-
-void add_name_to_npl(struct name_prefix *np);
-void print_name_prefix_from_npl(void);
-int does_name_exist_in_npl(struct name_prefix *np);
-void update_nlsa_id_for_name_in_npl(struct name_prefix *np, long int nlsa_id);
-long int get_lsa_id_from_npl(struct name_prefix *np);
-#endif
diff --git a/nlsr-sync-0.0/nlsr_npt.c b/nlsr-sync-0.0/nlsr_npt.c
deleted file mode 100755
index 64373fe..0000000
--- a/nlsr-sync-0.0/nlsr_npt.c
+++ /dev/null
@@ -1,1071 +0,0 @@
-#include<stdio.h>
-#include<string.h>
-#include<stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/time.h>
-#include <assert.h>
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <sys/types.h>
-#include <signal.h>
-
-
-
-#include <ccn/ccn.h>
-#include <ccn/uri.h>
-#include <ccn/keystore.h>
-#include <ccn/signing.h>
-#include <ccn/schedule.h>
-#include <ccn/hashtb.h>
-
-#include "nlsr.h"
-#include "nlsr_npt.h"
-#include "nlsr_fib.h"
-#include "nlsr_route.h"
-#include "nlsr_adl.h"
-#include "utility.h"
-
-int
-add_npt_entry(char *orig_router, char *name_prefix, int num_face, int *faces, int *route_costs)
-{
- if ( strcmp(orig_router,nlsr->router_name)== 0)
- {
- return -1;
- }
-
- struct npt_entry *ne=(struct npt_entry*)malloc(sizeof(struct npt_entry ));
-
- int res,res_nle,res_fle;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
-
- hashtb_start(nlsr->npt, e);
- res = hashtb_seek(e, orig_router, strlen(orig_router), 0);
-
- if(res == HT_NEW_ENTRY)
- {
- ne=e->data;
-
- ne->orig_router=(char *)malloc(strlen(orig_router)+1);
- memset(ne->orig_router,0,strlen(orig_router)+1);
- memcpy(ne->orig_router,orig_router,strlen(orig_router));
-
-
-
-
- struct hashtb_param param_nle = {0};
- ne->name_list= hashtb_create(sizeof(struct name_list_entry ), ¶m_nle);
-
- struct hashtb_enumerator eenle;
- struct hashtb_enumerator *enle = &eenle;
-
- hashtb_start(ne->name_list, enle);
- res_nle = hashtb_seek(enle, name_prefix, strlen(name_prefix), 0);
-
- if(res_nle == HT_NEW_ENTRY )
- {
- struct name_list_entry *nle=(struct name_list_entry *)malloc(sizeof(struct name_list_entry));
- nle=enle->data;
- nle->name=(char *)malloc(strlen(name_prefix)+1);
- memset(nle->name,0,strlen(name_prefix)+1);
- memcpy(nle->name,name_prefix,strlen(name_prefix));
-
-
-
- }
- hashtb_end(enle);
-
- struct hashtb_param param_fle = {0};
- ne->face_list=hashtb_create(sizeof(struct face_list_entry), ¶m_fle);
-
- if ( num_face > 0 )
- {
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(ne->face_list, ef);
- int i;
-
- for ( i=0; i < num_face ; i++)
- {
- int face=faces[i];
- if ( face != NO_FACE && face != ZERO_FACE)
- {
- res_fle = hashtb_seek(ef, &face, sizeof(face), 0);
-
- if ( res_fle == HT_NEW_ENTRY )
- {
- struct face_list_entry *fle=(struct face_list_entry *)malloc(sizeof(struct face_list_entry));
- fle=ef->data;
- fle->next_hop_face=face;
- fle->route_cost=route_costs[i];
- }
- }
-
- }
- hashtb_end(ef);
- }
-
- }
- else if (res == HT_OLD_ENTRY)
- {
- free(ne);
- struct npt_entry *one;
-
- one=e->data;
-
- struct hashtb_enumerator eenle;
- struct hashtb_enumerator *enle = &eenle;
-
- hashtb_start(one->name_list, enle);
- res_nle = hashtb_seek(enle, name_prefix, strlen(name_prefix), 0);
-
- if(res_nle == HT_NEW_ENTRY )
- {
- struct name_list_entry *nle=(struct name_list_entry *)malloc(sizeof(struct name_list_entry));
- nle=enle->data;
- nle->name=(char *)malloc(strlen(name_prefix)+1);
- memset(nle->name,0,strlen(name_prefix)+1);
- memcpy(nle->name,name_prefix,strlen(name_prefix));
- }
- else if(res_nle == HT_OLD_ENTRY )
- {
-
- }
- hashtb_end(enle);
-
- if ( num_face > 0 )
- {
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(one->face_list, ef);
- int i;
-
- for ( i=0; i< num_face ; i ++)
- {
- int face=faces[i];
- if ( face != NO_FACE && face != ZERO_FACE)
- {
- res_fle = hashtb_seek(ef, &face, sizeof(face), 0);
-
- if ( res_fle == HT_NEW_ENTRY )
- {
- struct face_list_entry *fle=(struct face_list_entry *)malloc(sizeof(struct face_list_entry));
- fle=ef->data;
- fle->next_hop_face=face;
- fle->route_cost=route_costs[i];
- }
- }
- }
- hashtb_end(ef);
- }
-
-
- }
- hashtb_end(e);
-
- update_ccnd_fib_for_orig_router(orig_router);
-
- return res;
-}
-
-void
-update_ccnd_fib_for_orig_router(char *orig_router)
-{
-
- if ( nlsr->debugging )
- {
- printf("update_ccnd_fib_for_orig_router called\n");
- }
-
- int res;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
-
- hashtb_start(nlsr->npt, e);
- res = hashtb_seek(e, orig_router, strlen(orig_router), 0);
-
- if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
- else if ( res == HT_OLD_ENTRY )
- {
- struct npt_entry *ne;
- ne=e->data;
- int num_face=hashtb_n(ne->face_list);
- int last_face,first_face;
-
- int *faces=(int *)malloc(num_face*sizeof(int));
- int *route_costs=(int *)malloc(num_face*sizeof(int));
-
- get_all_faces_for_orig_router_from_npt(orig_router,faces,route_costs,num_face);
- sort_faces_by_distance(faces,route_costs,0,num_face);
-
- if ( nlsr->debugging )
- {
- int m;
- for ( m =0 ; m< num_face ; m++)
- {
- printf("Dest_router: %s Next_Hop_Face: %d Route_cost: %d \n",orig_router,faces[m],route_costs[m]);
- }
- }
-
- first_face=num_face-1;
-
- if ( nlsr->multi_path_face_num == 0 )
- {
- last_face=first_face;
- }
- else
- {
- if ( num_face <= nlsr->multi_path_face_num)
- {
- last_face=0;
- }
- else
- {
- last_face=num_face-nlsr->multi_path_face_num;
- }
-
- }
-
- int i,j, nl_element;
- struct name_list_entry *nle;
- struct hashtb_enumerator eenle;
- struct hashtb_enumerator *enle = &eenle;
-
- hashtb_start(ne->name_list, enle);
- nl_element=hashtb_n(ne->name_list);
-
- for (i=0;i<nl_element;i++)
- {
- nle=enle->data;
-
- for( j=first_face; j>= last_face; j--)
- {
- if ( nlsr->debugging )
- {
- printf("Possible FIB Entry name: %s face: %d route cost: %d \n",nle->name,faces[j],route_costs[j]);
- }
- if ( is_active_neighbor(orig_router) == 0 )
- {
- if ( nlsr->debugging )
- printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_REG, faces[j]);
- }
- else
- {
- if ( j == last_face && is_active_neighbor(nle->name)==0)
- {
- if ( nlsr->debugging )
- printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_REG, faces[j]);
- }
- }
- }
-
-
- hashtb_next(enle);
- }
- hashtb_end(enle);
-
-
-
- free(faces);
- free(route_costs);
-
- }
- hashtb_end(e);
-
-}
-
-int
-delete_npt_entry_by_router_and_name_prefix(char *orig_router, char *name_prefix)
-{
- if ( strcmp(orig_router,nlsr->router_name)== 0)
- {
- return -1;
- }
-
- struct npt_entry *ne;
-
- int res,res_nle;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
-
- hashtb_start(nlsr->npt, e);
- res = hashtb_seek(e, orig_router, strlen(orig_router), 0);
-
- if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- return -1;
- }
- else if (res == HT_OLD_ENTRY)
- {
- ne=e->data;
-
- struct hashtb_enumerator eenle;
- struct hashtb_enumerator *enle = &eenle;
-
- hashtb_start(ne->name_list, enle);
- res_nle = hashtb_seek(enle, name_prefix, strlen(name_prefix), 0);
-
- if(res_nle == HT_NEW_ENTRY )
- {
- hashtb_delete(enle);
- }
- else if(res_nle == HT_OLD_ENTRY )
- {
- struct name_list_entry *nle;
-
- nle=enle->data;
-
- int j;
- int num_face=hashtb_n(ne->face_list);
- int last_face,first_face;
-
- int *faces=(int *)malloc(num_face*sizeof(int));
- int *route_costs=(int *)malloc(num_face*sizeof(int));
-
- get_all_faces_for_orig_router_from_npt(orig_router,faces,route_costs,num_face);
- sort_faces_by_distance(faces,route_costs,0,num_face);
-
-
- first_face=num_face-1;
-
- if ( nlsr->multi_path_face_num == 0 )
- {
- last_face=first_face;
- }
- else
- {
- if ( num_face <= nlsr->multi_path_face_num)
- {
- last_face=0;
- }
- else
- {
- last_face=num_face-nlsr->multi_path_face_num;
- }
- }
-
- for( j=first_face; j>= last_face; j--)
- {
-
- if ( is_active_neighbor(orig_router) == 0 )
- {
- if ( nlsr->debugging )
- printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);
- }
- else
- {
- if ( j == last_face && is_active_neighbor(nle->name)==0)
- {
- if ( nlsr->debugging )
- printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);
- }
- }
-
- }
-
- }
-
- hashtb_end(enle);
- }
-
- hashtb_end(e);
-
- return 0;
-}
-
-void
-print_npt(void)
-{
-
- if ( nlsr->debugging )
- {
- printf("\n");
- printf("print_npt called\n");
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"print_npt called\n");
- }
- int i, npt_element;
-
- struct npt_entry *ne;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->npt, e);
- npt_element=hashtb_n(nlsr->npt);
-
- for(i=0;i<npt_element;i++)
- {
- if ( nlsr->debugging )
- {
- printf("\n");
- printf("----------NPT ENTRY %d------------------\n",i+1);
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"----------NPT ENTRY %d------------------\n",i+1);
- }
- ne=e->data;
- if ( nlsr->debugging )
- printf(" Origination Router: %s \n",ne->orig_router);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router: %s \n",ne->orig_router);
-
- int j, nl_element,face_list_element;
- struct name_list_entry *nle;
- struct hashtb_enumerator eenle;
- struct hashtb_enumerator *enle = &eenle;
-
- hashtb_start(ne->name_list, enle);
- nl_element=hashtb_n(ne->name_list);
-
- for (j=0;j<nl_element;j++)
- {
- nle=enle->data;
- if ( nlsr->debugging )
- printf(" Name Prefix: %s \n",nle->name);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Name Prefix: %s \n",nle->name);
- hashtb_next(enle);
- }
- hashtb_end(enle);
-
- struct face_list_entry *fle;
-
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(ne->face_list, ef);
- face_list_element=hashtb_n(ne->face_list);
- if ( face_list_element <= 0 )
- {
- if ( nlsr->debugging )
- printf(" Face: No Face \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: No Face \n");
-
- }
- else
- {
- for(j=0;j<face_list_element;j++)
- {
- fle=ef->data;
- if ( nlsr->debugging )
- printf(" Face: %d Route_Cost: %f \n",fle->next_hop_face,fle->route_cost);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: %d Route_Cost: %d \n",fle->next_hop_face,fle->route_cost);
- hashtb_next(ef);
- }
- }
- hashtb_end(ef);
-
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-}
-
-void
-delete_orig_router_from_npt(char *orig_router)
-{
- int res,num_face,num_prefix;
- struct npt_entry *ne;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->npt, e);
- res = hashtb_seek(e, orig_router, strlen(orig_router), 0);
-
- if ( res == HT_OLD_ENTRY )
- {
- ne=e->data;
- num_prefix=hashtb_n(ne->name_list);
- if ( num_prefix > 0 )
- {
- num_face=hashtb_n(ne->face_list);
-
- if ( num_face > 0 )
- {
- int j, nl_element;
- struct name_list_entry *nle;
- struct hashtb_enumerator eenle;
- struct hashtb_enumerator *enle = &eenle;
-
- hashtb_start(ne->name_list, enle);
- nl_element=hashtb_n(ne->name_list);
-
- for (j=0;j<nl_element;j++)
- {
- nle=enle->data;
- delete_npt_entry_by_router_and_name_prefix(ne->orig_router,nle->name);
- hashtb_next(enle);
- }
- hashtb_end(enle);
-
- }
-
- }
- hashtb_destroy(&ne->name_list);
- hashtb_destroy(&ne->face_list);
- hashtb_delete(e);
- }
- else if ( res == HT_NEW_ENTRY )
- {
- hashtb_delete(e);
- }
- hashtb_end(e);
-}
-
-
-void
-add_face_to_npt_by_face_id(char *dest_router, int face_id, int route_cost)
-{
- if ( nlsr->debugging )
- {
- printf("add_face_to_npt_by_face_id called\n");
- printf("Dest Router: %s Face: %d Route_cost: %d \n",dest_router, face_id, route_cost);
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"add_face_to_npt_by_face_id called\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Dest Router: %s Face: %d Route_cost: %d \n",dest_router, face_id, route_cost);
- }
-
-
- int res,res1;
- struct npt_entry *ne;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->npt, e);
- res = hashtb_seek(e, dest_router, strlen(dest_router), 0);
-
- if ( res == HT_OLD_ENTRY )
- {
- if ( nlsr->debugging )
- printf("Dest Router Found \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Dest Router Found \n");
-
- ne=e->data;
-
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(ne->face_list, ef);
- res1=hashtb_seek(ef, &face_id, sizeof(face_id), 0);
-
- if ( res1 == HT_OLD_ENTRY )
- {
- if ( nlsr->debugging )
- printf("Face Found \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Face Found \n");
- struct face_list_entry *fle;
- fle=ef->data;
- fle->next_hop_face=face_id;
- fle->route_cost=route_cost;
- }
- else if ( res1 == HT_NEW_ENTRY )
- {
- if ( nlsr->debugging )
- printf("Face Not Found \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Face Not Found \n");
- struct face_list_entry *fle=(struct face_list_entry *)malloc(sizeof(struct face_list_entry));
- fle=ef->data;
- fle->next_hop_face=face_id;
- fle->route_cost=route_cost;
-
-
-
-
- }
- hashtb_end(ef);
- }
- else if (res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-
-void
-add_new_fib_entries_to_npt(void)
-{
- if ( nlsr->debugging )
- printf("add_new_fib_entries_to_npt called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"add_new_fib_entries_to_npt called\n");
- int i,j, rt_element,face_list_element;
-
- struct routing_table_entry *rte;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->routing_table, e);
- rt_element=hashtb_n(nlsr->routing_table);
-
- for(i=0;i<rt_element;i++)
- {
- rte=e->data;
-
- struct face_list_entry *fle;
-
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(rte->face_list, ef);
- face_list_element=hashtb_n(rte->face_list);
- if ( face_list_element <= 0 )
- {
- if ( nlsr->debugging )
- printf(" Face: No Face \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: No Face \n");
- }
- else
- {
- for(j=0;j<face_list_element;j++)
- {
- fle=ef->data;
- add_face_to_npt_by_face_id(rte->dest_router,fle->next_hop_face,fle->route_cost);
- hashtb_next(ef);
- }
- }
- hashtb_end(ef);
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-}
-
-
-void
-delete_face_from_npt_by_face_id(char *dest_router, int face_id)
-{
- if ( nlsr->debugging )
- printf("delete_face_from_npt_by_face_id\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_face_from_npt_by_face_id\n");
-
- int res,res1;
- struct npt_entry *ne;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->npt, e);
- res = hashtb_seek(e, dest_router, strlen(dest_router), 0);
-
- if ( res == HT_OLD_ENTRY )
- {
- ne=e->data;
-
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(ne->face_list, ef);
- res1=hashtb_seek(ef, &face_id, sizeof(face_id), 0);
- if ( res1 == HT_OLD_ENTRY )
- {
- hashtb_delete(ef);
- }
- else if ( res1 == HT_NEW_ENTRY )
- {
- hashtb_delete(ef);
- }
- hashtb_end(ef);
- }
- else if (res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-}
-
-
-void
-clean_old_fib_entries_from_npt(void)
-{
-
-
- if ( nlsr->debugging )
- printf("clean_old_fib_entries_from_npt called\n\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"clean_old_fib_entries_from_npt called\n\n");
- int i, npt_element;
-
- struct npt_entry *ne;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->npt, e);
- npt_element=hashtb_n(nlsr->npt);
-
- for(i=0;i<npt_element;i++)
- {
- ne=e->data;
-
- int j,k, nl_element,face_list_element;
- struct face_list_entry *fle;
-
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(ne->face_list, ef);
- face_list_element=hashtb_n(ne->face_list);
- if ( face_list_element <= 0 )
- {
- if ( nlsr->debugging )
- printf(" Face: No Face \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: No Face \n");
-
- }
- else
- {
- for(j=0;j<face_list_element;j++)
- {
- fle=ef->data;
- int check=does_face_exist_for_router(ne->orig_router,fle->next_hop_face);
- if ( check == 0 )
- {
- struct name_list_entry *nle;
- struct hashtb_enumerator eenle;
- struct hashtb_enumerator *enle = &eenle;
-
- hashtb_start(ne->name_list, enle);
- nl_element=hashtb_n(ne->name_list);
-
- for (k=0;k<nl_element;k++)
- {
- nle=enle->data;
- if( is_neighbor(nle->name) == 0 )
- {
- if ( nlsr->debugging )
- printf("Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, fle->next_hop_face);
- }
-
-
- hashtb_next(enle);
- }
- hashtb_end(enle);
-
-
- hashtb_delete(ef);
- j++;
-
- }
- else
- {
- struct name_list_entry *nle;
- struct hashtb_enumerator eenle;
- struct hashtb_enumerator *enle = &eenle;
-
- hashtb_start(ne->name_list, enle);
- nl_element=hashtb_n(ne->name_list);
-
- for (k=0;k<nl_element;k++)
- {
- nle=enle->data;
- if( is_active_neighbor(ne->orig_router) && get_next_hop_face_from_adl( ne->orig_router ) != fle->next_hop_face )
- {
- if ( nlsr->debugging )
- printf("Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, fle->next_hop_face);
- }
-
-
- hashtb_next(enle);
- }
- hashtb_end(enle);
-
- hashtb_next(ef);
- }
- }
- }
- hashtb_end(ef);
-
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-}
-
-void
-update_npt_with_new_route(void)
-{
- if ( nlsr->debugging )
- printf("update_npt_with_new_route called\n");
-
- clean_old_fib_entries_from_npt();
- print_npt();
- add_new_fib_entries_to_npt();
- print_npt();
-
- int i, npt_element;
-
- struct npt_entry *ne;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->npt, e);
- npt_element=hashtb_n(nlsr->npt);
-
- for(i=0;i<npt_element;i++)
- {
-
- ne=e->data;
- update_ccnd_fib_for_orig_router(ne->orig_router);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-}
-
-
-
-void
-sort_faces_by_distance(int *faces,int *route_costs,int start,int element)
-{
- int i,j;
- int temp_cost;
- int temp_face;
-
- for ( i=start ; i < element ; i ++)
- {
- for( j=i+1; j<element; j ++)
- {
- if (route_costs[j] < route_costs[i] )
- {
- temp_cost=route_costs[j];
- route_costs[j]=route_costs[i];
- route_costs[i]=temp_cost;
-
- temp_face=faces[j];
- faces[j]=faces[i];
- faces[i]=temp_face;
- }
- }
- }
-
-}
-
-void
-get_all_faces_for_orig_router_from_npt(char *orig_router, int *faces, int *route_costs, int num_faces)
-{
-
- int res,face_list_element,j;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
-
- hashtb_start(nlsr->npt, e);
- res = hashtb_seek(e, orig_router, strlen(orig_router), 0);
-
- if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
- else if ( res == HT_OLD_ENTRY )
- {
- struct npt_entry *ne;
- ne=e->data;
-
- struct face_list_entry *fle;
-
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(ne->face_list, ef);
- face_list_element=hashtb_n(ne->face_list);
- for(j=0;j<face_list_element;j++)
- {
- fle=ef->data;
- faces[j]=fle->next_hop_face;
- route_costs[j]=fle->route_cost;
- hashtb_next(ef);
- }
- hashtb_end(ef);
-
-
- }
- hashtb_end(e);
-
-}
-
-void
-destroy_faces_by_orig_router(char *orig_router)
-{
-
- int res;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
-
- hashtb_start(nlsr->npt, e);
- res = hashtb_seek(e, orig_router, strlen(orig_router), 0);
-
- if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- }
- else if ( res == HT_OLD_ENTRY )
- {
- struct npt_entry *ne;
- ne=e->data;
- int num_face=hashtb_n(ne->face_list);
- int last_face,first_face;
-
- int *faces=(int *)malloc(num_face*sizeof(int));
- int *route_costs=(int *)malloc(num_face*sizeof(int));
-
- get_all_faces_for_orig_router_from_npt(orig_router,faces,route_costs,num_face);
- sort_faces_by_distance(faces,route_costs,0,num_face);
-
-
- first_face=num_face-1;
-
- if ( nlsr->multi_path_face_num == 0 )
- {
- last_face=first_face;
- }
- else
- {
- if ( num_face <= nlsr->multi_path_face_num)
- {
- last_face=0;
- }
- else if ( nlsr->multi_path_face_num == 0)
- {
- last_face=num_face-nlsr->multi_path_face_num;
- }
- }
-
- int i,j, nl_element;
- struct name_list_entry *nle;
- struct hashtb_enumerator eenle;
- struct hashtb_enumerator *enle = &eenle;
-
- hashtb_start(ne->name_list, enle);
- nl_element=hashtb_n(ne->name_list);
-
- for (i=0;i<nl_element;i++)
- {
- nle=enle->data;
-
- for( j=first_face; j>= last_face; j--)
- {
- if ( is_active_neighbor(orig_router) == 0 )
- {
- if ( nlsr->debugging )
- printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);
- }
- else
- {
- if ( j == last_face && is_active_neighbor(nle->name)==0)
- {
- if ( nlsr->debugging )
- printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);
- }
- }
- }
-
- hashtb_next(enle);
- }
- hashtb_end(enle);
-
-
-
- free(faces);
- free(route_costs);
-
- }
- hashtb_end(e);
-
-}
-
-void
-destroy_all_face_by_nlsr(void)
-{
- int i, npt_element;
-
- struct npt_entry *ne;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->npt, e);
- npt_element=hashtb_n(nlsr->npt);
-
- for(i=0;i<npt_element;i++)
- {
- ne=e->data;
- destroy_faces_by_orig_router(ne->orig_router);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-}
diff --git a/nlsr-sync-0.0/nlsr_npt.h b/nlsr-sync-0.0/nlsr_npt.h
deleted file mode 100755
index d339ede..0000000
--- a/nlsr-sync-0.0/nlsr_npt.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef _NLSR_NPT_H_
-#define _NLSR_NPT_H_
-
-#define NO_FACE -12345
-#define ZERO_FACE 0
-
-struct npt_entry
-{
- char *orig_router;
- struct hashtb *name_list;
- //int next_hop_face;
- struct hashtb *face_list;
-};
-
-struct name_list_entry
-{
- char *name;
-};
-
-
-int add_npt_entry(char *orig_router, char *name_prefix, int num_face, int *faces, int *route_costs);
-int delete_npt_entry_by_router_and_name_prefix(char *orig_router, char *name_prefix);
-void print_npt(void);
-void delete_orig_router_from_npt(char *orig_router);
-void update_npt_with_new_route(void);
-void destroy_all_face_by_nlsr(void);
-void sort_faces_by_distance(int *faces,int *route_costs,int start,int element);
-void update_ccnd_fib_for_orig_router(char *orig_router);
-void get_all_faces_for_orig_router_from_npt(char *orig_router, int *faces, int *route_costs, int num_faces);
-
-#endif
diff --git a/nlsr-sync-0.0/nlsr_route.c b/nlsr-sync-0.0/nlsr_route.c
deleted file mode 100755
index 08a574e..0000000
--- a/nlsr-sync-0.0/nlsr_route.c
+++ /dev/null
@@ -1,1364 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/time.h>
-#include <assert.h>
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <sys/types.h>
-
-
-#include <ccn/ccn.h>
-#include <ccn/uri.h>
-#include <ccn/keystore.h>
-#include <ccn/signing.h>
-#include <ccn/schedule.h>
-#include <ccn/hashtb.h>
-
-
-#include "nlsr.h"
-#include "nlsr_route.h"
-#include "nlsr_lsdb.h"
-#include "nlsr_npt.h"
-#include "nlsr_adl.h"
-#include "nlsr_fib.h"
-#include "utility.h"
-
-int
-route_calculate(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
-{
-
- if(flags == CCN_SCHEDULE_CANCEL)
- {
- return -1;
- }
-
- nlsr_lock();
-
- if ( nlsr->debugging )
- printf("route_calculate called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"route_calculate called\n");
-
- if( ! nlsr->is_build_adj_lsa_sheduled )
- {
- /* Calculate Route here */
- print_routing_table();
- print_npt();
-
- struct hashtb_param param_me = {0};
- nlsr->map = hashtb_create(sizeof(struct map_entry), ¶m_me);
- nlsr->rev_map = hashtb_create(sizeof(struct map_entry), ¶m_me);
- make_map();
- assign_mapping_number();
- print_map();
- print_rev_map();
-
- do_old_routing_table_updates();
- clear_old_routing_table();
- print_routing_table();
- print_npt();
-
- int i;
- int **adj_matrix;
- int map_element=hashtb_n(nlsr->map);
- adj_matrix=malloc(map_element * sizeof(int *));
- for(i = 0; i < map_element; i++)
- {
- adj_matrix[i] = malloc(map_element * sizeof(int));
- }
- make_adj_matrix(adj_matrix,map_element);
- if ( nlsr->debugging )
- print_adj_matrix(adj_matrix,map_element);
-
- long int source=get_mapping_no(nlsr->router_name);
- int num_link=get_no_link_from_adj_matrix(adj_matrix, map_element ,source);
-
- if ( nlsr->is_hyperbolic_calc == 1)
- {
- long int *links=(long int *)malloc(num_link*sizeof(long int));
- long int *link_costs=(long int *)malloc(num_link*sizeof(long int));
- get_links_from_adj_matrix(adj_matrix, map_element , links, link_costs, source);
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- for (hashtb_start(nlsr->rev_map, e); e->key != NULL; hashtb_next(e))
- {
- struct map_entry *me=e->data;
- if ( me->mapping != source )
- {
- long int *faces=(long int *)calloc(num_link,sizeof(long int));
- double *nbr_dist=(double *)calloc(num_link,sizeof(double));
- double *nbr_to_dest=(double *)calloc(num_link,sizeof(double));
- for ( i=0 ; i < num_link; i++)
- {
- int face=get_next_hop_face_from_adl(get_router_from_rev_map(links[i]));
- double dist_to_nbr=get_hyperbolic_distance(source,links[i]);
- double dist_to_dest_from_nbr=get_hyperbolic_distance(links[i],me->mapping);
- faces[i]=face;
- nbr_dist[i]=dist_to_nbr;
- nbr_to_dest[i]= dist_to_dest_from_nbr;
-
-
- }
- sort_hyperbolic_route(nbr_to_dest,nbr_dist, faces,0,num_link);
- if (nlsr->multi_path_face_num <= 1 )
- {
- update_routing_table_with_new_hyperbolic_route(me->mapping,faces[0],nbr_to_dest[0]);
- }
- else
- {
- if ( num_link <= nlsr->multi_path_face_num )
- {
- for ( i=0 ; i < num_link; i++)
- {
- update_routing_table_with_new_hyperbolic_route(me->mapping,faces[i],nbr_to_dest[i]);
- }
- }
- else if (num_link > nlsr->multi_path_face_num)
- {
- for ( i=0 ; i < nlsr->multi_path_face_num; i++)
- {
- update_routing_table_with_new_hyperbolic_route(me->mapping,faces[i],nbr_to_dest[i]);
- }
- }
-
- }
- free(faces);
- free(nbr_dist);
- free(nbr_to_dest);
- }
- }
- hashtb_end(e);
-
-
- free(links);
- free(link_costs);
- }
- else if (nlsr->is_hyperbolic_calc == 0 )
- {
-
- long int *parent=(long int *)malloc(map_element * sizeof(long int));
- long int *dist=(long int *)malloc(map_element * sizeof(long int));
-
-
- if ( (num_link == 0) || (nlsr->multi_path_face_num == 1 ) )
- {
- calculate_path(adj_matrix,parent,dist, map_element, source);
- print_all_path_from_source(parent,source);
- print_all_next_hop(parent,source);
- update_routing_table_with_new_route(parent, dist,source);
- }
- else if ( (num_link != 0) && (nlsr->multi_path_face_num > 1 ) )
- {
- long int *links=(long int *)malloc(num_link*sizeof(long int));
- long int *link_costs=(long int *)malloc(num_link*sizeof(long int));
- get_links_from_adj_matrix(adj_matrix, map_element , links, link_costs, source);
- for ( i=0 ; i < num_link; i++)
- {
- adjust_adj_matrix(adj_matrix, map_element,source,links[i],link_costs[i]);
- calculate_path(adj_matrix,parent,dist, map_element, source);
- print_all_path_from_source(parent,source);
- print_all_next_hop(parent,source);
- update_routing_table_with_new_route(parent, dist,source);
- }
-
- free(links);
- free(link_costs);
- }
- free(parent);
- free(dist);
- }
-
- print_routing_table();
- print_npt();
-
- update_npt_with_new_route();
-
- print_routing_table();
- print_npt();
-
-
- for(i = 0; i < map_element; i++)
- {
- free(adj_matrix[i]);
- }
-
- free(adj_matrix);
- hashtb_destroy(&nlsr->map);
- hashtb_destroy(&nlsr->rev_map);
-
- }
- nlsr->is_route_calculation_scheduled=0;
-
- nlsr_unlock();
-
- return 0;
-}
-
-void
-calculate_path(int **adj_matrix, long int *parent,long int *dist ,long int V, long int S)
-{
- int i;
- long int v,u;
- //long int *dist=(long int *)malloc(V * sizeof(long int));
- long int *Q=(long int *)malloc(V * sizeof(long int));
- long int head=0;
- /* Initiate the Parent */
- for (i = 0 ; i < V; i++)
- {
- parent[i]=EMPTY_PARENT;
- dist[i]=INF_DISTANCE;
- Q[i]=i;
- }
-
- if ( S != NO_MAPPING_NUM )
- {
- dist[S]=0;
- sort_queue_by_distance(Q,dist,head,V);
-
- while (head < V )
- {
- u=Q[head];
- if(dist[u] == INF_DISTANCE)
- {
- break;
- }
-
- for(v=0 ; v <V; v++)
- {
- if( adj_matrix[u][v] > 0 ) //
- {
- if ( is_not_explored(Q,v,head+1,V) )
- {
-
- if( dist[u] + adj_matrix[u][v] < dist[v])
- {
- dist[v]=dist[u] + adj_matrix[u][v] ;
- parent[v]=u;
- }
-
- }
-
- }
-
- }
-
- head++;
- sort_queue_by_distance(Q,dist,head,V);
- }
- }
- free(Q);
-}
-
-void
-print_all_path_from_source(long int *parent,long int source)
-{
- int i, map_element;
- struct map_entry *me;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->map, e);
- map_element=hashtb_n(nlsr->map);
-
- if ( source != NO_MAPPING_NUM)
- {
- for(i=0;i<map_element;i++)
- {
- me=e->data;
- if(me->mapping != source)
- {
-
- if ( nlsr->debugging )
- {
- print_path(parent,(long int)me->mapping);
- printf("\n");
- }
- if ( nlsr->detailed_logging )
- {
- print_path(parent,(long int)me->mapping);
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
- }
-
- }
- hashtb_next(e);
- }
- }
- hashtb_end(e);
-
-}
-
-void
-print_all_next_hop(long int *parent,long int source)
-{
- int i, map_element;
- struct map_entry *me;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->map, e);
- map_element=hashtb_n(nlsr->map);
-
- for(i=0;i<map_element;i++)
- {
- me=e->data;
- if(me->mapping != source)
- {
- if ( nlsr->debugging )
- printf("Dest: %d Next Hop: %ld\n",me->mapping,get_next_hop_from_calculation(parent,me->mapping,source));
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Dest: %d Next Hop: %ld\n",me->mapping,get_next_hop_from_calculation(parent,me->mapping,source));
- }
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-}
-
-long int
-get_next_hop_from_calculation(long int *parent, long int dest,long int source)
-{
- long int next_hop;
- while ( parent[dest] != EMPTY_PARENT )
- {
- next_hop=dest;
- dest=parent[dest];
-
- }
-
- if ( dest != source )
- {
- next_hop=NO_NEXT_HOP;
- }
-
- return next_hop;
-
-}
-
-void
-print_path(long int *parent, long int dest)
-{
- if (parent[dest] != EMPTY_PARENT )
- print_path(parent,parent[dest]);
-
- if ( nlsr->debugging )
- printf(" %ld",dest);
-}
-
-int
-is_not_explored(long int *Q, long int u,long int start, long int element)
-{
- int ret=0;
- long int i;
- for(i=start; i< element; i++)
- {
- if ( Q[i] == u )
- {
- ret=1;
- break;
- }
- }
- return ret;
-}
-
-void
-sort_queue_by_distance(long int *Q,long int *dist,long int start,long int element)
-{
- long int i,j;
- long int temp_u;
-
- for ( i=start ; i < element ; i ++)
- {
- for( j=i+1; j<element; j ++)
- {
- if (dist[Q[j]] < dist[Q[i]])
- {
- temp_u=Q[j];
- Q[j]=Q[i];
- Q[i]=temp_u;
- }
- }
- }
-
-}
-
-void
-sort_hyperbolic_route(double *dist_dest,double *dist_nbr, long int *faces,long int start,long int element)
-{
- long int i,j;
- double temp_dist;
- long int temp_face;
-
- for ( i=start ; i < element ; i ++)
- {
- for( j=i+1; j<element; j ++)
- {
- if (dist_dest[i] < dist_dest[j])
- {
- temp_dist=dist_dest[j];
- dist_dest[j]=dist_dest[i];
- dist_dest[i]=temp_dist;
-
- temp_dist=dist_nbr[j];
- dist_nbr[j]=dist_nbr[i];
- dist_nbr[i]=temp_dist;
-
- temp_face=faces[j];
- faces[j]=faces[i];
- faces[i]=temp_face;
- }
- if ( (dist_dest[i] == dist_dest[j]) && (dist_nbr[i] < dist_nbr[j]) )
- {
- temp_dist=dist_dest[j];
- dist_dest[j]=dist_dest[i];
- dist_dest[i]=temp_dist;
-
- temp_dist=dist_nbr[j];
- dist_nbr[j]=dist_nbr[i];
- dist_nbr[i]=temp_dist;
-
- temp_face=faces[j];
- faces[j]=faces[i];
- faces[i]=temp_face;
- }
- }
- }
-
-}
-
-void
-print_map(void)
-{
- int i, map_element;
- struct map_entry *me;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->map, e);
- map_element=hashtb_n(nlsr->map);
-
- for(i=0;i<map_element;i++)
- {
- me=e->data;
- if ( nlsr->debugging )
- printf("Router: %s Mapping Number: %d \n",me->router,me->mapping);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Router: %s Mapping Number: %d \n",me->router,me->mapping);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-}
-
-
-void
-assign_mapping_number(void)
-{
- int i, map_element;
- struct map_entry *me;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->map, e);
- map_element=hashtb_n(nlsr->map);
-
- for(i=0;i<map_element;i++)
- {
- me=e->data;
- me->mapping=i;
- add_rev_map_entry(i,me->router);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-}
-
-void
-make_map(void)
-{
-
-
- int i, adj_lsdb_element;
- struct alsa *adj_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- adj_lsdb_element=hashtb_n(nlsr->lsdb->adj_lsdb);
-
- add_map_entry(nlsr->router_name);
-
- for(i=0;i<adj_lsdb_element;i++)
- {
- adj_lsa=e->data;
- add_adj_data_to_map(adj_lsa->header->orig_router->name,adj_lsa->body,adj_lsa->no_link);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-}
-
-void
-add_map_entry(char *router)
-{
-
- struct map_entry *me=(struct map_entry*)malloc(sizeof(struct map_entry ));
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->map, e);
- res = hashtb_seek(e, router, strlen(router), 0);
-
- if(res == HT_NEW_ENTRY)
- {
- me=e->data;
- me->router=(char *)malloc(strlen(router)+1);
- memset(me->router,0,strlen(router)+1);
- memcpy(me->router,router,strlen(router));
- me->mapping=0;
- }
-
- hashtb_end(e);
-
-}
-
-
-void
-add_adj_data_to_map(char *orig_router, char *body, int no_link)
-{
- add_map_entry(orig_router);
-
- int i=0;
- char *lsa_data=(char *)malloc(strlen(body)+1);
- memset( lsa_data,0,strlen(body)+1);
- memcpy(lsa_data,body,strlen(body)+1);
- char *sep="|";
- char *rem;
- char *rtr_id;
- char *length;
- char *face;
- char *metric;
-
- if(no_link >0 )
- {
- rtr_id=strtok_r(lsa_data,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
-
- add_map_entry(rtr_id);
-
- for(i=1;i<no_link;i++)
- {
- rtr_id=strtok_r(NULL,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
-
- add_map_entry(rtr_id);
-
- }
- }
-
- free(lsa_data);
-}
-
-int
-get_mapping_no(char *router)
-{
- struct map_entry *me;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
- int ret;
-
- int n = hashtb_n(nlsr->map);
-
- if ( n < 1)
- {
- return NO_MAPPING_NUM;
- }
-
- hashtb_start(nlsr->map, e);
- res = hashtb_seek(e, router, strlen(router), 0);
-
- if( res == HT_OLD_ENTRY )
- {
- me=e->data;
- ret=me->mapping;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- ret=NO_MAPPING_NUM;
- }
-
- hashtb_end(e);
-
- return ret;
-
-}
-
-
-void
-add_rev_map_entry(long int mapping_number, char *router)
-{
-
- struct map_entry *me=(struct map_entry*)malloc(sizeof(struct map_entry ));
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->rev_map, e);
- res = hashtb_seek(e, &mapping_number, sizeof(mapping_number), 0);
-
- if(res == HT_NEW_ENTRY)
- {
- me=e->data;
- me->router=(char *)malloc(strlen(router)+1);
- memset(me->router,0,strlen(router)+1);
- memcpy(me->router,router,strlen(router));
- me->mapping=mapping_number;
- }
-
- hashtb_end(e);
-
-}
-
-
-
-char *
-get_router_from_rev_map(long int mapping_number)
-{
-
- struct map_entry *me;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->rev_map, e);
- res = hashtb_seek(e, &mapping_number, sizeof(mapping_number), 0);
-
- if(res == HT_OLD_ENTRY)
- {
- me=e->data;
- hashtb_end(e);
- return me->router;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- hashtb_end(e);
- }
-
- return NULL;
-}
-
-void
-print_rev_map(void)
-{
- int i, map_element;
- struct map_entry *me;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->map, e);
- map_element=hashtb_n(nlsr->map);
-
- for(i=0;i<map_element;i++)
- {
- me=e->data;
- if ( nlsr->debugging )
- printf("Mapping Number: %d Router: %s \n",me->mapping,me->router);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Mapping Number: %d Router: %s \n",me->mapping,me->router);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-}
-
-
-void
-assign_adj_matrix_for_lsa(struct alsa *adj_lsa, int **adj_matrix)
-{
- int mapping_orig_router=get_mapping_no(adj_lsa->header->orig_router->name);
- int mapping_nbr_router;
-
- int i;
- char *lsa_data=(char *)malloc(strlen(adj_lsa->body)+1);
- memset( lsa_data,0,strlen(adj_lsa->body)+1);
- memcpy(lsa_data,adj_lsa->body,strlen(adj_lsa->body)+1);
- char *sep="|";
- char *rem;
- char *rtr_id;
- char *length;
- char *face;
- char *metric;
-
- if(adj_lsa->no_link >0 )
- {
- rtr_id=strtok_r(lsa_data,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
-
- mapping_nbr_router=get_mapping_no(rtr_id);
- adj_matrix[mapping_orig_router][mapping_nbr_router]=atoi(metric);
-
- for(i=1;i<adj_lsa->no_link;i++)
- {
- rtr_id=strtok_r(NULL,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
-
- mapping_nbr_router=get_mapping_no(rtr_id);
- adj_matrix[mapping_orig_router][mapping_nbr_router]=atoi(metric);
-
- }
- }
-
- free(lsa_data);
-}
-
-void
-make_adj_matrix(int **adj_matrix,int map_element)
-{
-
- init_adj_matrix(adj_matrix,map_element);
-
- int i, adj_lsdb_element;
- struct alsa *adj_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- adj_lsdb_element=hashtb_n(nlsr->lsdb->adj_lsdb);
-
- for(i=0;i<adj_lsdb_element;i++)
- {
- adj_lsa=e->data;
- assign_adj_matrix_for_lsa(adj_lsa,adj_matrix);
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-}
-
-void
-init_adj_matrix(int **adj_matrix,int map_element)
-{
- int i, j;
- for(i=0;i<map_element;i++)
- for(j=0;j<map_element;j++)
- adj_matrix[i][j]=0;
-}
-
-void print_adj_matrix(int **adj_matrix, int map_element)
-{
- int i, j;
- for(i=0;i<map_element;i++)
- {
- for(j=0;j<map_element;j++)
- printf("%d ",adj_matrix[i][j]);
- printf("\n");
- }
-}
-
-
-int
-get_no_link_from_adj_matrix(int **adj_matrix,long int V, long int S)
-{
- int no_link=0;
- int i;
-
- for(i=0;i<V;i++)
- {
- if ( adj_matrix[S][i] > 0 )
- {
- no_link++;
- }
- }
- return no_link;
-}
-
-void
-get_links_from_adj_matrix(int **adj_matrix, long int V ,long int *links, long int *link_costs,long int S)
-{
- int i,j;
- j=0;
- for (i=0; i <V; i++)
- {
- if ( adj_matrix[S][i] > 0 )
- {
- links[j]=i;
- link_costs[j]=adj_matrix[S][i];
- j++;
- }
- }
-}
-
-void adjust_adj_matrix(int **adj_matrix, long int V, long int S, long int link,long int link_cost)
-{
- int i;
- for ( i = 0; i < V; i++ )
- {
- if ( i == link )
- {
- adj_matrix[S][i]=link_cost;
- }
- else
- {
- adj_matrix[S][i]=0;
- }
- }
-
-}
-
-int
-get_number_of_next_hop(char *dest_router)
-{
- struct routing_table_entry *rte;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res,ret;
-
- hashtb_start(nlsr->routing_table, e);
- res = hashtb_seek(e, dest_router, strlen(dest_router), 0);
-
- if( res == HT_OLD_ENTRY )
- {
- rte=e->data;
- ret=hashtb_n(rte->face_list);
- //nhl=rte->face_list;
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- ret=NO_NEXT_HOP;
- }
-
- hashtb_end(e);
-
- return ret;
-}
-
-
-int
-get_next_hop(char *dest_router,int *faces, int *route_costs)
-{
- struct routing_table_entry *rte;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res,ret;
-
- hashtb_start(nlsr->routing_table, e);
- res = hashtb_seek(e, dest_router, strlen(dest_router), 0);
-
- if( res == HT_OLD_ENTRY )
- {
- rte=e->data;
- ret=hashtb_n(rte->face_list);
- //nhl=rte->face_list;
- int j,face_list_element;
- struct face_list_entry *fle;
-
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(rte->face_list, ef);
- face_list_element=hashtb_n(rte->face_list);
- for(j=0;j<face_list_element;j++)
- {
- fle=ef->data;
- //printf(" Face: %d Route_Cost: %d \n",fle->next_hop_face,fle->route_cost);
- faces[j]=fle->next_hop_face;
- route_costs[j]=fle->route_cost;
- hashtb_next(ef);
- }
- hashtb_end(ef);
-
- }
- else if(res == HT_NEW_ENTRY)
- {
- hashtb_delete(e);
- ret=NO_NEXT_HOP;
- }
-
- hashtb_end(e);
-
- return ret;
-}
-
-void
-add_next_hop_router(char *dest_router)
-{
- if ( strcmp(dest_router,nlsr->router_name)== 0)
- {
- return ;
- }
-
- struct routing_table_entry *rte=(struct routing_table_entry *)malloc(sizeof(struct routing_table_entry));
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
- int res;
-
- hashtb_start(nlsr->routing_table, e);
- res = hashtb_seek(e, dest_router, strlen(dest_router), 0);
-
- if( res == HT_NEW_ENTRY )
- {
- rte=e->data;
- rte->dest_router=(char *)malloc(strlen(dest_router)+1);
- memset(rte->dest_router,0,strlen(dest_router)+1);
- memcpy(rte->dest_router,dest_router,strlen(dest_router));
- //rte->next_hop_face=NO_NEXT_HOP;
- struct hashtb_param param_fle = {0};
- rte->face_list=hashtb_create(sizeof(struct face_list_entry), ¶m_fle);
-
- add_npt_entry(dest_router, dest_router, 0, NULL, NULL);
- }
- hashtb_end(e);
-
-}
-
-void
-add_next_hop_from_lsa_adj_body(char *body, int no_link)
-{
-
- int i=0;
- char *lsa_data=(char *)malloc(strlen(body)+1);
- memset( lsa_data,0,strlen(body)+1);
- memcpy(lsa_data,body,strlen(body)+1);
- char *sep="|";
- char *rem;
- char *rtr_id;
- char *length;
- char *face;
- char *metric;
-
- if(no_link >0 )
- {
- rtr_id=strtok_r(lsa_data,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
-
-
- add_next_hop_router(rtr_id);
-
- for(i=1;i<no_link;i++)
- {
- rtr_id=strtok_r(NULL,sep,&rem);
- length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
- metric=strtok_r(NULL,sep,&rem);
-
- add_next_hop_router(rtr_id);
-
- }
- }
-
- free(lsa_data);
-
-
-}
-
-void
-update_routing_table(char * dest_router,int next_hop_face, int route_cost)
-{
- if ( nlsr->debugging )
- {
- printf("update_routing_table called \n");
- printf("Dest Router: %s Next Hop face: %d Route Cost: %d \n",dest_router,next_hop_face,route_cost);
- }
-
- int res,res1;
- struct routing_table_entry *rte;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->routing_table, e);
- res = hashtb_seek(e, dest_router, strlen(dest_router), 0);
-
- if( res == HT_OLD_ENTRY )
- {
- rte=e->data;
-
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(rte->face_list, ef);
- res1 = hashtb_seek(ef, &next_hop_face, sizeof(next_hop_face), 0);
- if( res1 == HT_NEW_ENTRY)
- {
- struct face_list_entry *fle=(struct face_list_entry *)malloc(sizeof(struct face_list_entry));
- fle=ef->data;
- fle->next_hop_face=next_hop_face;
- fle->route_cost=route_cost;
- }
- else if ( res1 == HT_OLD_ENTRY )
- {
- struct face_list_entry *fle;
- fle=ef->data;
- fle->route_cost=route_cost;
- }
- hashtb_end(ef);
- }
- else if ( res == HT_OLD_ENTRY )
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
-}
-
-void
-print_routing_table(void)
-{
- if ( nlsr->debugging )
- printf("print_routing_table called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"print_routing_table called\n");
- int i,j, rt_element,face_list_element;
-
- struct routing_table_entry *rte;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->routing_table, e);
- rt_element=hashtb_n(nlsr->routing_table);
-
- for(i=0;i<rt_element;i++)
- {
- if ( nlsr->debugging )
- printf("----------Routing Table Entry %d------------------\n",i+1);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"----------Routing Table Entry %d------------------\n",i+1);
-
- rte=e->data;
-
- if ( nlsr->debugging )
- printf(" Destination Router: %s \n",rte->dest_router);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Destination Router: %s \n",rte->dest_router);
-
-
- //rte->next_hop_face == NO_NEXT_HOP ? printf(" Next Hop Face: NO_NEXT_HOP \n") : printf(" Next Hop Face: %d \n", rte->next_hop_face);
-
- struct face_list_entry *fle;
-
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(rte->face_list, ef);
- face_list_element=hashtb_n(rte->face_list);
- if ( face_list_element <= 0 )
- {
- if ( nlsr->debugging )
- printf(" Face: No Face \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: No Face \n");
- }
- else
- {
- for(j=0;j<face_list_element;j++)
- {
- fle=ef->data;
- if ( nlsr->debugging )
- printf(" Face: %d Route_Cost: %f \n",fle->next_hop_face,fle->route_cost);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: %d Route_Cost: %d \n",fle->next_hop_face,fle->route_cost);
- hashtb_next(ef);
- }
- }
- hashtb_end(ef);
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
- if ( nlsr->debugging )
- printf("\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
-}
-
-
-int
-delete_empty_rte(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
-{
- if ( nlsr->debugging )
- {
- printf("delete_empty_rte called\n");
- printf("Router: %s \n",(char *)ev->evdata);
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_empty_rte called\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Router: %s \n",(char *)ev->evdata);
- }
-
- if(flags == CCN_SCHEDULE_CANCEL)
- {
- return -1;
- }
-
- nlsr_lock();
- int res;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->routing_table, e);
- res = hashtb_seek(e, (char *)ev->evdata, strlen((char *)ev->evdata), 0);
-
- if ( res == HT_OLD_ENTRY )
- {
- hashtb_delete(e);
- }
- else if ( res == HT_NEW_ENTRY )
- {
- hashtb_delete(e);
- }
-
- print_routing_table();
-
- nlsr_unlock();
-
- return 0;
-}
-
-void
-clear_old_routing_table(void)
-{
- if ( nlsr->debugging )
- printf("clear_old_routing_table called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"clear_old_routing_table called\n");
- int i,rt_element;
-
- struct routing_table_entry *rte;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->routing_table, e);
- rt_element=hashtb_n(nlsr->routing_table);
-
- for(i=0;i<rt_element;i++)
- {
- rte=e->data;
- hashtb_destroy(&rte->face_list);
- struct hashtb_param param_fle = {0};
- rte->face_list=hashtb_create(sizeof(struct face_list_entry), ¶m_fle);
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-}
-
-
-void
-do_old_routing_table_updates(void)
-{
- if ( nlsr->debugging )
- printf("do_old_routing_table_updates called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"do_old_routing_table_updates called\n");
-
- int i, rt_element;
- int mapping_no;
-
- struct routing_table_entry *rte;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->routing_table, e);
- rt_element=hashtb_n(nlsr->routing_table);
-
- for(i=0;i<rt_element;i++)
- {
- rte=e->data;
- mapping_no=get_mapping_no(rte->dest_router);
- if ( mapping_no == NO_MAPPING_NUM)
- {
- delete_orig_router_from_npt(rte->dest_router);
- char *router=(char *)malloc(strlen(rte->dest_router)+1);
- memset(router,0,strlen(rte->dest_router)+1);
- memcpy(router,rte->dest_router,strlen(rte->dest_router)+1);
- nlsr->event = ccn_schedule_event(nlsr->sched, 1, &delete_empty_rte, (void *)router , 0);
- }
- hashtb_next(e);
- }
-
- hashtb_end(e);
-}
-
-void
-update_routing_table_with_new_hyperbolic_route(long int dest_router_rev_map_index, long int face, double nbr_to_dest_dist)
-{
- if ( nlsr->debugging )
- printf("update_routing_table_with_new_hyperbolic_route called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_routing_table_with_new_hyperbolic_route called\n");
-
- char *orig_router=get_router_from_rev_map(dest_router_rev_map_index);
-
- if (face != NO_NEXT_HOP && face != NO_FACE )
- {
- update_routing_table(orig_router,face,nbr_to_dest_dist);
- if ( nlsr->debugging )
- printf ("Orig_router: %s Next Hop Face: %ld \n",orig_router,face);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Orig_router: %s Next Hop Face: %ld \n",orig_router,face);
-
- }
-
-
-}
-
-
-void
-update_routing_table_with_new_route(long int *parent, long int *dist,long int source)
-{
- if ( nlsr->debugging )
- printf("update_routing_table_with_new_route called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_routing_table_with_new_route called\n");
- int i, map_element;
- struct map_entry *me;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->rev_map, e);
- map_element=hashtb_n(nlsr->rev_map);
-
- for(i=0;i<map_element;i++)
- {
- me=e->data;
- if(me->mapping != source)
- {
-
- char *orig_router=get_router_from_rev_map(me->mapping);
- if (orig_router != NULL )
- {
- int next_hop_router_num=get_next_hop_from_calculation(parent,me->mapping,source);
- if ( next_hop_router_num == NO_NEXT_HOP )
- {
- if ( nlsr->debugging )
- printf ("Orig_router: %s Next Hop Face: %d \n",orig_router,NO_FACE);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Orig_router: %s Next Hop Face: %d \n",orig_router,NO_FACE);
- }
- else
- {
- char *next_hop_router=get_router_from_rev_map(next_hop_router_num);
- int next_hop_face=get_next_hop_face_from_adl(next_hop_router);
- update_routing_table(orig_router,next_hop_face,dist[me->mapping]);
- if ( nlsr->debugging )
- printf ("Orig_router: %s Next Hop Face: %d \n",orig_router,next_hop_face);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Orig_router: %s Next Hop Face: %d \n",orig_router,next_hop_face);
-
-
- }
- }
- }
- hashtb_next(e);
- }
-
- hashtb_end(e);
-}
-
-int
-does_face_exist_for_router(char *dest_router, int face_id)
-{
- if (nlsr->debugging)
- {
- printf("does_face_exist_for_router called\n");
- printf("Dest Router: %s and Face id: %d \n",dest_router, face_id);
- }
-
- int ret=0;
-
- int res;
- struct routing_table_entry *rte;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->routing_table, e);
- res = hashtb_seek(e, dest_router, strlen(dest_router), 0);
-
- if( res == HT_OLD_ENTRY )
- {
- rte=e->data;
- unsigned *v;
- v = hashtb_lookup(rte->face_list, &face_id, sizeof(face_id));
- if (v != NULL)
- ret = 1;
- }
- else
- {
- hashtb_delete(e);
- }
-
- hashtb_end(e);
-
- return ret;
-}
-
-double
-get_hyperbolic_distance(long int source, long int dest)
-{
- double distance;
- char *src_router=get_router_from_rev_map(source);
- char *dest_router=get_router_from_rev_map(dest);
-
- double src_r=get_hyperbolic_r(src_router);
- double src_theta=get_hyperbolic_r(src_router);
-
- double dest_r=get_hyperbolic_r(dest_router);
- double dest_theta=get_hyperbolic_r(dest_router);
- if ( src_r != -1 && dest_r != -1 )
- {
- distance=acosh(cosh(src_r)*cosh(dest_r)-sinh(src_r)*sinh(dest_r)*cos(src_theta-dest_theta));
- }
- else
- {
- distance= -1.0;
- }
-
- return distance;
-}
diff --git a/nlsr-sync-0.0/nlsr_route.h b/nlsr-sync-0.0/nlsr_route.h
deleted file mode 100755
index b6dff03..0000000
--- a/nlsr-sync-0.0/nlsr_route.h
+++ /dev/null
@@ -1,71 +0,0 @@
-#ifndef _NLSR_ROUTE_H_
-#define _NLSR_ROUTE_H_
-
-#define EMPTY_PARENT -12345
-#define INF_DISTANCE 2147483647
-
-#define NO_NEXT_HOP -12345
-#define NO_MAPPING_NUM -1
-
-struct map_entry
-{
- char *router;
- int mapping;
-};
-
-
-struct routing_table_entry
-{
- char *dest_router;
- //int next_hop_face;
- struct hashtb *face_list;
-};
-
-struct face_list_entry
-{
- int next_hop_face;
- double route_cost;
-};
-
-int route_calculate(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
-void make_map(void);
-void add_map_entry(char *router);
-void add_adj_data_to_map(char *orig_router, char *body, int no_link);
-void print_map(void);
-void assign_mapping_number(void);
-void make_adj_matrix(int **adj_matrix,int map_element);
-void init_adj_matrix(int **adj_matrix,int map_element);
-void print_adj_matrix(int **adj_matrix, int map_element);
-int get_mapping_no(char *router);
-void calculate_path(int **adj_matrix, long int *parent,long int *dist, long int V, long int S);
-void sort_queue_by_distance(long int *Q,long int *dist,long int start,long int element);
-int is_not_explored(long int *Q, long int u,long int start, long int element);
-void print_path(long int *parent, long int dest);
-void print_all_path_from_source(long int *parent,long int source);
-void add_rev_map_entry(long int mapping_number, char *router);
-void print_rev_map(void);
-char * get_router_from_rev_map(long int mapping_number);
-int get_no_link_from_adj_matrix(int **adj_matrix,long int V, long int S);
-void get_links_from_adj_matrix(int **adj_matrix, long int V ,long int *links, long int *link_costs,long int S);
-void adjust_adj_matrix(int **adj_matrix, long int V, long int S, long int link,long int link_cost);
-
-/* Routing Table Relates function */
-
-int get_next_hop(char *dest_router,int *faces, int *route_costs);
-int get_number_of_next_hop(char *dest_router);
-void add_next_hop_router(char *dest_router);
-void add_next_hop_from_lsa_adj_body(char *body, int no_link);
-void print_routing_table(void);
-void do_old_routing_table_updates(void);
-void clear_old_routing_table(void);
-void update_routing_table_with_new_route(long int *parent,long int *dist, long int source);
-
-long int get_next_hop_from_calculation(long int *parent, long int dest,long int source);
-void print_all_next_hop(long int *parent,long int source);
-int does_face_exist_for_router(char *dest_router, int face_id);
-
-double get_hyperbolic_distance(long int source, long int dest);
-void sort_hyperbolic_route(double *dist_dest,double *dist_nbr, long int *faces,long int start,long int element);
-void update_routing_table_with_new_hyperbolic_route(long int dest_router_rev_map_index, long int face, double nbr_to_dest_dist);
-
-#endif
diff --git a/nlsr-sync-0.0/nlsrc.c b/nlsr-sync-0.0/nlsrc.c
deleted file mode 100755
index 91a1523..0000000
--- a/nlsr-sync-0.0/nlsrc.c
+++ /dev/null
@@ -1,109 +0,0 @@
-//1. Make the necessary includes and set up the variables:
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <stdio.h>
-#include <sys/un.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-#include <getopt.h>
-
-struct option longopts[] =
-{
- { "server_ip", required_argument, NULL, 's'},
- { "server_port", required_argument, NULL, 'p'},
- { 0 }
-};
-
-static int
-usage(char *progname)
-{
- printf("Usage: %s [OPTIONS...]\n\
- NLSR API client....\n\
- nlsrc -s server_ip -p server_port add|del name|neighbor name_prefix [faceX] \n\
- option -- description\n\n\
- add|del -- specify whether you want to add or delete.\n\
- name|neighbor -- specify whether you are adding a name or a neighbor.\n\
- name_prefix -- name of the prefix for the name|neighbor.\n\
- faceX -- face ID for neighbor if the third argument is neighbor.\n\n\
- Examples:\n\
- 1) nlsrc -s 127.0.0.1 -p 9696 add name /ndn/memphis.edu/test \n", progname);
-
- exit(1);
-}
-
-int main(int argc, char *argv[])
-{
- int sockfd;
- int len;
- struct sockaddr_in address;
- int result;
- int bytesSent;
- char *server_address, *server_port;
-
- int command_len=0;
- int i;
-
- if (argc < 8)
- usage(argv[0]);
-
- if (strcmp(argv[6], "neighbor") == 0 && argc < 9)
- usage(argv[0]);
-
- if (strcmp(argv[6], "name") != 0 && strcmp(argv[6], "neighbor") != 0)
- usage(argv[0]);
-
- while ((result = getopt_long(argc, argv, "s:p:", longopts, 0)) != -1)
- {
- switch (result)
- {
- case 's':
- server_address = optarg;
- break;
- case 'p':
- server_port = optarg;
- break;
- }
- }
-
-
- char recv_buffer[1024];
- bzero(recv_buffer,1024);
-
- for(i=5;i<argc;i++)
- command_len+=(strlen(argv[i])+1);
- char *command=malloc(command_len);
- memset(command, 0, command_len);
- for(i=5;i<argc;i++)
- {
- memcpy(command+strlen(command),argv[i],strlen(argv[i]));
- if ( i < argc-1 )
- memcpy(command+strlen(command)," ",1);
- }
-
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
- //address.sun_family = AF_UNIX;
- //strcpy(address.sun_path, "/tmp/nlsr_api_server_socket");
- address.sin_family = AF_INET;
- address.sin_addr.s_addr = inet_addr(server_address);
- address.sin_port = htons(atoi(server_port));
-
- len = sizeof(address);
- result = connect(sockfd, (struct sockaddr *)&address, len);
- if(result == -1)
- {
- perror("oops nlsrc ");
- exit(1);
- }
- printf("Command to send: %s \n",command);
- bytesSent=send(sockfd, command, strlen(command),0);
- printf("Command len: %d, Bytes sent: %d \n",(int)strlen(command), bytesSent);
- recv(sockfd, recv_buffer, 1024, 0);
- printf("%s\n",recv_buffer);
- free(command);
- close(sockfd);
- exit(0);
-}
diff --git a/nlsr-sync-0.0/pollux.conf b/nlsr-sync-0.0/pollux.conf
deleted file mode 100755
index faaa597..0000000
--- a/nlsr-sync-0.0/pollux.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-#----configuration file for macbook----------
-#
-router-name /ndn/memphis.edu/cs/pollux
-ccnneighbor /ndn/memphis.edu/cs/sirius
-ccnname /ndn/memphis.edu/cs/pollux/name1
-#------lsdb-synch-interval-----
-lsdb-synch-interval 350
-interest-retry 2
-interest-resend-time 5
-lsa-refresh-time 600
-router-dead-interval 900
-multi-path-face-num 2
-#debug on
-
-topo-prefix /ndn/memphis.edu/nlsr/
-slice-prefix /ndn/memphis.edu/nlsr/LSA/
-
-logdir mylog/
diff --git a/nlsr-sync-0.0/simulation.h b/nlsr-sync-0.0/simulation.h
deleted file mode 100755
index 76c4861..0000000
--- a/nlsr-sync-0.0/simulation.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _SIMULATION_H_
-#define _SIMULATION_H_
-
-
-
-
-
-#endif
diff --git a/nlsr-sync-0.0/todo.txt b/nlsr-sync-0.0/todo.txt
deleted file mode 100755
index 77fccea..0000000
--- a/nlsr-sync-0.0/todo.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-To Do:
-
-1. Add commenting facility in .conf file -- done, commenting character # or !
-2. Adding configuration command of lsa-refresh-time and router-dead-interval --- done
-3. Adding trailing "/" remover from the commands if has any -- done
-4. Multi Path Route Calculation
-5. Writing Log so that need minimal change to status page script
-6. Adding a fib entry for origination router itself
-6. Providing api to add/delete link/name prefix
diff --git a/nlsr-sync-0.0/transfer.sh b/nlsr-sync-0.0/transfer.sh
deleted file mode 100755
index e616d20..0000000
--- a/nlsr-sync-0.0/transfer.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-scp * mhoque@pollux.cs.memphis.edu:/home/mhoque/NLSR2.0/
-
-scp * mhoque@mira.cs.memphis.edu:/home/mhoque/NLSR2.0/
-
-scp * mhoque@castor.cs.memphis.edu:/home/mhoque/NLSR2.0/
diff --git a/nlsr-sync-0.0/utility.c b/nlsr-sync-0.0/utility.c
deleted file mode 100755
index cf7452a..0000000
--- a/nlsr-sync-0.0/utility.c
+++ /dev/null
@@ -1,276 +0,0 @@
-#include<stdio.h>
-#include<string.h>
-#include<stdlib.h>
-#include <unistd.h>
-#include <getopt.h>
-#include<ctype.h>
-#include<stdarg.h>
-#include <sys/types.h>
-#include <pwd.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include<sys/socket.h>
-#include<arpa/inet.h>
-#include<errno.h>
-#include<netdb.h>
-#include <time.h>
-#include <assert.h>
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-
-#include <ccn/ccn.h>
-#include <ccn/uri.h>
-#include <ccn/keystore.h>
-#include <ccn/signing.h>
-#include <ccn/schedule.h>
-#include <ccn/hashtb.h>
-
-
-#include "utility.h"
-
-
-char * getLocalTimeStamp(void)
-{
- char *timestamp = (char *)malloc(sizeof(char) * 16);
- time_t ltime;
- ltime=time(NULL);
- struct tm *tm;
- tm=localtime(<ime);
-
- sprintf(timestamp, "%04d%02d%02d%02d%02d%02d", tm->tm_year+1900, tm->tm_mon+1,
- tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
-
- return timestamp;
-}
-
-char * getGmTimeStamp(void)
-{
- char *timestamp = (char *)malloc(sizeof(char) * 16);
- time_t gtime;
- gtime=time(NULL);
- struct tm *tm;
- tm=gmtime(>ime);
-
- sprintf(timestamp, "%04d%02d%02d%02d%02d%02d", tm->tm_year+1900, tm->tm_mon+1,
- tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
-
- return timestamp;
-}
-
-
-
-
-long int
-get_current_time_sec(void)
-{
- struct timeval now;
- gettimeofday(&now,NULL);
- return now.tv_sec;
-}
-
-
-void
-get_current_timestamp_micro(char * microSec)
-{
- struct timeval now;
- gettimeofday(&now, NULL);
- sprintf(microSec,"%ld%06ld",now.tv_sec,(long int)now.tv_usec);
-}
-
-
-long int
-get_time_diff(const char *time1, const char *time2)
-{
- long int diff_secs;
-
- long int time1_in_sec, time2_in_sec;
-
- char *time1_sec=(char *)malloc(strlen(time1)-6+1);
- memset(time1_sec,0,strlen(time1)-6+1);
- memcpy(time1_sec,time1,strlen(time1)-6);
-
- char *time2_sec=(char *)malloc(strlen(time2)-6+1);
- memset(time2_sec,0,strlen(time2)-6+1);
- memcpy(time2_sec,time2,strlen(time2)-6);
-
- time1_in_sec=strtol(time1_sec,NULL,10);
- time2_in_sec=strtol(time2_sec,NULL,10);
-
- diff_secs=time1_in_sec-time2_in_sec;
-
- free(time1_sec);
- free(time2_sec);
-
- return diff_secs;
-}
-
-
-void
-startLogging(char *loggingDir)
-{
- struct passwd pd;
- struct passwd* pwdptr=&pd;
- struct passwd* tempPwdPtr;
- char *pwdbuffer;
- int pwdlinelen = 200;
- char *logDir;
- char *logFileName;
- char *ret;
- char *logExt;
- char *defaultLogDir;
- int status;
- struct stat st;
- int isLogDirExists=0;
- char *time=getLocalTimeStamp();
-
- pwdbuffer=(char *)malloc(sizeof(char)*200);
- memset(pwdbuffer,0,200);
- logDir=(char *)malloc(sizeof(char)*200);
- memset(logDir,0,200);
- logFileName=(char *)malloc(sizeof(char)*200);
- memset(logFileName,0,200);
- logExt=(char *)malloc(sizeof(char)*5);
- memset(logExt,0,5);
- defaultLogDir=(char *)malloc(sizeof(char)*10);
- memset(defaultLogDir,0,10);
-
- memcpy(logExt,".log",4);
- logExt[4]='\0';
- memcpy(defaultLogDir,"/nlsrLog",9);
- defaultLogDir[9]='\0';
-
- if(loggingDir!=NULL)
- {
- if( stat( loggingDir, &st)==0)
- {
- if ( st.st_mode & S_IFDIR )
- {
- if( st.st_mode & S_IWUSR)
- {
- isLogDirExists=1;
- memcpy(logDir,loggingDir,strlen(loggingDir)+1);
- }
- else printf("User do not have write permission to %s \n",loggingDir);
- }
- else printf("Provided path for %s is not a directory!!\n",loggingDir);
- }
- else printf("Log directory: %s does not exists\n",loggingDir);
- }
-
- if(isLogDirExists == 0)
- {
- if ((getpwuid_r(getuid(),pwdptr,pwdbuffer,pwdlinelen,&tempPwdPtr))!=0)
- perror("getpwuid_r() error.");
- else
- {
- memcpy(logDir,pd.pw_dir,strlen(pd.pw_dir)+1);
- memcpy(logDir+strlen(logDir),defaultLogDir,strlen(defaultLogDir)+1);
- if(stat(logDir,&st) != 0)
- status = mkdir(logDir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
- }
- }
- memcpy(logFileName,logDir,strlen(logDir)+1);
- if( logDir[strlen(logDir)-1]!='/')
- {
- memcpy(logFileName+strlen(logFileName),"/",1);
- memcpy(logFileName+strlen(logFileName),"\0",1);
- }
- memcpy(logFileName+strlen(logFileName),time,strlen(time)+1);
- memcpy(logFileName+strlen(logFileName),logExt,strlen(logExt)+1);
- ret=(char *)malloc(strlen(logFileName)+1);
- memset(ret,0,strlen(logFileName)+1);
- memcpy(ret,logFileName,strlen(logFileName)+1);
-
- setenv("NLSR_LOG_FILE",ret,1);
-
- free(time);
- free(logDir);
- free(logFileName);
- free(pwdbuffer);
- free(logExt);
- free(defaultLogDir);
- free(ret);
-}
-
-
-void
-writeLogg(const char *source_file, const char *function, const int line, const char *format, ...)
-{
- char *file=getenv("NLSR_LOG_FILE");
- if (file != NULL)
- {
- FILE *fp = fopen(file, "a");
-
- if (fp != NULL)
- {
- struct timeval t;
- gettimeofday(&t, NULL);
- fprintf(fp,"%ld.%06u - %s, %s, %d :",(long)t.tv_sec , (unsigned)t.tv_usec , source_file , function , line);
- va_list args;
- va_start(args, format);
- vfprintf(fp, format, args);
- fclose(fp);
- va_end(args);
- }
- }
-}
-
-
-struct sockaddr_in *
-get_ip_from_hostname(char *hostname )
-{
-
-
- struct addrinfo hints, *servinfo, *p;
- int res;
- struct sockaddr_in * ip;
- memset(&hints, 0, sizeof hints);
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
-
- if ( (res = getaddrinfo( hostname , "9696", &hints , &servinfo)) != 0)
- {
- fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(res));
- return NULL;
- }
- int i=0;
- for(p = servinfo; p != NULL; p = p->ai_next)
- {
- ip = (struct sockaddr_in *) p->ai_addr;
- i++;
-
- }
- freeaddrinfo(servinfo);
- return ip;
-
-
-}
-
-
-
-int
-get_ip_from_hostname_02(char * hostname , char* ip)
-{
- struct hostent *he;
- struct in_addr **addr_list;
- int i;
- if ( (he = gethostbyname( hostname ) ) == NULL)
- {
- herror("gethostbyname");
- return 1;
- }
- addr_list = (struct in_addr **) he->h_addr_list;
- for(i = 0; addr_list[i] != NULL; i++)
- {
- strcpy(ip , inet_ntoa(*addr_list[i]) );
- return 0;
- }
- return 1;
-}
-
-
-
diff --git a/nlsr-sync-0.0/utility.h b/nlsr-sync-0.0/utility.h
deleted file mode 100755
index f90c281..0000000
--- a/nlsr-sync-0.0/utility.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef _UTILITY_H_
-#define _UTILITY_H_
-
-char * getLocalTimeStamp(void);
-char * getGmTimeStamp(void);
-long int get_current_time_sec(void);
-void get_current_timestamp_micro(char * microSec);
-long int get_time_diff(const char *time1, const char *time2);
-
-void startLogging(char *loggingDir);
-void writeLogg(const char *source_file, const char *function, const int line, const char *format, ...);
-struct sockaddr_in * get_ip_from_hostname(char *hostname);
-int get_ip_from_hostname_02(char * hostname , char* ip);
-#endif
diff --git a/nlsr.c b/nlsr.c
index bd2ac39..a498264 100644
--- a/nlsr.c
+++ b/nlsr.c
@@ -26,6 +26,9 @@
#include <ccn/signing.h>
#include <ccn/schedule.h>
#include <ccn/hashtb.h>
+#include <ccn/sync.h>
+#include <ccn/seqwriter.h>
+#include <ccn/ccn_private.h>
#include "nlsr.h"
#include "nlsr_ndn.h"
@@ -35,6 +38,9 @@
#include "nlsr_adl.h"
#include "nlsr_npt.h"
#include "nlsr_route.h"
+#include "nlsr_sync.h"
+#include "nlsr_face.h"
+#include "nlsr_fib.h"
#define ON_ERROR_DESTROY(resval) \
@@ -114,7 +120,7 @@
void
daemonize_nlsr(void)
{
- int ret;
+ //int ret;
pid_t process_id = 0;
pid_t sid = 0;
process_id = fork();
@@ -126,7 +132,7 @@
if (process_id > 0)
{
printf("Process daemonized. Process id: %d \n", process_id);
- ret=process_id;
+ //ret=process_id;
exit(0);
}
@@ -153,7 +159,12 @@
}
char *rem;
const char *sep=" \t\n";
- char *rtr_name,*face;
+ char *rtr_name;
+ char *nbr_ip_addr;
+ int is_ip_configured=0;
+ //char *face;
+ char *ip_addr=(char *)calloc(20,sizeof(char));
+ //memset(ip_addr,0,12);
rtr_name=strtok_r(command,sep,&rem);
if(rtr_name==NULL)
@@ -161,36 +172,47 @@
printf(" Wrong Command Format ( ccnneighbor router_name faceX)\n");
return;
}
-
- face=strtok_r(NULL,sep,&rem);
- if(face==NULL)
- {
- printf(" Wrong Command Format ( ccnneighbor router_name faceX)\n");
- return;
- }
-
- printf("Router: %s face: %s\n",rtr_name,face);
- int face_id;
- int res;
- res=sscanf(face,"face%d",&face_id);
-
- if(res != 1 )
- {
- printf(" Wrong Command Format ( ccnneighbor router_name faceX) where X is integer\n");
- return;
- }
-
if ( rtr_name[strlen(rtr_name)-1] == '/' )
{
rtr_name[strlen(rtr_name)-1]='\0';
}
- struct name_prefix *nbr=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- nbr->name=(char *)malloc(strlen(rtr_name)+1);
- memset(nbr->name,0,strlen(rtr_name)+1);
+
+ if (rem != NULL )
+ {
+ nbr_ip_addr=strtok_r(NULL,sep,&rem);
+ if ( nbr_ip_addr != NULL)
+ is_ip_configured=1;
+ }
+ struct name_prefix *nbr=(struct name_prefix *)calloc(1,sizeof(struct name_prefix ));
+ nbr->name=(char *)calloc(strlen(rtr_name)+1,sizeof(char));
+ //memset(nbr->name,0,strlen(rtr_name)+1);
memcpy(nbr->name,rtr_name,strlen(rtr_name)+1);
nbr->length=strlen(rtr_name)+1;
- add_nbr_to_adl(nbr,face_id);
+
+ if ( !is_ip_configured )
+ {
+ struct name_prefix *nbr_name=(struct name_prefix *)calloc(1,sizeof(struct name_prefix ));
+ get_host_name_from_command_string(nbr_name,nbr->name,0);
+ if ( nlsr->debugging)
+ printf("Hostname of neighbor: %s ",nbr_name->name);
+ get_ip_from_hostname_02(nbr_name->name,ip_addr);
+ if ( nlsr->debugging)
+ printf("IP Address: %s \n",ip_addr);
+ free(nbr_name->name);
+ free(nbr_name);
+ }
+ else
+ {
+ memcpy(ip_addr,nbr_ip_addr,strlen(nbr_ip_addr));
+ if (nlsr->debugging)
+ {
+ printf("Name of neighbor: %s ",nbr->name);
+ printf("IP Address: %s \n",ip_addr);
+ }
+ }
+ add_nbr_to_adl(nbr,0,ip_addr);
+
free(nbr->name);
free(nbr);
@@ -220,9 +242,9 @@
if ( name[strlen(name)-1] == '/' )
name[strlen(name)-1]='\0';
- struct name_prefix *np=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- np->name=(char *)malloc(strlen(name)+1);
- memset(np->name,0,strlen(name)+1);
+ struct name_prefix *np=(struct name_prefix *)calloc(1,sizeof(struct name_prefix ));
+ np->name=(char *)calloc(strlen(name)+1,sizeof(char));
+ //memset(np->name,0,strlen(name)+1);
memcpy(np->name,name,strlen(name)+1);
np->length=strlen(name)+1;
@@ -256,13 +278,14 @@
if ( rtr_name[strlen(rtr_name)-1] == '/' )
rtr_name[strlen(rtr_name)-1]='\0';
- nlsr->router_name=(char *)malloc(strlen(rtr_name)+1);
- memset(nlsr->router_name,0,strlen(rtr_name)+1);
+ nlsr->router_name=(char *)calloc(strlen(rtr_name)+1,sizeof(char));
+ //memset(nlsr->router_name,0,strlen(rtr_name)+1);
memcpy(nlsr->router_name,rtr_name,strlen(rtr_name)+1);
}
+/*
void
process_command_lsdb_synch_interval(char *command)
{
@@ -290,7 +313,7 @@
}
}
-
+*/
void
process_command_interest_retry(char *command)
@@ -369,9 +392,13 @@
}
seconds=atoi(secs);
- if ( seconds >= 240 && seconds <= 3600 )
+ if ( seconds >= 240)
{
nlsr->lsa_refresh_time=seconds;
+ if ( nlsr->router_dead_interval < nlsr->lsa_refresh_time * 2 )
+ {
+ nlsr->router_dead_interval=2*nlsr->lsa_refresh_time;
+ }
}
}
@@ -397,19 +424,23 @@
}
seconds=atoi(secs);
- if ( seconds >= 360 && seconds <= 5400 )
+ if ( seconds >= 480 )
{
nlsr->router_dead_interval=seconds;
+ if ( nlsr->router_dead_interval < nlsr->lsa_refresh_time * 2 )
+ {
+ nlsr->router_dead_interval=2*nlsr->lsa_refresh_time;
+ }
}
}
void
-process_command_multi_path_face_num(char *command)
+process_command_max_faces_per_prefix(char *command)
{
if(command==NULL)
{
- printf(" Wrong Command Format ( multi-path-face-num n )\n");
+ printf(" Wrong Command Format ( max-faces-per-prefix n )\n");
return;
}
char *rem;
@@ -420,14 +451,14 @@
num=strtok_r(command,sep,&rem);
if(num==NULL)
{
- printf(" Wrong Command Format ( multi-path-face-num n)\n");
+ printf(" Wrong Command Format ( max-faces-per-prefix n)\n");
return;
}
number=atoi(num);
if ( number >= 0 && number <= 60 )
{
- nlsr->multi_path_face_num=number;
+ nlsr->max_faces_per_prefix=number;
}
}
@@ -451,8 +482,8 @@
return;
}
- nlsr->logDir=(char *)malloc(strlen(dir)+1);
- memset(nlsr->logDir,0,strlen(dir)+1);
+ nlsr->logDir=(char *)calloc(strlen(dir)+1,sizeof(char));
+ //memset(nlsr->logDir,0,strlen(dir)+1);
memcpy(nlsr->logDir,dir,strlen(dir));
}
@@ -506,6 +537,159 @@
}
}
+
+void
+process_command_topo_prefix(char *command)
+{
+ if(command==NULL)
+ {
+ printf(" Wrong Command Format ( topo-prefix )\n");
+ return;
+ }
+ char *rem;
+ const char *sep=" \t\n";
+ char *topo_prefix;
+
+ topo_prefix=strtok_r(command,sep,&rem);
+ if(topo_prefix==NULL)
+ {
+ printf(" Wrong Command Format ( topo-prefix /name/prefix )\n");
+ return;
+ }
+ else
+ {
+ if( nlsr->topo_prefix != NULL)
+ free(nlsr->topo_prefix);
+ if ( topo_prefix[strlen(topo_prefix)-1] == '/' )
+ topo_prefix[strlen(topo_prefix)-1]='\0';
+
+ nlsr->topo_prefix=(char *)calloc(strlen(topo_prefix)+1,sizeof(char));
+ //memset(nlsr->topo_prefix,0,strlen(topo_prefix)+1);
+ puts(topo_prefix);
+ memcpy(nlsr->topo_prefix,topo_prefix,strlen(topo_prefix));
+
+ }
+}
+
+
+void
+process_command_slice_prefix(char *command)
+{
+ if(command==NULL)
+ {
+ printf(" Wrong Command Format ( slice-prefix /name/prefix )\n");
+ return;
+ }
+ char *rem;
+ const char *sep=" \t\n";
+ char *slice_prefix;
+
+ slice_prefix=strtok_r(command,sep,&rem);
+ if(slice_prefix==NULL)
+ {
+ printf(" Wrong Command Format ( slice-prefix /name/prefix )\n");
+ return;
+ }
+ else
+ {
+ if ( nlsr->slice_prefix != NULL)
+ free(nlsr->slice_prefix);
+ if ( slice_prefix[strlen(slice_prefix)-1] == '/' )
+ slice_prefix[strlen(slice_prefix)-1]='\0';
+
+ nlsr->slice_prefix=(char *)calloc(strlen(slice_prefix)+1,sizeof(char));
+ //memset(nlsr->slice_prefix,0,strlen(slice_prefix)+1);
+ memcpy(nlsr->slice_prefix,slice_prefix,strlen(slice_prefix));
+ }
+}
+
+void
+process_command_hyperbolic_routing(char *command)
+{
+ if(command==NULL)
+ {
+ printf(" Wrong Command Format ( hyperbolic-routing on)\n");
+ return;
+ }
+ char *rem;
+ const char *sep=" \t\n";
+ char *on_off;
+
+ on_off=strtok_r(command,sep,&rem);
+ if(on_off==NULL)
+ {
+ printf(" Wrong Command Format ( hyperbolic-routing on )\n");
+ return;
+ }
+
+ if ( strcmp(on_off,"ON") == 0 || strcmp(on_off,"on") == 0 )
+ {
+ nlsr->is_hyperbolic_calc=1;
+ }
+}
+
+void
+process_command_hyperbolic_cordinate(char *command)
+{
+ if(command==NULL)
+ {
+ printf(" Wrong Command Format ( hyperbolic r 0 )\n");
+ return;
+ }
+
+ char *rem;
+ const char *sep=" \t\n\r";
+ char *radious;
+ char *theta;
+
+ radious=strtok_r(command,sep,&rem);
+ if (radious == NULL )
+ {
+ printf(" Wrong Command Format ( hyperbolic r 0 )\n");
+ return;
+ }
+
+ theta=strtok_r(NULL,sep,&rem);
+ if (theta == NULL )
+ {
+ printf(" Wrong Command Format ( hyperbolic r 0 )\n");
+ return;
+ }
+
+ nlsr->cor_r=strtof(radious,NULL);
+ nlsr->cor_theta=strtof(theta,NULL);
+
+}
+
+void
+process_command_tunnel_type(char *command)
+{
+ if(command==NULL)
+ {
+ printf(" Wrong Command Format ( tunnel-type udp/tcp)\n");
+ return;
+ }
+ char *rem;
+ const char *sep=" \t\n";
+ char *on_off;
+
+ on_off=strtok_r(command,sep,&rem);
+ if(on_off==NULL)
+ {
+ printf(" Wrong Command Format ( tunnel-type udp/tcp )\n");
+ return;
+ }
+
+ if ( strcmp(on_off,"TCP") == 0 || strcmp(on_off,"tcp") == 0 )
+ {
+ nlsr->tunnel_type=IPPROTO_TCP;
+ }
+ else if ( strcmp(on_off,"UDP") == 0 || strcmp(on_off,"udp") == 0 )
+ {
+ nlsr->tunnel_type=IPPROTO_UDP;
+ }
+}
+
void
process_conf_command(char *command)
{
@@ -530,10 +714,10 @@
{
process_command_ccnname(remainder);
}
- else if(!strcmp(cmd_type,"lsdb-synch-interval") )
+ /*else if(!strcmp(cmd_type,"lsdb-synch-interval") )
{
process_command_lsdb_synch_interval(remainder);
- }
+ }*/
else if(!strcmp(cmd_type,"interest-retry") )
{
process_command_interest_retry(remainder);
@@ -550,9 +734,9 @@
{
process_command_router_dead_interval(remainder);
}
- else if(!strcmp(cmd_type,"multi-path-face-num") )
+ else if(!strcmp(cmd_type,"max-faces-per-prefix") )
{
- process_command_multi_path_face_num(remainder);
+ process_command_max_faces_per_prefix(remainder);
}
else if(!strcmp(cmd_type,"logdir") )
{
@@ -566,6 +750,26 @@
{
process_command_debug(remainder);
}
+ else if(!strcmp(cmd_type,"topo-prefix") )
+ {
+ process_command_topo_prefix(remainder);
+ }
+ else if(!strcmp(cmd_type,"slice-prefix") )
+ {
+ process_command_slice_prefix(remainder);
+ }
+ else if(!strcmp(cmd_type,"hyperbolic-cordinate") )
+ {
+ process_command_hyperbolic_cordinate(remainder);
+ }
+ else if(!strcmp(cmd_type,"hyperbolic-routing") )
+ {
+ process_command_hyperbolic_routing(remainder);
+ }
+ else if(!strcmp(cmd_type,"tunnel-type") )
+ {
+ process_command_tunnel_type(remainder);
+ }
else
{
printf("Wrong configuration Command %s \n",cmd_type);
@@ -602,14 +806,68 @@
return 0;
}
+
+void
+add_faces_for_nbrs(void)
+{
+ int i, adl_element;
+ struct ndn_neighbor *nbr;
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->adl, e);
+ adl_element=hashtb_n(nlsr->adl);
+
+ for(i=0;i<adl_element;i++)
+ {
+ nbr=e->data;
+ int face_id=add_ccn_face(nlsr->ccn, (const char *)nbr->neighbor->name, (const char *)nbr->ip_address, 9695,nlsr->tunnel_type);
+ update_face_to_adl_for_nbr(nbr->neighbor->name, face_id);
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->topo_prefix, OP_REG, face_id);
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->slice_prefix, OP_REG, face_id);
+ hashtb_next(e);
+ }
+
+ hashtb_end(e);
+
+}
+
+void
+destroy_faces_for_nbrs(void)
+{
+ int i, adl_element;
+ struct ndn_neighbor *nbr;
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->adl, e);
+ adl_element=hashtb_n(nlsr->adl);
+
+ for(i=0;i<adl_element;i++)
+ {
+ nbr=e->data;
+ if ( nbr->face > 0 )
+ {
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->topo_prefix, OP_UNREG, nbr->face);
+ add_delete_ccn_face_by_face_id(nlsr->ccn,(const char *)nbr->neighbor->name,OP_UNREG,nbr->face);
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->slice_prefix, OP_UNREG, nbr->face);
+ }
+ hashtb_next(e);
+ }
+
+ hashtb_end(e);
+
+}
+
char *
process_api_client_command(char *command)
{
char *msg;
msg=(char *)malloc(100);
- memset(msg,100,0);
- //strcpy(msg,"Action Carried Out for NLSR Api Client");
-
+ memset(msg,0,100);
+
const char *sep=" \t\n";
char *rem=NULL;
char *cmd_type=NULL;
@@ -625,9 +883,9 @@
if ( name[strlen(name)-1] == '/' )
name[strlen(name)-1]='\0';
- struct name_prefix *np=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- np->name=(char *)malloc(strlen(name)+1);
- memset(np->name,0,strlen(name)+1);
+ struct name_prefix *np=(struct name_prefix *)calloc(1,sizeof(struct name_prefix ));
+ np->name=(char *)calloc(strlen(name)+1,sizeof(char));
+ //memset(np->name,0,strlen(name)+1);
memcpy(np->name,name,strlen(name)+1);
np->length=strlen(name)+1;
@@ -687,6 +945,10 @@
else
{
update_adjacent_status_to_adl(np,NBR_DOWN);
+ int face_id=get_next_hop_face_from_adl(np->name);
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)np->name, OP_UNREG, face_id);
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->topo_prefix, OP_UNREG, face_id);
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->slice_prefix, OP_UNREG, face_id);
delete_nbr_from_adl(np);
if(!nlsr->is_build_adj_lsa_sheduled)
{
@@ -701,8 +963,24 @@
res=is_neighbor(np->name);
if ( res == 0 )
{
- add_nbr_to_adl(np,face_id);
+ struct name_prefix *nbr_name=(struct name_prefix *)calloc(1,sizeof(struct name_prefix ));
+ get_host_name_from_command_string(nbr_name,np->name,0);
+ printf("Hostname of neighbor: %s ",nbr_name->name);
+
+ char *ip_addr=(char *)calloc(20,sizeof(char));
+ //memset(ip_addr,0,20);
+ get_ip_from_hostname_02(nbr_name->name,ip_addr);
+ printf("IP Address: %s \n",ip_addr);
+ int face_id=add_ccn_face(nlsr->ccn, (const char *)nbr_name->name, (const char *)ip_addr, 9695,nlsr->tunnel_type);
+ update_face_to_adl_for_nbr(nbr_name->name, face_id);
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->topo_prefix, OP_REG, face_id);
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nlsr->slice_prefix, OP_REG, face_id);
+
+ add_nbr_to_adl(np,face_id,ip_addr);
+
sprintf(msg,"Neighbor %s has been added to adjacency list.",name);
+ free(ip_addr);
+
}
else
{
@@ -719,18 +997,16 @@
nlsr_api_server_poll(long int time_out_micro_sec, int ccn_fd)
{
struct timeval timeout;
- if ( time_out_micro_sec < 0 )
+ if (time_out_micro_sec< 500000 && time_out_micro_sec> 0 )
{
- timeout.tv_sec=1;
- timeout.tv_usec=0;
+ timeout.tv_sec=0;
+ timeout.tv_usec=time_out_micro_sec;
}
- else
+ else
{
- time_out_micro_sec=(long int)time_out_micro_sec*0.4;
- timeout.tv_sec=time_out_micro_sec / 1000000;
- timeout.tv_usec=time_out_micro_sec % 1000000;
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 500000;
}
-
int fd;
int nread;
@@ -745,7 +1021,7 @@
testfds=nlsr->readfds;
result = select(FD_SETSIZE, &testfds, NULL,NULL, &timeout);
- for(fd = 0; fd < FD_SETSIZE; fd++)
+ for(fd = 0; fd < FD_SETSIZE && result > 0; fd++)
{
if(FD_ISSET(fd,&testfds))
{
@@ -755,14 +1031,13 @@
}
else if(fd == nlsr->nlsr_api_server_sock_fd)
{
- printf("Setting up socket....\n");
client_len = sizeof(client_address);
client_sockfd = accept(nlsr->nlsr_api_server_sock_fd,(struct sockaddr *)&client_address, &client_len);
FD_SET(client_sockfd, &nlsr->readfds);
}
else
{
- printf("Else...\n");
+
ioctl(fd, FIONREAD, &nread);
if(nread == 0)
{
@@ -772,7 +1047,7 @@
else
{
recv(fd, recv_buffer, 1024, 0);
- printf("Test Received Data from NLSR API cleint: %s \n",recv_buffer);
+ printf("Received Data from NLSR API cleint: %s \n",recv_buffer);
char *msg=process_api_client_command(recv_buffer);
send(fd, msg, strlen(msg),0);
free(msg);
@@ -786,6 +1061,23 @@
return 0;
}
+int
+check_config_validity()
+{
+ if (nlsr->router_name == NULL )
+ {
+ fprintf(stderr,"Router name has not been configured :(\n");
+ return -1;
+ }
+ if ( nlsr->is_hyperbolic_calc == 1 && (nlsr->cor_r == -1.0 && nlsr->cor_theta== -1.0) )
+ {
+ fprintf(stderr,"Hyperbolic codinate has not been defined :(\n");
+ return -1;
+ }
+
+ return 0;
+}
+
void
nlsr_destroy( void )
{
@@ -796,20 +1088,16 @@
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Freeing Allocated Memory....\n");
/* Destroying all face created by nlsr in CCND */
destroy_all_face_by_nlsr();
-
+ destroy_faces_for_nbrs();
/* Destroying every hash table attached to each neighbor in ADL before destorying ADL */
- hashtb_destroy(&nlsr->npl);
- hashtb_destroy(&nlsr->adl);
+ hashtb_destroy(&nlsr->adl);
+ hashtb_destroy(&nlsr->npl);
+ hashtb_destroy(&nlsr->pit_alsa);
hashtb_destroy(&nlsr->lsdb->name_lsdb);
hashtb_destroy(&nlsr->lsdb->adj_lsdb);
- hashtb_destroy(&nlsr->pit_alsa);
+ hashtb_destroy(&nlsr->lsdb->cor_lsdb);
- //To Do: has to destroy the face_list one by one
-
- hashtb_destroy(&nlsr->routing_table);
-
-
- int i, npt_element;
+ int i, npt_element,rt_element;
struct npt_entry *ne;
struct hashtb_enumerator ee;
struct hashtb_enumerator *e = ⅇ
@@ -825,26 +1113,43 @@
hashtb_end(e);
hashtb_destroy(&nlsr->npt);
+
+
+ struct routing_table_entry *rte;
+ hashtb_start(nlsr->routing_table, e);
+ rt_element=hashtb_n(nlsr->routing_table);
+ for(i=0;i<rt_element;i++)
+ {
+ rte=e->data;
+ hashtb_destroy(&rte->face_list);
+ hashtb_next(e);
+ }
+ hashtb_end(e);
+ hashtb_destroy(&nlsr->routing_table);
+
+ if ( nlsr->ccns != NULL )
+ ccns_close(&nlsr->ccns, NULL, NULL);
+ if ( nlsr->slice != NULL )
+ ccns_slice_destroy(&nlsr->slice);
+ close(nlsr->nlsr_api_server_sock_fd);
- close(nlsr->nlsr_api_server_sock_fd);
-
- ccn_schedule_destroy(&nlsr->sched);
ccn_destroy(&nlsr->ccn);
-
free(nlsr->lsdb->lsdb_version);
free(nlsr->lsdb);
free(nlsr->router_name);
- free(nlsr);
if ( nlsr->debugging )
{
printf("Finished freeing allocated memory\n");
}
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Finished freeing allocated memory\n");
+
+ free(nlsr);
}
+
void
init_api_server(int ccn_fd)
{
@@ -864,13 +1169,11 @@
}
server_address.sin_family = AF_INET;
- //server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_addr.s_addr = INADDR_ANY;
server_address.sin_port = htons(nlsr->api_port);
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
- //printf("port number %d\n", ntohs(server_address.sin_port));
listen(server_sockfd, 100);
FD_ZERO(&nlsr->readfds);
FD_SET(server_sockfd, &nlsr->readfds);
@@ -898,7 +1201,7 @@
return -1;
}
- nlsr=(struct nlsr *)malloc(sizeof(struct nlsr));
+ nlsr=(struct nlsr *)calloc(1,sizeof(struct nlsr));
struct hashtb_param param_adl = {0};
nlsr->adl=hashtb_create(sizeof(struct ndn_neighbor), ¶m_adl);
@@ -916,17 +1219,19 @@
nlsr->lsdb=(struct linkStateDatabase *)malloc(sizeof(struct linkStateDatabase));
- char *time_stamp=(char *)malloc(20);
- memset(time_stamp,0,20);
+ char *time_stamp=(char *)calloc(20,sizeof(char));
+ //memset(time_stamp,0,20);
get_current_timestamp_micro(time_stamp);
nlsr->lsdb->lsdb_version=(char *)malloc(strlen(time_stamp)+1);
- memset(nlsr->lsdb->lsdb_version,'0',strlen(time_stamp));
+ memset(nlsr->lsdb->lsdb_version,0,strlen(time_stamp));
free(time_stamp);
struct hashtb_param param_adj_lsdb = {0};
nlsr->lsdb->adj_lsdb = hashtb_create(sizeof(struct alsa), ¶m_adj_lsdb);
struct hashtb_param param_name_lsdb = {0};
nlsr->lsdb->name_lsdb = hashtb_create(sizeof(struct nlsa), ¶m_name_lsdb);
+ struct hashtb_param param_cor_lsdb = {0};
+ nlsr->lsdb->cor_lsdb = hashtb_create(sizeof(struct clsa), ¶m_cor_lsdb);
@@ -942,16 +1247,30 @@
nlsr->detailed_logging=0;
nlsr->debugging=0;
- nlsr->lsdb_synch_interval = LSDB_SYNCH_INTERVAL;
+ //nlsr->lsdb_synch_interval = LSDB_SYNCH_INTERVAL;
nlsr->interest_retry = INTEREST_RETRY;
nlsr->interest_resend_time = INTEREST_RESEND_TIME;
nlsr->lsa_refresh_time=LSA_REFRESH_TIME;
nlsr->router_dead_interval=ROUTER_DEAD_INTERVAL;
- nlsr->multi_path_face_num=MULTI_PATH_FACE_NUM;
+ nlsr->max_faces_per_prefix=MAX_FACES_PER_PREFIX;
nlsr->semaphor=NLSR_UNLOCKED;
nlsr->api_port=API_PORT;
+ nlsr->topo_prefix=(char *)calloc(strlen("/ndn/routing/nlsr")+1,sizeof(char));
+ //memset(nlsr->topo_prefix,0,strlen("/ndn/routing/nlsr")+1);
+ memcpy(nlsr->topo_prefix,"/ndn/routing/nlsr",strlen("/ndn/routing/nlsr"));
+
+ nlsr->slice_prefix=(char *)calloc(strlen("/ndn/routing/nlsr/LSA")+1,sizeof(char));
+ //memset(nlsr->slice_prefix, 0, strlen("/ndn/routing/nlsr/LSA")+1);
+ memcpy(nlsr->slice_prefix,"/ndn/routing/nlsr/LSA",strlen("/ndn/routing/nlsr/LSA"));
+
+ nlsr->is_hyperbolic_calc=0;
+ nlsr->cor_r=-1.0;
+ nlsr->cor_theta=-1.0;
+
+ nlsr->tunnel_type=IPPROTO_UDP;
+
return 0;
}
@@ -992,8 +1311,14 @@
nlsr->api_port=port;
readConfigFile(config_file);
+
+ ON_ERROR_DESTROY(check_config_validity());
+
+ print_adjacent_from_adl();
+
if ( daemon_mode == 1 )
{
+ nlsr->debugging=0;
daemonize_nlsr();
}
@@ -1009,7 +1334,14 @@
}
init_api_server(ccn_fd);
-
+
+ res=create_sync_slice(nlsr->topo_prefix, nlsr->slice_prefix);
+ if(res<0)
+ {
+ fprintf(stderr, "Can not create slice for prefix %s\n",nlsr->slice_prefix);
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"Can not create slice for prefix %s\n",nlsr->slice_prefix);
+ ON_ERROR_DESTROY(res);
+ }
struct ccn_charbuf *router_prefix;
router_prefix=ccn_charbuf_create();
res=ccn_name_from_uri(router_prefix,nlsr->router_name);
@@ -1038,14 +1370,25 @@
printf("lsdb_version: %s\n",nlsr->lsdb->lsdb_version);
writeLogg(__FILE__,__FUNCTION__,__LINE__,"lsdb_version: %s\n",nlsr->lsdb->lsdb_version);
+ add_faces_for_nbrs();
print_name_prefix_from_npl();
print_adjacent_from_adl();
- build_and_install_name_lsas();
- print_name_lsdb();
+ build_and_install_name_lsas();
+
+ print_name_lsdb();
+ if ( nlsr->cor_r != -1.0 && nlsr->cor_theta != -1.0)
+ {
+ build_and_install_cor_lsa();
+ }
+ write_name_lsdb_to_repo(nlsr->slice_prefix);
nlsr->sched = ccn_schedule_create(nlsr, &ndn_rtr_ticker);
+ ccn_set_schedule(nlsr->ccn,nlsr->sched);
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);
+
+ res=sync_monitor(nlsr->topo_prefix,nlsr->slice_prefix);
+ ON_ERROR_DESTROY(res);
while(1)
@@ -1060,7 +1403,7 @@
}
if(nlsr->ccn != NULL)
{
- res = ccn_run(nlsr->ccn, 0);
+ res = ccn_run(nlsr->ccn, 1);
}
if (!(nlsr->sched && nlsr->ccn))
{
diff --git a/nlsr.conf b/nlsr.conf
index 193bafc..ced844f 100644
--- a/nlsr.conf
+++ b/nlsr.conf
@@ -1,6 +1,6 @@
router-name /ndn/memphis.edu/netlab/macbook
-ccnneighbor /ndn/memphis.edu/netlab/mira face14 10
-ccnneighbor /ndn/memphis.edu/netlab/castor face16 8
+ccnneighbor /ndn/memphis.edu/netlab/pollux face2 10
+ccnneighbor /ndn/memphis.edu/netlab/castor face3 8
ccnname /ndn/memphis.edu/netlab/macbook/name1
ccnname /ndn/memphis.edu/netlab/macbook/test
lsdb-synch-interval 310
diff --git a/nlsr.h b/nlsr.h
index a53cc2b..681973b 100644
--- a/nlsr.h
+++ b/nlsr.h
@@ -9,14 +9,14 @@
#define NLSR_UNLOCKED 0
#define LSA_REFRESH_TIME 1800
#define ROUTER_DEAD_INTERVAL 3600
-#define MULTI_PATH_FACE_NUM 0
+#define MAX_FACES_PER_PREFIX 0
#define LINK_METRIC 10
#define NAME_LSA_VALID 1
#define NAME_LSA_INVALID 0
-#define API_PORT 9696
+#define API_PORT 9999
struct name_prefix
@@ -29,6 +29,8 @@
{
struct hashtb *name_lsdb;
struct hashtb *adj_lsdb;
+ struct hashtb *cor_lsdb;
+
char *lsdb_version;
};
@@ -43,6 +45,12 @@
struct ccn_closure in_interest;
struct ccn_closure in_content;
+
+ struct ccns_name_closure *closure;
+
+ struct ccns_slice *slice;
+ struct ccns_handle *ccns;
+
struct ccn_schedule *sched;
struct ccn_scheduled_event *event;
struct ccn_scheduled_event *event_send_lsdb_interest;
@@ -59,6 +67,7 @@
struct hashtb *npt;
struct hashtb *routing_table;
+
struct linkStateDatabase *lsdb;
struct ccn *ccn;
@@ -74,12 +83,13 @@
int is_send_lsdb_interest_scheduled;
int is_route_calculation_scheduled;
- long int lsdb_synch_interval;
+ //long int lsdb_synch_interval;
int interest_retry;
long int interest_resend_time;
long int lsa_refresh_time;
long int router_dead_interval;
- long int multi_path_face_num;
+ //long int multi_path_face_num;
+ long int max_faces_per_prefix;
char *logDir;
int detailed_logging;
int debugging;
@@ -89,6 +99,16 @@
int nlsr_api_server_sock_fd;
fd_set readfds;
int api_port;
+
+ char *topo_prefix;
+ char *slice_prefix;
+
+ int is_hyperbolic_calc;
+ double cor_r;
+ double cor_theta;
+
+ int tunnel_type;
+
};
diff --git a/nlsr_adl.c b/nlsr_adl.c
index 54d8954..ad6254d 100644
--- a/nlsr_adl.c
+++ b/nlsr_adl.c
@@ -8,6 +8,10 @@
#include <assert.h>
#ifdef HAVE_CONFIG_H
#include <config.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
#endif
@@ -25,7 +29,7 @@
#include "nlsr_npt.h"
void
-add_nbr_to_adl(struct name_prefix *new_nbr,int face)
+add_nbr_to_adl(struct name_prefix *new_nbr,int face,char *ip)
{
struct ndn_neighbor *nbr=(struct ndn_neighbor *)malloc(sizeof(struct ndn_neighbor )); //free
@@ -54,6 +58,9 @@
nbr->metric=LINK_METRIC;
nbr->is_lsdb_send_interest_scheduled=0;
+ nbr->ip_address=(char *)malloc(strlen(ip)+1);
+ memset(nbr->ip_address,0,strlen(ip)+1);
+ memcpy(nbr->ip_address,ip,strlen(ip));
char *time_stamp=(char *)malloc(20);
get_current_timestamp_micro(time_stamp);
@@ -81,6 +88,7 @@
printf("--------Neighbor---------------------------\n");
printf(" Neighbor: %s \n",nbr->neighbor->name);
printf(" Length : %d \n",nbr->neighbor->length);
+ printf(" Ip Address: %s \n",nbr->ip_address);
printf(" Face : %d \n",nbr->face);
printf(" Metric : %d \n",nbr->metric);
printf(" Status : %d \n",nbr->status);
@@ -310,23 +318,17 @@
hashtb_start(nlsr->adl, e);
- //printf("Neighbor: %s , Length: %d \n",nbr->name, nbr->length);
-
res = hashtb_seek(e, nbr->name, nbr->length, 0);
if( res == HT_OLD_ENTRY )
{
- //printf("Old Neighbor\n");
nnbr=e->data;
nnbr->lsdb_interest_timed_out += increment;
- //printf("lsdb_interest_timed_out: %d \n",nnbr->lsdb_interest_timed_out);
}
else if(res == HT_NEW_ENTRY)
{
hashtb_delete(e);
- }
-
- //print_adjacent_from_adl();
+ }
hashtb_end(e);
}
@@ -533,12 +535,13 @@
free(temp_length);
ccn_charbuf_append_string(c,"|");
- char *temp_face=(char *)malloc(20);
+ /*char *temp_face=(char *)malloc(20);
memset(temp_face,0,20);
sprintf(temp_face,"%d",nbr->face);
ccn_charbuf_append_string(c,temp_face);
free(temp_face);
ccn_charbuf_append_string(c,"|");
+ */
char *temp_metric=(char *)malloc(20);
memset(temp_metric,0,20);
@@ -891,6 +894,32 @@
return connecting_face;
}
+void
+update_face_to_adl_for_nbr(char *nbr, int face)
+{
+ int res;
+ struct ndn_neighbor *nnbr;
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->adl, e);
+ res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
+
+ if( res == HT_OLD_ENTRY )
+ {
+ nnbr=e->data;
+ nnbr->face=face;
+
+ }
+ else if(res == HT_NEW_ENTRY)
+ {
+ hashtb_delete(e);
+ }
+
+ hashtb_end(e);
+}
+
int
is_neighbor(char *nbr)
{
@@ -917,3 +946,34 @@
return ret;
}
+int
+is_active_neighbor(char *nbr)
+{
+ int ret=0;
+
+ int res;
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->adl, e);
+ res = hashtb_seek(e, nbr, strlen(nbr)+1, 0);
+
+ if( res == HT_OLD_ENTRY )
+ {
+ struct ndn_neighbor *nnbr;
+ nnbr=e->data;
+ if (nnbr->status == NBR_ACTIVE )
+ {
+ ret=1;
+ }
+ }
+ else if(res == HT_NEW_ENTRY)
+ {
+ hashtb_delete(e);
+ }
+
+ hashtb_end(e);
+
+ return ret;
+}
+
diff --git a/nlsr_adl.h b/nlsr_adl.h
index 5e9fa5a..1eb74d6 100644
--- a/nlsr_adl.h
+++ b/nlsr_adl.h
@@ -11,6 +11,7 @@
int status;
char * last_lsdb_version;
char * last_info_version;
+ char *ip_address;
int info_interest_timed_out;
int lsdb_interest_timed_out;
int lsdb_random_time_component;
@@ -20,7 +21,7 @@
int metric;
};
-void add_nbr_to_adl(struct name_prefix *new_nbr,int face);
+void add_nbr_to_adl(struct name_prefix *new_nbr,int face,char *ip);
void delete_nbr_from_adl(struct name_prefix *nbr);
void print_adjacent(struct ndn_neighbor *nbr);
void print_adjacent_from_adl(void);
@@ -48,4 +49,6 @@
void adjust_adjacent_last_lsdb_requested_to_adl(char *nbr, long int sec);
int get_next_hop_face_from_adl(char *nbr);
int is_neighbor(char *nbr);
+int is_active_neighbor(char *nbr);
+void update_face_to_adl_for_nbr(char *nbr, int face);
#endif
diff --git a/nlsr-sync-0.0/nlsr_face.c b/nlsr_face.c
similarity index 100%
rename from nlsr-sync-0.0/nlsr_face.c
rename to nlsr_face.c
diff --git a/nlsr-sync-0.0/nlsr_face.h b/nlsr_face.h
similarity index 100%
rename from nlsr-sync-0.0/nlsr_face.h
rename to nlsr_face.h
diff --git a/nlsr_fib.c b/nlsr_fib.c
index e89e80d..6ef81cb 100644
--- a/nlsr_fib.c
+++ b/nlsr_fib.c
@@ -15,6 +15,7 @@
#include <ccn/charbuf.h>
#include "nlsr_fib.h"
+#include "nlsr.h"
static void
@@ -71,7 +72,7 @@
forwarding_entry->ccnd_id_size =ccnd_id_size;
forwarding_entry->faceid = faceid;
forwarding_entry->flags = -1;
- forwarding_entry->lifetime = (~0U) >> 1;
+ forwarding_entry->lifetime = 2100;
prefixreg = ccn_charbuf_create();
ccnb_append_forwarding_entry(prefixreg, forwarding_entry);
@@ -181,6 +182,12 @@
int
add_delete_ccn_face_by_face_id(struct ccn *h, const char *uri, int operation, int faceid)
{
+ if ( nlsr->debugging )
+ {
+ printf("add_delete_ccn_face_by_face_id called\n");
+ printf("Uri: %s Face: %d Operation: %s \n",(char *)uri , faceid, operation == OP_REG ? "Registration" : "Unregistration");
+ }
+
struct ccn_charbuf *prefix;
struct ccn_charbuf *local_scope_template = ccn_charbuf_create();
struct ccn_charbuf *no_name = ccn_charbuf_create();
diff --git a/nlsr_lsdb.c b/nlsr_lsdb.c
index bec9869..1798700 100644
--- a/nlsr_lsdb.c
+++ b/nlsr_lsdb.c
@@ -25,11 +25,11 @@
#include "nlsr_adl.h"
#include "nlsr_route.h"
#include "nlsr_npt.h"
+#include "nlsr_sync.h"
void
set_new_lsdb_version(void)
{
-
char *time_stamp=(char *)malloc(20);
memset(time_stamp,0,20);
get_current_timestamp_micro(time_stamp);
@@ -47,9 +47,6 @@
make_name_lsa_key(char *key, char *orig_router, int ls_type, long int ls_id)
{
-
- //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);
@@ -63,9 +60,39 @@
memcpy(key+strlen(key),lst,strlen(lst));
memcpy(key+strlen(key),"/",1);
memcpy(key+strlen(key),lsid,strlen(lsid));
-
- //printf("Key: %s\n",key);
+ if ( nlsr->debugging )
+ printf("name LSA Key: %s\n", key);
+}
+
+
+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)
+{
+ sprintf(key,"%s%s/lsType.%d/lsId.%ld/%s",slice_prefix, orig_router, ls_type, ls_id, orig_time);
+
+ if ( nlsr->debugging )
+ printf("Name LSA prefix for repo content: %s\n",key);
+}
+
+void
+make_adj_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, char *orig_time,char *slice_prefix)
+{
+
+ sprintf(key,"%s%s/lsType.%d/%s",slice_prefix,orig_router,ls_type, orig_time );
+
+ if ( nlsr->debugging )
+ printf("Name LSA prefix for repo content:%s\n",key);
+}
+
+void
+make_cor_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, char *orig_time,char *slice_prefix)
+{
+
+ sprintf(key,"%s%s/lsType.%d/%s",slice_prefix,orig_router,ls_type, orig_time );
+
+ if ( nlsr->debugging )
+ printf("Cor LSA prefix for repo content:%s\n",key);
}
void
@@ -77,7 +104,6 @@
writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_name_lsas called\n");
int i, npl_element;
- //struct name_prefix *np;
struct name_prefix_list_entry *npe;
struct hashtb_enumerator ee;
@@ -173,9 +199,6 @@
char *time_stamp=(char *)malloc(20);
memset(time_stamp,0,20);
get_current_timestamp_micro(time_stamp);
- //long int lsa_life_time=get_time_diff(time_stamp,name_lsa->header->orig_time);
-
- //printf("time difference: %ld \n",lsa_life_time);
char lst[2];
@@ -452,7 +475,6 @@
int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,next_hop,faces,route_costs);
if ( check == HT_NEW_ENTRY )
{
- //printf("Added in npt \n");
if ( nlsr->debugging )
printf("Added in npt \n");
if ( nlsr->detailed_logging )
@@ -599,6 +621,16 @@
}
+void
+make_cor_lsa_key(char *key,struct clsa *cor_lsa)
+{
+ memcpy(key+strlen(key),cor_lsa->header->orig_router->name,cor_lsa->header->orig_router->length);
+ memcpy(key+strlen(key),"/",1);
+ char ls_type[2];
+ sprintf(ls_type,"%d",cor_lsa->header->ls_type);
+ memcpy(key+strlen(key),ls_type,strlen(ls_type));
+ key[strlen(key)]='\0';
+}
void
@@ -645,6 +677,39 @@
build_adj_lsa(adj_lsa);
install_adj_lsa(adj_lsa);
+ char lst[2];
+ memset(lst,0,2);
+ sprintf(lst,"%d",LS_TYPE_ADJ);
+
+ char *repo_key=(char *)malloc(strlen(nlsr->slice_prefix)+strlen(adj_lsa->header->orig_time)+strlen(adj_lsa->header->orig_router->name) + strlen(lst) + 5+15);
+ memset(repo_key, 0, strlen(nlsr->slice_prefix)+strlen(adj_lsa->header->orig_time)+strlen(adj_lsa->header->orig_router->name) + strlen(lst) + 5+15);
+ make_adj_lsa_prefix_for_repo(repo_key, adj_lsa->header->orig_router->name,LS_TYPE_ADJ,adj_lsa->header->orig_time,nlsr->slice_prefix);
+
+ if ( nlsr->debugging )
+ printf("Adj LSA Repo Key: %s \n",repo_key);
+
+ char *key=(char *)malloc(adj_lsa->header->orig_router->length+2+2);
+ memset(key,0,adj_lsa->header->orig_router->length+2+2);
+ make_adj_lsa_key(key,adj_lsa);
+ if ( nlsr->debugging )
+ printf("Adj LSA: %s \n",key);
+
+ struct name_prefix *lsaid=(struct name_prefix *)malloc(sizeof(struct name_prefix));
+ lsaid->name=(char *)malloc(strlen(key)+1);
+ memset(lsaid->name, 0, strlen(key)+1);
+ memcpy(lsaid->name,key,strlen(key));
+ lsaid->length=strlen(key)+1;
+
+
+ write_adj_lsa_to_repo(repo_key, lsaid);
+
+ free(key);
+ free(repo_key);
+ free(lsaid->name);
+ free(lsaid);
+
+
+
free(adj_lsa->header->orig_router->name);
free(adj_lsa->header->orig_router);
free(adj_lsa->header->orig_time);
@@ -680,9 +745,6 @@
int no_link=no_active_nbr();
- //printf("Number of link in Adjacent LSA: %d\n",no_link);
-
- /*Filling Up Header Data */
adj_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
adj_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
adj_lsa->header->orig_router->name=(char *)malloc(strlen(nlsr->router_name)+1);
@@ -701,9 +763,6 @@
memcpy(adj_lsa->header->orig_time,time_stamp,strlen(time_stamp)+1);
free(time_stamp);
-
- /* Filling Up Body Data */
-
adj_lsa->no_link=no_link;
@@ -716,14 +775,6 @@
memcpy(adj_lsa->body,(char *)data,strlen(data)+1);
ccn_charbuf_destroy(&c);
-
-
- 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++;
@@ -743,15 +794,11 @@
char *time_stamp=(char *)malloc(20);
memset(time_stamp,0,20);
get_current_timestamp_micro(time_stamp);
- //long int lsa_life_time=get_time_diff(time_stamp,adj_lsa->header->orig_time);
-
- //printf("time difference: %ld \n",lsa_life_time);
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);
- //printf("Adjacent LSA key: %s \n",key);
struct alsa *new_adj_lsa=(struct alsa*)malloc(sizeof(struct alsa ));
@@ -831,8 +878,6 @@
if ( adj_lsa->no_link > 0)
{
- //new_adj_lsa = e->data;
-
writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
write_log_for_adj_lsa(new_adj_lsa);
@@ -904,20 +949,20 @@
char *rem;
char *rtr_id;
char *length;
- char *face;
+ //char *face;
char *metric;
if(no_link >0 )
{
rtr_id=strtok_r(lsa_data,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
writeLogg(__FILE__,__FUNCTION__,__LINE__," Link %d \n",i+1);
writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router: %s \n",rtr_id);
writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router Length: %s \n",length);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Connecting Face: %s \n",face);
+ //writeLogg(__FILE__,__FUNCTION__,__LINE__," Connecting Face: %s \n",face);
writeLogg(__FILE__,__FUNCTION__,__LINE__," Metric: %s \n",metric);
@@ -925,12 +970,12 @@
{
rtr_id=strtok_r(NULL,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
writeLogg(__FILE__,__FUNCTION__,__LINE__," Link %d \n",i+1);
writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router: %s \n",rtr_id);
writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router Length: %s \n",length);
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Connecting Face: %s \n",face);
+ //writeLogg(__FILE__,__FUNCTION__,__LINE__," Connecting Face: %s \n",face);
writeLogg(__FILE__,__FUNCTION__,__LINE__," Metric: %s \n",metric);
}
@@ -968,33 +1013,34 @@
char *rem;
char *rtr_id;
char *length;
- char *face;
+ //char *face;
char *metric;
if(no_link >0 )
{
rtr_id=strtok_r(lsa_data,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
- printf(" Link %d \n",i+1);
- printf(" Neighbor : %s \n",rtr_id);
- printf(" Neighbor Length : %s \n",length);
- printf(" Connecting Face : %s \n",face);
- printf(" Metric : %s \n",metric);
-
+ if ( nlsr->debugging ) {
+ printf(" Link %d \n",i+1);
+ printf(" Neighbor : %s \n",rtr_id);
+ printf(" Neighbor Length : %s \n",length);
+ //printf(" Connecting Face : %s \n",face);
+ printf(" Metric : %s \n",metric);
+ }
for(i=1;i<no_link;i++)
{
rtr_id=strtok_r(NULL,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
printf(" Link %d \n",i+1);
printf(" Neighbor : %s \n",rtr_id);
printf(" Neighbor Length : %s \n",length);
- printf(" Connecting Face : %s \n",face);
+ //printf(" Connecting Face : %s \n",face);
printf(" Metric : %s \n",metric);
}
@@ -1062,7 +1108,6 @@
writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_others_adj_lsa called \n");
struct alsa *adj_lsa=(struct alsa *)malloc(sizeof( struct alsa ));
build_others_adj_lsa(adj_lsa,orig_router,ls_type,orig_time,no_link,data);
- //print_adj_lsa(adj_lsa);
install_adj_lsa(adj_lsa);
@@ -1081,7 +1126,6 @@
void
build_others_adj_lsa(struct alsa *adj_lsa,char *orig_router,int ls_type,char *orig_time,int no_link,char *data)
{
- //printf("build_others_adj_lsa called \n");
if ( nlsr->debugging )
printf("build_others_adj_lsa called \n");
if ( nlsr->detailed_logging )
@@ -1144,130 +1188,6 @@
return num_element;
}
-void
-get_name_lsdb_summary(struct ccn_charbuf *name_lsdb_data)
-{
- //printf("get_name_lsdb_summary called \n");
- if ( nlsr->debugging )
- printf("get_name_lsdb_summary called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_name_lsdb_summary called \n");
-
- int i, name_lsdb_element;
-
- struct nlsa *name_lsa;
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->name_lsdb, e);
- name_lsdb_element=hashtb_n(nlsr->lsdb->name_lsdb);
-
- for(i=0;i<name_lsdb_element;i++)
- {
- name_lsa=e->data;
-
- ccn_charbuf_append_string(name_lsdb_data,name_lsa->header->orig_router->name);
- ccn_charbuf_append_string(name_lsdb_data,"|");
-
- char *lst=(char *)malloc(20);
- memset(lst,0,20);
- sprintf(lst,"%d",name_lsa->header->ls_type);
- ccn_charbuf_append_string(name_lsdb_data,lst);
- free(lst);
- ccn_charbuf_append_string(name_lsdb_data,"|");
-
- char *lsid=(char *)malloc(20);
- memset(lsid,0,20);
- sprintf(lsid,"%ld",name_lsa->header->ls_id);
- ccn_charbuf_append_string(name_lsdb_data,lsid);
- free(lsid);
- ccn_charbuf_append_string(name_lsdb_data,"|");
-
- ccn_charbuf_append_string(name_lsdb_data,name_lsa->header->orig_time);
- ccn_charbuf_append_string(name_lsdb_data,"|");
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-
-}
-
-
-void
-get_adj_lsdb_summary(struct ccn_charbuf *adj_lsdb_data)
-{
- if ( nlsr->debugging )
- printf("get_adj_lsdb_summary called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_adj_lsdb_summary called \n");
- int i, adj_lsdb_element;
- struct alsa *adj_lsa;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->lsdb->adj_lsdb, e);
- adj_lsdb_element=hashtb_n(nlsr->lsdb->adj_lsdb);
-
- for(i=0;i<adj_lsdb_element;i++)
- {
- adj_lsa=e->data;
-
- ccn_charbuf_append_string(adj_lsdb_data,adj_lsa->header->orig_router->name);
- ccn_charbuf_append_string(adj_lsdb_data,"|");
-
- char *lst=(char *)malloc(20);
- memset(lst,0,20);
- sprintf(lst,"%d",adj_lsa->header->ls_type);
- ccn_charbuf_append_string(adj_lsdb_data,lst);
- free(lst);
- ccn_charbuf_append_string(adj_lsdb_data,"|");
-
- ccn_charbuf_append_string(adj_lsdb_data,adj_lsa->header->orig_time);
- ccn_charbuf_append_string(adj_lsdb_data,"|");
-
- hashtb_next(e);
- }
-
- hashtb_end(e);
-}
-
-
-void
-get_lsdb_summary(struct ccn_charbuf *lsdb_data)
-{
- struct ccn_charbuf *name_lsdb_data=ccn_charbuf_create();
- struct ccn_charbuf *adj_lsdb_data=ccn_charbuf_create();
-
- get_name_lsdb_summary(name_lsdb_data);
- get_adj_lsdb_summary(adj_lsdb_data);
-
- long int num_lsa=get_name_lsdb_num_element() + get_adj_lsdb_num_element();
- char *num_element=(char *)malloc(15);
- memset(num_element,0,15);
- sprintf(num_element,"%ld",num_lsa);
-
- if( num_lsa > 0)
- {
- ccn_charbuf_append_string(lsdb_data,num_element);
- ccn_charbuf_append_string(lsdb_data,"|");
- }
- if(name_lsdb_data->length>0)
- {
- char *data1=ccn_charbuf_as_string(name_lsdb_data);
- ccn_charbuf_append_string(lsdb_data,(char *)data1);
- }
- if(adj_lsdb_data->length>0)
- {
- char *data2=ccn_charbuf_as_string(adj_lsdb_data);
- ccn_charbuf_append_string(lsdb_data,(char *)data2);
- }
- ccn_charbuf_destroy(&name_lsdb_data);
- ccn_charbuf_destroy(&adj_lsdb_data);
- free(num_element);
-
-}
int
check_is_new_name_lsa(char *orig_router,char *lst,char *lsid,char *orig_time)
@@ -1351,10 +1271,49 @@
return ret;
}
+int
+check_is_new_cor_lsa(char *orig_router,char *lst,char *orig_time)
+{
+ int ret=0;
+ struct ccn_charbuf *key=ccn_charbuf_create();
+ ccn_charbuf_append_string(key,orig_router);
+ ccn_charbuf_append_string(key,"/");
+ ccn_charbuf_append_string(key,lst);
+
+ int res;
+ struct clsa *cor_lsa;
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->lsdb->cor_lsdb, e);
+ res = hashtb_seek(e, ccn_charbuf_as_string(key), key->length, 0);
+
+ if( res == HT_NEW_ENTRY )
+ {
+ hashtb_delete(e);
+ ret=1;
+
+ }
+ else if(res == HT_OLD_ENTRY)
+ {
+ cor_lsa=e->data;
+ if( strcmp ( orig_time , cor_lsa->header->orig_time ) > 0 )
+ {
+ ret=1;
+ }
+ }
+
+ hashtb_end(e);
+
+ ccn_charbuf_destroy(&key);
+
+ return ret;
+}
+
void
get_name_lsa_data(struct ccn_charbuf *lsa_data, struct name_prefix *lsaId)
{
- //printf("get_name_lsa_data called \n");
if ( nlsr->debugging )
printf("get_name_lsa_data called \n");
if ( nlsr->detailed_logging )
@@ -1372,8 +1331,7 @@
if( res == HT_OLD_ENTRY )
{
name_lsa=e->data;
- //printf("NAME LSA found\n");
-
+
if ( nlsr->debugging )
printf("NAME LSA found \n");
if ( nlsr->detailed_logging )
@@ -1452,7 +1410,6 @@
if( res == HT_OLD_ENTRY )
{
adj_lsa=e->data;
- //printf("Adj LSA found\n");
if ( nlsr->debugging )
printf("Adj LSA found \n");
@@ -1466,15 +1423,15 @@
memset(temp_length,0,20);
sprintf(temp_length,"%d",adj_lsa->header->orig_router->length);
ccn_charbuf_append_string(lsa_data,temp_length);
- free(temp_length);
ccn_charbuf_append_string(lsa_data,"|");
+ free(temp_length);
char *temp_ltype=(char *)malloc(20);
memset(temp_ltype,0,20);
sprintf(temp_ltype,"%d",adj_lsa->header->ls_type);
ccn_charbuf_append_string(lsa_data,temp_ltype);
- free(temp_ltype);
ccn_charbuf_append_string(lsa_data,"|");
+ free(temp_ltype);
ccn_charbuf_append_string(lsa_data,adj_lsa->header->orig_time);
ccn_charbuf_append_string(lsa_data,"|");
@@ -1483,8 +1440,8 @@
memset(temp_nl,0,20);
sprintf(temp_nl,"%d",adj_lsa->no_link);
ccn_charbuf_append_string(lsa_data,temp_nl);
- free(temp_nl);
ccn_charbuf_append_string(lsa_data,"|");
+ free(temp_nl);
ccn_charbuf_append_string(lsa_data,adj_lsa->body);
@@ -1522,7 +1479,9 @@
make_name_lsa_key(key, np->name,ls_type,ls_id);
- printf("Key:%s Length:%d\n",key,(int)strlen(key));
+
+ if ( nlsr->debugging )
+ printf("Key:%s Length:%d\n",key,(int)strlen(key));
struct nlsa *nlsa;
@@ -1567,16 +1526,17 @@
}
-int
-delete_name_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
+//int
+//delete_name_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
+int
+delete_name_lsa(char *orig_router, char *name_prefix)
{
- //printf("delete_name_lsa called \n");
-
+
if ( nlsr->debugging )
printf("delete_name_lsa called \n");
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_name_lsa called \n");
-
+ /*
if(flags == CCN_SCHEDULE_CANCEL)
{
return -1;
@@ -1604,8 +1564,9 @@
if( res == HT_OLD_ENTRY )
{
nlsa=e->data;
- delete_npt_entry_by_router_and_name_prefix(nlsa->header->orig_router->name, nlsa->name_prefix->name);
-
+ */
+ delete_npt_entry_by_router_and_name_prefix(orig_router, name_prefix);
+ /*
writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
write_log_for_name_lsa(nlsa);
@@ -1618,6 +1579,7 @@
hashtb_delete(e);
}
hashtb_end(e);
+ */
if ( nlsr->debugging )
printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
@@ -1631,31 +1593,28 @@
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
- //print_name_lsdb();
-
- nlsr_unlock();
+ //nlsr_unlock();
return 0;
}
-int
-delete_adj_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
+//int
+//delete_adj_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
+int delete_adj_lsa()
{
- //printf("delete_adj_lsa called \n");
-
+
if ( nlsr->debugging )
printf("delete_adj_lsa called \n");
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_adj_lsa called \n");
-
+
+ /*
if(flags == CCN_SCHEDULE_CANCEL)
{
return -1;
}
nlsr_lock();
- //printf("LSA Key: %s \n",(char *)ev->evdata);
-
if ( nlsr->debugging )
printf("LSA Key: %s \n",(char *)ev->evdata);
if ( nlsr->detailed_logging )
@@ -1684,6 +1643,7 @@
hashtb_delete(e);
}
hashtb_end(e);
+ */
if ( nlsr->debugging )
printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
@@ -1704,9 +1664,7 @@
nlsr->is_route_calculation_scheduled=1;
}
- //print_adj_lsdb();
-
- nlsr_unlock();
+ //nlsr_unlock();
return 0;
}
@@ -1714,15 +1672,11 @@
void
refresh_name_lsdb(void)
{
- //printf("refresh_name_lsdb called \n");
-
if ( nlsr->debugging )
printf("refresh_name_lsdb called \n");
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_name_lsdb called \n");
- //int lsa_change_count=0;
-
char *time_stamp=(char *)malloc(20);
memset(time_stamp,0,20);
get_current_timestamp_micro(time_stamp);
@@ -1780,9 +1734,11 @@
writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
free(current_time_stamp);
+
+ hashtb_next(e);
}
else
- {
+ { /*
char lst[2];
memset(lst,0,2);
sprintf(lst,"%d",name_lsa->header->ls_type);
@@ -1791,15 +1747,22 @@
memset(lsid,0,10);
sprintf(lsid,"%ld",name_lsa->header->ls_id);
-
+
char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
- //printf("Key:%s Length:%d\n",key,(int)strlen(key));
nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_name_lsa, (void *)key, 0);
+ */
+ delete_name_lsa(name_lsa->header->orig_router->name, name_lsa->name_prefix->name);
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
+ write_log_for_name_lsa(name_lsa);
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
+ hashtb_delete(e);
+ i++;
}
if ( nlsr->debugging )
@@ -1817,7 +1780,10 @@
print_name_lsdb();
- //lsa_change_count++;
+ }
+ else
+ {
+ hashtb_next(e);
}
}
else
@@ -1829,7 +1795,7 @@
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Others Name LSA need to be deleted\n");
- char lst[2];
+ /*char lst[2];
memset(lst,0,2);
sprintf(lst,"%d",name_lsa->header->ls_type);
@@ -1843,14 +1809,26 @@
make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
- //printf("Key:%s Length:%d\n",key,(int)strlen(key));
nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_name_lsa, (void *)key, 0);
- //lsa_change_count++;
+ */
+ delete_name_lsa(name_lsa->header->orig_router->name, name_lsa->name_prefix->name);
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
+ write_log_for_name_lsa(name_lsa);
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
+ hashtb_delete(e);
+ i++;
+ }
+ else
+ {
+ hashtb_next(e);
}
}
-
- hashtb_next(e);
+ /*else
+ {
+ hashtb_next(e);
+ }*/
}
hashtb_end(e);
@@ -1863,7 +1841,6 @@
void
refresh_adj_lsdb(void)
{
- //printf("refresh_adj_lsdb called \n");
if ( nlsr->debugging )
printf("refresh_adj_lsdb called \n");
@@ -1889,8 +1866,7 @@
{
adj_lsa=e->data;
- lsa_life_time=get_time_diff(time_stamp,adj_lsa->header->orig_time);
- //printf("LSA Life Time: %ld \n",lsa_life_time);
+ lsa_life_time=get_time_diff(time_stamp,adj_lsa->header->orig_time);
if ( nlsr->debugging )
printf("LSA Life Time: %ld \n",lsa_life_time);
@@ -1901,7 +1877,6 @@
{
if ( lsa_life_time > nlsr->lsa_refresh_time )
{
- //printf("Own Adj LSA need to be refrshed\n");
if ( nlsr->debugging )
printf("Own Adj LSA need to be refrshed\n");
if ( nlsr->detailed_logging )
@@ -1941,30 +1916,158 @@
writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
print_adj_lsdb();
+
+
}
+
+ hashtb_next(e);
}
else
{
if ( lsa_life_time > nlsr->router_dead_interval )
{
- //printf("Others Adj LSA need to be deleted\n");
+
+ if ( nlsr->debugging )
+ printf("Others Adj LSA need to be deleted\n");
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"Others Adj LSA need to be deleted\n");
+ /*
+ 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);
+
+ nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_adj_lsa, (void *)key, 0);
+ */
+
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
+ write_log_for_adj_lsa(adj_lsa);
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
+ delete_adj_lsa();
+ hashtb_delete(e);
+ i++;
+
+ }
+ else
+ {
+ hashtb_next(e);
+ }
+ }
+
+
+
+ //hashtb_next(e);
+ }
+
+ hashtb_end(e);
+
+ free(time_stamp);
+}
+
+
+void
+refresh_cor_lsdb(void)
+{
+
+ if ( nlsr->debugging )
+ printf("refresh_cor_lsdb called \n");
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_cor_lsdb called \n");
+
+ char *time_stamp=(char *)malloc(20);
+ memset(time_stamp,0,20);
+ get_current_timestamp_micro(time_stamp);
+
+ long int lsa_life_time;
+
+ int i, cor_lsdb_element;
+ struct clsa *cor_lsa;
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->lsdb->cor_lsdb, e);
+ cor_lsdb_element=hashtb_n(nlsr->lsdb->cor_lsdb);
+
+ for(i=0;i<cor_lsdb_element;i++)
+ {
+ cor_lsa=e->data;
+
+ lsa_life_time=get_time_diff(time_stamp,cor_lsa->header->orig_time);
+
+ if ( nlsr->debugging )
+ printf("LSA Life Time: %ld \n",lsa_life_time);
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Life Time: %ld \n",lsa_life_time);
+
+ if ( strcmp(cor_lsa->header->orig_router->name,nlsr->router_name) == 0)
+ {
+ if ( lsa_life_time > nlsr->lsa_refresh_time )
+ {
+ if ( nlsr->debugging )
+ printf("Own Cor LSA need to be refrshed\n");
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"Own Cor LSA need to be refrshed\n");
+
+ //writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
+ //writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
+ //write_log_for_adj_lsa(adj_lsa);
+ //writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
+
+ char *current_time_stamp=(char *)malloc(20);
+ memset(current_time_stamp,0,20);
+ get_current_timestamp_micro(current_time_stamp);
+
+ free(cor_lsa->header->orig_time);
+ cor_lsa->header->orig_time=(char *)malloc(strlen(current_time_stamp)+1); //free
+ memset(cor_lsa->header->orig_time,0,strlen(current_time_stamp)+1);
+ memcpy(cor_lsa->header->orig_time,current_time_stamp,strlen(current_time_stamp)+1);
+
+ free(current_time_stamp);
+
+ //writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
+ //writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding adj lsa\n");
+ //write_log_for_adj_lsa(adj_lsa);
+ //writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
+
+ if ( nlsr->debugging )
+ printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
+
+ set_new_lsdb_version();
+
+ if ( nlsr->debugging )
+ printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
+
+ print_adj_lsdb();
+ }
+
+ hashtb_next(e);
+ }
+ else
+ {
+ if ( lsa_life_time > nlsr->router_dead_interval )
+ {
if ( nlsr->debugging )
printf("Others Adj LSA need to be deleted\n");
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Others Adj LSA need to be deleted\n");
- 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);
- //printf("Adjacent LSA key: %s \n",key);
- nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_adj_lsa, (void *)key, 0);
+ hashtb_delete(e);
+ i++;
+ }
+ else
+ {
+ hashtb_next(e);
}
}
-
- hashtb_next(e);
+
}
hashtb_end(e);
@@ -1982,8 +2085,6 @@
nlsr_lock();
- //printf("refresh_lsdb called \n");
-
if ( nlsr->debugging )
printf("refresh_lsdb called\n");
if ( nlsr->detailed_logging )
@@ -1991,9 +2092,489 @@
refresh_name_lsdb();
refresh_adj_lsdb();
+ refresh_cor_lsdb();
nlsr->event = ccn_schedule_event(nlsr->sched, 60000000, &refresh_lsdb, NULL, 0);
nlsr_unlock();
return 0;
}
+
+void
+write_adj_lsa_to_repo(char *repo_content_prefix, struct name_prefix *lsa_id)
+{
+ if ( nlsr->debugging )
+ printf("write_adj_lsa_to_repo called\n");
+ if ( nlsr->debugging )
+ printf("Content Prefix: %s\n",repo_content_prefix);
+
+ struct ccn_charbuf *lsa_data=ccn_charbuf_create();
+ get_adj_lsa_data(lsa_data,lsa_id);
+ if ( nlsr->debugging )
+ printf("Adj 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)
+{
+ if ( nlsr->debugging )
+ printf("write_name_lsa_to_repo called\n");
+ if ( nlsr->debugging )
+ printf("Content Prefix: %s\n",repo_content_prefix);
+
+ struct ccn_charbuf *lsa_data=ccn_charbuf_create();
+ get_name_lsa_data(lsa_data,lsa_id);
+
+ if ( nlsr->debugging )
+ 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_lsdb_to_repo(char *slice_prefix)
+{
+ int i, name_lsdb_element;
+
+ struct nlsa *name_lsa;
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->lsdb->name_lsdb, e);
+ name_lsdb_element=hashtb_n(nlsr->lsdb->name_lsdb);
+
+ for(i=0;i<name_lsdb_element;i++)
+ {
+ name_lsa=e->data;
+
+ char lst[2];
+ memset(lst,0,2);
+ sprintf(lst,"%d",name_lsa->header->ls_type);
+
+ char lsid[10];
+ memset(lsid,0,10);
+ sprintf(lsid,"%ld",name_lsa->header->ls_id);
+
+
+ char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
+ memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
+
+
+ make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
+
+ if ( nlsr->debugging )
+ printf("Name LSA Key: %s \n",key);
+
+
+ char *repo_key=(char *)malloc(strlen(slice_prefix)+1+strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1+strlen(name_lsa->header->orig_time)+1+15);
+ memset(repo_key,0,strlen(slice_prefix)+1+strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1+strlen(name_lsa->header->orig_time)+1+15);
+ make_name_lsa_prefix_for_repo(repo_key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id,name_lsa->header->orig_time,slice_prefix);
+
+ if ( nlsr->debugging )
+ printf("Name LSA Repo Key: %s \n",repo_key);
+
+ struct name_prefix *lsaid=(struct name_prefix *)malloc(sizeof(struct name_prefix));
+ lsaid->name=(char *)malloc(strlen(key)+1);
+ memset(lsaid->name, 0, strlen(key)+1);
+ memcpy(lsaid->name,key,strlen(key));
+ lsaid->length=strlen(key)+1;
+
+
+ write_name_lsa_to_repo(repo_key, lsaid);
+
+ free(key);
+ free(repo_key);
+ free(lsaid->name);
+ free(lsaid);
+
+ hashtb_next(e);
+ }
+
+ hashtb_end(e);
+
+
+}
+
+void
+print_cor_lsa(struct clsa *cor_lsa)
+{
+ if ( nlsr->debugging )
+ {
+ printf("-----------Cor LSA Content---------------\n");
+ printf(" Origination Router : %s\n",cor_lsa->header->orig_router->name);
+ printf(" Origination Router Length: %d\n",cor_lsa->header->orig_router->length);
+ printf(" LS Type : %d\n",cor_lsa->header->ls_type);
+ printf(" Origination Time : %s\n",cor_lsa->header->orig_time);
+ printf(" LSA Data \n");
+ printf(" Cor R: : %f\n",cor_lsa->cor_r);
+ printf(" Cor Theta : %f\n",cor_lsa->cor_theta);
+
+ printf("\n");
+ }
+}
+
+void
+print_cor_lsdb()
+{
+
+ if ( nlsr->debugging )
+ printf("print_cor_lsdb called \n");
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ int i=1;
+
+ for (hashtb_start(nlsr->lsdb->cor_lsdb, e); e->key != NULL; hashtb_next(e))
+ {
+ if ( nlsr->debugging )
+ printf("-----------Cor LSA (%d)---------------\n",i);
+ struct clsa *cor_lsa=e->data;
+ print_cor_lsa(cor_lsa);
+ i++;
+ }
+ hashtb_end(e);
+
+ if ( nlsr->debugging )
+ printf("\n");
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
+}
+
+void
+install_cor_lsa(struct clsa *cor_lsa)
+{
+ if ( nlsr->debugging )
+ printf("install_cor_lsa called \n");
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"install_cor_lsa called \n");
+
+
+ char *time_stamp=(char *)malloc(20);
+ memset(time_stamp,0,20);
+ get_current_timestamp_micro(time_stamp);
+
+
+ char *key=(char *)malloc(cor_lsa->header->orig_router->length+2+2);
+ memset(key,0,cor_lsa->header->orig_router->length+2);
+ make_cor_lsa_key(key,cor_lsa);
+
+ if ( nlsr->debugging )
+ printf("Cor LSA key: %s \n",key);
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+ int res;
+
+ hashtb_start(nlsr->lsdb->cor_lsdb, e);
+ res = hashtb_seek(e, key, strlen(key), 0);
+
+ if ( res == HT_NEW_ENTRY )
+ {
+ if ( nlsr->debugging )
+ printf("New Cor LSA... \n");
+
+ struct clsa *new_cor_lsa=(struct clsa *)malloc(sizeof( struct clsa ));
+ new_cor_lsa=e->data;
+ new_cor_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
+
+ new_cor_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
+ new_cor_lsa->header->orig_router->name=(char *)malloc(strlen(cor_lsa->header->orig_router->name)+1);
+ memset(new_cor_lsa->header->orig_router->name,0,strlen(cor_lsa->header->orig_router->name)+1);
+ memcpy(new_cor_lsa->header->orig_router->name,cor_lsa->header->orig_router->name,strlen(cor_lsa->header->orig_router->name)+1);
+ new_cor_lsa->header->orig_router->length=cor_lsa->header->orig_router->length;
+
+ new_cor_lsa->header->orig_time=(char *)malloc(strlen(cor_lsa->header->orig_time)+1); //free
+ memset(new_cor_lsa->header->orig_time,0,strlen(cor_lsa->header->orig_time)+1);
+ memcpy(new_cor_lsa->header->orig_time,cor_lsa->header->orig_time,strlen(cor_lsa->header->orig_time)+1);
+
+ new_cor_lsa->header->ls_type=cor_lsa->header->ls_type;
+
+ new_cor_lsa->cor_r=cor_lsa->cor_r;
+ new_cor_lsa->cor_theta=cor_lsa->cor_theta;
+ }
+ else if ( res == HT_OLD_ENTRY )
+ {
+ if ( nlsr->debugging )
+ printf("Cor LSA exists (Old)... \n");
+ }
+ hashtb_end(e);
+
+ free(key);
+
+}
+
+void
+build_cor_lsa(struct clsa *cor_lsa, double cor_r, double cor_theta)
+{
+ cor_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
+ cor_lsa->header->ls_type=LS_TYPE_COR;
+
+ char *time_stamp=(char *)malloc(20);
+ memset(time_stamp,0,20);
+ get_current_timestamp_micro(time_stamp);
+
+ cor_lsa->header->orig_time=(char *)malloc(strlen(time_stamp)+1); //free
+ memset(cor_lsa->header->orig_time,0,strlen(time_stamp)+1);
+ memcpy(cor_lsa->header->orig_time,time_stamp,strlen(time_stamp)+1);
+ free(time_stamp);
+
+ cor_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
+ cor_lsa->header->orig_router->name=(char *)malloc(strlen(nlsr->router_name)+1);
+ memset(cor_lsa->header->orig_router->name,0,strlen(nlsr->router_name)+1);
+ memcpy(cor_lsa->header->orig_router->name,nlsr->router_name,strlen(nlsr->router_name)+1);
+ cor_lsa->header->orig_router->length=strlen(nlsr->router_name)+1;
+
+ cor_lsa->cor_r=cor_r;
+ cor_lsa->cor_theta=cor_theta;
+
+}
+
+void
+build_others_cor_lsa(struct clsa *cor_lsa,char *orig_router, int ls_type,char *orig_time, double cor_r, double cor_theta)
+{
+ cor_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
+ cor_lsa->header->ls_type=ls_type;
+
+ cor_lsa->header->orig_time=(char *)malloc(strlen(orig_time)+1);
+ memset(cor_lsa->header->orig_time,0,strlen(orig_time)+1);
+ memcpy(cor_lsa->header->orig_time,orig_time,strlen(orig_time)+1);
+
+ cor_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
+ cor_lsa->header->orig_router->name=(char *)malloc(strlen(orig_router)+1);
+ memset(cor_lsa->header->orig_router->name,0,strlen(orig_router)+1);
+ memcpy(cor_lsa->header->orig_router->name,orig_router,strlen(orig_router)+1);
+ cor_lsa->header->orig_router->length=strlen(orig_router)+1;
+
+ cor_lsa->cor_r=cor_r;
+ cor_lsa->cor_theta=cor_theta;
+
+}
+
+void
+build_and_install_others_cor_lsa(char *orig_router,int ls_type,char *orig_time, double cor_r, double cor_theta)
+{
+ struct clsa *cor_lsa=(struct clsa *)malloc(sizeof( struct clsa ));
+ build_others_cor_lsa(cor_lsa,orig_router,ls_type, orig_time, cor_r, cor_theta);
+ install_cor_lsa(cor_lsa);
+
+ print_cor_lsdb();
+
+ free(cor_lsa->header->orig_router);
+ free(cor_lsa->header->orig_time);
+ free(cor_lsa->header);
+ free(cor_lsa);
+
+}
+
+
+void
+build_and_install_cor_lsa()
+{
+
+
+
+ struct clsa *cor_lsa=(struct clsa *)malloc(sizeof( struct clsa ));
+
+ build_cor_lsa(cor_lsa,nlsr->cor_r,nlsr->cor_theta);
+ install_cor_lsa(cor_lsa);
+
+ write_cor_lsa_to_repo(cor_lsa);
+
+ print_cor_lsdb();
+
+ free(cor_lsa->header->orig_router);
+ free(cor_lsa->header->orig_time);
+ free(cor_lsa->header);
+ free(cor_lsa);
+
+}
+
+void
+get_cor_lsa_data(struct ccn_charbuf *lsa_data,char *cor_lsa_key)
+{
+ if ( nlsr->debugging )
+ printf("get_cor_lsa_data called \n");
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_adj_lsa_data called \n");
+
+ struct clsa *cor_lsa=(struct clsa*)malloc(sizeof(struct clsa ));
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+ int res;
+
+ hashtb_start(nlsr->lsdb->cor_lsdb, e);
+ res = hashtb_seek(e, cor_lsa_key, strlen(cor_lsa_key), 0);
+
+ if( res == HT_OLD_ENTRY )
+ {
+ cor_lsa=e->data;
+
+ if ( nlsr->debugging )
+ printf("Cor LSA found \n");
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"Cor LSA found \n");
+
+ ccn_charbuf_append_string(lsa_data,cor_lsa->header->orig_router->name);
+ ccn_charbuf_append_string(lsa_data,"|");
+
+ char *temp_length=(char *)malloc(20);
+ memset(temp_length,0,20);
+ sprintf(temp_length,"%d",cor_lsa->header->orig_router->length);
+ ccn_charbuf_append_string(lsa_data,temp_length);
+ ccn_charbuf_append_string(lsa_data,"|");
+ free(temp_length);
+
+ char *temp_ltype=(char *)malloc(20);
+ memset(temp_ltype,0,20);
+ sprintf(temp_ltype,"%d",cor_lsa->header->ls_type);
+ ccn_charbuf_append_string(lsa_data,temp_ltype);
+ ccn_charbuf_append_string(lsa_data,"|");
+ free(temp_ltype);
+
+ ccn_charbuf_append_string(lsa_data,cor_lsa->header->orig_time);
+ ccn_charbuf_append_string(lsa_data,"|");
+
+ char *cor_r=(char *)malloc(20);
+ memset(cor_r,0,20);
+ sprintf(cor_r,"%f",cor_lsa->cor_r);
+ ccn_charbuf_append_string(lsa_data,cor_r);
+ ccn_charbuf_append_string(lsa_data,"|");
+ free(cor_r);
+
+ char *cor_theta=(char *)malloc(20);
+ memset(cor_theta,0,20);
+ sprintf(cor_theta,"%f",cor_lsa->cor_theta);
+ ccn_charbuf_append_string(lsa_data,cor_theta);
+ ccn_charbuf_append_string(lsa_data,"|");
+ free(cor_theta);
+
+ }
+ else if(res == HT_NEW_ENTRY)
+ {
+ hashtb_delete(e);
+ }
+
+ hashtb_end(e);
+}
+
+void
+write_cor_lsa_to_repo(struct clsa *cor_lsa)
+{
+
+
+ if ( nlsr->debugging )
+ printf("write_cor_lsa_to_repo called\n");
+
+
+ char *key=(char *)malloc(cor_lsa->header->orig_router->length+2+2);
+ memset(key,0,cor_lsa->header->orig_router->length+2+2);
+ make_cor_lsa_key(key,cor_lsa);
+
+ struct ccn_charbuf *lsa_data=ccn_charbuf_create();
+ get_cor_lsa_data(lsa_data,key);
+
+ if ( nlsr->debugging )
+ printf("Cor LSA Data: %s \n",ccn_charbuf_as_string(lsa_data));
+ char *lst=(char *)malloc(20);
+ memset(lst,0,20);
+ sprintf(lst,"%d",cor_lsa->header->ls_type);
+ char *repo_key=(char *)malloc(strlen(nlsr->slice_prefix)+strlen(cor_lsa->header->orig_time)+strlen(cor_lsa->header->orig_router->name) + strlen(lst) + 5+15);
+ memset(repo_key, 0, strlen(nlsr->slice_prefix)+strlen(cor_lsa->header->orig_time)+strlen(cor_lsa->header->orig_router->name) + strlen(lst) + 5+15);
+ make_cor_lsa_prefix_for_repo(repo_key, cor_lsa->header->orig_router->name,LS_TYPE_COR,cor_lsa->header->orig_time,nlsr->slice_prefix);
+
+ if ( nlsr->debugging )
+ printf("Cor LSA Repo Key: %s \n",repo_key);
+
+ write_data_to_repo(ccn_charbuf_as_string(lsa_data), repo_key);
+
+
+
+ free(lst);
+ free(key);
+ free(repo_key);
+ ccn_charbuf_destroy(&lsa_data);
+}
+
+void
+make_cor_lsa_key_by_router_name(char *key,char *router_name)
+{
+ memcpy(key+strlen(key),router_name,strlen(router_name));
+ memcpy(key+strlen(key),"/",1);
+ char ls_type[2];
+ sprintf(ls_type,"%d",LS_TYPE_COR);
+ memcpy(key+strlen(key),ls_type,strlen(ls_type));
+ key[strlen(key)]='\0';
+}
+
+
+double
+get_hyperbolic_r(char *router)
+{
+ double ret=-1.0;
+ char *cor_lsa_key=(char *)calloc(strlen(router)+4,sizeof(char));
+ make_cor_lsa_key_by_router_name(cor_lsa_key,router);
+
+
+ struct clsa *cor_lsa;
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+ int res;
+
+ hashtb_start(nlsr->lsdb->cor_lsdb, e);
+ res = hashtb_seek(e, cor_lsa_key, strlen(cor_lsa_key), 0);
+
+ if ( res == HT_OLD_ENTRY)
+ {
+ cor_lsa=e->data;
+ ret=cor_lsa->cor_r;
+ }
+ else if(res == HT_NEW_ENTRY)
+ {
+ hashtb_delete(e);
+ }
+
+ hashtb_end(e);
+
+ free(cor_lsa_key);
+ return ret;
+}
+
+double
+get_hyperbolic_theta(char *router)
+{
+ double ret=-1.0;
+ char *cor_lsa_key=(char *)calloc(strlen(router)+4,sizeof(char));
+ make_cor_lsa_key_by_router_name(cor_lsa_key,router);
+
+ struct clsa *cor_lsa;
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+ int res;
+
+ hashtb_start(nlsr->lsdb->cor_lsdb, e);
+ res = hashtb_seek(e, cor_lsa_key, strlen(cor_lsa_key), 0);
+
+ if ( res == HT_OLD_ENTRY)
+ {
+ cor_lsa=e->data;
+ ret=cor_lsa->cor_theta;
+ }
+ else if(res == HT_NEW_ENTRY)
+ {
+ hashtb_delete(e);
+ }
+
+ hashtb_end(e);
+
+ free(cor_lsa_key);
+ return ret;
+}
diff --git a/nlsr_lsdb.h b/nlsr_lsdb.h
index 0383954..c67348e 100644
--- a/nlsr_lsdb.h
+++ b/nlsr_lsdb.h
@@ -3,6 +3,7 @@
#define LS_TYPE_ADJ 1
#define LS_TYPE_NAME 2
+#define LS_TYPE_COR 3
struct link
{
@@ -44,6 +45,13 @@
struct name_prefix *name_prefix;
};
+struct clsa
+{
+ struct alsa_header *header;
+ double cor_r;
+ double cor_theta;
+};
+
void set_new_lsdb_version(void);
void build_and_install_name_lsas(void);
@@ -72,16 +80,26 @@
long int get_name_lsdb_num_element(void);
long int get_adj_lsdb_num_element(void);
-void get_name_lsdb_summary(struct ccn_charbuf *name_lsdb_data);
-void get_adj_lsdb_summary(struct ccn_charbuf *adj_lsdb_data);
-void get_lsdb_summary(struct ccn_charbuf *lsdb_data);
-
int check_is_new_name_lsa(char *orig_router,char *lst,char *lsid,char *orig_time);
int check_is_new_adj_lsa(char *orig_router,char *lst,char *orig_time);
+int check_is_new_cor_lsa(char *orig_router,char *lst,char *orig_time);
void get_name_lsa_data(struct ccn_charbuf *lsa_data,struct name_prefix *lsaId);
void get_adj_lsa_data(struct ccn_charbuf *lsa_data,struct name_prefix *lsaId);
void make_name_lsa_invalid(struct name_prefix *np,int ls_type, long int ls_id);
+void build_and_install_cor_lsa();
+void print_cor_lsdb();
+
+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);
+
+void write_cor_lsa_to_repo(struct clsa *cor_lsa);
+void build_and_install_others_cor_lsa(char *orig_router,int ls_type,char *orig_time, double cor_r, double cor_theta);
+double get_hyperbolic_r(char *router);
+double get_hyperbolic_theta(char *router);
+
#endif
diff --git a/nlsr_ndn.c b/nlsr_ndn.c
index 9af0a05..258c954 100644
--- a/nlsr_ndn.c
+++ b/nlsr_ndn.c
@@ -275,20 +275,12 @@
res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,nlsr_position+1,&comp_ptr1, &comp_size);
- //printf("Det= %s \n",comp_ptr1);
if(!strcmp((char *)comp_ptr1,"info"))
{
process_incoming_interest_info(selfp,info);
}
- if(!strcmp((char *)comp_ptr1,"lsdb"))
- {
- process_incoming_interest_lsdb(selfp,info);
- }
- if(!strcmp((char *)comp_ptr1,"lsa"))
- {
- process_incoming_interest_lsa(selfp,info);
- }
+
}
void
@@ -321,9 +313,9 @@
ccn_charbuf_append_closer(sp.template_ccnb);
- char *raw_data=(char *)malloc(16);
- memset(raw_data,0,16);
- sprintf(raw_data,"%ld", nlsr->lsdb_synch_interval);
+ char *raw_data=(char *)malloc(20);
+ memset(raw_data,0,20);
+ sprintf(raw_data,"%s", nlsr->lsdb->lsdb_version);
res= ccn_sign_content(nlsr->ccn, data, name, &sp, raw_data,strlen(raw_data));
if(res >= 0)
@@ -373,264 +365,6 @@
}
-void
-process_incoming_interest_lsdb(struct ccn_closure *selfp, struct ccn_upcall_info *info)
-{
- //printf("process_incoming_interest_lsdb called \n");
-
- if ( nlsr->debugging )
- printf("process_incoming_interest_lsdb called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_interest_lsdb called \n");
-
-
- int l,res;
- const unsigned char *exclbase;
- size_t size;
- struct ccn_buf_decoder decoder;
- struct ccn_buf_decoder *d;
- const unsigned char *comp;
- int dbcmp=0;
-
- l = info->pi->offset[CCN_PI_E_Exclude] - info->pi->offset[CCN_PI_B_Exclude];
- if (l > 0)
- {
- comp = NULL;
- size = 0;
- exclbase = info->interest_ccnb + info->pi->offset[CCN_PI_B_Exclude];
- d = ccn_buf_decoder_start(&decoder, exclbase, l);
- if (ccn_buf_match_dtag(d, CCN_DTAG_Exclude))
- {
- ccn_buf_advance(d);
- if (ccn_buf_match_dtag(d, CCN_DTAG_Any))
- ccn_buf_advance_past_element(d);
- if (ccn_buf_match_dtag(d, CCN_DTAG_Component))
- {
- ccn_buf_advance(d);
- ccn_buf_match_blob(d, &comp, &size);
- ccn_buf_check_close(d);
-
-
- }
- ccn_buf_check_close(d);
- }
- if (comp != NULL)
- {
- if ( nlsr->debugging )
- {
- printf("LSDB Version in Exclusion Filter is %s\n",comp);
- printf("LSDB Version of own NLSR is: %s \n",nlsr->lsdb->lsdb_version);
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSDB Version in Exclusion Filter is %s\n",comp);
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSDB Version of own NLSR is: %s \n",nlsr->lsdb->lsdb_version);
- }
- dbcmp=strcmp(nlsr->lsdb->lsdb_version,(char *)comp);
- }
- /* Now comp points to the start of your potential number, and size is its length */
- }
- else
- {
- if ( nlsr->debugging )
- printf("LSDB Version in Exclusion Filter is: None Added\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSDB Version in Exclusion Filter is: None Added\n");
- dbcmp=1;
-
- }
-
- struct ccn_charbuf *data=ccn_charbuf_create();
- struct ccn_charbuf *name=ccn_charbuf_create();
- struct ccn_signing_params sp=CCN_SIGNING_PARAMS_INIT;
-
- ccn_charbuf_append(name, info->interest_ccnb + info->pi->offset[CCN_PI_B_Name],info->pi->offset[CCN_PI_E_Name] - info->pi->offset[CCN_PI_B_Name]);
-
- sp.template_ccnb=ccn_charbuf_create();
- ccn_charbuf_append_tt(sp.template_ccnb,CCN_DTAG_SignedInfo, CCN_DTAG);
- ccnb_tagged_putf(sp.template_ccnb, CCN_DTAG_FreshnessSeconds, "%ld", 10);
- sp.sp_flags |= CCN_SP_TEMPL_FRESHNESS;
- ccn_charbuf_append_closer(sp.template_ccnb);
-
-
- if(dbcmp>0)
- {
- if ( nlsr->debugging )
- {
- printf("Has Updated Database than Neighbor\n");
- printf("Sending LSDB Summary of Updated LSDB Content...\n");
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Has Updated Database than Neighbor\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending LSDB Summary of Updated LSDB Content...\n");
- }
- ccn_name_append_str(name,nlsr->lsdb->lsdb_version);
-
- struct ccn_charbuf *lsdb_data=ccn_charbuf_create();
- get_lsdb_summary(lsdb_data);
-
- char *raw_data=ccn_charbuf_as_string(lsdb_data);
-
- //printf("Content Data to be sent: %s \n",raw_data);
-
- if( nlsr->is_build_adj_lsa_sheduled == 1 || strlen((char *)raw_data) == 0 )
- {
- res= ccn_sign_content(nlsr->ccn, data, name, &sp, "WAIT" , strlen("WAIT"));
- }
- else
- {
- res= ccn_sign_content(nlsr->ccn, data, name, &sp, raw_data , strlen(raw_data));
- }
-
- if(res >= 0)
- {
- if ( nlsr->debugging )
- printf("Signing LSDB Summary of Updated LSDB Content is successful \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Signing LSDB Summary of Updated LSDB Content is successful \n");
- }
-
- res=ccn_put(nlsr->ccn,data->buf,data->length);
-
- if(res >= 0)
- {
- if ( nlsr->debugging )
- printf("Sending LSDB Summary of Updated LSDB Content is successful \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending LSDB Summary of Updated LSDB Content is successful \n");
- }
-
- ccn_charbuf_destroy(&lsdb_data);
- }
- else
- {
- if ( nlsr->debugging )
- {
- printf("Does not have Updated Database than Neighbor\n");
- printf("Sending NACK Content.....\n");
- }
- if ( nlsr->detailed_logging )
- {
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Does not have Updated Database than Neighbor\n");
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending NACK Content.....\n");
- }
-
- res= ccn_sign_content(nlsr->ccn, data, name, &sp, "NACK", strlen("NACK"));
-
- if(res >= 0)
- {
- if ( nlsr->debugging )
- printf("Signing NACK Content is successful \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Signing NACK Content is successful \n");
- }
-
- res=ccn_put(nlsr->ccn,data->buf,data->length);
-
- if(res >= 0)
- {
- if ( nlsr->debugging )
- printf("Sending NACK Content is successful \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending NACK Content is successful \n");
- }
-
-
- }
-
- ccn_charbuf_destroy(&data);
- ccn_charbuf_destroy(&name);
- ccn_charbuf_destroy(&sp.template_ccnb);
-
-
-}
-
-
-void
-process_incoming_interest_lsa(struct ccn_closure *selfp, struct ccn_upcall_info *info)
-{
- if ( nlsr->debugging )
- printf("process_incoming_interest_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_interest_lsa called \n");
-
- int res;
-
- struct name_prefix *lsaId=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- get_lsa_identifier(lsaId,selfp,info,0);
-
- //printf("LSA Identifier: %s Length: %d\n",lsaId->name,lsaId->length);
- int ls_type=get_ls_type(selfp, info);
-
- struct ccn_charbuf *lsa_data=ccn_charbuf_create();
-
- if ( ls_type == LS_TYPE_NAME )
- {
- if ( nlsr->debugging )
- printf("Interest Received for NAME LSA \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Interest Received for NAME LSA \n");
- get_name_lsa_data(lsa_data,lsaId);
- }
- else if ( ls_type == LS_TYPE_ADJ )
- {
- if ( nlsr->debugging )
- printf("Interest Received for ADJ LSA \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Interest Received for ADJ LSA \n");
- get_adj_lsa_data(lsa_data,lsaId);
- }
-
- char *rdata=ccn_charbuf_as_string(lsa_data);
- char *raw_data=(char *)malloc(strlen(rdata)+1);
- memset(raw_data,0,strlen(rdata)+1);
- memcpy(raw_data,(char *)rdata,strlen(rdata)+1);
- //printf("Content Data to be sent: %s\n",raw_data);
-
- struct ccn_charbuf *data=ccn_charbuf_create();
- struct ccn_charbuf *name=ccn_charbuf_create();
- struct ccn_signing_params sp=CCN_SIGNING_PARAMS_INIT;
-
- ccn_charbuf_append(name, info->interest_ccnb + info->pi->offset[CCN_PI_B_Name],info->pi->offset[CCN_PI_E_Name] - info->pi->offset[CCN_PI_B_Name]);
-
- sp.template_ccnb=ccn_charbuf_create();
- ccn_charbuf_append_tt(sp.template_ccnb,CCN_DTAG_SignedInfo, CCN_DTAG);
- ccnb_tagged_putf(sp.template_ccnb, CCN_DTAG_FreshnessSeconds, "%ld", 10);
- sp.sp_flags |= CCN_SP_TEMPL_FRESHNESS;
- ccn_charbuf_append_closer(sp.template_ccnb);
-
- res= ccn_sign_content(nlsr->ccn, data, name, &sp, raw_data , strlen(raw_data));
-
- if(res >= 0)
- {
- if ( nlsr->debugging )
- printf("Signing LSA Content is successful \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Signing LSA Content is successful \n");
- }
-
- res=ccn_put(nlsr->ccn,data->buf,data->length);
-
- if(res >= 0)
- {
- if ( nlsr->debugging )
- printf("Sending LSA Content is successful \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending LSA Content is successful \n");
- }
-
-
-
- ccn_charbuf_destroy(&data);
- ccn_charbuf_destroy(&name);
- ccn_charbuf_destroy(&sp.template_ccnb);
- ccn_charbuf_destroy(&lsa_data);
-
- free(raw_data);
- free(lsaId);
-}
-
/* Call back function registered in ccnd to get all content coming to NLSR application */
enum ccn_upcall_res incoming_content(struct ccn_closure* selfp,
@@ -701,7 +435,6 @@
void
process_incoming_content(struct ccn_closure *selfp, struct ccn_upcall_info* info)
{
- //printf("process_incoming_content called \n");
if ( nlsr->debugging )
printf("process_incoming_content called \n");
if ( nlsr->detailed_logging )
@@ -725,20 +458,11 @@
res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,nlsr_position+1,&comp_ptr1, &comp_size);
- //printf("Det= %s \n",comp_ptr1);
if(!strcmp((char *)comp_ptr1,"info"))
{
process_incoming_content_info(selfp,info);
}
- if(!strcmp((char *)comp_ptr1,"lsdb"))
- {
- process_incoming_content_lsdb(selfp,info);
- }
- if(!strcmp((char *)comp_ptr1,"lsa"))
- {
- process_incoming_content_lsa(selfp,info);
- }
}
@@ -746,7 +470,6 @@
void
process_incoming_content_info(struct ccn_closure *selfp, struct ccn_upcall_info* info)
{
- //printf("process_incoming_content_info called \n");
if ( nlsr->debugging )
printf("process_incoming_content_info called \n");
if ( nlsr->detailed_logging )
@@ -761,18 +484,17 @@
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Info Content Received For Neighbor: %s Length:%d\n",nbr->name,nbr->length);
- const unsigned char *ptr;
- size_t length;
- ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E_Content]-info->pco->offset[CCN_PCO_B_Content], info->pco, &ptr, &length);
- //printf("Content data: %s\n",ptr);
+ //const unsigned char *ptr;
+ //size_t length;
+ //ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E_Content]-info->pco->offset[CCN_PCO_B_Content], info->pco, &ptr, &length);
- long int interval=atoi((char *)ptr);
+ //long int interval=atoi((char *)ptr);
update_adjacent_timed_out_zero_to_adl(nbr);
update_adjacent_status_to_adl(nbr,NBR_ACTIVE);
- update_lsdb_synch_interval_to_adl(nbr,interval);
+ //update_lsdb_synch_interval_to_adl(nbr,interval);
print_adjacent_from_adl();
@@ -801,257 +523,6 @@
}
-void
-process_incoming_content_lsdb(struct ccn_closure *selfp, struct ccn_upcall_info* info)
-{
- if ( nlsr->debugging )
- printf("process_incoming_content_lsdb called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_content_lsdb called \n");
-
- const unsigned char *ptr;
- size_t length;
- ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E_Content]-info->pco->offset[CCN_PCO_B_Content], info->pco, &ptr, &length);
- //printf("Content data: %s\n",ptr);
-
- if( (strcmp("NACK",(char *)ptr) != 0 ) && (strcmp("WAIT",(char *)ptr) != 0 ) )
- {
- struct name_prefix *nbr=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- get_nbr(nbr,selfp,info);
-
- char *nl;
- int num_element;
- int i;
- char *rem;
- const char *sep="|";
- char *orig_router;
- char *lst;
- int ls_type;
- char *lsid;
- long int ls_id;
- char *orig_time;
-
- nl=strtok_r((char *)ptr,sep,&rem);
- num_element=atoi(nl);
-
- for(i = 0 ; i < num_element ; i++)
- {
- orig_router=strtok_r(NULL,sep,&rem);
- lst=strtok_r(NULL,sep,&rem);
- ls_type=atoi(lst);
-
- if ( nlsr->debugging )
- printf("Orig Router: %s ls Type: %d",orig_router,ls_type);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Orig Router: %s ls Type: %d",orig_router,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);
-
- if ( nlsr->debugging )
- printf(" LS Id: %ld Orig Time: %s\n",ls_id ,orig_time);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," LS Id: %ld Orig Time: %s\n",ls_id ,orig_time);
-
-
- int is_new_name_lsa=check_is_new_name_lsa(orig_router,lst,lsid,orig_time);
- if ( is_new_name_lsa == 1 )
- {
- if ( nlsr->debugging )
- printf("New NAME LSA.....\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New NAME LSA.....\n");
-
- send_interest_for_name_lsa(nbr,orig_router,lst,lsid);
- }
- else
- {
- if ( nlsr->debugging )
- printf("Name LSA already exists in LSDB\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Name LSA already exists in LSDB\n");
-
- }
- }
- else
- {
- orig_time=strtok_r(NULL,sep,&rem);
-
- if ( nlsr->debugging )
- printf(" Orig Time: %s\n",orig_time);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Orig Time: %s\n",orig_time);
-
-
- int is_new_adj_lsa=check_is_new_adj_lsa(orig_router,lst,orig_time);
- if ( is_new_adj_lsa == 1 )
- {
- if ( nlsr->debugging )
- printf("New Adj LSA.....\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Adj LSA.....\n");
- send_interest_for_adj_lsa(nbr,orig_router,lst);
- }
- else
- {
- if ( nlsr->debugging )
- printf("Adj LSA already exists in LSDB\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Adj LSA already exists in LSDB\n");
- }
- }
-
- }
-
- char *lsdb_version=(char *)malloc(20);
- memset(lsdb_version,0,20);
- get_lsdb_version(lsdb_version,selfp,info);
-
- if ( nlsr->debugging )
- printf("Old LSDB Version of Neighbor: %s is :%s\n",nbr->name,get_nbr_lsdb_version(nbr->name));
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old LSDB Version of Neighbor: %s is :%s\n",nbr->name,get_nbr_lsdb_version(nbr->name));
-
- update_adjacent_lsdb_version_to_adl(nbr,lsdb_version);
-
- if ( nlsr->debugging )
- printf("New LSDB Version of Neighbor: %s is :%s\n",nbr->name,get_nbr_lsdb_version(nbr->name));
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"New LSDB Version of Neighbor: %s is :%s\n",nbr->name,get_nbr_lsdb_version(nbr->name));
-
- update_lsdb_interest_timed_out_zero_to_adl(nbr);
-
- free(lsdb_version);
- free(nbr);
- }
- else if (strcmp("WAIT",(char *)ptr) == 0)
- {
- struct name_prefix *nbr=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- get_nbr(nbr,selfp,info);
- long int interval=get_lsdb_synch_interval(nbr->name);
- adjust_adjacent_last_lsdb_requested_to_adl(nbr->name,(long int)interval/2);
-
- update_lsdb_interest_timed_out_zero_to_adl(nbr);
- free(nbr);
- }
- else
- {
-
- if ( nlsr->debugging )
- printf("NACK Content Received\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"NACK Content Received\n");
- struct name_prefix *nbr=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- get_nbr(nbr,selfp,info);
- update_lsdb_interest_timed_out_zero_to_adl(nbr);
- free(nbr);
- }
-}
-
-
-void
-process_incoming_content_lsa(struct ccn_closure *selfp, struct ccn_upcall_info* info)
-{
-
-
- if ( nlsr->debugging )
- printf("process_incoming_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;
-
- const unsigned char *ptr;
- size_t length;
- ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E_Content]-info->pco->offset[CCN_PCO_B_Content], info->pco, &ptr, &length);
- //printf("Content data Received: %s\n",ptr);
-
-
-
-
- if ( nlsr->debugging )
- printf("LSA Data \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Data\n");
-
- if( strlen((char *) ptr ) > 0 )
- {
-
- orig_router=strtok_r((char *)ptr,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);
-
- }
- 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
@@ -1082,14 +553,6 @@
{
process_incoming_timed_out_interest_info(selfp,info);
}
- if(ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,nlsr_position+1,"lsdb") == 0)
- {
- process_incoming_timed_out_interest_lsdb(selfp,info);
- }
- if(ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,nlsr_position+1,"lsa") == 0)
- {
- process_incoming_timed_out_interest_lsa(selfp,info);
- }
}
void
@@ -1140,56 +603,6 @@
}
-void
-process_incoming_timed_out_interest_lsdb(struct ccn_closure* selfp, struct ccn_upcall_info* info)
-{
- if ( nlsr->debugging )
- printf("process_incoming_timed_out_interest_lsdb called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_timed_out_interest_lsdb called \n");
-
- struct name_prefix *nbr=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
- get_nbr(nbr,selfp,info);
-
- if ( nlsr->debugging )
- printf("LSDB Interest Timed Out for for Neighbor: %s Length:%d\n",nbr->name,nbr->length);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSDB Interest Timed Out for for Neighbor: %s Length:%d\n",nbr->name,nbr->length);
-
-
- update_lsdb_interest_timed_out_to_adl(nbr,1);
-
- int interst_timed_out_num=get_lsdb_interest_timed_out_number(nbr);
-
- if ( nlsr->debugging )
- printf("Interest Timed out number : %d Interest Retry: %d \n",interst_timed_out_num,nlsr->interest_retry);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Interest Timed out number : %d Interest Retry: %d \n",interst_timed_out_num,nlsr->interest_retry);
-
-
-
- if( interst_timed_out_num >= nlsr->interest_retry )
- {
- update_adjacent_status_to_adl(nbr,NBR_DOWN);
- if(!nlsr->is_build_adj_lsa_sheduled)
- {
- nlsr->event_build_adj_lsa = ccn_schedule_event(nlsr->sched, 1000, &build_and_install_adj_lsa, NULL, 0);
- nlsr->is_build_adj_lsa_sheduled=1;
- }
- }
- free(nbr->name);
- free(nbr);
-}
-
-void
-process_incoming_timed_out_interest_lsa(struct ccn_closure* selfp, struct ccn_upcall_info* info)
-{
- if ( nlsr->debugging )
- printf("process_incoming_timed_out_interest_lsa called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"process_incoming_timed_out_interest_lsa called \n");
-
-}
int
send_info_interest(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
@@ -1281,17 +694,20 @@
ccn_charbuf_append_closer(templ); /* </Name> */
ccn_charbuf_append_tt(templ, CCN_DTAG_Scope, CCN_DTAG);
ccn_charbuf_append_tt(templ, 1, CCN_UDATA);
+ /* Adding InterestLifeTime and InterestScope filter done */
ccn_charbuf_append(templ, "2", 1); //scope of interest: 2 (not further than next host)
ccn_charbuf_append_closer(templ); /* </Scope> */
appendLifetime(templ,nlsr->interest_resend_time);
+ unsigned int face_id=get_next_hop_face_from_adl(nbr->name);
+ ccnb_tagged_putf(templ, CCN_DTAG_FaceID, "%u", face_id);
ccn_charbuf_append_closer(templ); /* </Interest> */
- /* Adding InterestLifeTime and InterestScope filter done */
+
if ( nlsr->debugging )
- printf("Sending info interest on name prefix : %s \n",int_name);
+ printf("Sending info interest on name prefix : %s through Face:%u\n",int_name,face_id);
if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending info interest on name prefix : %s \n",int_name);
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending info interest on name prefix : %s through Face:%u\n",int_name,face_id);
res=ccn_express_interest(nlsr->ccn,name,&(nlsr->in_content),templ);
@@ -1308,306 +724,3 @@
free(int_name);
}
-
-
-int
-send_lsdb_interest(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
-{
- if ( nlsr->debugging )
- printf("send_lsdb_interest called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"send_lsdb_interest called \n");
-
- if(flags == CCN_SCHEDULE_CANCEL)
- {
- return -1;
- }
-
- nlsr_lock();
-
- int i, adl_element;
- struct ndn_neighbor *nbr;
-
- struct hashtb_enumerator ee;
- struct hashtb_enumerator *e = ⅇ
-
- hashtb_start(nlsr->adl, e);
- adl_element=hashtb_n(nlsr->adl);
-
- for(i=0;i<adl_element;i++)
- {
- nbr=e->data;
-
- if(nbr->status == NBR_ACTIVE)
- {
- if(nbr->is_lsdb_send_interest_scheduled == 0)
- {
- long int time_diff=get_nbr_time_diff_lsdb_req(nbr->neighbor->name);
- if ( nlsr->debugging )
- printf("Time since last time LSDB requested : %ld Seconds for Neighbor: %s \n",time_diff,nbr->neighbor->name);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Time since last time LSDB requested : %ld Seconds for Neighbor: %s \n",time_diff,nbr->neighbor->name);
-
-
- if( time_diff >= ( get_lsdb_synch_interval(nbr->neighbor->name) + get_nbr_random_time_component(nbr->neighbor->name) ) )
- {
- nbr->is_lsdb_send_interest_scheduled=1;
- send_lsdb_interest_to_nbr(nbr->neighbor);
- }
- }
- }
- hashtb_next(e);
- }
-
- hashtb_end(e);
- nlsr->event_send_lsdb_interest= ccn_schedule_event(nlsr->sched, 30000000, &send_lsdb_interest, NULL, 0);
-
- nlsr_unlock();
-
- return 0;
-}
-
-void
-send_lsdb_interest_to_nbr(struct name_prefix *nbr)
-{
- if ( nlsr->debugging )
- printf("send_lsdb_interest_to_nbr called \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"send_lsdb_interest_to_nbr called \n");
-
- char *last_lsdb_version=get_nbr_lsdb_version(nbr->name);
-
- if(last_lsdb_version !=NULL)
- {
-
-
- if ( nlsr->debugging )
- printf("Last LSDB Version: %s \n",last_lsdb_version);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Last LSDB Version: %s \n",last_lsdb_version);
-
- struct ccn_charbuf *name;
- int res;
- char lsdb_str[5];
- char nlsr_str[5];
-
- memset(&nlsr_str,0,5);
- sprintf(nlsr_str,"nlsr");
- memset(&lsdb_str,0,5);
- sprintf(lsdb_str,"lsdb");
- //make and send interest with exclusion filter as last_lsdb_version
- if ( nlsr->debugging )
- printf("Sending interest for name prefix:%s/%s/%s\n",nbr->name,nlsr_str,lsdb_str);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending interest for name prefix:%s/%s/%s\n",nbr->name,nlsr_str,lsdb_str);
-
- name=ccn_charbuf_create();
- res=ccn_name_from_uri(name,nbr->name);
-
- if( res >= 0)
- {
- ccn_name_append_str(name,nlsr_str);
- ccn_name_append_str(name,lsdb_str);
- /* adding Exclusion filter */
-
- struct ccn_charbuf *templ;
- templ = ccn_charbuf_create();
-
- struct ccn_charbuf *c;
- c = ccn_charbuf_create();
-
-
- ccn_charbuf_append_tt(templ, CCN_DTAG_Interest, CCN_DTAG);
- ccn_charbuf_append_tt(templ, CCN_DTAG_Name, CCN_DTAG);
- ccn_charbuf_append_closer(templ); /* </Name> */
- ccn_charbuf_append_tt(templ, CCN_DTAG_Exclude, CCN_DTAG);
- ccnb_tagged_putf(templ, CCN_DTAG_Any, "");
- ccn_charbuf_reset(c);
- ccn_charbuf_putf(c, "%s", last_lsdb_version);
-
- ccnb_append_tagged_blob(templ, CCN_DTAG_Component, c->buf, c->length);
- ccn_charbuf_append_closer(templ); /* </Exclude> */
- ccn_charbuf_append_tt(templ, CCN_DTAG_Scope, CCN_DTAG);
- ccn_charbuf_append_tt(templ, 1, CCN_UDATA);
- ccn_charbuf_append(templ, "2", 1);
- ccn_charbuf_append_closer(templ); /* </Scope> */
-
- appendLifetime(templ,nlsr->interest_resend_time);
-
- ccn_charbuf_append_closer(templ); /* </Interest> */
-
-
- /* Adding Exclusion filter done */
-
- res=ccn_express_interest(nlsr->ccn,name,&(nlsr->in_content),templ);
-
- if ( res >= 0 )
- {
- if ( nlsr->debugging )
- printf("Interest sending Successfull .... \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Interest sending Successfull .... \n");
- update_adjacent_last_lsdb_requested_to_adl(nbr->name,get_current_time_sec());
-
- }
- ccn_charbuf_destroy(&c);
- ccn_charbuf_destroy(&templ);
- }
- ccn_charbuf_destroy(&name);
- }
- set_is_lsdb_send_interest_scheduled_to_zero(nbr->name);
-}
-
-void
-send_interest_for_name_lsa(struct name_prefix *nbr, char *orig_router, char *ls_type, char *ls_id)
-{
- if ( nlsr->debugging )
- printf("send_interest_for_name_lsa called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"send_interest_for_name_lsa called\n");
-
- int res;
- char lsa_str[5];
- char nlsr_str[5];
-
- memset(&nlsr_str,0,5);
- sprintf(nlsr_str,"nlsr");
- memset(&lsa_str,0,5);
- sprintf(lsa_str,"lsa");
-
- char *int_name=(char *)malloc(nbr->length + strlen(ls_type)+strlen(orig_router)+strlen(nlsr_str)+strlen(lsa_str)+3);
- memset(int_name,0,nbr->length +strlen(ls_type)+ strlen(orig_router)+strlen(nlsr_str)+strlen(lsa_str)+3);
-
- memcpy(int_name+strlen(int_name),nbr->name,nbr->length);
- memcpy(int_name+strlen(int_name),"/",1);
- memcpy(int_name+strlen(int_name),nlsr_str,strlen(nlsr_str));
- memcpy(int_name+strlen(int_name),"/",1);
- memcpy(int_name+strlen(int_name),lsa_str,strlen(lsa_str));
- memcpy(int_name+strlen(int_name),"/",1);
- memcpy(int_name+strlen(int_name),ls_type,strlen(ls_type));
- memcpy(int_name+strlen(int_name),orig_router,strlen(orig_router));
-
-
- struct ccn_charbuf *name;
- name=ccn_charbuf_create();
-
-
- res=ccn_name_from_uri(name,int_name);
- ccn_name_append_str(name,ls_type);
- ccn_name_append_str(name,ls_id);
-
-
- /* adding InterestLifeTime and InterestScope filter */
-
- struct ccn_charbuf *templ;
- templ = ccn_charbuf_create();
-
- ccn_charbuf_append_tt(templ, CCN_DTAG_Interest, CCN_DTAG);
- ccn_charbuf_append_tt(templ, CCN_DTAG_Name, CCN_DTAG);
- ccn_charbuf_append_closer(templ); /* </Name> */
- //ccnb_tagged_putf(templ, CCN_DTAG_Scope, "%d", scope);
- ccn_charbuf_append_tt(templ, CCN_DTAG_Scope, CCN_DTAG);
- ccn_charbuf_append_tt(templ, 1, CCN_UDATA);
- ccn_charbuf_append(templ, "2", 1); //scope of interest: 2 (not further than next host)
- ccn_charbuf_append_closer(templ); /* </Scope> */
-
- appendLifetime(templ,nlsr->interest_resend_time);
- ccn_charbuf_append_closer(templ); /* </Interest> */
- /* Adding InterestLifeTime and InterestScope filter done */
-
- if ( nlsr->debugging )
- printf("Sending NAME LSA interest on name prefix : %s/%s/%s\n",int_name,ls_type,ls_id);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending NAME LSA interest on name prefix : %s/%s/%s\n",int_name,ls_type,ls_id);
-
-
- res=ccn_express_interest(nlsr->ccn,name,&(nlsr->in_content),templ);
-
- if ( res >= 0 )
- {
- if ( nlsr->debugging )
- printf("NAME LSA interest sending Successfull .... \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"NAME LSA interest sending Successfull .... \n");
-
- }
- ccn_charbuf_destroy(&templ);
- ccn_charbuf_destroy(&name);
- free(int_name);
-
-
-}
-
-void
-send_interest_for_adj_lsa(struct name_prefix *nbr, char *orig_router, char *ls_type)
-{
- if ( nlsr->debugging )
- printf("send_interest_for_name_lsa called\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"send_interest_for_name_lsa called\n");
-
- int res;
- char lsa_str[5];
- char nlsr_str[5];
-
- memset(&nlsr_str,0,5);
- sprintf(nlsr_str,"nlsr");
- memset(&lsa_str,0,5);
- sprintf(lsa_str,"lsa");
-
- char *int_name=(char *)malloc(nbr->length + strlen(ls_type)+strlen(orig_router)+strlen(nlsr_str)+strlen(lsa_str)+3+strlen(ls_type)+1);
- memset(int_name,0,nbr->length +strlen(ls_type)+ strlen(orig_router)+strlen(nlsr_str)+strlen(lsa_str)+3+strlen(ls_type)+1);
-
- memcpy(int_name+strlen(int_name),nbr->name,nbr->length);
- memcpy(int_name+strlen(int_name),"/",1);
- memcpy(int_name+strlen(int_name),nlsr_str,strlen(nlsr_str));
- memcpy(int_name+strlen(int_name),"/",1);
- memcpy(int_name+strlen(int_name),lsa_str,strlen(lsa_str));
- memcpy(int_name+strlen(int_name),"/",1);
- memcpy(int_name+strlen(int_name),ls_type,strlen(ls_type));
- memcpy(int_name+strlen(int_name),orig_router,strlen(orig_router));
- memcpy(int_name+strlen(int_name),"/",1);
- memcpy(int_name+strlen(int_name),ls_type,strlen(ls_type));
-
- struct ccn_charbuf *name;
- name=ccn_charbuf_create();
-
-
- ccn_name_from_uri(name,int_name);
-
- /* adding InterestLifeTime and InterestScope filter */
-
- struct ccn_charbuf *templ;
- templ = ccn_charbuf_create();
-
- ccn_charbuf_append_tt(templ, CCN_DTAG_Interest, CCN_DTAG);
- ccn_charbuf_append_tt(templ, CCN_DTAG_Name, CCN_DTAG);
- ccn_charbuf_append_closer(templ); /* </Name> */
- ccn_charbuf_append_tt(templ, CCN_DTAG_Scope, CCN_DTAG);
- ccn_charbuf_append_tt(templ, 1, CCN_UDATA);
- ccn_charbuf_append(templ, "2", 1); //scope of interest: 2 (not further than next host)
- ccn_charbuf_append_closer(templ); /* </Scope> */
-
- appendLifetime(templ,nlsr->interest_resend_time);
- ccn_charbuf_append_closer(templ); /* </Interest> */
- /* Adding InterestLifeTime and InterestScope filter done */
-
- if ( nlsr->debugging )
- printf("Sending ADJ LSA interest on name prefix : %s\n",int_name);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Sending ADJ LSA interest on name prefix : %s\n",int_name);
-
- res=ccn_express_interest(nlsr->ccn,name,&(nlsr->in_content),templ);
-
- if ( res >= 0 )
- {
- if ( nlsr->debugging )
- printf("ADJ LSA interest sending Successfull .... \n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"ADJ LSA interest sending Successfull .... \n");
- }
-
- ccn_charbuf_destroy(&templ);
- ccn_charbuf_destroy(&name);
- free(int_name);
-}
diff --git a/nlsr_ndn.h b/nlsr_ndn.h
index 1feab1e..1e34284 100644
--- a/nlsr_ndn.h
+++ b/nlsr_ndn.h
@@ -7,31 +7,19 @@
void get_lsdb_version(char *lsdb_version,struct ccn_closure *selfp, struct ccn_upcall_info *info );
int get_ls_type(struct ccn_closure *selfp, struct ccn_upcall_info *info);
-enum ccn_upcall_res incoming_interest(struct ccn_closure *selfp, enum ccn_upcall_kind kind, struct ccn_upcall_info *info);
-
+enum ccn_upcall_res incoming_interest(struct ccn_closure *selfp, enum ccn_upcall_kind kind, struct ccn_upcall_info *info);
void process_incoming_interest(struct ccn_closure *selfp, struct ccn_upcall_info *info);
void process_incoming_interest_info(struct ccn_closure *selfp, struct ccn_upcall_info *info);
-void process_incoming_interest_lsdb(struct ccn_closure *selfp, struct ccn_upcall_info *info);
-void process_incoming_interest_lsa(struct ccn_closure *selfp, struct ccn_upcall_info *info);
-
enum ccn_upcall_res incoming_content(struct ccn_closure* selfp, enum ccn_upcall_kind kind, struct ccn_upcall_info* info);
void process_incoming_content(struct ccn_closure *selfp, struct ccn_upcall_info* info);
void process_incoming_content_info(struct ccn_closure *selfp, struct ccn_upcall_info* info);
-void process_incoming_content_lsdb(struct ccn_closure *selfp, struct ccn_upcall_info* info);
-void process_incoming_content_lsa(struct ccn_closure *selfp, struct ccn_upcall_info* info);
void process_incoming_timed_out_interest(struct ccn_closure* selfp, struct ccn_upcall_info* info);
void process_incoming_timed_out_interest_info(struct ccn_closure* selfp, struct ccn_upcall_info* info);
-void process_incoming_timed_out_interest_lsdb(struct ccn_closure* selfp, struct ccn_upcall_info* info);
-void process_incoming_timed_out_interest_lsa(struct ccn_closure* selfp, struct ccn_upcall_info* info);
int send_info_interest(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
void send_info_interest_to_neighbor(struct name_prefix *nbr);
-int send_lsdb_interest(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
-void send_lsdb_interest_to_nbr(struct name_prefix *nbr);
-void send_interest_for_name_lsa(struct name_prefix *nbr, char *orig_router, char *ls_type, char *ls_id);
-void send_interest_for_adj_lsa(struct name_prefix *nbr, char *orig_router, char *ls_type);
#endif
diff --git a/nlsr_npt.c b/nlsr_npt.c
index e3c8483..6eb9c69 100644
--- a/nlsr_npt.c
+++ b/nlsr_npt.c
@@ -177,6 +177,11 @@
update_ccnd_fib_for_orig_router(char *orig_router)
{
+ if ( nlsr->debugging )
+ {
+ printf("update_ccnd_fib_for_orig_router called\n");
+ }
+
int res;
struct hashtb_enumerator ee;
struct hashtb_enumerator *e = ⅇ
@@ -202,23 +207,31 @@
get_all_faces_for_orig_router_from_npt(orig_router,faces,route_costs,num_face);
sort_faces_by_distance(faces,route_costs,0,num_face);
-
- first_face=num_face-1;
-
- if ( nlsr->multi_path_face_num == 0 )
+ if ( nlsr->debugging )
{
- last_face=first_face;
+ int m;
+ for ( m =0 ; m< num_face ; m++)
+ {
+ printf("Dest_router: %s Next_Hop_Face: %d Route_cost: %d \n",orig_router,faces[m],route_costs[m]);
+ }
}
- else
+
+ last_face=0;
+ if ( nlsr->max_faces_per_prefix == 0) // add all faces available in routing table
{
- if ( num_face <= nlsr->multi_path_face_num)
+ first_face=num_face-1;
+ }
+ else if( nlsr->max_faces_per_prefix > 0)
+ {
+ if ( nlsr->max_faces_per_prefix >= num_face)
{
- last_face=0;
+ first_face=num_face-1;
}
- else if ( nlsr->multi_path_face_num == 0)
+ else if ( nlsr->max_faces_per_prefix < num_face)
{
- last_face=num_face-nlsr->multi_path_face_num;
+ first_face=nlsr->max_faces_per_prefix-1;
}
+
}
int i,j, nl_element;
@@ -227,6 +240,34 @@
struct hashtb_enumerator *enle = &eenle;
hashtb_start(ne->name_list, enle);
+ nl_element=hashtb_n(ne->name_list);
+
+ for (i=0;i<nl_element;i++)
+ {
+ nle=enle->data;
+
+ for( j=num_face-1; j>= 0; j--)
+ {
+
+ if ( !( is_neighbor(nle->name) == 1 && get_next_hop_face_from_adl(nle->name) == faces[j] ) )
+ {
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);
+ }
+ }
+
+
+ hashtb_next(enle);
+ }
+
+
+ hashtb_end(enle);
+
+ if ( nlsr->debugging )
+ {
+ printf("First Face Index: %d Last Face Index: %d\n",first_face,last_face);
+ }
+
+ hashtb_start(ne->name_list, enle);
nl_element=hashtb_n(ne->name_list);
for (i=0;i<nl_element;i++)
@@ -235,30 +276,26 @@
for( j=first_face; j>= last_face; j--)
{
- //printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
- //printf("Orig Router: %s \n",orig_router);
- //printf("Name Prefix: %s \n",nle->name);
- //printf("Is neighbor Orig Router: %d \n",is_neighbor(orig_router));
- //printf("Is neighbor Name Prefix: %d \n",is_neighbor(nle->name));
-
- if ( is_neighbor(orig_router) == 0 )
+ if ( nlsr->debugging )
+ {
+ printf("Possible FIB Entry name: %s face: %d route cost: %d \n",nle->name,faces[j],route_costs[j]);
+ }
+ if ( is_active_neighbor(orig_router) == 0 )
{
if ( nlsr->debugging )
printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
- //printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_REG, faces[j]);
}
else
{
- if ( j == last_face && is_neighbor(nle->name)==0)
+ if ( j == last_face && is_active_neighbor(nle->name)==0)
{
if ( nlsr->debugging )
printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
- //printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_REG, faces[j]);
}
}
@@ -333,28 +370,27 @@
sort_faces_by_distance(faces,route_costs,0,num_face);
- first_face=num_face-1;
-
- if ( nlsr->multi_path_face_num == 0 )
+ last_face=0;
+ if ( nlsr->max_faces_per_prefix == 0) // add all faces available in routing table
{
- last_face=first_face;
+ first_face=num_face-1;
}
- else
+ else if( nlsr->max_faces_per_prefix > 0)
{
- if ( num_face <= nlsr->multi_path_face_num)
+ if ( nlsr->max_faces_per_prefix >= num_face)
{
- last_face=0;
+ first_face=num_face-1;
}
- else if ( nlsr->multi_path_face_num == 0)
+ else if ( nlsr->max_faces_per_prefix < num_face)
{
- last_face=num_face-nlsr->multi_path_face_num;
+ first_face=nlsr->max_faces_per_prefix-1;
}
- }
-
+
+ }
for( j=first_face; j>= last_face; j--)
{
- if ( is_neighbor(orig_router) == 0 )
+ if ( is_active_neighbor(orig_router) == 0 )
{
if ( nlsr->debugging )
printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
@@ -364,7 +400,7 @@
}
else
{
- if ( j == last_face && is_neighbor(nle->name)==0)
+ if ( j == last_face && is_active_neighbor(nle->name)==0)
{
if ( nlsr->debugging )
printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
@@ -376,10 +412,6 @@
}
-
-
-
- //hashtb_delete(enle); has to delete later
}
hashtb_end(enle);
@@ -431,7 +463,6 @@
printf(" Origination Router: %s \n",ne->orig_router);
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router: %s \n",ne->orig_router);
- //ne->next_hop_face == NO_FACE ? printf(" Next Hop Face: NO_NEXT_HOP \n") : printf(" Next Hop Face: %d \n", ne->next_hop_face);
int j, nl_element,face_list_element;
struct name_list_entry *nle;
@@ -473,7 +504,7 @@
{
fle=ef->data;
if ( nlsr->debugging )
- printf(" Face: %d Route_Cost: %d \n",fle->next_hop_face,fle->route_cost);
+ printf(" Face: %d Route_Cost: %f \n",fle->next_hop_face,fle->route_cost);
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: %d Route_Cost: %d \n",fle->next_hop_face,fle->route_cost);
hashtb_next(ef);
@@ -591,7 +622,7 @@
printf("Face Found \n");
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Face Found \n");
- struct face_list_entry *fle;//=(struct face_list_entry *)malloc(sizeof(struct face_list_entry));
+ struct face_list_entry *fle;
fle=ef->data;
fle->next_hop_face=face_id;
fle->route_cost=route_cost;
@@ -606,7 +637,10 @@
fle=ef->data;
fle->next_hop_face=face_id;
fle->route_cost=route_cost;
- //hashtb_delete(ef);
+
+
+
+
}
hashtb_end(ef);
}
@@ -650,9 +684,9 @@
if ( face_list_element <= 0 )
{
if ( nlsr->debugging )
- printf(" Face: No Face \n");
+ printf(" Face: No Face \n");
if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: No Face \n");
+ writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: No Face \n");
}
else
{
@@ -699,7 +733,6 @@
hashtb_start(ne->face_list, ef);
res1=hashtb_seek(ef, &face_id, sizeof(face_id), 0);
-
if ( res1 == HT_OLD_ENTRY )
{
hashtb_delete(ef);
@@ -718,53 +751,6 @@
hashtb_end(e);
}
-int
-delete_old_face_from_npt(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
-{
- if(flags == CCN_SCHEDULE_CANCEL)
- {
- return -1;
- }
-
- nlsr_lock();
-
- if ( nlsr->debugging )
- printf("delete_old_face_from_npt\n");
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_old_face_from_npt\n");
-
- if ( ev->evdata != NULL )
- {
- if ( nlsr->debugging )
- printf("Event Data: %s \n",(char *)ev->evdata);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Event Data: %s \n",(char *)ev->evdata);
- char *sep="|";
- char *rem;
- char *orig_router;
- char *faceid;
- int face_id;
-
- char *face_data=(char *)malloc(strlen((char *)ev->evdata)+1);
- memset(face_data,0,strlen((char *)ev->evdata)+1);
- memcpy(face_data+strlen(face_data),(char *)ev->evdata,strlen((char *)ev->evdata));
-
- orig_router=strtok_r(face_data,sep,&rem);
- faceid=strtok_r(NULL,sep,&rem);
- face_id=atoi(faceid);
-
- if ( nlsr->debugging )
- printf("Orig Router: %s Face: %d \n",orig_router,face_id);
- if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Orig Router: %s Face: %d \n",orig_router,face_id);
-
- delete_face_from_npt_by_face_id(orig_router,face_id);
- }
-
- nlsr_unlock();
-
- return 0;
-}
void
clean_old_fib_entries_from_npt(void)
@@ -800,7 +786,7 @@
if ( face_list_element <= 0 )
{
if ( nlsr->debugging )
- printf(" Face: No Face \n");
+ printf(" Face: No Face \n");
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: No Face \n");
@@ -823,17 +809,12 @@
for (k=0;k<nl_element;k++)
{
nle=enle->data;
-
- //delete all the fib entries here
-
- //printf("Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
-
if( is_neighbor(nle->name) == 0 )
{
if ( nlsr->debugging )
printf("Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
if ( nlsr->detailed_logging )
- writeLogg(__FILE__,__FUNCTION__,__LINE__,"Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, fle->next_hop_face);
}
@@ -842,20 +823,39 @@
}
hashtb_end(enle);
- char faceid[20];
- memset(faceid,0,20);
- sprintf(faceid,"%d",fle->next_hop_face);
- char *evdata=(char *)malloc(strlen(ne->orig_router)+strlen(faceid)+2);
- memset(evdata,0,strlen(ne->orig_router)+strlen(faceid)+2);
- memcpy(evdata+strlen(evdata),ne->orig_router,strlen(ne->orig_router));
- memcpy(evdata+strlen(evdata),"|",1);
- memcpy(evdata+strlen(evdata),faceid,strlen(faceid));
-
- nlsr->event = ccn_schedule_event(nlsr->sched, 1, &delete_old_face_from_npt, (void *)evdata, 0);
-
+
+ hashtb_delete(ef);
+ j++;
+
}
-
- hashtb_next(ef);
+ else
+ {
+ struct name_list_entry *nle;
+ struct hashtb_enumerator eenle;
+ struct hashtb_enumerator *enle = &eenle;
+
+ hashtb_start(ne->name_list, enle);
+ nl_element=hashtb_n(ne->name_list);
+
+ for (k=0;k<nl_element;k++)
+ {
+ nle=enle->data;
+ if( is_active_neighbor(ne->orig_router) && get_next_hop_face_from_adl( ne->orig_router ) != fle->next_hop_face )
+ {
+ if ( nlsr->debugging )
+ printf("Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, fle->next_hop_face);
+ }
+
+
+ hashtb_next(enle);
+ }
+ hashtb_end(enle);
+
+ hashtb_next(ef);
+ }
}
}
hashtb_end(ef);
@@ -871,9 +871,14 @@
void
update_npt_with_new_route(void)
{
+ if ( nlsr->debugging )
+ printf("update_npt_with_new_route called\n");
+
clean_old_fib_entries_from_npt();
+ print_npt();
add_new_fib_entries_to_npt();
-
+ print_npt();
+
int i, npt_element;
struct npt_entry *ne;
@@ -995,7 +1000,7 @@
get_all_faces_for_orig_router_from_npt(orig_router,faces,route_costs,num_face);
sort_faces_by_distance(faces,route_costs,0,num_face);
-
+ /*
first_face=num_face-1;
if ( nlsr->multi_path_face_num == 0 )
@@ -1013,6 +1018,25 @@
last_face=num_face-nlsr->multi_path_face_num;
}
}
+ */
+
+ last_face=0;
+ if ( nlsr->max_faces_per_prefix == 0) // add all faces available in routing table
+ {
+ first_face=num_face-1;
+ }
+ else if( nlsr->max_faces_per_prefix > 0)
+ {
+ if ( nlsr->max_faces_per_prefix >= num_face)
+ {
+ first_face=num_face-1;
+ }
+ else if ( nlsr->max_faces_per_prefix < num_face)
+ {
+ first_face=nlsr->max_faces_per_prefix-1;
+ }
+
+ }
int i,j, nl_element;
struct name_list_entry *nle;
@@ -1028,7 +1052,7 @@
for( j=first_face; j>= last_face; j--)
{
- if ( is_neighbor(orig_router) == 0 )
+ if ( is_active_neighbor(orig_router) == 0 )
{
if ( nlsr->debugging )
printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
@@ -1038,7 +1062,7 @@
}
else
{
- if ( j == last_face && is_neighbor(nle->name)==0)
+ if ( j == last_face && is_active_neighbor(nle->name)==0)
{
if ( nlsr->debugging )
printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
diff --git a/nlsr_npt.h b/nlsr_npt.h
index 587c8be..d339ede 100644
--- a/nlsr_npt.h
+++ b/nlsr_npt.h
@@ -22,7 +22,6 @@
int delete_npt_entry_by_router_and_name_prefix(char *orig_router, char *name_prefix);
void print_npt(void);
void delete_orig_router_from_npt(char *orig_router);
-//void update_npt_with_new_route(char * orig_router,int next_hop_face);
void update_npt_with_new_route(void);
void destroy_all_face_by_nlsr(void);
void sort_faces_by_distance(int *faces,int *route_costs,int start,int element);
diff --git a/nlsr_route.c b/nlsr_route.c
index 8537b2e..6b45ed2 100644
--- a/nlsr_route.c
+++ b/nlsr_route.c
@@ -1,6 +1,7 @@
-#include<stdio.h>
-#include<string.h>
-#include<stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
#include <sys/time.h>
@@ -75,47 +76,121 @@
print_adj_matrix(adj_matrix,map_element);
long int source=get_mapping_no(nlsr->router_name);
- long int *parent=(long int *)malloc(map_element * sizeof(long int));
- long int *dist=(long int *)malloc(map_element * sizeof(long int));
-
int num_link=get_no_link_from_adj_matrix(adj_matrix, map_element ,source);
-
- if ( (num_link == 0) || (nlsr->multi_path_face_num <= 1 ) )
- {
- calculate_path(adj_matrix,parent,dist, map_element, source);
- print_all_path_from_source(parent,source);
- print_all_next_hop(parent,source);
- update_routing_table_with_new_route(parent, dist,source);
- }
- else if ( (num_link != 0) && (nlsr->multi_path_face_num > 1 ) )
+
+ if ( nlsr->is_hyperbolic_calc == 1)
{
long int *links=(long int *)malloc(num_link*sizeof(long int));
long int *link_costs=(long int *)malloc(num_link*sizeof(long int));
get_links_from_adj_matrix(adj_matrix, map_element , links, link_costs, source);
- for ( i=0 ; i < num_link; i++)
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+ for (hashtb_start(nlsr->rev_map, e); e->key != NULL; hashtb_next(e))
{
- adjust_adj_matrix(adj_matrix, map_element,source,links[i],link_costs[i]);
+ struct map_entry *me=e->data;
+ if ( me->mapping != source )
+ {
+ long int *faces=(long int *)calloc(num_link,sizeof(long int));
+ double *nbr_dist=(double *)calloc(num_link,sizeof(double));
+ double *nbr_to_dest=(double *)calloc(num_link,sizeof(double));
+ for ( i=0 ; i < num_link; i++)
+ {
+ int face=get_next_hop_face_from_adl(get_router_from_rev_map(links[i]));
+ double dist_to_nbr=get_hyperbolic_distance(source,links[i]);
+ double dist_to_dest_from_nbr=get_hyperbolic_distance(links[i],me->mapping);
+ faces[i]=face;
+ nbr_dist[i]=dist_to_nbr;
+ nbr_to_dest[i]= dist_to_dest_from_nbr;
+
+
+ }
+ sort_hyperbolic_route(nbr_to_dest,nbr_dist, faces,0,num_link);
+ if (nlsr->max_faces_per_prefix == 0 )
+ {
+ for ( i=0 ; i < num_link; i++)
+ {
+ update_routing_table_with_new_hyperbolic_route(me->mapping,faces[i],nbr_to_dest[i]);
+ }
+ }
+ else if ( nlsr->max_faces_per_prefix > 0 )
+ {
+ if ( num_link <= nlsr->max_faces_per_prefix )
+ {
+ for ( i=0 ; i < num_link; i++)
+ {
+ update_routing_table_with_new_hyperbolic_route(me->mapping,faces[i],nbr_to_dest[i]);
+ }
+ }
+ else if (num_link > nlsr->max_faces_per_prefix)
+ {
+ for ( i=0 ; i < nlsr->max_faces_per_prefix; i++)
+ {
+ update_routing_table_with_new_hyperbolic_route(me->mapping,faces[i],nbr_to_dest[i]);
+ }
+ }
+
+ }
+ free(faces);
+ free(nbr_dist);
+ free(nbr_to_dest);
+ }
+ }
+ hashtb_end(e);
+
+
+ free(links);
+ free(link_costs);
+ }
+ else if (nlsr->is_hyperbolic_calc == 0 )
+ {
+
+ long int *parent=(long int *)malloc(map_element * sizeof(long int));
+ long int *dist=(long int *)malloc(map_element * sizeof(long int));
+
+
+ if ( (num_link == 0) || (nlsr->max_faces_per_prefix == 1 ) )
+ {
calculate_path(adj_matrix,parent,dist, map_element, source);
print_all_path_from_source(parent,source);
print_all_next_hop(parent,source);
update_routing_table_with_new_route(parent, dist,source);
}
+ else if ( (num_link != 0) && (nlsr->max_faces_per_prefix == 0 || nlsr->max_faces_per_prefix > 1 ) )
+ {
+ long int *links=(long int *)malloc(num_link*sizeof(long int));
+ long int *link_costs=(long int *)malloc(num_link*sizeof(long int));
+ get_links_from_adj_matrix(adj_matrix, map_element , links, link_costs, source);
+ for ( i=0 ; i < num_link; i++)
+ {
+ adjust_adj_matrix(adj_matrix, map_element,source,links[i],link_costs[i]);
+ calculate_path(adj_matrix,parent,dist, map_element, source);
+ print_all_path_from_source(parent,source);
+ print_all_next_hop(parent,source);
+ update_routing_table_with_new_route(parent, dist,source);
+ }
- free(links);
- free(link_costs);
+ free(links);
+ free(link_costs);
+ }
+ free(parent);
+ free(dist);
}
+
+ print_routing_table();
+ print_npt();
update_npt_with_new_route();
print_routing_table();
print_npt();
+
for(i = 0; i < map_element; i++)
{
free(adj_matrix[i]);
}
- free(parent);
- free(dist);
+
free(adj_matrix);
hashtb_destroy(&nlsr->map);
hashtb_destroy(&nlsr->rev_map);
@@ -136,7 +211,7 @@
//long int *dist=(long int *)malloc(V * sizeof(long int));
long int *Q=(long int *)malloc(V * sizeof(long int));
long int head=0;
- /* Initial the Parent */
+ /* Initiate the Parent */
for (i = 0 ; i < V; i++)
{
parent[i]=EMPTY_PARENT;
@@ -180,8 +255,7 @@
sort_queue_by_distance(Q,dist,head,V);
}
}
- free(Q);
- //free(dist);
+ free(Q);
}
void
@@ -277,7 +351,9 @@
{
if (parent[dest] != EMPTY_PARENT )
print_path(parent,parent[dest]);
- printf(" %ld",dest);
+
+ if ( nlsr->debugging )
+ printf(" %ld",dest);
}
int
@@ -317,6 +393,50 @@
}
+void
+sort_hyperbolic_route(double *dist_dest,double *dist_nbr, long int *faces,long int start,long int element)
+{
+ long int i,j;
+ double temp_dist;
+ long int temp_face;
+
+ for ( i=start ; i < element ; i ++)
+ {
+ for( j=i+1; j<element; j ++)
+ {
+ if (dist_dest[i] < dist_dest[j])
+ {
+ temp_dist=dist_dest[j];
+ dist_dest[j]=dist_dest[i];
+ dist_dest[i]=temp_dist;
+
+ temp_dist=dist_nbr[j];
+ dist_nbr[j]=dist_nbr[i];
+ dist_nbr[i]=temp_dist;
+
+ temp_face=faces[j];
+ faces[j]=faces[i];
+ faces[i]=temp_face;
+ }
+ if ( (dist_dest[i] == dist_dest[j]) && (dist_nbr[i] < dist_nbr[j]) )
+ {
+ temp_dist=dist_dest[j];
+ dist_dest[j]=dist_dest[i];
+ dist_dest[i]=temp_dist;
+
+ temp_dist=dist_nbr[j];
+ dist_nbr[j]=dist_nbr[i];
+ dist_nbr[i]=temp_dist;
+
+ temp_face=faces[j];
+ faces[j]=faces[i];
+ faces[i]=temp_face;
+ }
+ }
+ }
+
+}
+
void
print_map(void)
{
@@ -433,24 +553,32 @@
char *rem;
char *rtr_id;
char *length;
- char *face;
+ //char *face;
char *metric;
if(no_link >0 )
{
rtr_id=strtok_r(lsa_data,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
+ if ( !nlsr->debugging && nlsr->debugging)
+ {
+ printf("Metric: %s Length:%s\n",metric,length);
+ }
add_map_entry(rtr_id);
for(i=1;i<no_link;i++)
{
rtr_id=strtok_r(NULL,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
+ if ( !nlsr->debugging && nlsr->debugging)
+ {
+ printf("Metric: %s Length:%s\n",metric,length);
+ }
add_map_entry(rtr_id);
@@ -594,15 +722,20 @@
char *rem;
char *rtr_id;
char *length;
- char *face;
+ //char *face;
char *metric;
if(adj_lsa->no_link >0 )
{
rtr_id=strtok_r(lsa_data,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
+
+ if ( !nlsr->debugging && nlsr->debugging)
+ {
+ printf("Metric: %s Length:%s\n",metric,length);
+ }
mapping_nbr_router=get_mapping_no(rtr_id);
adj_matrix[mapping_orig_router][mapping_nbr_router]=atoi(metric);
@@ -611,9 +744,14 @@
{
rtr_id=strtok_r(NULL,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
+ if ( !nlsr->debugging && nlsr->debugging)
+ {
+ printf("Metric: %s Length:%s\n",metric,length);
+ }
+
mapping_nbr_router=get_mapping_no(rtr_id);
adj_matrix[mapping_orig_router][mapping_nbr_router]=atoi(metric);
@@ -841,15 +979,19 @@
char *rem;
char *rtr_id;
char *length;
- char *face;
+ //char *face;
char *metric;
if(no_link >0 )
{
rtr_id=strtok_r(lsa_data,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
+ if ( !nlsr->debugging && nlsr->debugging)
+ {
+ printf("Metric: %s Length:%s\n",metric,length);
+ }
add_next_hop_router(rtr_id);
@@ -858,8 +1000,12 @@
{
rtr_id=strtok_r(NULL,sep,&rem);
length=strtok_r(NULL,sep,&rem);
- face=strtok_r(NULL,sep,&rem);
+ //face=strtok_r(NULL,sep,&rem);
metric=strtok_r(NULL,sep,&rem);
+ if ( !nlsr->debugging && nlsr->debugging)
+ {
+ printf("Metric: %s Length:%s\n",metric,length);
+ }
add_next_hop_router(rtr_id);
@@ -874,6 +1020,12 @@
void
update_routing_table(char * dest_router,int next_hop_face, int route_cost)
{
+ if ( nlsr->debugging )
+ {
+ printf("update_routing_table called \n");
+ printf("Dest Router: %s Next Hop face: %d Route Cost: %d \n",dest_router,next_hop_face,route_cost);
+ }
+
int res,res1;
struct routing_table_entry *rte;
@@ -906,20 +1058,6 @@
fle->route_cost=route_cost;
}
hashtb_end(ef);
-
- /*
- //updating the face for the router prefix itself
- if ( (rte->next_hop_face != NO_FACE || rte->next_hop_face != NO_NEXT_HOP ) && is_neighbor(dest_router)==0 )
- {
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)dest_router, OP_UNREG, rte->next_hop_face);
- }
- if ( (next_hop_face != NO_FACE || next_hop_face != NO_NEXT_HOP ) && is_neighbor(dest_router)==0 )
- {
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)dest_router, OP_REG, next_hop_face);
- }
-
- rte->next_hop_face=next_hop_face;
- */
}
else if ( res == HT_OLD_ENTRY )
{
@@ -984,7 +1122,7 @@
{
fle=ef->data;
if ( nlsr->debugging )
- printf(" Face: %d Route_Cost: %d \n",fle->next_hop_face,fle->route_cost);
+ printf(" Face: %d Route_Cost: %f \n",fle->next_hop_face,fle->route_cost);
if ( nlsr->detailed_logging )
writeLogg(__FILE__,__FUNCTION__,__LINE__," Face: %d Route_Cost: %d \n",fle->next_hop_face,fle->route_cost);
hashtb_next(ef);
@@ -1003,7 +1141,7 @@
writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
}
-
+/*
int
delete_empty_rte(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
{
@@ -1016,13 +1154,14 @@
{
writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_empty_rte called\n");
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Router: %s \n",(char *)ev->evdata);
- //writeLogg(__FILE__,__FUNCTION__,__LINE__,"print_routing_table called\n");
}
if(flags == CCN_SCHEDULE_CANCEL)
{
return -1;
}
+
+ nlsr_lock();
int res;
struct hashtb_enumerator ee;
struct hashtb_enumerator *e = ⅇ
@@ -1040,9 +1179,12 @@
}
print_routing_table();
+
+ nlsr_unlock();
return 0;
}
+*/
void
clear_old_routing_table(void)
@@ -1101,17 +1243,46 @@
if ( mapping_no == NO_MAPPING_NUM)
{
delete_orig_router_from_npt(rte->dest_router);
+ /*
char *router=(char *)malloc(strlen(rte->dest_router)+1);
memset(router,0,strlen(rte->dest_router)+1);
memcpy(router,rte->dest_router,strlen(rte->dest_router)+1);
nlsr->event = ccn_schedule_event(nlsr->sched, 1, &delete_empty_rte, (void *)router , 0);
+ */
+ hashtb_delete(e);
+ i++;
}
- hashtb_next(e);
+ else
+ {
+ hashtb_next(e);
+ }
}
hashtb_end(e);
}
+void
+update_routing_table_with_new_hyperbolic_route(long int dest_router_rev_map_index, long int face, double nbr_to_dest_dist)
+{
+ if ( nlsr->debugging )
+ printf("update_routing_table_with_new_hyperbolic_route called\n");
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"update_routing_table_with_new_hyperbolic_route called\n");
+
+ char *orig_router=get_router_from_rev_map(dest_router_rev_map_index);
+
+ if (face != NO_NEXT_HOP && face != NO_FACE )
+ {
+ update_routing_table(orig_router,face,nbr_to_dest_dist);
+ if ( nlsr->debugging )
+ printf ("Orig_router: %s Next Hop Face: %ld \n",orig_router,face);
+ if ( nlsr->detailed_logging )
+ writeLogg(__FILE__,__FUNCTION__,__LINE__,"Orig_router: %s Next Hop Face: %ld \n",orig_router,face);
+
+ }
+
+
+}
void
@@ -1140,10 +1311,8 @@
if (orig_router != NULL )
{
int next_hop_router_num=get_next_hop_from_calculation(parent,me->mapping,source);
- //printf(" Next hop router Num: %d ",next_hop_router_num);
if ( next_hop_router_num == NO_NEXT_HOP )
{
- //update_npt_with_new_route(orig_router,NO_FACE);
if ( nlsr->debugging )
printf ("Orig_router: %s Next Hop Face: %d \n",orig_router,NO_FACE);
if ( nlsr->detailed_logging )
@@ -1152,9 +1321,7 @@
else
{
char *next_hop_router=get_router_from_rev_map(next_hop_router_num);
- //printf("Next hop router name: %s \n",next_hop_router);
int next_hop_face=get_next_hop_face_from_adl(next_hop_router);
- //update_npt_with_new_route(orig_router,next_hop_face);
update_routing_table(orig_router,next_hop_face,dist[me->mapping]);
if ( nlsr->debugging )
printf ("Orig_router: %s Next Hop Face: %d \n",orig_router,next_hop_face);
@@ -1174,9 +1341,15 @@
int
does_face_exist_for_router(char *dest_router, int face_id)
{
+ if (nlsr->debugging)
+ {
+ printf("does_face_exist_for_router called\n");
+ printf("Dest Router: %s and Face id: %d \n",dest_router, face_id);
+ }
+
int ret=0;
- int res,res1;
+ int res;
struct routing_table_entry *rte;
struct hashtb_enumerator ee;
@@ -1188,22 +1361,12 @@
if( res == HT_OLD_ENTRY )
{
rte=e->data;
- struct hashtb_enumerator eef;
- struct hashtb_enumerator *ef = &eef;
-
- hashtb_start(rte->face_list, ef);
- res1 = hashtb_seek(ef, &face_id, sizeof(face_id), 0);
- if( res1 == HT_OLD_ENTRY)
- {
- ret=1;
- }
- else if ( res1 == HT_OLD_ENTRY )
- {
- hashtb_delete(ef);
- }
- hashtb_end(ef);
+ unsigned *v;
+ v = hashtb_lookup(rte->face_list, &face_id, sizeof(face_id));
+ if (v != NULL)
+ ret = 1;
}
- else if( res == HT_NEW_ENTRY )
+ else
{
hashtb_delete(e);
}
@@ -1212,3 +1375,27 @@
return ret;
}
+
+double
+get_hyperbolic_distance(long int source, long int dest)
+{
+ double distance;
+ char *src_router=get_router_from_rev_map(source);
+ char *dest_router=get_router_from_rev_map(dest);
+
+ double src_r=get_hyperbolic_r(src_router);
+ double src_theta=get_hyperbolic_r(src_router);
+
+ double dest_r=get_hyperbolic_r(dest_router);
+ double dest_theta=get_hyperbolic_r(dest_router);
+ if ( src_r != -1 && dest_r != -1 )
+ {
+ distance=acosh(cosh(src_r)*cosh(dest_r)-sinh(src_r)*sinh(dest_r)*cos(src_theta-dest_theta));
+ }
+ else
+ {
+ distance= -1.0;
+ }
+
+ return distance;
+}
diff --git a/nlsr_route.h b/nlsr_route.h
index b0eef14..b6dff03 100644
--- a/nlsr_route.h
+++ b/nlsr_route.h
@@ -24,7 +24,7 @@
struct face_list_entry
{
int next_hop_face;
- int route_cost;
+ double route_cost;
};
int route_calculate(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
@@ -64,4 +64,8 @@
void print_all_next_hop(long int *parent,long int source);
int does_face_exist_for_router(char *dest_router, int face_id);
+double get_hyperbolic_distance(long int source, long int dest);
+void sort_hyperbolic_route(double *dist_dest,double *dist_nbr, long int *faces,long int start,long int element);
+void update_routing_table_with_new_hyperbolic_route(long int dest_router_rev_map_index, long int face, double nbr_to_dest_dist);
+
#endif
diff --git a/nlsr-sync-0.0/nlsr_sync.c b/nlsr_sync.c
similarity index 73%
rename from nlsr-sync-0.0/nlsr_sync.c
rename to nlsr_sync.c
index ee72d79..7ae108a 100644
--- a/nlsr-sync-0.0/nlsr_sync.c
+++ b/nlsr_sync.c
@@ -79,25 +79,60 @@
//--Doing our thing from here
- struct ccn_indexbuf cid={0};
+ //struct ccn_indexbuf cid={0};
- struct ccn_indexbuf *components=&cid;
- ccn_name_split (name, components);
+ //struct ccn_indexbuf *components=&cid;
+ struct ccn_indexbuf *components=ccn_indexbuf_create();
+ res=ccn_name_split (name, components);
+ if ( res < 0 )
+ return 0;
//ccn_name_chop(name,components,-3);
//process_content_from_sync(name,components);
struct ccn_charbuf *content_name = ccn_charbuf_create();
ccn_name_init(content_name);
+ if (components->n < 2)
+ return 0;
res = ccn_name_append_components(content_name, name->buf, components->buf[0], components->buf[components->n - 1]);
- struct ccn_indexbuf cid1={0};
- struct ccn_indexbuf *components1=&cid1;
- res=ccn_name_split (content_name, components1);
+ if ( res < 0)
+ return 0;
+
+
+ // debugging purpose
+ struct ccn_charbuf *temp=ccn_charbuf_create();
+ ccn_uri_append(temp, content_name->buf, content_name->length, 0);
if ( nlsr->debugging )
- printf("Number of components in name = %d \n",res);
+ printf("Name before chopping: %s \n",ccn_charbuf_as_string(temp));
+ ccn_charbuf_destroy(&temp);
+
+ //struct ccn_indexbuf cid1={0};
+ //struct ccn_indexbuf *components1=&cid1;
+ struct ccn_indexbuf *components1=ccn_indexbuf_create();
+ res=ccn_name_split (content_name, components1);
+ if ( res < 0)
+ return 0;
+
+ if ( nlsr->debugging )
+ {
+ printf("Number of components in name = %d \n",res);
+ printf("Number of components in name as indexbuf->n = %d \n",(int)components1->n);
+ }
ccn_name_chop(content_name,components1,-3);
+ if ( nlsr->debugging )
+ printf("Number of components in name as indexbuf->n after chopping= %d \n",(int)components1->n);
+
+ //debugging purpose
+ struct ccn_charbuf *temp1=ccn_charbuf_create();
+ ccn_uri_append(temp1, content_name->buf, content_name->length, 0);
+ if ( nlsr->debugging )
+ printf("Name after chopping: %s \n",ccn_charbuf_as_string(temp1));
+ ccn_charbuf_destroy(&temp1);
+
process_content_from_sync(content_name,components1);
ccn_charbuf_destroy(&content_name);
+ ccn_indexbuf_destroy(&components);
+ ccn_indexbuf_destroy(&components1);
return(0);
}
@@ -133,7 +168,7 @@
- int res,i;
+ int i;
int lsa_position=0;
int len=0;
@@ -152,7 +187,7 @@
size_t comp_size;
for(i=lsa_position+1+offset;i<interest_comps->n-1;i++)
{
- res=ccn_name_comp_get(interest_ccnb->buf, interest_comps,i,&comp_ptr1, &comp_size);
+ ccn_name_comp_get(interest_ccnb->buf, interest_comps,i,&comp_ptr1, &comp_size);
len+=1;
len+=(int)comp_size;
}
@@ -163,7 +198,7 @@
for(i=lsa_position+1+offset; i<interest_comps->n-1;i++)
{
- res=ccn_name_comp_get(interest_ccnb->buf, interest_comps,i,&comp_ptr1, &comp_size);
+ ccn_name_comp_get(interest_ccnb->buf, interest_comps,i,&comp_ptr1, &comp_size);
memcpy(neighbor+strlen(neighbor),"/",1);
memcpy(neighbor+strlen(neighbor),(char *)comp_ptr1,strlen((char *)comp_ptr1));
@@ -425,12 +460,17 @@
void
process_content_from_sync(struct ccn_charbuf *content_name, struct ccn_indexbuf *components)
{
- int lsa_position;
- int res;
+ //int lsa_position;
+ //int res;
size_t comp_size;
- const unsigned char *lst;
- const unsigned char *lsid;
+ char *lst;
+ char *lsid;
+ const unsigned char *second_last_comp;
+ const unsigned char *third_last_comp;
const unsigned char *origtime;
+ char *sep=".";
+ char *rem;
+ char *second_comp_type;
int ls_type;
long int ls_id=0;
@@ -452,20 +492,31 @@
struct ccn_charbuf *name=ccn_charbuf_create();
ccn_name_from_uri(name,nlsr->slice_prefix);
ccn_name_split (name, temp_components);
- lsa_position=temp_components->n-2;
+ //lsa_position=temp_components->n-2;
ccn_charbuf_destroy(&name);
- res=ccn_name_comp_get(content_name->buf, components,lsa_position+1,&lst, &comp_size);
+ //res=ccn_name_comp_get(content_name->buf, components,lsa_position+1,&lst, &comp_size);
+ ccn_name_comp_get(content_name->buf, components,components->n-2-1,&second_last_comp, &comp_size);
+ //ls_type=atoi((char *)lst);
+ if (nlsr->debugging)
+ printf("2nd Last Component: %s \n",second_last_comp);
- 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);
+ second_comp_type=strtok_r((char *)second_last_comp,sep,&rem);
+ if ( strcmp( second_comp_type, "lsId" ) == 0 )
+ {
+ lsid=rem;
+ ls_id=atoi(rem);
+ ccn_name_comp_get(content_name->buf, components,components->n-2-2,&third_last_comp, &comp_size);
+ lst=strtok_r((char *)third_last_comp,sep,&rem);
+ lst=rem;
+ ls_type=atoi(lst);
+ ccn_name_comp_get(content_name->buf, components,components->n-2,&origtime, &comp_size);
+ ccn_name_chop(content_name,components,-3);
+ get_name_part(orig_router,content_name,components,0);
+
+ if ( nlsr->debugging )
+ printf("Orig Router: %s Ls Type: %d Ls id: %ld Orig Time: %s\n",orig_router->name,ls_type,ls_id,origtime);
int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
@@ -497,95 +548,101 @@
printf("Lsa is older than Router LSA refresh time/ Dead Interval\n");
}
}
- else if(ls_type == LS_TYPE_ADJ)
+ else
{
- res=ccn_name_comp_get(content_name->buf, components,lsa_position+2,&origtime, &comp_size);
- get_name_part(orig_router,content_name,components,2);
-
- if ( nlsr->debugging )
- printf("Orig Time: %s\nOrig Router: %s\n",origtime,orig_router->name);
-
- int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
- 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) )
+ ls_type=atoi(rem);
+ lst=rem;
+ if(ls_type == LS_TYPE_ADJ)
{
- int is_new_adj_lsa=check_is_new_adj_lsa(orig_router->name,(char *)lst,(char *)origtime);
- if ( is_new_adj_lsa == 1 )
+ ccn_name_comp_get(content_name->buf, components,components->n-2,&origtime, &comp_size);
+ ccn_name_chop(content_name,components,-2);
+ get_name_part(orig_router,content_name,components,0);
+
+ if ( nlsr->debugging )
+ printf("Orig Router: %s Ls Type: %d Orig Time: %s\n",orig_router->name,ls_type,origtime);
+
+ int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
+ 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) )
{
- if ( nlsr->debugging )
- printf("New Adj LSA.....\n");
- get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
+ int is_new_adj_lsa=check_is_new_adj_lsa(orig_router->name,(char *)lst,(char *)origtime);
+ if ( is_new_adj_lsa == 1 )
+ {
+ if ( nlsr->debugging )
+ printf("New Adj LSA.....\n");
+ get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
- if ( nlsr->debugging )
- printf("Content Data: %s \n",content_data);
- process_incoming_sync_content_lsa(content_data);
+ if ( nlsr->debugging )
+ printf("Content Data: %s \n",content_data);
+ process_incoming_sync_content_lsa(content_data);
+ }
+ else
+ {
+ if ( nlsr->debugging )
+ printf("Adj LSA / Newer Adj LSA already exists in LSDB\n");
+ get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
+ if ( nlsr->debugging )
+ printf("Content Data: %s \n",content_data);
+ }
}
- else
+ else
{
if ( nlsr->debugging )
- printf("Adj LSA / Newer Adj LSA already exists in LSDB\n");
- get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
- if ( nlsr->debugging )
- printf("Content Data: %s \n",content_data);
+ printf("Lsa is older than Router LSA refresh time/ Dead Interval\n");
}
}
- else
+ else if(ls_type == LS_TYPE_COR)
{
+ ccn_name_comp_get(content_name->buf, components,components->n-2,&origtime, &comp_size);
+ ccn_name_chop(content_name,components,-2);
+ get_name_part(orig_router,content_name,components,0);
+
if ( nlsr->debugging )
- printf("Lsa is older than Router LSA refresh time/ Dead Interval\n");
+ printf("Orig Router: %s Ls Type: %d Orig Time: %s\n",orig_router->name,ls_type,origtime);
+
+ int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
+ 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_cor_lsa=check_is_new_cor_lsa(orig_router->name,(char *)lst,(char *)origtime);
+ if ( is_new_cor_lsa == 1 )
+ {
+ if ( nlsr->debugging )
+ printf("New Cor LSA.....\n");
+ get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
+
+ if ( nlsr->debugging )
+ printf("Content Data: %s \n",content_data);
+ process_incoming_sync_content_lsa(content_data);
+ }
+ else
+ {
+ if ( nlsr->debugging )
+ printf("Cor LSA / Newer Cor LSA already exists in LSDB\n");
+ get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
+ if ( nlsr->debugging )
+ printf("Content Data: %s \n",content_data);
+ }
+ }
+ else
+ {
+ if ( nlsr->debugging )
+ printf("Lsa is older than Router LSA refresh time/ Dead Interval\n");
+ }
+
}
}
- else if(ls_type == LS_TYPE_COR)
- {
- res=ccn_name_comp_get(content_name->buf, components,lsa_position+2,&origtime, &comp_size);
- get_name_part(orig_router,content_name,components,2);
-
- if ( nlsr->debugging )
- printf("Orig Time: %s\nOrig Router: %s\n",origtime,orig_router->name);
- int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
- 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_cor_lsa=check_is_new_cor_lsa(orig_router->name,(char *)lst,(char *)origtime);
- if ( is_new_cor_lsa == 1 )
- {
- if ( nlsr->debugging )
- printf("New Cor LSA.....\n");
- get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
-
- if ( nlsr->debugging )
- printf("Content Data: %s \n",content_data);
- process_incoming_sync_content_lsa(content_data);
- }
- else
- {
- if ( nlsr->debugging )
- printf("Cor LSA / Newer Cor LSA already exists in LSDB\n");
- get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
- if ( nlsr->debugging )
- printf("Content Data: %s \n",content_data);
- }
- }
- else
- {
- if ( nlsr->debugging )
- printf("Lsa is older than Router LSA refresh time/ Dead Interval\n");
- }
-
- }
-
- if (content_data != NULL)
- free(content_data);
+ //if (content_data != NULL)
+ //free(content_data);
ccn_charbuf_destroy(&uri);
//01/31/2013
free(time_stamp);
}
-void
+int
sync_monitor(char *topo_prefix, char *slice_prefix)
{
- static struct ccns_name_closure nc={0};
-
+ static struct ccns_name_closure nc={0};
nlsr->closure = &nc;
struct ccn_charbuf *prefix = ccn_charbuf_create();
struct ccn_charbuf *roothash = NULL;
@@ -600,7 +657,6 @@
ccn_charbuf_reset(topo);
ccn_name_from_uri(topo, topo_prefix);
-
ccns_slice_set_topo_prefix(nlsr->slice, topo, prefix);
nlsr->closure->callback = &sync_cb;
nlsr->ccns = ccns_open(nlsr->ccn, nlsr->slice, nlsr->closure, roothash, NULL);
@@ -608,6 +664,8 @@
//01/31/2013
ccn_charbuf_destroy(&prefix);
ccn_charbuf_destroy(&topo);
+ ccn_charbuf_destroy(&roothash);
+ return 0;
}
struct ccn_charbuf *
@@ -714,6 +772,7 @@
create_sync_slice(char *topo_prefix, char *slice_prefix)
{
int res;
+ struct ccn *handle;
struct ccns_slice *slice;
struct ccn_charbuf *prefix = ccn_charbuf_create();
struct ccn_charbuf *topo = ccn_charbuf_create();
@@ -727,7 +786,13 @@
return -1;
}
-
+ handle = ccn_create();
+ res = ccn_connect(handle, NULL);
+ if (0 > res) {
+ fprintf(stderr, "Unable to connect to ccnd.\n");
+ return -1;
+ }
+
slice = ccns_slice_create();
ccn_charbuf_reset(topo);
@@ -737,10 +802,11 @@
ccns_slice_set_topo_prefix(slice, topo, prefix);
- res = ccns_write_slice(nlsr->ccn, slice, slice_name);
+ res = ccns_write_slice(handle, slice, slice_name);
//01/31/2013
ccns_slice_destroy(&slice);
+ ccn_destroy(&handle);
ccn_charbuf_destroy(&prefix);
ccn_charbuf_destroy(&topo);
ccn_charbuf_destroy(&clause);
diff --git a/nlsr-sync-0.0/nlsr_sync.h b/nlsr_sync.h
similarity index 86%
rename from nlsr-sync-0.0/nlsr_sync.h
rename to nlsr_sync.h
index 68fc767..d2fe9e5 100644
--- a/nlsr-sync-0.0/nlsr_sync.h
+++ b/nlsr_sync.h
@@ -1,7 +1,7 @@
#ifndef _NLSR_SYNC_H_
#define _NLSR_SYNC_H_
-void sync_monitor(char *topo_prefix, char *slice_prefix);
+int sync_monitor(char *topo_prefix, char *slice_prefix);
int write_data_to_repo(char *data,char *name_prefix);
int create_sync_slice(char *topo_prefix, char *slice_prefix);
void get_host_name_from_command_string(struct name_prefix *name_part,char *nbr_name_uri, int offset);
diff --git a/nlsrc.c b/nlsrc.c
index 5e35b8c..91a1523 100755
--- a/nlsrc.c
+++ b/nlsrc.c
@@ -21,18 +21,18 @@
static int
usage(char *progname)
{
- printf("Usage: %s [OPTIONS...]\n\
- NLSR API client....\n\
- nlsrc -s server_ip -p server_port add|del name|neighbor name_prefix [faceX] \n\
- option -- description\n\n\
- add|del -- specify whether you want to add or delete.\n\
- name|neighbor -- specify whether you are adding a name or a neighbor.\n\
- name_prefix -- name of the prefix for the name|neighbor.\n\
- faceX -- face ID for neighbor if the third argument is neighbor.\n\n\
- Examples:\n\
- 1) nlsrc -s 127.0.0.1 -p 9696 add name /ndn/memphis.edu/test \n", progname);
+ printf("Usage: %s [OPTIONS...]\n\
+ NLSR API client....\n\
+ nlsrc -s server_ip -p server_port add|del name|neighbor name_prefix [faceX] \n\
+ option -- description\n\n\
+ add|del -- specify whether you want to add or delete.\n\
+ name|neighbor -- specify whether you are adding a name or a neighbor.\n\
+ name_prefix -- name of the prefix for the name|neighbor.\n\
+ faceX -- face ID for neighbor if the third argument is neighbor.\n\n\
+ Examples:\n\
+ 1) nlsrc -s 127.0.0.1 -p 9696 add name /ndn/memphis.edu/test \n", progname);
- exit(1);
+ exit(1);
}
int main(int argc, char *argv[])
@@ -41,20 +41,20 @@
int len;
struct sockaddr_in address;
int result;
- int byteSend;
+ int bytesSent;
char *server_address, *server_port;
- int command_len = 0;
+ int command_len=0;
int i;
if (argc < 8)
- usage(argv[0]);
+ usage(argv[0]);
- if (strcmp(argv[6], "neighbor") == 0 && argc < 9)
- usage(argv[0]);
+ if (strcmp(argv[6], "neighbor") == 0 && argc < 9)
+ usage(argv[0]);
- if (strcmp(argv[6], "name") != 0 && strcmp(argv[6], "neighbor") != 0)
- usage(argv[0]);
+ if (strcmp(argv[6], "name") != 0 && strcmp(argv[6], "neighbor") != 0)
+ usage(argv[0]);
while ((result = getopt_long(argc, argv, "s:p:", longopts, 0)) != -1)
{
@@ -73,17 +73,14 @@
char recv_buffer[1024];
bzero(recv_buffer,1024);
- for(i = 5; i < argc; i++)
- command_len += (strlen(argv[i]) + 1);
-
- char *command = malloc(command_len);
- memset(command, 0, command_len + 1);
-
- for(i = 5; i < argc; i++)
+ for(i=5;i<argc;i++)
+ command_len+=(strlen(argv[i])+1);
+ char *command=malloc(command_len);
+ memset(command, 0, command_len);
+ for(i=5;i<argc;i++)
{
- memcpy(command+strlen(command), argv[i], strlen(argv[i]));
-
- if (i < argc - 1)
+ memcpy(command+strlen(command),argv[i],strlen(argv[i]));
+ if ( i < argc-1 )
memcpy(command+strlen(command)," ",1);
}
@@ -96,21 +93,17 @@
len = sizeof(address);
result = connect(sockfd, (struct sockaddr *)&address, len);
-
if(result == -1)
{
perror("oops nlsrc ");
exit(1);
}
-
printf("Command to send: %s \n",command);
- byteSend=send(sockfd, command, strlen(command),0);
-
+ bytesSent=send(sockfd, command, strlen(command),0);
+ printf("Command len: %d, Bytes sent: %d \n",(int)strlen(command), bytesSent);
recv(sockfd, recv_buffer, 1024, 0);
printf("%s\n",recv_buffer);
-
free(command);
close(sockfd);
-
- return 0;
+ exit(0);
}
diff --git a/pollux.conf b/pollux.conf
deleted file mode 100644
index 495378e..0000000
--- a/pollux.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-router-name /ndn/memphis.edu/netlab/pollux
-ccnneighbor /ndn/memphis.edu/netlab/macbook face2 10
-ccnneighbor /ndn/memphis.edu/netlab/castor face3 8
-ccnname /ndn/memphis.edu/netlab/pollux/name1
-ccnname /ndn/memphis.edu/netlab/pollux/test
-lsdb-synch-interval 320
-interest-retry 3
-interest-resend-time 5
-
-
diff --git a/utility.c b/utility.c
index b136c67..f04ba39 100644
--- a/utility.c
+++ b/utility.c
@@ -10,6 +10,10 @@
#include <errno.h>
#include <sys/stat.h>
#include <sys/time.h>
+#include<sys/socket.h>
+#include<arpa/inet.h>
+#include<errno.h>
+#include<netdb.h>
#include <time.h>
#include <assert.h>
#ifdef HAVE_CONFIG_H
@@ -17,6 +21,7 @@
#endif
+
#include <ccn/ccn.h>
#include <ccn/uri.h>
#include <ccn/keystore.h>
@@ -117,7 +122,7 @@
char *ret;
char *logExt;
char *defaultLogDir;
- int status;
+ //int status;
struct stat st;
int isLogDirExists=0;
char *time=getLocalTimeStamp();
@@ -165,7 +170,8 @@
memcpy(logDir,pd.pw_dir,strlen(pd.pw_dir)+1);
memcpy(logDir+strlen(logDir),defaultLogDir,strlen(defaultLogDir)+1);
if(stat(logDir,&st) != 0)
- status = mkdir(logDir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
+ mkdir(logDir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
+ //printf("Status: %d\n",status);
}
}
memcpy(logFileName,logDir,strlen(logDir)+1);
@@ -214,3 +220,58 @@
}
}
+
+struct sockaddr_in *
+get_ip_from_hostname(char *hostname )
+{
+
+
+ struct addrinfo hints, *servinfo, *p;
+ int res;
+ struct sockaddr_in * ip;
+ memset(&hints, 0, sizeof hints);
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+
+ if ( (res = getaddrinfo( hostname , "9696", &hints , &servinfo)) != 0)
+ {
+ fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(res));
+ return NULL;
+ }
+ int i=0;
+ for(p = servinfo; p != NULL; p = p->ai_next)
+ {
+ ip = (struct sockaddr_in *) p->ai_addr;
+ i++;
+
+ }
+ freeaddrinfo(servinfo);
+ return ip;
+
+
+}
+
+
+
+int
+get_ip_from_hostname_02(char * hostname , char* ip)
+{
+ struct hostent *he;
+ struct in_addr **addr_list;
+ int i;
+ if ( (he = gethostbyname( hostname ) ) == NULL)
+ {
+ herror("gethostbyname");
+ return 1;
+ }
+ addr_list = (struct in_addr **) he->h_addr_list;
+ for(i = 0; addr_list[i] != NULL; i++)
+ {
+ strcpy(ip , inet_ntoa(*addr_list[i]) );
+ return 0;
+ }
+ return 1;
+}
+
+
+
diff --git a/utility.h b/utility.h
index 6ae550a..f90c281 100644
--- a/utility.h
+++ b/utility.h
@@ -9,4 +9,6 @@
void startLogging(char *loggingDir);
void writeLogg(const char *source_file, const char *function, const int line, const char *format, ...);
+struct sockaddr_in * get_ip_from_hostname(char *hostname);
+int get_ip_from_hostname_02(char * hostname , char* ip);
#endif