Update
diff --git a/nlsr.c b/nlsr.c
index ad7afc0..0387beb 100644
--- a/nlsr.c
+++ b/nlsr.c
@@ -101,6 +101,20 @@
 	}
 
 	printf("Name Prefix: %s \n",name_prefix);
+
+	struct name_prefix *np=(struct name_prefix *)malloc(sizeof(struct name_prefix *));
+	np->name=(char *)malloc(strlen(name_prefix)+1);
+	memcpy(np->name,name_prefix,strlen(name_prefix)+1);
+	np->length=strlen(name_prefix)+1;
+
+	add_name_prefix_to_npl(np);
+	/* Debugging Purpose */
+	print_name_prefix_from_npl();
+
+	free(np->name);
+	free(np);
+
+		
 }
 
 void 
@@ -108,28 +122,52 @@
 {
 	if(command==NULL)
 	{
-		printf(" Wrong Command Format ( ccnneighbor router_id faceX)\n");
+		printf(" Wrong Command Format ( ccnneighbor router_name faceX)\n");
 		return;
 	}
 	char *rem;
 	const char *sep=" \t\n";
-	char *rtr_id,*face;
+	char *rtr_name,*face;
 
-	rtr_id=strtok_r(command,sep,&rem);
-	if(rtr_id==NULL)
+	rtr_name=strtok_r(command,sep,&rem);
+	if(rtr_name==NULL)
 	{
-		printf(" Wrong Command Format ( ccnneighbor router_id faceX)\n");
+		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_id faceX)\n");
+		printf(" Wrong Command Format ( ccnneighbor router_name faceX)\n");
 		return;
 	}
 
-	printf("Router: %s face: %s\n",rtr_id,face);
+	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;
+	}
+
+	struct ndn_neighbor *nbr=(struct ndn_neighbor *)malloc(sizeof(struct ndn_neighbor*));
+	nbr->neighbor=(struct name_prefix *)malloc(sizeof(struct name_prefix *));
+	nbr->neighbor->name=(char *)malloc(strlen(rtr_name)+1);
+	memcpy(nbr->neighbor->name,rtr_name,strlen(rtr_name)+1);
+	nbr->neighbor->length=strlen(rtr_name)+1;
+	nbr->face=face_id;
+	nbr->status=0;	
+
+	add_adjacent_to_adl(nbr);
+	print_adjacent_from_adl();
+
+	free(nbr->neighbor->name);
+	free(nbr->neighbor);
+	free(nbr);
 
 }
 
@@ -191,6 +229,116 @@
 	return 0;
 }
 
+void
+add_name_prefix_to_npl(struct name_prefix *np)
+{
+
+	
+	printf("\nadd_name_prefix called\n");
+	printf("Name Prefix: %s and length: %d \n",np->name,np->length);
+
+	struct name_prefix *hnp=(struct name_prefix *)malloc(sizeof(struct name_prefix *));
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = ⅇ 	
+    	int res;
+
+   	hashtb_start(nlsr->npl, e);
+    	res = hashtb_seek(e, np->name, strlen(np->name), 0);
+   
+	hnp = e->data;
+	hnp->name=(char *)malloc(np->length);
+    	memcpy(hnp->name,np->name,np->length);
+	hnp->length=np->length;
+
+    	hashtb_end(e);
+
+	printf("\n");
+
+}
+
+void
+print_name_prefix_from_npl(void)
+{
+	printf("print_name_prefix_from_npl called \n");	
+	int i, npl_element;
+	struct name_prefix *np;
+
+	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++)
+	{
+		np=e->data;
+		printf("Name Prefix: %s and Length: %d \n",np->name,np->length);	
+		hashtb_next(e);		
+	}
+
+	hashtb_end(e);
+
+	printf("\n");
+}
+
+void
+add_adjacent_to_adl(struct ndn_neighbor *nbr)
+{
+	printf("\nadd_adjacent_to_adl called\n");
+	printf("Neighbor: %s Length: %d Face: %d Status: %d\n",nbr->neighbor->name,nbr->neighbor->length,nbr->face, nbr->status);
+
+	struct ndn_neighbor *hnbr=(struct ndn_neighbor *)malloc(sizeof(struct ndn_neighbor*));
+	
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee; 	
+    	int res;
+
+   	hashtb_start(nlsr->adl, e);
+    	res = hashtb_seek(e, nbr->neighbor->name , nbr->neighbor->length, 0);
+   
+	hnbr = e->data;
+
+	hnbr->neighbor=(struct name_prefix *)malloc(sizeof(struct name_prefix *));
+	hnbr->neighbor->name=(char *)malloc(nbr->neighbor->length);
+	memcpy(hnbr->neighbor->name,nbr->neighbor->name,nbr->neighbor->length);
+	hnbr->neighbor->length=nbr->neighbor->length;
+	hnbr->face=nbr->face;
+	hnbr->status=nbr->status;
+	
+    	hashtb_end(e);
+
+	printf("\n");
+
+
+}
+
+void
+print_adjacent_from_adl(void)
+{
+	printf("print_adjacent_from_adl called \n");	
+	int i, adl_element;
+	struct ndn_neighbor *nbr;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+    	
+    	hashtb_start(nlsr->adl, e);
+	adl_element=hashtb_n(nlsr->adl);
+
+	for(i=0;i<adl_element;i++)
+	{
+		nbr=e->data;
+		printf("Neighbor: %s Length: %d Face: %d Status: %d\n",nbr->neighbor->name,nbr->neighbor->length,nbr->face, nbr->status);	
+		hashtb_next(e);		
+	}
+
+	hashtb_end(e);
+
+	printf("\n");
+}
+
+
 int 
 main(int argc, char *argv[])
 {
@@ -202,7 +350,7 @@
 	
 	nlsr=(struct nlsr *)malloc(sizeof(struct nlsr));
 
-	nlsr->adl=hashtb_create(200, &param_adl);
+	nlsr->adl=hashtb_create(sizeof(struct ndn_neighbor), &param_adl);
 	nlsr->npl = hashtb_create(sizeof(struct name_prefix), &param_npl);
 	nlsr->in_interest.p = &incoming_interest;
 	nlsr->in_content.p = &incoming_content;