Updates in nlsr_npt.*
diff --git a/nlsr.c b/nlsr.c
index dda2525..935b686 100644
--- a/nlsr.c
+++ b/nlsr.c
@@ -359,7 +359,7 @@
for(i=0;i<npt_element;i++)
{
ne=e->data;
- hashtb_destroy(&ne->next_hop_table);
+ hashtb_destroy(&ne->name_list);
hashtb_next(e);
}
diff --git a/nlsr_npt.c b/nlsr_npt.c
index f3b5fc8..bfce084 100644
--- a/nlsr_npt.c
+++ b/nlsr_npt.c
@@ -23,13 +23,7 @@
#include "nlsr.h"
#include "nlsr_npt.h"
#include "nlsr_fib.h"
-
-void
-make_npt_key(char *key, char *orig_router, char *name_prefix)
-{
- memcpy(key+strlen(key),orig_router,strlen(orig_router));
- memcpy(key+strlen(key),name_prefix,strlen(name_prefix));
-}
+#include "nlsr_route.h"
int
add_npt_entry(char *orig_router, char *name_prefix, int face)
@@ -41,50 +35,47 @@
struct npt_entry *ne=(struct npt_entry*)malloc(sizeof(struct npt_entry ));
- int res,res_nht;
+ int res,res_nle;
struct hashtb_enumerator ee;
struct hashtb_enumerator *e = ⅇ
-
- char *key=(char *)malloc(strlen(orig_router)+strlen(name_prefix)+2);
- memset(key,0,strlen(orig_router)+strlen(name_prefix)+2);
-
- make_npt_key(key,orig_router,name_prefix);
+
hashtb_start(nlsr->npt, e);
- res = hashtb_seek(e, key, strlen(key), 0);
+ res = hashtb_seek(e, orig_router, strlen(orig_router), 0);
if(res == HT_NEW_ENTRY)
{
ne=e->data;
- ne->name_prefix=(char *)malloc(strlen(name_prefix)+1);
- memset(ne->name_prefix,0,strlen(name_prefix)+1);
- memcpy(ne->name_prefix,name_prefix,strlen(name_prefix));
+ 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));
- /* Adding Orig Router in Orig Router List */
+
+ struct name_list_entry *nle=(struct name_list_entry *)malloc(sizeof(struct name_list_entry));
- struct next_hop_entry *nhe=(struct next_hop_entry *)malloc(sizeof(struct next_hop_entry));
+ struct hashtb_param param_nle = {0};
+ ne->name_list= hashtb_create(sizeof(struct name_list_entry ), ¶m_nle);
- struct hashtb_param param_nht = {0};
- ne->next_hop_table= hashtb_create(sizeof(struct next_hop_entry ), ¶m_nht);
+ struct hashtb_enumerator eenle;
+ struct hashtb_enumerator *enle = &eenle;
- struct hashtb_enumerator eenht;
- struct hashtb_enumerator *enht = &eenht;
+ hashtb_start(ne->name_list, enle);
+ res_nle = hashtb_seek(enle, name_prefix, strlen(name_prefix), 0);
- hashtb_start(ne->next_hop_table, enht);
- res_nht = hashtb_seek(enht, orig_router, strlen(orig_router), 0);
-
- if(res_nht == HT_NEW_ENTRY )
+ if(res_nle == HT_NEW_ENTRY )
{
- nhe=enht->data;
- nhe->orig_router=(char *)malloc(strlen(orig_router)+1);
- memset(nhe->orig_router,0,strlen(orig_router)+1);
- memcpy(nhe->orig_router,orig_router,strlen(orig_router));
+ 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));
- nhe->next_hop_face=face;
+
}
- hashtb_end(enht);
+ hashtb_end(enle);
+
+ ne->next_hop_face=face;
if ( face != NO_FACE )
{
@@ -99,62 +90,39 @@
one=e->data;
- struct next_hop_entry *nhe=(struct next_hop_entry *)malloc(sizeof(struct next_hop_entry));
- struct hashtb_param param_nht = {0};
- ne->next_hop_table= hashtb_create(sizeof(struct next_hop_entry ), ¶m_nht);
+ struct name_list_entry *nle=(struct name_list_entry *)malloc(sizeof(struct name_list_entry));
- struct hashtb_enumerator eenht;
- struct hashtb_enumerator *enht = &eenht;
+ struct hashtb_param param_nle = {0};
+ ne->name_list= hashtb_create(sizeof(struct name_list_entry ), ¶m_nle);
- hashtb_start(one->next_hop_table, enht);
- res_nht = hashtb_seek(enht, orig_router, strlen(orig_router), 0);
+ struct hashtb_enumerator eenle;
+ struct hashtb_enumerator *enle = &eenle;
- if(res_nht == HT_NEW_ENTRY )
+ hashtb_start(one->name_list, enle);
+ res_nle = hashtb_seek(enle, name_prefix, strlen(name_prefix), 0);
+
+ if(res_nle == HT_NEW_ENTRY )
{
- nhe=enht->data;
- nhe->orig_router=(char *)malloc(strlen(orig_router)+1);
- memset(nhe->orig_router,0,strlen(orig_router)+1);
- memcpy(nhe->orig_router,orig_router,strlen(orig_router));
-
- nhe->next_hop_face=face;
-
+ 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));
+
if ( face != NO_FACE )
{
add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)name_prefix, OP_REG, face);
}
-
}
- else if ( res_nht == HT_OLD_ENTRY)
+ else if(res_nle == HT_OLD_ENTRY )
{
- free(nhe);
- struct next_hop_entry *onhe;
- onhe=enht->data;
-
- if(onhe->next_hop_face != face )
- {
- if ( onhe->next_hop_face != NO_FACE )
- {
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)name_prefix, OP_UNREG, onhe->next_hop_face);
- }
-
- if ( face != NO_FACE )
- {
- add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)name_prefix, OP_REG, onhe->next_hop_face);
- }
-
- onhe->next_hop_face=face;
-
- }
-
+ free(nle);
}
- hashtb_end(enht);
-
-
+ hashtb_end(enle);
+
+
}
hashtb_end(e);
-
- free(key);
return res;
}
@@ -179,25 +147,24 @@
printf("\n");
printf("----------NPT ENTRY %d------------------\n",i+1);
ne=e->data;
- printf(" Name Prefix: %s \n",ne->name_prefix);
+ printf(" 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);
- struct next_hop_entry *nhe;
- struct hashtb_enumerator eenht;
- struct hashtb_enumerator *enht = &eenht;
+ int j, nl_element;
+ struct name_list_entry *nle;
+ struct hashtb_enumerator eenle;
+ struct hashtb_enumerator *enle = &eenle;
- int j, nht_element;
- hashtb_start(ne->next_hop_table, enht);
- nht_element=hashtb_n(ne->next_hop_table);
+ hashtb_start(ne->name_list, enle);
+ nl_element=hashtb_n(ne->name_list);
- for (j=0;j<nht_element;j++)
+ for (j=0;j<nl_element;j++)
{
- nhe=enht->data;
- printf(" Origination Router: %s \n",nhe->orig_router);
- nhe->next_hop_face == NO_FACE ? printf(" Next Hop Face: NO_NEXT_HOP \n") : printf(" Next Hop Face: %d \n", nhe->next_hop_face);
-
- hashtb_next(enht);
+ nle=enle->data;
+ printf(" Name Prefix: %s \n",nle->name);
+ hashtb_next(enle);
}
- hashtb_end(enht);
+ hashtb_end(enle);
hashtb_next(e);
}
@@ -206,3 +173,51 @@
printf("\n");
}
+
+void
+delete_orig_router_from_npt(char *orig_router,int next_hop_face)
+{
+ int res;
+ 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;
+ if ( next_hop_face == ne->next_hop_face )
+ {
+ if ( next_hop_face != NO_NEXT_HOP )
+ {
+ 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;
+ add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG , next_hop_face);
+ hashtb_next(enle);
+ }
+ hashtb_end(enle);
+
+ }
+
+ }
+ hashtb_destroy(&ne->name_list);
+ hashtb_delete(e);
+ }
+ else if ( res == HT_NEW_ENTRY )
+ {
+ hashtb_delete(e);
+ }
+ hashtb_end(e);
+}
diff --git a/nlsr_npt.h b/nlsr_npt.h
index 48ef6d4..997cb71 100644
--- a/nlsr_npt.h
+++ b/nlsr_npt.h
@@ -5,18 +5,19 @@
struct npt_entry
{
- char *name_prefix;
- struct hashtb *next_hop_table;
+ char *orig_router;
+ struct hashtb *name_list;
+ int next_hop_face;
};
-struct next_hop_entry
+struct name_list_entry
{
- char *orig_router;
- int next_hop_face;
+ char *name;
};
int add_npt_entry(char *orig_router, char *name_prefix, int face);
void print_npt(void);
+void delete_orig_router_from_npt(char *orig_router,int next_hop_face);
#endif
diff --git a/nlsr_route.c b/nlsr_route.c
index c3dc3ac..47384d8 100644
--- a/nlsr_route.c
+++ b/nlsr_route.c
@@ -351,7 +351,7 @@
struct hashtb_enumerator ee;
struct hashtb_enumerator *e = ⅇ
int res;
- int ret=-1;
+ int ret;
hashtb_start(nlsr->map, e);
res = hashtb_seek(e, router, strlen(router), 0);
@@ -364,6 +364,7 @@
else if(res == HT_NEW_ENTRY)
{
hashtb_delete(e);
+ ret=NO_MAPPING_NUM;
}
hashtb_end(e);
@@ -592,6 +593,30 @@
void
do_old_routing_table_updates()
{
-
+ printf("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,rte->next_hop_face);
+ hashtb_delete(e);
+ }
+ hashtb_next(e);
+ }
+
+ hashtb_end(e);
}
diff --git a/nlsr_route.h b/nlsr_route.h
index ec243e9..762efa4 100644
--- a/nlsr_route.h
+++ b/nlsr_route.h
@@ -4,7 +4,8 @@
#define EMPTY_PARENT -12345
#define INF_DISTANCE 2147483647
-#define NO_NEXT_HOP -4321
+#define NO_NEXT_HOP -12345
+#define NO_MAPPING_NUM -1
struct map_entry
{