blob: ac184dafe84b6765df97384abc2486589c419e96 [file] [log] [blame]
akmhoquef1161eb2012-08-21 09:37:21 -04001#include<stdio.h>
2#include<string.h>
3#include<stdlib.h>
4#include <unistd.h>
5#include <getopt.h>
6#include <sys/time.h>
7#include <assert.h>
8#ifdef HAVE_CONFIG_H
9#include <config.h>
10#endif
11
12
13#include <ccn/ccn.h>
14#include <ccn/uri.h>
15#include <ccn/keystore.h>
16#include <ccn/signing.h>
17#include <ccn/schedule.h>
18#include <ccn/hashtb.h>
19
20#include "nlsr.h"
akmhoque03004e62012-09-06 01:12:28 -050021#include "nlsr_ndn.h"
akmhoquef1161eb2012-08-21 09:37:21 -040022#include "nlsr_lsdb.h"
akmhoquef71d9082012-08-22 12:51:53 -040023#include "utility.h"
akmhoque03004e62012-09-06 01:12:28 -050024#include "nlsr_npl.h"
akmhoque53f64222012-09-05 13:57:51 -050025#include "nlsr_adl.h"
akmhoque29c1db52012-09-07 14:47:43 -050026#include "nlsr_route.h"
akmhoque3560cb62012-09-09 10:52:30 -050027#include "nlsr_npt.h"
akmhoqueb77b95f2013-02-08 12:28:47 -060028#include "nlsr_sync.h"
akmhoque438b07e2012-08-21 10:13:57 -040029
akmhoquef71d9082012-08-22 12:51:53 -040030void
akmhoque53f64222012-09-05 13:57:51 -050031set_new_lsdb_version(void)
akmhoquef71d9082012-08-22 12:51:53 -040032{
akmhoque03004e62012-09-06 01:12:28 -050033 char *time_stamp=(char *)malloc(20);
34 memset(time_stamp,0,20);
35 get_current_timestamp_micro(time_stamp);
akmhoquef71d9082012-08-22 12:51:53 -040036
akmhoque03004e62012-09-06 01:12:28 -050037 free(nlsr->lsdb->lsdb_version);
38 nlsr->lsdb->lsdb_version=(char *)malloc(strlen(time_stamp)+1);
39 memset(nlsr->lsdb->lsdb_version,0,strlen(time_stamp)+1);
40 memcpy(nlsr->lsdb->lsdb_version,time_stamp,strlen(time_stamp)+1);
41
42 free(time_stamp);
akmhoque53f64222012-09-05 13:57:51 -050043
akmhoquef71d9082012-08-22 12:51:53 -040044}
45
akmhoque03004e62012-09-06 01:12:28 -050046void
47make_name_lsa_key(char *key, char *orig_router, int ls_type, long int ls_id)
48{
49
akmhoque03004e62012-09-06 01:12:28 -050050 char lst[2];
51 memset(lst,0,2);
52 sprintf(lst,"%d",ls_type);
53
54 char lsid[10];
55 memset(lsid,0,10);
56 sprintf(lsid,"%ld",ls_id);
57
58 memcpy(key+strlen(key),orig_router,strlen(orig_router));
59 memcpy(key+strlen(key),"/",1);
60 memcpy(key+strlen(key),lst,strlen(lst));
61 memcpy(key+strlen(key),"/",1);
62 memcpy(key+strlen(key),lsid,strlen(lsid));
akmhoque03004e62012-09-06 01:12:28 -050063
akmhoqueb77b95f2013-02-08 12:28:47 -060064 if ( nlsr->debugging )
65 printf("name LSA Key: %s\n", key);
66}
67
68
69void
70make_name_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, long int ls_id,char *orig_time,char *slice_prefix)
71{
72 sprintf(key,"%s%s/lsType.%d/lsId.%ld/%s",slice_prefix, orig_router, ls_type, ls_id, orig_time);
73
74 if ( nlsr->debugging )
75 printf("Name LSA prefix for repo content: %s\n",key);
76}
77
78void
79make_adj_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, char *orig_time,char *slice_prefix)
80{
81
82 sprintf(key,"%s%s/lsType.%d/%s",slice_prefix,orig_router,ls_type, orig_time );
83
84 if ( nlsr->debugging )
85 printf("Name LSA prefix for repo content:%s\n",key);
86}
87
88void
89make_cor_lsa_prefix_for_repo(char *key, char *orig_router, int ls_type, char *orig_time,char *slice_prefix)
90{
91
92 sprintf(key,"%s%s/lsType.%d/%s",slice_prefix,orig_router,ls_type, orig_time );
93
94 if ( nlsr->debugging )
95 printf("Cor LSA prefix for repo content:%s\n",key);
akmhoque03004e62012-09-06 01:12:28 -050096}
akmhoque53f64222012-09-05 13:57:51 -050097
akmhoquef71d9082012-08-22 12:51:53 -040098void
akmhoque53f64222012-09-05 13:57:51 -050099build_and_install_name_lsas(void)
akmhoquef71d9082012-08-22 12:51:53 -0400100{
akmhoque7b791452012-10-30 11:24:56 -0500101 if ( nlsr->debugging )
102 printf("build_and_install_name_lsas called \n");
103 if ( nlsr->detailed_logging )
104 writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_name_lsas called\n");
akmhoquef71d9082012-08-22 12:51:53 -0400105
akmhoquef71d9082012-08-22 12:51:53 -0400106 int i, npl_element;
akmhoque3171d652012-11-13 11:44:33 -0600107 struct name_prefix_list_entry *npe;
akmhoquef71d9082012-08-22 12:51:53 -0400108
109 struct hashtb_enumerator ee;
110 struct hashtb_enumerator *e = &ee;
111
112 hashtb_start(nlsr->npl, e);
113 npl_element=hashtb_n(nlsr->npl);
114
115 for(i=0;i<npl_element;i++)
116 {
akmhoque3171d652012-11-13 11:44:33 -0600117 npe=e->data;
akmhoque53f64222012-09-05 13:57:51 -0500118 struct nlsa *name_lsa=(struct nlsa *)malloc(sizeof( struct nlsa ));
akmhoque3171d652012-11-13 11:44:33 -0600119 build_name_lsa(name_lsa,npe->np);
akmhoque03004e62012-09-06 01:12:28 -0500120
akmhoquef71d9082012-08-22 12:51:53 -0400121 install_name_lsa(name_lsa);
akmhoque3171d652012-11-13 11:44:33 -0600122 update_nlsa_id_for_name_in_npl(npe->np,name_lsa->header->ls_id);
akmhoque03004e62012-09-06 01:12:28 -0500123 free(name_lsa->header->orig_router->name);
124 free(name_lsa->header->orig_router);
125 free(name_lsa->header);
126 free(name_lsa->name_prefix->name);
127 free(name_lsa->name_prefix);
akmhoquef71d9082012-08-22 12:51:53 -0400128 free(name_lsa);
akmhoquef71d9082012-08-22 12:51:53 -0400129 hashtb_next(e);
130 }
131
akmhoque53f64222012-09-05 13:57:51 -0500132 hashtb_end(e);
akmhoque3171d652012-11-13 11:44:33 -0600133
134 print_name_prefix_from_npl();
135
136}
137
138void
139build_and_install_single_name_lsa(struct name_prefix *np)
140{
141 if ( nlsr->debugging )
142 printf("build_and_install_single_name_lsa called \n");
143 if ( nlsr->detailed_logging )
144 writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_single_name_lsa called\n");
145
146 struct nlsa *name_lsa=(struct nlsa *)malloc(sizeof( struct nlsa ));
147 build_name_lsa(name_lsa,np);
148
149 install_name_lsa(name_lsa);
150 update_nlsa_id_for_name_in_npl(np,name_lsa->header->ls_id);
151
152 free(name_lsa->header->orig_router->name);
153 free(name_lsa->header->orig_router);
154 free(name_lsa->header);
155 free(name_lsa->name_prefix->name);
156 free(name_lsa->name_prefix);
157 free(name_lsa);
158
159 print_name_prefix_from_npl();
akmhoquef71d9082012-08-22 12:51:53 -0400160
akmhoquef71d9082012-08-22 12:51:53 -0400161}
162
akmhoque53f64222012-09-05 13:57:51 -0500163void
164build_name_lsa(struct nlsa *name_lsa, struct name_prefix *np)
165{
akmhoque53f64222012-09-05 13:57:51 -0500166 name_lsa->header=(struct nlsa_header *)malloc(sizeof(struct nlsa_header ));
167 name_lsa->header->ls_type=LS_TYPE_NAME;
168
akmhoque03004e62012-09-06 01:12:28 -0500169 char *time_stamp=(char *)malloc(20);
170 memset(time_stamp,0,20);
171 get_current_timestamp_micro(time_stamp);
akmhoque53f64222012-09-05 13:57:51 -0500172
akmhoque03004e62012-09-06 01:12:28 -0500173 name_lsa->header->orig_time=(char *)malloc(strlen(time_stamp)+1); //free
akmhoque53f64222012-09-05 13:57:51 -0500174 memset(name_lsa->header->orig_time,0,strlen(time_stamp)+1);
175 memcpy(name_lsa->header->orig_time,time_stamp,strlen(time_stamp)+1);
akmhoque03004e62012-09-06 01:12:28 -0500176
177 free(time_stamp);
akmhoque53f64222012-09-05 13:57:51 -0500178
179 name_lsa->header->ls_id=++nlsr->nlsa_id;
180 name_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
akmhoque03004e62012-09-06 01:12:28 -0500181 name_lsa->header->orig_router->name=(char *)malloc(strlen(nlsr->router_name)+1);
182 memset(name_lsa->header->orig_router->name,0,strlen(nlsr->router_name)+1);
183 memcpy(name_lsa->header->orig_router->name,nlsr->router_name,strlen(nlsr->router_name)+1);
184 name_lsa->header->orig_router->length=strlen(nlsr->router_name)+1;
akmhoque53f64222012-09-05 13:57:51 -0500185 name_lsa->header->isValid=1;
186
187
188 name_lsa->name_prefix=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
189 name_lsa->name_prefix->name=(char *)malloc(np->length);
190 memcpy(name_lsa->name_prefix->name,np->name,np->length);
191 name_lsa->name_prefix->length=np->length;
192
193}
194
akmhoque53f64222012-09-05 13:57:51 -0500195void
196install_name_lsa(struct nlsa *name_lsa)
197{
akmhoque53f64222012-09-05 13:57:51 -0500198
akmhoqueffacaa82012-09-13 17:48:30 -0500199 char *time_stamp=(char *)malloc(20);
200 memset(time_stamp,0,20);
201 get_current_timestamp_micro(time_stamp);
akmhoqueffacaa82012-09-13 17:48:30 -0500202
203
204 char lst[2];
205 memset(lst,0,2);
206 sprintf(lst,"%d",name_lsa->header->ls_type);
207
208 char lsid[10];
209 memset(lsid,0,10);
210 sprintf(lsid,"%ld",name_lsa->header->ls_id);
akmhoque03004e62012-09-06 01:12:28 -0500211
212
akmhoqueffacaa82012-09-13 17:48:30 -0500213 char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
214 memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
akmhoque03004e62012-09-06 01:12:28 -0500215
216
akmhoque3171d652012-11-13 11:44:33 -0600217 make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
218 if ( nlsr->debugging )
219 printf("Key:%s Length:%d\n",key,(int)strlen(key));
220 if ( nlsr->detailed_logging )
221 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Key:%s Length:%d\n",key,(int)strlen(key));
222
akmhoque53f64222012-09-05 13:57:51 -0500223
akmhoqueffacaa82012-09-13 17:48:30 -0500224 struct nlsa *new_name_lsa=(struct nlsa*)malloc(sizeof(struct nlsa )); //free
akmhoque53f64222012-09-05 13:57:51 -0500225
akmhoqueffacaa82012-09-13 17:48:30 -0500226 struct hashtb_enumerator ee;
227 struct hashtb_enumerator *e = &ee;
228 int res;
akmhoque53f64222012-09-05 13:57:51 -0500229
akmhoqueffacaa82012-09-13 17:48:30 -0500230 hashtb_start(nlsr->lsdb->name_lsdb, e);
231 res = hashtb_seek(e, key, strlen(key), 0);
akmhoque53f64222012-09-05 13:57:51 -0500232
akmhoqueffacaa82012-09-13 17:48:30 -0500233 if(res == HT_NEW_ENTRY )
akmhoque3560cb62012-09-09 10:52:30 -0500234 {
akmhoqueffacaa82012-09-13 17:48:30 -0500235
akmhoque7b791452012-10-30 11:24:56 -0500236 if ( nlsr->debugging )
237 printf("New Name LSA... Adding to LSDB\n");
238 if ( nlsr->detailed_logging )
239 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Name LSA... Adding to LSDB\n");
240
241
akmhoqueffacaa82012-09-13 17:48:30 -0500242 new_name_lsa = e->data;
243
244 new_name_lsa->header=(struct nlsa_header *)malloc(sizeof(struct nlsa_header )); //free
245 new_name_lsa->header->ls_type=name_lsa->header->ls_type;
246
247 new_name_lsa->header->orig_time=(char *)malloc(strlen(name_lsa->header->orig_time)+1);
248 memset(new_name_lsa->header->orig_time,0,strlen(name_lsa->header->orig_time)+1);
249 memcpy(new_name_lsa->header->orig_time,name_lsa->header->orig_time,strlen(name_lsa->header->orig_time)+1);
250
251 new_name_lsa->header->ls_id=name_lsa->header->ls_id;
252 new_name_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix )); //free
253 new_name_lsa->header->orig_router->name=(char *)malloc(name_lsa->header->orig_router->length);
254 memcpy(new_name_lsa->header->orig_router->name,name_lsa->header->orig_router->name,name_lsa->header->orig_router->length);
255 new_name_lsa->header->orig_router->length=name_lsa->header->orig_router->length;
256 new_name_lsa->header->isValid=name_lsa->header->isValid;
257
258
259 new_name_lsa->name_prefix=(struct name_prefix *)malloc(sizeof(struct name_prefix )); //free
260 new_name_lsa->name_prefix->name=(char *)malloc(name_lsa->name_prefix->length);
261 memcpy(new_name_lsa->name_prefix->name,name_lsa->name_prefix->name,name_lsa->name_prefix->length);
262 new_name_lsa->name_prefix->length=name_lsa->name_prefix->length;
263
akmhoque7b791452012-10-30 11:24:56 -0500264 if ( nlsr->debugging )
265 {
266 printf("New Name LSA Added....\n");
267 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
268 }
269 if ( nlsr->detailed_logging )
270 {
271 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Name LSA Added....\n");
272 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
273 }
akmhoqueffacaa82012-09-13 17:48:30 -0500274 set_new_lsdb_version();
akmhoque7b791452012-10-30 11:24:56 -0500275 if ( nlsr->debugging )
276 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
277 if ( nlsr->detailed_logging )
278 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
akmhoqueffacaa82012-09-13 17:48:30 -0500279
akmhoque9e9fc722012-09-26 14:03:25 -0500280
akmhoquede61ba92012-09-20 22:19:12 -0500281 int num_next_hop=get_number_of_next_hop(new_name_lsa->header->orig_router->name);
akmhoquede61ba92012-09-20 22:19:12 -0500282 if ( num_next_hop < 0 )
akmhoque3560cb62012-09-09 10:52:30 -0500283 {
akmhoquede61ba92012-09-20 22:19:12 -0500284 int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,NO_NEXT_HOP,NULL,NULL);
akmhoqueffacaa82012-09-13 17:48:30 -0500285 if ( check == HT_NEW_ENTRY )
286 {
akmhoque7b791452012-10-30 11:24:56 -0500287 if ( nlsr->debugging )
288 printf("Added in npt \n");
289 if ( nlsr->detailed_logging )
290 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Added in npt \n");
akmhoqueffacaa82012-09-13 17:48:30 -0500291 }
akmhoque3560cb62012-09-09 10:52:30 -0500292 }
akmhoqueffacaa82012-09-13 17:48:30 -0500293 else
akmhoque3560cb62012-09-09 10:52:30 -0500294 {
akmhoquede61ba92012-09-20 22:19:12 -0500295 int *faces=malloc(num_next_hop*sizeof(int));
296 int *route_costs=malloc(num_next_hop*sizeof(int));
297 int next_hop=get_next_hop(new_name_lsa->header->orig_router->name,faces,route_costs);
akmhoque7b791452012-10-30 11:24:56 -0500298 if ( nlsr->debugging )
299 {
300 printf("Printing from install_name_lsa \n");
301 int j;
302 for(j=0;j<num_next_hop;j++)
303 printf("Face: %d Route Cost: %d \n",faces[j],route_costs[j]);
304 }
305 if ( nlsr->detailed_logging )
306 {
307 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Printing from install_name_lsa \n");
308 int j;
309 for(j=0;j<num_next_hop;j++)
310 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Face: %d Route Cost: %d \n",faces[j],route_costs[j]);
311 }
akmhoquede61ba92012-09-20 22:19:12 -0500312 int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,next_hop,faces,route_costs);
akmhoqueffacaa82012-09-13 17:48:30 -0500313 if ( check == HT_NEW_ENTRY )
314 {
akmhoque7b791452012-10-30 11:24:56 -0500315 if ( nlsr->debugging )
316 printf("Added in npt \n");
317 if ( nlsr->detailed_logging )
318 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Added in npt \n");
akmhoqueffacaa82012-09-13 17:48:30 -0500319 }
akmhoquede61ba92012-09-20 22:19:12 -0500320 free(faces);
321 free(route_costs);
akmhoqueffacaa82012-09-13 17:48:30 -0500322
akmhoque3560cb62012-09-09 10:52:30 -0500323 }
akmhoquede61ba92012-09-20 22:19:12 -0500324
akmhoque9e9fc722012-09-26 14:03:25 -0500325 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
326 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding name lsa\n");
327 write_log_for_name_lsa(new_name_lsa);
328 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
akmhoqueffacaa82012-09-13 17:48:30 -0500329
akmhoquede61ba92012-09-20 22:19:12 -0500330 free(time_stamp);
akmhoqueffacaa82012-09-13 17:48:30 -0500331
332 }
333 else if(res == HT_OLD_ENTRY)
334 {
335 new_name_lsa=e->data;
akmhoque14b3f342012-09-14 10:39:02 -0500336 if(strcmp(name_lsa->header->orig_time,new_name_lsa->header->orig_time)<0)
akmhoqueffacaa82012-09-13 17:48:30 -0500337 {
akmhoque7b791452012-10-30 11:24:56 -0500338 if ( nlsr->debugging )
339 printf("Older Adj LSA. Discarded... \n");
340 if ( nlsr->detailed_logging )
341 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Older Adj LSA. Discarded...\n");
akmhoque14b3f342012-09-14 10:39:02 -0500342 }
343 else if( strcmp(name_lsa->header->orig_time,new_name_lsa->header->orig_time) == 0 )
344 {
akmhoque7b791452012-10-30 11:24:56 -0500345 if ( nlsr->debugging )
346 printf("Duplicate Adj LSA. Discarded... \n");
347 if ( nlsr->detailed_logging )
348 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Duplicate Adj LSA. Discarded...\n");
akmhoqueffacaa82012-09-13 17:48:30 -0500349 }
350 else
351 {
352 if ( name_lsa->header->isValid == 0 )
353 {
354 // have to call to delete npt table entry
akmhoque3cced642012-09-24 16:20:20 -0500355 delete_npt_entry_by_router_and_name_prefix(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name);
akmhoqueffacaa82012-09-13 17:48:30 -0500356
357 if ( strcmp(name_lsa->header->orig_router->name,nlsr->router_name)!= 0)
358 {
akmhoque9e9fc722012-09-26 14:03:25 -0500359 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
360 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
361 write_log_for_name_lsa(new_name_lsa);
362 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
363
akmhoqueffacaa82012-09-13 17:48:30 -0500364 hashtb_delete(e);
akmhoque7b791452012-10-30 11:24:56 -0500365 if ( nlsr->debugging )
366 printf("isValid bit not set for Router %s so LSA Deleted from LSDB\n",name_lsa->header->orig_router->name);
367 if ( nlsr->detailed_logging )
368 writeLogg(__FILE__,__FUNCTION__,__LINE__,"isValid bit not set for Router %s so LSA Deleted from LSDB\n",name_lsa->header->orig_router->name);
akmhoqueffacaa82012-09-13 17:48:30 -0500369 }
370 else
371 {
372 new_name_lsa->header->isValid=name_lsa->header->isValid;
373 free(new_name_lsa->header->orig_time);
374 new_name_lsa->header->orig_time=(char *)malloc(strlen(name_lsa->header->orig_time)+1);
375 memset(new_name_lsa->header->orig_time,0,strlen(name_lsa->header->orig_time)+1);
376 memcpy(new_name_lsa->header->orig_time,name_lsa->header->orig_time,strlen(name_lsa->header->orig_time)+1);
377 }
akmhoque7b791452012-10-30 11:24:56 -0500378 if ( nlsr->debugging )
379 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
380 if ( nlsr->detailed_logging )
381 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
akmhoqueffacaa82012-09-13 17:48:30 -0500382 set_new_lsdb_version();
akmhoque7b791452012-10-30 11:24:56 -0500383 if ( nlsr->debugging )
384 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
385 if ( nlsr->detailed_logging )
386 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
akmhoqueffacaa82012-09-13 17:48:30 -0500387 }
388 else
389 {
390 int is_npt_update=0;
391 if ( strcmp(new_name_lsa->name_prefix->name,name_lsa->name_prefix->name) != 0 )
392 {
393 is_npt_update=1;
akmhoque3cced642012-09-24 16:20:20 -0500394 delete_npt_entry_by_router_and_name_prefix(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name);
akmhoqueffacaa82012-09-13 17:48:30 -0500395 }
396
397 // copying LSA content with header
akmhoque9e9fc722012-09-26 14:03:25 -0500398 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
399 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
400 write_log_for_name_lsa(new_name_lsa);
401 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
402
akmhoqueffacaa82012-09-13 17:48:30 -0500403
404 free(new_name_lsa->header->orig_time);
405 new_name_lsa->header->orig_time=(char *)malloc(strlen(name_lsa->header->orig_time)+1);
406 memset(new_name_lsa->header->orig_time,0,strlen(name_lsa->header->orig_time)+1);
407 memcpy(new_name_lsa->header->orig_time,name_lsa->header->orig_time,strlen(name_lsa->header->orig_time)+1);
408
409 new_name_lsa->header->isValid=name_lsa->header->isValid;
410
411 free(new_name_lsa->name_prefix->name);
412 free(new_name_lsa->name_prefix);
413 new_name_lsa->name_prefix=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
414 new_name_lsa->name_prefix->name=(char *)malloc(name_lsa->name_prefix->length);
415 memcpy(new_name_lsa->name_prefix->name,name_lsa->name_prefix->name,name_lsa->name_prefix->length);
416 new_name_lsa->name_prefix->length=name_lsa->name_prefix->length;
417
akmhoque9e9fc722012-09-26 14:03:25 -0500418
419 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
420 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding name lsa\n");
421 write_log_for_name_lsa(new_name_lsa);
422 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
423
akmhoque7b791452012-10-30 11:24:56 -0500424 if ( nlsr->debugging )
425 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
426 if ( nlsr->detailed_logging )
427 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
428
akmhoqueffacaa82012-09-13 17:48:30 -0500429 set_new_lsdb_version();
akmhoque7b791452012-10-30 11:24:56 -0500430
431 if ( nlsr->debugging )
432 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
433 if ( nlsr->detailed_logging )
434 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
435
akmhoqueffacaa82012-09-13 17:48:30 -0500436
437 if( is_npt_update == 1 )
438 {
akmhoquede61ba92012-09-20 22:19:12 -0500439 //struct hashtb *face_list;
440 int num_next_hop=get_number_of_next_hop(new_name_lsa->header->orig_router->name);
441 if ( num_next_hop < 0 )
akmhoqueffacaa82012-09-13 17:48:30 -0500442 {
akmhoquede61ba92012-09-20 22:19:12 -0500443
444 int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,NO_NEXT_HOP,NULL,NULL);
akmhoqueffacaa82012-09-13 17:48:30 -0500445 if ( check == HT_NEW_ENTRY )
446 {
akmhoque7b791452012-10-30 11:24:56 -0500447 if ( nlsr->debugging )
448 printf("Added in npt \n");
449 if ( nlsr->detailed_logging )
450 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Added in npt \n");
akmhoqueffacaa82012-09-13 17:48:30 -0500451 }
452 }
453 else
454 {
akmhoquede61ba92012-09-20 22:19:12 -0500455 int *faces=malloc(num_next_hop*sizeof(int));
456 int *route_costs=malloc(num_next_hop*sizeof(int));
457 int next_hop=get_next_hop(new_name_lsa->header->orig_router->name,faces,route_costs);
akmhoque7b791452012-10-30 11:24:56 -0500458
459 if ( nlsr->debugging )
460 {
461 printf("Printing from install_name_lsa \n");
462 int j;
463 for(j=0;j<num_next_hop;j++)
akmhoquede61ba92012-09-20 22:19:12 -0500464 printf("Face: %d Route Cost: %d \n",faces[j],route_costs[j]);
akmhoque7b791452012-10-30 11:24:56 -0500465 }
466 if ( nlsr->detailed_logging )
467 {
468 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Printing from install_name_lsa \n");
469 int j;
470 for(j=0;j<num_next_hop;j++)
471 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Face: %d Route Cost: %d \n",faces[j],route_costs[j]);
472 }
473
akmhoquede61ba92012-09-20 22:19:12 -0500474
475 int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,next_hop,faces,route_costs);
akmhoqueffacaa82012-09-13 17:48:30 -0500476 if ( check == HT_NEW_ENTRY )
477 {
akmhoque7b791452012-10-30 11:24:56 -0500478 if ( nlsr->debugging )
479 printf("Added in npt \n");
480 if ( nlsr->detailed_logging )
481 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Added in npt \n");
akmhoqueffacaa82012-09-13 17:48:30 -0500482 }
akmhoquede61ba92012-09-20 22:19:12 -0500483 free(faces);
484 free(route_costs);
485
akmhoqueffacaa82012-09-13 17:48:30 -0500486 }
akmhoquede61ba92012-09-20 22:19:12 -0500487
akmhoqueffacaa82012-09-13 17:48:30 -0500488 }
489 }
490 }
491
akmhoque3560cb62012-09-09 10:52:30 -0500492 }
akmhoque53f64222012-09-05 13:57:51 -0500493
akmhoqueffacaa82012-09-13 17:48:30 -0500494 hashtb_end(e);
akmhoque53f64222012-09-05 13:57:51 -0500495
akmhoqueffacaa82012-09-13 17:48:30 -0500496 free(key);
akmhoque53f64222012-09-05 13:57:51 -0500497}
498
akmhoque9e9fc722012-09-26 14:03:25 -0500499void
500write_log_for_name_lsa(struct nlsa *name_lsa)
501{
502
503 writeLogg(__FILE__,__FUNCTION__,__LINE__,"-----------Name LSA Content---------------\n");
504 writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router: %s\n",name_lsa->header->orig_router->name);
505 writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router Length: %d\n",name_lsa->header->orig_router->length);
akmhoque34b99f92012-09-27 12:24:27 -0500506 writeLogg(__FILE__,__FUNCTION__,__LINE__," LS Type: %d\n",name_lsa->header->ls_type);
507 writeLogg(__FILE__,__FUNCTION__,__LINE__," LS Id: %ld\n",name_lsa->header->ls_id);
508 writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Time: %s\n",name_lsa->header->orig_time);
509 writeLogg(__FILE__,__FUNCTION__,__LINE__," Is Valid: %d\n",name_lsa->header->isValid);
akmhoque9e9fc722012-09-26 14:03:25 -0500510 writeLogg(__FILE__,__FUNCTION__,__LINE__," LSA Data \n");
511 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name Prefix: %s\n",name_lsa->name_prefix->name);
512 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name Prefix Length: %d\n",name_lsa->name_prefix->length);
513 writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
514}
akmhoque53f64222012-09-05 13:57:51 -0500515
akmhoque03004e62012-09-06 01:12:28 -0500516void
517print_name_lsa(struct nlsa *name_lsa)
akmhoque53f64222012-09-05 13:57:51 -0500518{
akmhoque53f64222012-09-05 13:57:51 -0500519
akmhoque7b791452012-10-30 11:24:56 -0500520 if ( nlsr->debugging )
521 {
522 printf("-----------Name LSA Content---------------\n");
523 printf(" Origination Router : %s\n",name_lsa->header->orig_router->name);
524 printf(" Origination Router Length: %d\n",name_lsa->header->orig_router->length);
525 printf(" LS Type : %d\n",name_lsa->header->ls_type);
526 printf(" LS Id : %ld\n",name_lsa->header->ls_id);
527 printf(" Origination Time : %s\n",name_lsa->header->orig_time);
528 printf(" Is Valid : %d\n",name_lsa->header->isValid);
529 printf(" LSA Data \n");
530 printf(" Name Prefix: : %s\n",name_lsa->name_prefix->name);
531 printf(" Name Prefix Length : %d\n",name_lsa->name_prefix->length);
532
533 printf("\n");
534 }
akmhoquef71d9082012-08-22 12:51:53 -0400535}
536
537void
538print_name_lsdb(void)
539{
akmhoque7b791452012-10-30 11:24:56 -0500540 if ( nlsr->debugging )
541 printf("print_name_lsdb called \n");
akmhoque53f64222012-09-05 13:57:51 -0500542 int i, name_lsdb_element;
akmhoquef71d9082012-08-22 12:51:53 -0400543 struct nlsa *name_lsa;
544
545 struct hashtb_enumerator ee;
546 struct hashtb_enumerator *e = &ee;
547
548 hashtb_start(nlsr->lsdb->name_lsdb, e);
akmhoque53f64222012-09-05 13:57:51 -0500549 name_lsdb_element=hashtb_n(nlsr->lsdb->name_lsdb);
akmhoquef71d9082012-08-22 12:51:53 -0400550
akmhoque53f64222012-09-05 13:57:51 -0500551 for(i=0;i<name_lsdb_element;i++)
akmhoquef71d9082012-08-22 12:51:53 -0400552 {
akmhoque7b791452012-10-30 11:24:56 -0500553 if ( nlsr->debugging )
554 printf("-----------Name LSA (%d)---------------\n",i+1);
akmhoquef71d9082012-08-22 12:51:53 -0400555 name_lsa=e->data;
akmhoque53f64222012-09-05 13:57:51 -0500556 print_name_lsa(name_lsa);
akmhoquef71d9082012-08-22 12:51:53 -0400557 hashtb_next(e);
558 }
559
560 hashtb_end(e);
561
akmhoque3171d652012-11-13 11:44:33 -0600562 if ( nlsr->debugging )
563 printf("\n");
564 if ( nlsr->detailed_logging )
565 writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
akmhoque53f64222012-09-05 13:57:51 -0500566}
567
akmhoque03004e62012-09-06 01:12:28 -0500568
569void
570build_and_install_others_name_lsa(char *orig_router,int ls_type,long int ls_id,char *orig_time, int isValid,char *np)
akmhoque53f64222012-09-05 13:57:51 -0500571{
akmhoque7b791452012-10-30 11:24:56 -0500572 if ( nlsr->debugging )
573 printf("build_and_install_others_name_lsa called \n");
574 if ( nlsr->detailed_logging )
575 writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_others_name_lsa called \n");
akmhoque53f64222012-09-05 13:57:51 -0500576
akmhoque03004e62012-09-06 01:12:28 -0500577 struct nlsa *name_lsa=(struct nlsa *)malloc(sizeof( struct nlsa ));
578 build_others_name_lsa(name_lsa,orig_router,ls_type,ls_id,orig_time, isValid,np);
579 print_name_lsa(name_lsa);
580 install_name_lsa(name_lsa);
581 print_name_lsdb();
akmhoquede61ba92012-09-20 22:19:12 -0500582 print_npt();
akmhoque53f64222012-09-05 13:57:51 -0500583
akmhoque03004e62012-09-06 01:12:28 -0500584 free(name_lsa->header->orig_router->name);
585 free(name_lsa->header->orig_router);
586 free(name_lsa->header);
587 free(name_lsa->name_prefix->name);
588 free(name_lsa->name_prefix);
589 free(name_lsa);
akmhoque53f64222012-09-05 13:57:51 -0500590
591}
592
593void
akmhoque03004e62012-09-06 01:12:28 -0500594build_others_name_lsa(struct nlsa *name_lsa, char *orig_router,int ls_type,long int ls_id,char *orig_time, int isValid,char *np)
akmhoque53f64222012-09-05 13:57:51 -0500595{
akmhoque7b791452012-10-30 11:24:56 -0500596 if ( nlsr->debugging )
597 printf("build_others_name_lsa called\n");
598 if ( nlsr->detailed_logging )
599 writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_others_name_lsa called \n");
akmhoque53f64222012-09-05 13:57:51 -0500600
akmhoque03004e62012-09-06 01:12:28 -0500601 name_lsa->header=(struct nlsa_header *)malloc(sizeof(struct nlsa_header ));
602 name_lsa->header->ls_type=LS_TYPE_NAME;
akmhoque53f64222012-09-05 13:57:51 -0500603
akmhoque03004e62012-09-06 01:12:28 -0500604 name_lsa->header->orig_time=(char *)malloc(strlen(orig_time)+1);
605 memset(name_lsa->header->orig_time,0,strlen(orig_time)+1);
606 memcpy(name_lsa->header->orig_time,orig_time,strlen(orig_time)+1);
akmhoque53f64222012-09-05 13:57:51 -0500607
akmhoque03004e62012-09-06 01:12:28 -0500608 name_lsa->header->ls_id=ls_id;
609 name_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
610 name_lsa->header->orig_router->name=(char *)malloc(strlen(orig_router)+1);
611 memset(name_lsa->header->orig_router->name,0,strlen(orig_router)+1);
612 memcpy(name_lsa->header->orig_router->name,orig_router,strlen(orig_router)+1);
613 name_lsa->header->orig_router->length=strlen(orig_router)+1;
614 name_lsa->header->isValid=isValid;
akmhoque53f64222012-09-05 13:57:51 -0500615
akmhoque03004e62012-09-06 01:12:28 -0500616 name_lsa->name_prefix=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
617 name_lsa->name_prefix->name=(char *)malloc(strlen(np)+1);
618 memset(name_lsa->name_prefix->name,0,strlen(np)+1);
619 memcpy(name_lsa->name_prefix->name,np,strlen(np)+1);
620 name_lsa->name_prefix->length=strlen(np)+1;
akmhoquef71d9082012-08-22 12:51:53 -0400621}
akmhoqued79438d2012-08-27 13:31:42 -0500622
623
akmhoqueb77b95f2013-02-08 12:28:47 -0600624void
625make_cor_lsa_key(char *key,struct clsa *cor_lsa)
626{
627 memcpy(key+strlen(key),cor_lsa->header->orig_router->name,cor_lsa->header->orig_router->length);
628 memcpy(key+strlen(key),"/",1);
629 char ls_type[2];
630 sprintf(ls_type,"%d",cor_lsa->header->ls_type);
631 memcpy(key+strlen(key),ls_type,strlen(ls_type));
632 key[strlen(key)]='\0';
633}
akmhoqueffacaa82012-09-13 17:48:30 -0500634
635
akmhoque53f64222012-09-05 13:57:51 -0500636void
637make_adj_lsa_key(char *key,struct alsa *adj_lsa)
akmhoqued79438d2012-08-27 13:31:42 -0500638{
akmhoque53f64222012-09-05 13:57:51 -0500639 memcpy(key+strlen(key),adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->length);
640 memcpy(key+strlen(key),"/",1);
641 char ls_type[2];
642 sprintf(ls_type,"%d",adj_lsa->header->ls_type);
643 memcpy(key+strlen(key),ls_type,strlen(ls_type));
644 key[strlen(key)]='\0';
645}
646
akmhoque03004e62012-09-06 01:12:28 -0500647int
648build_and_install_adj_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
649{
akmhoqueffacaa82012-09-13 17:48:30 -0500650 if(flags == CCN_SCHEDULE_CANCEL)
651 {
652 return -1;
653 }
654
655 nlsr_lock();
656
akmhoque7b791452012-10-30 11:24:56 -0500657 if ( nlsr->debugging )
658 printf("build_and_install_adj_lsa called \n");
659 if ( nlsr->detailed_logging )
660 writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_adj_lsa called \n");
661
662 if ( nlsr->debugging )
663 printf("adj_build_flag = %d \n",nlsr->adj_build_flag);
664 if ( nlsr->detailed_logging )
665 writeLogg(__FILE__,__FUNCTION__,__LINE__,"adj_build_flag = %d \n",nlsr->adj_build_flag);
akmhoque03004e62012-09-06 01:12:28 -0500666
667 if(nlsr->adj_build_flag > 0)
668 {
akmhoque7b791452012-10-30 11:24:56 -0500669 if ( nlsr->debugging )
670 printf("is_adj_lsa_build = %d \n",is_adj_lsa_build());
671 if ( nlsr->detailed_logging )
672 writeLogg(__FILE__,__FUNCTION__,__LINE__,"is_adj_lsa_build = %d \n",is_adj_lsa_build());
673
akmhoque03004e62012-09-06 01:12:28 -0500674 if ( is_adj_lsa_build()> 0)
675 {
676 struct alsa *adj_lsa=(struct alsa *)malloc(sizeof( struct alsa ));
677 build_adj_lsa(adj_lsa);
678 install_adj_lsa(adj_lsa);
679
akmhoqueb77b95f2013-02-08 12:28:47 -0600680 char lst[2];
681 memset(lst,0,2);
682 sprintf(lst,"%d",LS_TYPE_ADJ);
683
684 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);
685 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);
686 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);
687
688 if ( nlsr->debugging )
689 printf("Adj LSA Repo Key: %s \n",repo_key);
690
691 char *key=(char *)malloc(adj_lsa->header->orig_router->length+2+2);
692 memset(key,0,adj_lsa->header->orig_router->length+2+2);
693 make_adj_lsa_key(key,adj_lsa);
694 if ( nlsr->debugging )
695 printf("Adj LSA: %s \n",key);
696
697 struct name_prefix *lsaid=(struct name_prefix *)malloc(sizeof(struct name_prefix));
698 lsaid->name=(char *)malloc(strlen(key)+1);
699 memset(lsaid->name, 0, strlen(key)+1);
700 memcpy(lsaid->name,key,strlen(key));
701 lsaid->length=strlen(key)+1;
702
703
704 write_adj_lsa_to_repo(repo_key, lsaid);
705
706 free(key);
707 free(repo_key);
708 free(lsaid->name);
709 free(lsaid);
710
711
712
akmhoque03004e62012-09-06 01:12:28 -0500713 free(adj_lsa->header->orig_router->name);
714 free(adj_lsa->header->orig_router);
715 free(adj_lsa->header->orig_time);
716 free(adj_lsa->header);
717 free(adj_lsa->body);
718 free(adj_lsa);
719 nlsr->adj_build_flag=0;
720 print_adj_lsdb();
721 }
722 else
723 {
akmhoque7b791452012-10-30 11:24:56 -0500724 if ( nlsr->debugging )
725 printf("Can not build adj LSA now\n");
726 if ( nlsr->detailed_logging )
727 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Can not build adj LSA now\n");
akmhoque03004e62012-09-06 01:12:28 -0500728 }
729 }
730 nlsr->is_build_adj_lsa_sheduled=0;
akmhoqueffacaa82012-09-13 17:48:30 -0500731
732 nlsr_unlock();
733
akmhoque03004e62012-09-06 01:12:28 -0500734 return 0;
735}
736
737
738void
739build_adj_lsa(struct alsa * adj_lsa)
740{
akmhoque7b791452012-10-30 11:24:56 -0500741 if ( nlsr->debugging )
742 printf("build_adj_lsa called \n");
743 if ( nlsr->detailed_logging )
744 writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_adj_lsa called \n");
akmhoque03004e62012-09-06 01:12:28 -0500745
746 int no_link=no_active_nbr();
akmhoque7b791452012-10-30 11:24:56 -0500747
akmhoque03004e62012-09-06 01:12:28 -0500748 adj_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
749 adj_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
750 adj_lsa->header->orig_router->name=(char *)malloc(strlen(nlsr->router_name)+1);
751 memset(adj_lsa->header->orig_router->name,0,strlen(nlsr->router_name)+1);
752 memcpy(adj_lsa->header->orig_router->name,nlsr->router_name,strlen(nlsr->router_name)+1);
753 adj_lsa->header->orig_router->length=strlen(nlsr->router_name)+1;
754
755 adj_lsa->header->ls_type=(unsigned)LS_TYPE_ADJ;
756
757 char *time_stamp=(char *)malloc(20);
758 memset(time_stamp,0,20);
759 get_current_timestamp_micro(time_stamp);
760
761 adj_lsa->header->orig_time=(char *)malloc(strlen(time_stamp)+1);
762 memset(adj_lsa->header->orig_time,0,strlen(time_stamp)+1);
763 memcpy(adj_lsa->header->orig_time,time_stamp,strlen(time_stamp)+1);
764 free(time_stamp);
765
akmhoque03004e62012-09-06 01:12:28 -0500766 adj_lsa->no_link=no_link;
akmhoque03004e62012-09-06 01:12:28 -0500767
768
769 struct ccn_charbuf *c=ccn_charbuf_create();
770 get_active_nbr_adj_data(c);
771 char *data=ccn_charbuf_as_string(c);
772
773 adj_lsa->body=(char *)malloc(strlen(data)+1);
774 memset(adj_lsa->body,0,strlen(data)+1);
775 memcpy(adj_lsa->body,(char *)data,strlen(data)+1);
776 ccn_charbuf_destroy(&c);
777
akmhoque03004e62012-09-06 01:12:28 -0500778 nlsr->adj_build_count++;
779
780
781}
782
783
akmhoque53f64222012-09-05 13:57:51 -0500784void
785install_adj_lsa(struct alsa * adj_lsa)
786{
akmhoqued79438d2012-08-27 13:31:42 -0500787
akmhoque7b791452012-10-30 11:24:56 -0500788 if ( nlsr->debugging )
789 printf("install_adj_lsa called \n");
790 if ( nlsr->detailed_logging )
791 writeLogg(__FILE__,__FUNCTION__,__LINE__,"install_adj_lsa called \n");
792
akmhoque03004e62012-09-06 01:12:28 -0500793
akmhoqueffacaa82012-09-13 17:48:30 -0500794 char *time_stamp=(char *)malloc(20);
795 memset(time_stamp,0,20);
796 get_current_timestamp_micro(time_stamp);
akmhoque53f64222012-09-05 13:57:51 -0500797
akmhoqueffacaa82012-09-13 17:48:30 -0500798
799 char *key=(char *)malloc(adj_lsa->header->orig_router->length+2+2);
800 memset(key,0,adj_lsa->header->orig_router->length+2);
801 make_adj_lsa_key(key,adj_lsa);
akmhoqueffacaa82012-09-13 17:48:30 -0500802
803 struct alsa *new_adj_lsa=(struct alsa*)malloc(sizeof(struct alsa ));
804
805 struct hashtb_enumerator ee;
806 struct hashtb_enumerator *e = &ee;
807 int res;
808
809 hashtb_start(nlsr->lsdb->adj_lsdb, e);
810 res = hashtb_seek(e, key, strlen(key), 0);
akmhoque53f64222012-09-05 13:57:51 -0500811
akmhoque03004e62012-09-06 01:12:28 -0500812
akmhoque53f64222012-09-05 13:57:51 -0500813
akmhoque62c0c192012-09-24 07:49:25 -0500814 if(res == HT_NEW_ENTRY)
akmhoque53f64222012-09-05 13:57:51 -0500815 {
akmhoque62c0c192012-09-24 07:49:25 -0500816 if ( adj_lsa->no_link > 0)
817 {
akmhoque3171d652012-11-13 11:44:33 -0600818 if ( nlsr->debugging )
819 printf("New ADJ LSA... Adding to LSDB\n");
820 if ( nlsr->detailed_logging )
821 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New ADJ LSA... Adding to LSDB\n");
akmhoque62c0c192012-09-24 07:49:25 -0500822 new_adj_lsa = e->data;
akmhoque53f64222012-09-05 13:57:51 -0500823
akmhoque62c0c192012-09-24 07:49:25 -0500824 new_adj_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
825 new_adj_lsa->header->ls_type=adj_lsa->header->ls_type;
826 new_adj_lsa->header->orig_time=(char *)malloc(strlen(adj_lsa->header->orig_time)+1);
827 memcpy(new_adj_lsa->header->orig_time,adj_lsa->header->orig_time,strlen(adj_lsa->header->orig_time)+1);
akmhoqueffacaa82012-09-13 17:48:30 -0500828
akmhoque62c0c192012-09-24 07:49:25 -0500829 new_adj_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
830 new_adj_lsa->header->orig_router->name=(char *)malloc(adj_lsa->header->orig_router->length);
831 memcpy(new_adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->length);
832 new_adj_lsa->header->orig_router->length=adj_lsa->header->orig_router->length;
akmhoque53f64222012-09-05 13:57:51 -0500833
akmhoque62c0c192012-09-24 07:49:25 -0500834 new_adj_lsa->no_link=adj_lsa->no_link;
akmhoqueffacaa82012-09-13 17:48:30 -0500835
akmhoque62c0c192012-09-24 07:49:25 -0500836 new_adj_lsa->body=(char *)malloc(strlen(adj_lsa->body)+1);
837 memset(new_adj_lsa->body,0,strlen(adj_lsa->body)+1);
838 memcpy(new_adj_lsa->body,adj_lsa->body,strlen(adj_lsa->body)+1);
839
840 add_next_hop_router(new_adj_lsa->header->orig_router->name);
841 add_next_hop_from_lsa_adj_body(new_adj_lsa->body,new_adj_lsa->no_link);
akmhoque9e9fc722012-09-26 14:03:25 -0500842
843 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
844 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding adj lsa\n");
845 write_log_for_adj_lsa(new_adj_lsa);
846 writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
akmhoque62c0c192012-09-24 07:49:25 -0500847 }
848 else
849 {
850 hashtb_delete(e);
851 }
akmhoque53f64222012-09-05 13:57:51 -0500852
akmhoque7b791452012-10-30 11:24:56 -0500853 if ( nlsr->debugging )
854 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
855 if ( nlsr->detailed_logging )
856 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
857
akmhoque53f64222012-09-05 13:57:51 -0500858 set_new_lsdb_version();
akmhoque7b791452012-10-30 11:24:56 -0500859
860 if ( nlsr->debugging )
861 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
862 if ( nlsr->detailed_logging )
863 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
864
akmhoqueffacaa82012-09-13 17:48:30 -0500865 }
866 else if(res == HT_OLD_ENTRY)
867 {
868 new_adj_lsa = e->data;
869 if(strcmp(adj_lsa->header->orig_time,new_adj_lsa->header->orig_time)<=0)
870 {
akmhoque7b791452012-10-30 11:24:56 -0500871 if ( nlsr->debugging )
872 printf("Older/Duplicate Adj LSA. Discarded...\n");
873 if ( nlsr->detailed_logging )
874 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Older/Duplicate Adj LSA. Discarded...\n");
akmhoqueffacaa82012-09-13 17:48:30 -0500875 }
876 else
877 {
akmhoqueffacaa82012-09-13 17:48:30 -0500878
akmhoque62c0c192012-09-24 07:49:25 -0500879 if ( adj_lsa->no_link > 0)
880 {
akmhoque9e9fc722012-09-26 14:03:25 -0500881 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
882 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
883 write_log_for_adj_lsa(new_adj_lsa);
884 writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
akmhoqueffacaa82012-09-13 17:48:30 -0500885
akmhoque62c0c192012-09-24 07:49:25 -0500886 free(new_adj_lsa->header->orig_time);
887 new_adj_lsa->header->orig_time=(char *)malloc(strlen(adj_lsa->header->orig_time)+1);
888 memcpy(new_adj_lsa->header->orig_time,adj_lsa->header->orig_time,strlen(adj_lsa->header->orig_time)+1);
889
890 new_adj_lsa->no_link=adj_lsa->no_link;
akmhoqueffacaa82012-09-13 17:48:30 -0500891
akmhoque62c0c192012-09-24 07:49:25 -0500892 new_adj_lsa->body=(char *)malloc(strlen(adj_lsa->body)+1);
893 memset(new_adj_lsa->body,0,strlen(adj_lsa->body)+1);
894 memcpy(new_adj_lsa->body,adj_lsa->body,strlen(adj_lsa->body)+1);
akmhoqueffacaa82012-09-13 17:48:30 -0500895
akmhoque62c0c192012-09-24 07:49:25 -0500896 add_next_hop_from_lsa_adj_body(new_adj_lsa->body,new_adj_lsa->no_link);
akmhoque9e9fc722012-09-26 14:03:25 -0500897
898 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
899 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding adj lsa\n");
900 write_log_for_adj_lsa(new_adj_lsa);
901 writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
akmhoque62c0c192012-09-24 07:49:25 -0500902 }
903 else
904 {
akmhoque9e9fc722012-09-26 14:03:25 -0500905 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
906 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
907 write_log_for_adj_lsa(new_adj_lsa);
908 writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
909
akmhoque62c0c192012-09-24 07:49:25 -0500910 hashtb_delete(e);
911 }
akmhoque7b791452012-10-30 11:24:56 -0500912
913 if ( nlsr->debugging )
914 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
915 if ( nlsr->detailed_logging )
916 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
917
akmhoqueffacaa82012-09-13 17:48:30 -0500918 set_new_lsdb_version();
akmhoque7b791452012-10-30 11:24:56 -0500919
920 if ( nlsr->debugging )
921 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
922 if ( nlsr->detailed_logging )
923 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
akmhoqueffacaa82012-09-13 17:48:30 -0500924 }
925
926 }
927 hashtb_end(e);
928
929 if ( !nlsr->is_route_calculation_scheduled )
930 {
931 nlsr->event_calculate_route = ccn_schedule_event(nlsr->sched, 1000000, &route_calculate, NULL, 0);
932 nlsr->is_route_calculation_scheduled=1;
akmhoque53f64222012-09-05 13:57:51 -0500933 }
934
akmhoque03004e62012-09-06 01:12:28 -0500935
akmhoqueffacaa82012-09-13 17:48:30 -0500936 free(key);
937
938 free(time_stamp);
akmhoque53f64222012-09-05 13:57:51 -0500939}
940
941void
akmhoque9e9fc722012-09-26 14:03:25 -0500942write_log_for_adj_lsa_body(const char *body, int no_link)
943{
944 int i=0;
945 char *lsa_data=(char *)malloc(strlen(body)+1);
946 memset( lsa_data,0,strlen(body)+1);
947 memcpy(lsa_data,body,strlen(body)+1);
948 char *sep="|";
949 char *rem;
950 char *rtr_id;
951 char *length;
952 char *face;
953 char *metric;
954
955 if(no_link >0 )
956 {
957 rtr_id=strtok_r(lsa_data,sep,&rem);
958 length=strtok_r(NULL,sep,&rem);
akmhoque866c2222013-02-12 10:49:33 -0600959 //face=strtok_r(NULL,sep,&rem);
akmhoque9e9fc722012-09-26 14:03:25 -0500960 metric=strtok_r(NULL,sep,&rem);
961
962 writeLogg(__FILE__,__FUNCTION__,__LINE__," Link %d \n",i+1);
akmhoque34b99f92012-09-27 12:24:27 -0500963 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router: %s \n",rtr_id);
964 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router Length: %s \n",length);
akmhoque866c2222013-02-12 10:49:33 -0600965 //writeLogg(__FILE__,__FUNCTION__,__LINE__," Connecting Face: %s \n",face);
akmhoque34b99f92012-09-27 12:24:27 -0500966 writeLogg(__FILE__,__FUNCTION__,__LINE__," Metric: %s \n",metric);
akmhoque9e9fc722012-09-26 14:03:25 -0500967
968
969 for(i=1;i<no_link;i++)
970 {
971 rtr_id=strtok_r(NULL,sep,&rem);
972 length=strtok_r(NULL,sep,&rem);
973 face=strtok_r(NULL,sep,&rem);
974 metric=strtok_r(NULL,sep,&rem);
975 writeLogg(__FILE__,__FUNCTION__,__LINE__," Link %d \n",i+1);
akmhoque34b99f92012-09-27 12:24:27 -0500976 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router: %s \n",rtr_id);
977 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adjacent Router Length: %s \n",length);
akmhoque866c2222013-02-12 10:49:33 -0600978 //writeLogg(__FILE__,__FUNCTION__,__LINE__," Connecting Face: %s \n",face);
akmhoque34b99f92012-09-27 12:24:27 -0500979 writeLogg(__FILE__,__FUNCTION__,__LINE__," Metric: %s \n",metric);
akmhoque9e9fc722012-09-26 14:03:25 -0500980
981 }
982 }
983
984 free(lsa_data);
985}
986
987
988void
989write_log_for_adj_lsa(struct alsa * adj_lsa)
990{
991 writeLogg(__FILE__,__FUNCTION__,__LINE__,"-----------Adj LSA Content---------------\n");
akmhoque34b99f92012-09-27 12:24:27 -0500992 writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router: %s\n",adj_lsa->header->orig_router->name);
993 writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Router Length: %d\n",adj_lsa->header->orig_router->length);
994 writeLogg(__FILE__,__FUNCTION__,__LINE__," LS Type: %d\n",adj_lsa->header->ls_type);
995 writeLogg(__FILE__,__FUNCTION__,__LINE__," Origination Time: %s\n",adj_lsa->header->orig_time);
akmhoque9e9fc722012-09-26 14:03:25 -0500996 writeLogg(__FILE__,__FUNCTION__,__LINE__," Lsa Data:\n");
akmhoque34b99f92012-09-27 12:24:27 -0500997 writeLogg(__FILE__,__FUNCTION__,__LINE__," No of Link: %d\n",adj_lsa->no_link);
akmhoque9e9fc722012-09-26 14:03:25 -0500998
999 write_log_for_adj_lsa_body(adj_lsa->body,adj_lsa->no_link);
1000
1001 writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
1002
1003}
1004
1005void
akmhoque53f64222012-09-05 13:57:51 -05001006print_adj_lsa_body(const char *body, int no_link)
1007{
1008 int i=0;
1009 char *lsa_data=(char *)malloc(strlen(body)+1);
1010 memset( lsa_data,0,strlen(body)+1);
1011 memcpy(lsa_data,body,strlen(body)+1);
1012 char *sep="|";
1013 char *rem;
1014 char *rtr_id;
1015 char *length;
1016 char *face;
1017 char *metric;
1018
akmhoque53f64222012-09-05 13:57:51 -05001019 if(no_link >0 )
1020 {
1021 rtr_id=strtok_r(lsa_data,sep,&rem);
1022 length=strtok_r(NULL,sep,&rem);
akmhoque866c2222013-02-12 10:49:33 -06001023 //face=strtok_r(NULL,sep,&rem);
akmhoque53f64222012-09-05 13:57:51 -05001024 metric=strtok_r(NULL,sep,&rem);
1025
akmhoqueb77b95f2013-02-08 12:28:47 -06001026 if ( nlsr->debugging ) {
1027 printf(" Link %d \n",i+1);
1028 printf(" Neighbor : %s \n",rtr_id);
1029 printf(" Neighbor Length : %s \n",length);
akmhoque866c2222013-02-12 10:49:33 -06001030 //printf(" Connecting Face : %s \n",face);
akmhoqueb77b95f2013-02-08 12:28:47 -06001031 printf(" Metric : %s \n",metric);
1032 }
akmhoque53f64222012-09-05 13:57:51 -05001033
1034 for(i=1;i<no_link;i++)
1035 {
1036 rtr_id=strtok_r(NULL,sep,&rem);
1037 length=strtok_r(NULL,sep,&rem);
1038 face=strtok_r(NULL,sep,&rem);
1039 metric=strtok_r(NULL,sep,&rem);
1040 printf(" Link %d \n",i+1);
1041 printf(" Neighbor : %s \n",rtr_id);
1042 printf(" Neighbor Length : %s \n",length);
akmhoque866c2222013-02-12 10:49:33 -06001043 //printf(" Connecting Face : %s \n",face);
akmhoque53f64222012-09-05 13:57:51 -05001044 printf(" Metric : %s \n",metric);
1045
1046 }
1047 }
1048
1049 free(lsa_data);
1050}
1051
1052void
1053print_adj_lsa(struct alsa * adj_lsa)
1054{
akmhoque7b791452012-10-30 11:24:56 -05001055 if ( nlsr->debugging )
1056 {
1057 printf("-----------ADJ LSA Content---------------\n");
1058 printf(" Origination Router : %s\n",adj_lsa->header->orig_router->name);
1059 printf(" Origination Router Length: %d\n",adj_lsa->header->orig_router->length);
1060 printf(" LS Type : %d\n",adj_lsa->header->ls_type);
1061 printf(" Origination Time : %s\n",adj_lsa->header->orig_time);
1062 printf(" Lsa Data:\n");
1063 printf(" No of Link : %d\n",adj_lsa->no_link);
akmhoque53f64222012-09-05 13:57:51 -05001064
akmhoque7b791452012-10-30 11:24:56 -05001065 print_adj_lsa_body(adj_lsa->body,adj_lsa->no_link);
1066 printf("\n");
1067 }
akmhoque53f64222012-09-05 13:57:51 -05001068
1069}
1070
1071void
1072print_adj_lsdb(void)
1073{
akmhoque7b791452012-10-30 11:24:56 -05001074 if ( nlsr->debugging )
1075 printf("print_name_lsdb called \n");
akmhoque53f64222012-09-05 13:57:51 -05001076 int i, adj_lsdb_element;
1077 struct alsa *adj_lsa;
1078
1079 struct hashtb_enumerator ee;
1080 struct hashtb_enumerator *e = &ee;
1081
1082 hashtb_start(nlsr->lsdb->adj_lsdb, e);
1083 adj_lsdb_element=hashtb_n(nlsr->lsdb->adj_lsdb);
1084
1085 for(i=0;i<adj_lsdb_element;i++)
1086 {
akmhoque7b791452012-10-30 11:24:56 -05001087 if ( nlsr->debugging )
1088 printf("-----------Adj LSA (%d)---------------\n",i+1);
akmhoque53f64222012-09-05 13:57:51 -05001089 adj_lsa=e->data;
1090 print_adj_lsa(adj_lsa);
1091 hashtb_next(e);
1092 }
1093
1094 hashtb_end(e);
1095
akmhoque3171d652012-11-13 11:44:33 -06001096 if ( nlsr->debugging )
1097 printf("\n");
1098 if ( nlsr->detailed_logging )
1099 writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
akmhoque53f64222012-09-05 13:57:51 -05001100}
1101
1102void
akmhoque03004e62012-09-06 01:12:28 -05001103build_and_install_others_adj_lsa(char *orig_router,int ls_type,char *orig_time, int no_link,char *data)
akmhoque53f64222012-09-05 13:57:51 -05001104{
akmhoque7b791452012-10-30 11:24:56 -05001105 if ( nlsr->debugging )
1106 printf("build_and_install_others_adj_lsa called \n");
1107 if ( nlsr->detailed_logging )
1108 writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_and_install_others_adj_lsa called \n");
akmhoque03004e62012-09-06 01:12:28 -05001109 struct alsa *adj_lsa=(struct alsa *)malloc(sizeof( struct alsa ));
1110 build_others_adj_lsa(adj_lsa,orig_router,ls_type,orig_time,no_link,data);
akmhoque03004e62012-09-06 01:12:28 -05001111 install_adj_lsa(adj_lsa);
1112
akmhoque53f64222012-09-05 13:57:51 -05001113
akmhoque03004e62012-09-06 01:12:28 -05001114 free(adj_lsa->header->orig_router->name);
1115 free(adj_lsa->header->orig_router);
1116 free(adj_lsa->header->orig_time);
1117 free(adj_lsa->header);
1118 free(adj_lsa->body);
1119 free(adj_lsa);
akmhoque53f64222012-09-05 13:57:51 -05001120
akmhoque03004e62012-09-06 01:12:28 -05001121 print_adj_lsdb();
akmhoque53f64222012-09-05 13:57:51 -05001122
akmhoque53f64222012-09-05 13:57:51 -05001123}
1124
akmhoque03004e62012-09-06 01:12:28 -05001125
akmhoque53f64222012-09-05 13:57:51 -05001126void
akmhoque03004e62012-09-06 01:12:28 -05001127build_others_adj_lsa(struct alsa *adj_lsa,char *orig_router,int ls_type,char *orig_time,int no_link,char *data)
akmhoque53f64222012-09-05 13:57:51 -05001128{
akmhoque7b791452012-10-30 11:24:56 -05001129 if ( nlsr->debugging )
1130 printf("build_others_adj_lsa called \n");
1131 if ( nlsr->detailed_logging )
1132 writeLogg(__FILE__,__FUNCTION__,__LINE__,"build_others_adj_lsa called \n");
akmhoque53f64222012-09-05 13:57:51 -05001133
akmhoque03004e62012-09-06 01:12:28 -05001134 /*Filling Up Header Data */
1135 adj_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
1136 adj_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
1137 adj_lsa->header->orig_router->name=(char *)malloc(strlen(orig_router)+1);
1138 memset(adj_lsa->header->orig_router->name,0,strlen(orig_router)+1);
1139 memcpy(adj_lsa->header->orig_router->name,orig_router,strlen(orig_router)+1);
akmhoque53f64222012-09-05 13:57:51 -05001140
akmhoque03004e62012-09-06 01:12:28 -05001141 adj_lsa->header->orig_router->length=strlen(orig_router)+1;
akmhoque53f64222012-09-05 13:57:51 -05001142
akmhoque53f64222012-09-05 13:57:51 -05001143
akmhoque03004e62012-09-06 01:12:28 -05001144 adj_lsa->header->ls_type=(unsigned)LS_TYPE_ADJ;
akmhoque53f64222012-09-05 13:57:51 -05001145
akmhoque03004e62012-09-06 01:12:28 -05001146 adj_lsa->header->orig_time=(char *)malloc(strlen(orig_time)+1);
1147 memset(adj_lsa->header->orig_time,0,strlen(orig_time)+1);
1148 memcpy(adj_lsa->header->orig_time,orig_time,strlen(orig_time)+1);
akmhoque53f64222012-09-05 13:57:51 -05001149
akmhoque03004e62012-09-06 01:12:28 -05001150 adj_lsa->no_link=no_link;
akmhoque53f64222012-09-05 13:57:51 -05001151
akmhoque03004e62012-09-06 01:12:28 -05001152 adj_lsa->body=(char *)malloc(strlen(data)+1);
1153 memset(adj_lsa->body,0,strlen(data)+1);
1154 memcpy(adj_lsa->body,(char *)data,strlen(data)+1);
akmhoque53f64222012-09-05 13:57:51 -05001155
akmhoque53f64222012-09-05 13:57:51 -05001156}
1157
akmhoque03004e62012-09-06 01:12:28 -05001158
akmhoque53f64222012-09-05 13:57:51 -05001159long int
1160get_name_lsdb_num_element(void)
1161{
1162 long int num_element;
1163
1164
1165 struct hashtb_enumerator ee;
1166 struct hashtb_enumerator *e = &ee;
1167
1168 hashtb_start(nlsr->lsdb->name_lsdb, e);
1169 num_element=hashtb_n(nlsr->lsdb->name_lsdb);
1170 hashtb_end(e);
1171
1172 return num_element;
1173}
1174
1175long int
1176get_adj_lsdb_num_element(void)
1177{
1178 long int num_element;
1179
1180
1181 struct hashtb_enumerator ee;
1182 struct hashtb_enumerator *e = &ee;
1183
1184 hashtb_start(nlsr->lsdb->adj_lsdb, e);
1185 num_element=hashtb_n(nlsr->lsdb->adj_lsdb);
1186 hashtb_end(e);
1187
1188 return num_element;
akmhoqued79438d2012-08-27 13:31:42 -05001189}
akmhoque03004e62012-09-06 01:12:28 -05001190
akmhoque03004e62012-09-06 01:12:28 -05001191
1192int
1193check_is_new_name_lsa(char *orig_router,char *lst,char *lsid,char *orig_time)
1194{
1195 int ret=0;
1196 struct ccn_charbuf *key=ccn_charbuf_create();
1197 ccn_charbuf_append_string(key,orig_router);
1198 ccn_charbuf_append_string(key,"/");
1199 ccn_charbuf_append_string(key,lst);
1200 ccn_charbuf_append_string(key,"/");
1201 ccn_charbuf_append_string(key,lsid);
1202
1203 int res;
1204 struct nlsa *name_lsa;
1205
1206 struct hashtb_enumerator ee;
1207 struct hashtb_enumerator *e = &ee;
1208
1209 hashtb_start(nlsr->lsdb->name_lsdb, e);
1210 res = hashtb_seek(e, ccn_charbuf_as_string(key), key->length, 0);
1211
1212 if( res == HT_NEW_ENTRY )
1213 {
1214 hashtb_delete(e);
1215 ret=1;
1216
1217 }
1218 else if(res == HT_OLD_ENTRY)
1219 {
1220 name_lsa=e->data;
1221 if( strcmp ( orig_time , name_lsa->header->orig_time ) > 0 )
1222 {
1223 ret=1;
1224 }
1225 }
1226
1227 hashtb_end(e);
1228
1229 ccn_charbuf_destroy(&key);
1230
1231 return ret;
1232}
1233
1234int
1235check_is_new_adj_lsa(char *orig_router,char *lst,char *orig_time)
1236{
1237 int ret=0;
1238 struct ccn_charbuf *key=ccn_charbuf_create();
1239 ccn_charbuf_append_string(key,orig_router);
1240 ccn_charbuf_append_string(key,"/");
1241 ccn_charbuf_append_string(key,lst);
1242
1243 int res;
1244 struct alsa *adj_lsa;
1245
1246 struct hashtb_enumerator ee;
1247 struct hashtb_enumerator *e = &ee;
1248
1249 hashtb_start(nlsr->lsdb->adj_lsdb, e);
1250 res = hashtb_seek(e, ccn_charbuf_as_string(key), key->length, 0);
1251
1252 if( res == HT_NEW_ENTRY )
1253 {
1254 hashtb_delete(e);
1255 ret=1;
1256
1257 }
1258 else if(res == HT_OLD_ENTRY)
1259 {
1260 adj_lsa=e->data;
1261 if( strcmp ( orig_time , adj_lsa->header->orig_time ) > 0 )
1262 {
1263 ret=1;
1264 }
1265 }
1266
1267 hashtb_end(e);
1268
1269 ccn_charbuf_destroy(&key);
1270
1271 return ret;
1272}
1273
akmhoqueb77b95f2013-02-08 12:28:47 -06001274int
1275check_is_new_cor_lsa(char *orig_router,char *lst,char *orig_time)
1276{
1277 int ret=0;
1278 struct ccn_charbuf *key=ccn_charbuf_create();
1279 ccn_charbuf_append_string(key,orig_router);
1280 ccn_charbuf_append_string(key,"/");
1281 ccn_charbuf_append_string(key,lst);
1282
1283 int res;
1284 struct clsa *cor_lsa;
1285
1286 struct hashtb_enumerator ee;
1287 struct hashtb_enumerator *e = &ee;
1288
1289 hashtb_start(nlsr->lsdb->cor_lsdb, e);
1290 res = hashtb_seek(e, ccn_charbuf_as_string(key), key->length, 0);
1291
1292 if( res == HT_NEW_ENTRY )
1293 {
1294 hashtb_delete(e);
1295 ret=1;
1296
1297 }
1298 else if(res == HT_OLD_ENTRY)
1299 {
1300 cor_lsa=e->data;
1301 if( strcmp ( orig_time , cor_lsa->header->orig_time ) > 0 )
1302 {
1303 ret=1;
1304 }
1305 }
1306
1307 hashtb_end(e);
1308
1309 ccn_charbuf_destroy(&key);
1310
1311 return ret;
1312}
1313
akmhoque03004e62012-09-06 01:12:28 -05001314void
1315get_name_lsa_data(struct ccn_charbuf *lsa_data, struct name_prefix *lsaId)
1316{
akmhoque7b791452012-10-30 11:24:56 -05001317 if ( nlsr->debugging )
1318 printf("get_name_lsa_data called \n");
1319 if ( nlsr->detailed_logging )
1320 writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_name_lsa_data called \n");
akmhoque03004e62012-09-06 01:12:28 -05001321
1322 struct nlsa *name_lsa=(struct nlsa*)malloc(sizeof(struct nlsa ));
1323
1324 struct hashtb_enumerator ee;
1325 struct hashtb_enumerator *e = &ee;
1326 int res;
1327
1328 hashtb_start(nlsr->lsdb->name_lsdb, e);
1329 res = hashtb_seek(e, lsaId->name, lsaId->length-1, 0);
1330
1331 if( res == HT_OLD_ENTRY )
1332 {
1333 name_lsa=e->data;
akmhoqueb77b95f2013-02-08 12:28:47 -06001334
akmhoque7b791452012-10-30 11:24:56 -05001335 if ( nlsr->debugging )
1336 printf("NAME LSA found \n");
1337 if ( nlsr->detailed_logging )
1338 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Name LSA found \n");
akmhoque03004e62012-09-06 01:12:28 -05001339
1340 ccn_charbuf_append_string(lsa_data,name_lsa->header->orig_router->name);
1341 ccn_charbuf_append_string(lsa_data,"|");
1342
1343 char *temp_length=(char *)malloc(20);
1344 memset(temp_length,0,20);
1345 sprintf(temp_length,"%d",name_lsa->header->orig_router->length);
1346 ccn_charbuf_append_string(lsa_data,temp_length);
1347 free(temp_length);
1348 ccn_charbuf_append_string(lsa_data,"|");
1349
1350 char *temp_ltype=(char *)malloc(20);
1351 memset(temp_ltype,0,20);
1352 sprintf(temp_ltype,"%d",name_lsa->header->ls_type);
1353 ccn_charbuf_append_string(lsa_data,temp_ltype);
1354 free(temp_ltype);
1355 ccn_charbuf_append_string(lsa_data,"|");
1356
1357 char *temp_lsid=(char *)malloc(20);
1358 memset(temp_lsid,0,20);
1359 sprintf(temp_lsid,"%ld",name_lsa->header->ls_id);
1360 ccn_charbuf_append_string(lsa_data,temp_lsid);
1361 free(temp_lsid);
1362 ccn_charbuf_append_string(lsa_data,"|");
1363
1364 ccn_charbuf_append_string(lsa_data,name_lsa->header->orig_time);
1365 ccn_charbuf_append_string(lsa_data,"|");
1366
1367 char *temp_valid=(char *)malloc(20);
1368 memset(temp_valid,0,20);
1369 sprintf(temp_valid,"%d",name_lsa->header->isValid);
1370 ccn_charbuf_append_string(lsa_data,temp_valid);
1371 free(temp_valid);
1372 ccn_charbuf_append_string(lsa_data,"|");
1373
1374 ccn_charbuf_append_string(lsa_data,name_lsa->name_prefix->name);
1375 ccn_charbuf_append_string(lsa_data,"|");
1376
1377 char *temp_npl=(char *)malloc(20);
1378 memset(temp_npl,0,20);
1379 sprintf(temp_npl,"%d",name_lsa->name_prefix->length);
1380 ccn_charbuf_append_string(lsa_data,temp_npl);
1381 free(temp_npl);
1382 ccn_charbuf_append_string(lsa_data,"|");
1383
1384 }
1385 else if(res == HT_NEW_ENTRY)
1386 {
1387 hashtb_delete(e);
1388 }
1389
1390 hashtb_end(e);
1391}
1392
1393void
1394get_adj_lsa_data(struct ccn_charbuf *lsa_data,struct name_prefix *lsaId)
1395{
akmhoque7b791452012-10-30 11:24:56 -05001396 if ( nlsr->debugging )
1397 printf("get_adj_lsa_data called \n");
1398 if ( nlsr->detailed_logging )
1399 writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_adj_lsa_data called \n");
akmhoque03004e62012-09-06 01:12:28 -05001400
1401 struct alsa *adj_lsa=(struct alsa*)malloc(sizeof(struct alsa ));
1402
1403 struct hashtb_enumerator ee;
1404 struct hashtb_enumerator *e = &ee;
1405 int res;
1406
1407 hashtb_start(nlsr->lsdb->adj_lsdb, e);
1408 res = hashtb_seek(e, lsaId->name, lsaId->length-1, 0);
1409
1410 if( res == HT_OLD_ENTRY )
1411 {
1412 adj_lsa=e->data;
akmhoque7b791452012-10-30 11:24:56 -05001413
1414 if ( nlsr->debugging )
1415 printf("Adj LSA found \n");
1416 if ( nlsr->detailed_logging )
1417 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Adj LSA found \n");
akmhoque03004e62012-09-06 01:12:28 -05001418
1419 ccn_charbuf_append_string(lsa_data,adj_lsa->header->orig_router->name);
1420 ccn_charbuf_append_string(lsa_data,"|");
1421
1422 char *temp_length=(char *)malloc(20);
1423 memset(temp_length,0,20);
1424 sprintf(temp_length,"%d",adj_lsa->header->orig_router->length);
1425 ccn_charbuf_append_string(lsa_data,temp_length);
akmhoque03004e62012-09-06 01:12:28 -05001426 ccn_charbuf_append_string(lsa_data,"|");
akmhoqueb77b95f2013-02-08 12:28:47 -06001427 free(temp_length);
akmhoque03004e62012-09-06 01:12:28 -05001428
1429 char *temp_ltype=(char *)malloc(20);
1430 memset(temp_ltype,0,20);
1431 sprintf(temp_ltype,"%d",adj_lsa->header->ls_type);
1432 ccn_charbuf_append_string(lsa_data,temp_ltype);
akmhoque03004e62012-09-06 01:12:28 -05001433 ccn_charbuf_append_string(lsa_data,"|");
akmhoqueb77b95f2013-02-08 12:28:47 -06001434 free(temp_ltype);
akmhoque03004e62012-09-06 01:12:28 -05001435
1436 ccn_charbuf_append_string(lsa_data,adj_lsa->header->orig_time);
1437 ccn_charbuf_append_string(lsa_data,"|");
1438
1439 char *temp_nl=(char *)malloc(20);
1440 memset(temp_nl,0,20);
1441 sprintf(temp_nl,"%d",adj_lsa->no_link);
1442 ccn_charbuf_append_string(lsa_data,temp_nl);
akmhoque03004e62012-09-06 01:12:28 -05001443 ccn_charbuf_append_string(lsa_data,"|");
akmhoqueb77b95f2013-02-08 12:28:47 -06001444 free(temp_nl);
akmhoque03004e62012-09-06 01:12:28 -05001445
1446 ccn_charbuf_append_string(lsa_data,adj_lsa->body);
1447
1448
1449 }
1450 else if(res == HT_NEW_ENTRY)
1451 {
1452 hashtb_delete(e);
1453 }
1454
1455 hashtb_end(e);
1456}
akmhoqueffacaa82012-09-13 17:48:30 -05001457
akmhoque3171d652012-11-13 11:44:33 -06001458void
1459make_name_lsa_invalid(struct name_prefix *np,int ls_type, long int ls_id)
1460{
1461
1462 if ( nlsr->debugging )
1463 printf("make_name_lsa_invalid called \n");
1464 if ( nlsr->detailed_logging )
1465 writeLogg(__FILE__,__FUNCTION__,__LINE__,"make_name_lsa_invalid called \n");
1466
1467
1468 char lst[2];
1469 memset(lst,0,2);
1470 sprintf(lst,"%d",ls_type);
1471
1472 char lsid[10];
1473 memset(lsid,0,10);
1474 sprintf(lsid,"%ld",ls_id);
1475
1476
1477 char *key=(char *)malloc(strlen(np->name)+1+strlen(lst)+1+strlen(lsid)+1);
1478 memset(key,0,strlen(np->name)+1+strlen(lst)+1+strlen(lsid)+1);
1479
1480
1481 make_name_lsa_key(key, np->name,ls_type,ls_id);
akmhoqueb77b95f2013-02-08 12:28:47 -06001482
1483 if ( nlsr->debugging )
1484 printf("Key:%s Length:%d\n",key,(int)strlen(key));
akmhoque3171d652012-11-13 11:44:33 -06001485
1486 struct nlsa *nlsa;
1487
1488 struct hashtb_enumerator ee;
1489 struct hashtb_enumerator *e = &ee;
1490
1491 int res;
1492
1493 hashtb_start(nlsr->lsdb->name_lsdb, e);
1494 res = hashtb_seek(e, key,strlen(key) , 0);
1495
1496 if( res == HT_OLD_ENTRY )
1497 {
1498 nlsa=e->data;
1499
1500 nlsa->header->isValid=0;
1501
1502 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
1503 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
1504 write_log_for_name_lsa(nlsa);
1505 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
1506
1507 hashtb_delete(e);
1508 }
1509 else if( res == HT_NEW_ENTRY )
1510 {
1511 hashtb_delete(e);
1512 }
1513 hashtb_end(e);
1514
1515 if ( nlsr->debugging )
1516 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1517 if ( nlsr->detailed_logging )
1518 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1519
1520 set_new_lsdb_version();
1521
1522 if ( nlsr->debugging )
1523 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1524 if ( nlsr->detailed_logging )
1525 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1526
1527}
1528
akmhoque866c2222013-02-12 10:49:33 -06001529//int
1530//delete_name_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
1531int
1532delete_name_lsa(char *orig_router, char *name_prefix)
akmhoqueda5b6832012-09-13 22:33:55 -05001533{
akmhoqueb77b95f2013-02-08 12:28:47 -06001534
akmhoque7b791452012-10-30 11:24:56 -05001535 if ( nlsr->debugging )
1536 printf("delete_name_lsa called \n");
1537 if ( nlsr->detailed_logging )
1538 writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_name_lsa called \n");
akmhoque866c2222013-02-12 10:49:33 -06001539 /*
akmhoqueda5b6832012-09-13 22:33:55 -05001540 if(flags == CCN_SCHEDULE_CANCEL)
1541 {
1542 return -1;
1543 }
1544
1545
1546
1547 nlsr_lock();
1548
akmhoque7b791452012-10-30 11:24:56 -05001549 if ( nlsr->debugging )
1550 printf("LSA Key: %s \n",(char *)ev->evdata);
1551 if ( nlsr->detailed_logging )
1552 writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Key: %s \n",(char *)ev->evdata);
akmhoqueda5b6832012-09-13 22:33:55 -05001553
1554 struct nlsa *nlsa;
1555
1556 struct hashtb_enumerator ee;
1557 struct hashtb_enumerator *e = &ee;
1558
1559 int res;
1560
1561 hashtb_start(nlsr->lsdb->name_lsdb, e);
1562 res = hashtb_seek(e, (char *)ev->evdata, strlen((char *)ev->evdata), 0);
1563
1564 if( res == HT_OLD_ENTRY )
1565 {
1566 nlsa=e->data;
akmhoque866c2222013-02-12 10:49:33 -06001567 */
1568 delete_npt_entry_by_router_and_name_prefix(orig_router, name_prefix);
1569 /*
akmhoque9e9fc722012-09-26 14:03:25 -05001570 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
1571 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
1572 write_log_for_name_lsa(nlsa);
1573 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
1574
akmhoqueda5b6832012-09-13 22:33:55 -05001575 hashtb_delete(e);
1576 }
akmhoque3cced642012-09-24 16:20:20 -05001577 else if( res == HT_NEW_ENTRY )
akmhoqueda5b6832012-09-13 22:33:55 -05001578 {
akmhoqueda5b6832012-09-13 22:33:55 -05001579 hashtb_delete(e);
1580 }
1581 hashtb_end(e);
akmhoque866c2222013-02-12 10:49:33 -06001582 */
akmhoqueda5b6832012-09-13 22:33:55 -05001583
akmhoque7b791452012-10-30 11:24:56 -05001584 if ( nlsr->debugging )
1585 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1586 if ( nlsr->detailed_logging )
1587 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1588
akmhoqueda5b6832012-09-13 22:33:55 -05001589 set_new_lsdb_version();
akmhoque7b791452012-10-30 11:24:56 -05001590
1591 if ( nlsr->debugging )
1592 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1593 if ( nlsr->detailed_logging )
1594 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
akmhoqueda5b6832012-09-13 22:33:55 -05001595
akmhoque866c2222013-02-12 10:49:33 -06001596 //nlsr_unlock();
akmhoqueda5b6832012-09-13 22:33:55 -05001597
1598 return 0;
1599}
1600
akmhoque866c2222013-02-12 10:49:33 -06001601//int
1602//delete_adj_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
1603int delete_adj_lsa()
akmhoqueda5b6832012-09-13 22:33:55 -05001604{
akmhoque866c2222013-02-12 10:49:33 -06001605
akmhoque7b791452012-10-30 11:24:56 -05001606 if ( nlsr->debugging )
1607 printf("delete_adj_lsa called \n");
1608 if ( nlsr->detailed_logging )
1609 writeLogg(__FILE__,__FUNCTION__,__LINE__,"delete_adj_lsa called \n");
akmhoque866c2222013-02-12 10:49:33 -06001610
1611 /*
akmhoqueda5b6832012-09-13 22:33:55 -05001612 if(flags == CCN_SCHEDULE_CANCEL)
1613 {
1614 return -1;
1615 }
1616 nlsr_lock();
1617
akmhoque7b791452012-10-30 11:24:56 -05001618 if ( nlsr->debugging )
1619 printf("LSA Key: %s \n",(char *)ev->evdata);
1620 if ( nlsr->detailed_logging )
1621 writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Key: %s \n",(char *)ev->evdata);
akmhoqueda5b6832012-09-13 22:33:55 -05001622
akmhoque9e9fc722012-09-26 14:03:25 -05001623 struct alsa *alsa;
akmhoqueda5b6832012-09-13 22:33:55 -05001624 struct hashtb_enumerator ee;
1625 struct hashtb_enumerator *e = &ee;
1626 int res;
1627
1628 hashtb_start(nlsr->lsdb->adj_lsdb, e);
1629 res = hashtb_seek(e, (char *)ev->evdata, strlen((char *)ev->evdata), 0);
1630
1631 if( res == HT_OLD_ENTRY )
1632 {
akmhoque9e9fc722012-09-26 14:03:25 -05001633 alsa=e->data;
1634 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
1635 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
1636 write_log_for_adj_lsa(alsa);
1637 writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
1638
akmhoqueda5b6832012-09-13 22:33:55 -05001639 hashtb_delete(e);
1640 }
1641 else if( res == HT_OLD_ENTRY )
1642 {
1643 hashtb_delete(e);
1644 }
1645 hashtb_end(e);
akmhoque866c2222013-02-12 10:49:33 -06001646 */
akmhoqueda5b6832012-09-13 22:33:55 -05001647
akmhoque7b791452012-10-30 11:24:56 -05001648 if ( nlsr->debugging )
1649 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1650 if ( nlsr->detailed_logging )
1651 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1652
akmhoqueda5b6832012-09-13 22:33:55 -05001653 set_new_lsdb_version();
akmhoque7b791452012-10-30 11:24:56 -05001654
1655 if ( nlsr->debugging )
1656 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1657 if ( nlsr->detailed_logging )
1658 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1659
akmhoqueda5b6832012-09-13 22:33:55 -05001660
1661 if ( !nlsr->is_route_calculation_scheduled)
1662 {
1663 nlsr->event_calculate_route = ccn_schedule_event(nlsr->sched, 1000000, &route_calculate, NULL, 0);
1664 nlsr->is_route_calculation_scheduled=1;
1665 }
1666
akmhoque866c2222013-02-12 10:49:33 -06001667 //nlsr_unlock();
akmhoqueda5b6832012-09-13 22:33:55 -05001668
1669 return 0;
1670}
1671
akmhoqueffacaa82012-09-13 17:48:30 -05001672void
1673refresh_name_lsdb(void)
1674{
akmhoque7b791452012-10-30 11:24:56 -05001675 if ( nlsr->debugging )
1676 printf("refresh_name_lsdb called \n");
1677 if ( nlsr->detailed_logging )
1678 writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_name_lsdb called \n");
akmhoqueffacaa82012-09-13 17:48:30 -05001679
1680 char *time_stamp=(char *)malloc(20);
1681 memset(time_stamp,0,20);
1682 get_current_timestamp_micro(time_stamp);
1683
1684 long int lsa_life_time;
1685
1686 int i, name_lsdb_element;
1687 struct nlsa *name_lsa;
1688
1689 struct hashtb_enumerator ee;
1690 struct hashtb_enumerator *e = &ee;
1691
1692 hashtb_start(nlsr->lsdb->name_lsdb, e);
1693 name_lsdb_element=hashtb_n(nlsr->lsdb->name_lsdb);
1694
1695 for(i=0;i<name_lsdb_element;i++)
1696 {
1697 name_lsa=e->data;
1698
1699 lsa_life_time=get_time_diff(time_stamp,name_lsa->header->orig_time);
akmhoque7b791452012-10-30 11:24:56 -05001700 if ( nlsr->debugging )
1701 printf("LSA Life Time: %ld \n",lsa_life_time);
1702 if ( nlsr->detailed_logging )
1703 writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Life Time: %ld \n",lsa_life_time);
akmhoqueda5b6832012-09-13 22:33:55 -05001704
1705 if ( strcmp(name_lsa->header->orig_router->name,nlsr->router_name) == 0)
1706 {
1707 if ( lsa_life_time > nlsr->lsa_refresh_time )
1708 {
akmhoque14b3f342012-09-14 10:39:02 -05001709 if ( name_lsa->header->isValid == NAME_LSA_VALID )
1710 {
akmhoque7b791452012-10-30 11:24:56 -05001711 if ( nlsr->debugging )
1712 printf("Own Name LSA need to be refrshed\n");
1713 if ( nlsr->detailed_logging )
1714 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Own Name LSA need to be refrshed\n");
akmhoquea98c2142012-10-25 15:22:24 -05001715
1716 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
1717 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
1718 write_log_for_name_lsa(name_lsa);
1719 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
1720
1721
akmhoque14b3f342012-09-14 10:39:02 -05001722 char *current_time_stamp=(char *)malloc(20);
1723 memset(current_time_stamp,0,20);
1724 get_current_timestamp_micro(current_time_stamp);
akmhoqueda5b6832012-09-13 22:33:55 -05001725
akmhoque14b3f342012-09-14 10:39:02 -05001726 free(name_lsa->header->orig_time);
1727 name_lsa->header->orig_time=(char *)malloc(strlen(current_time_stamp)+1); //free
1728 memset(name_lsa->header->orig_time,0,strlen(current_time_stamp)+1);
1729 memcpy(name_lsa->header->orig_time,current_time_stamp,strlen(current_time_stamp)+1);
akmhoquea98c2142012-10-25 15:22:24 -05001730
1731 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
1732 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding name lsa\n");
1733 write_log_for_name_lsa(name_lsa);
1734 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
akmhoqueda5b6832012-09-13 22:33:55 -05001735
akmhoque14b3f342012-09-14 10:39:02 -05001736 free(current_time_stamp);
akmhoque866c2222013-02-12 10:49:33 -06001737
1738 hashtb_next(e);
akmhoque14b3f342012-09-14 10:39:02 -05001739 }
1740 else
akmhoque866c2222013-02-12 10:49:33 -06001741 { /*
akmhoque14b3f342012-09-14 10:39:02 -05001742 char lst[2];
1743 memset(lst,0,2);
1744 sprintf(lst,"%d",name_lsa->header->ls_type);
1745
1746 char lsid[10];
1747 memset(lsid,0,10);
1748 sprintf(lsid,"%ld",name_lsa->header->ls_id);
1749
akmhoque866c2222013-02-12 10:49:33 -06001750
akmhoque14b3f342012-09-14 10:39:02 -05001751 char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
1752 memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
1753
1754
1755 make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
akmhoque14b3f342012-09-14 10:39:02 -05001756
1757 nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_name_lsa, (void *)key, 0);
akmhoque866c2222013-02-12 10:49:33 -06001758 */
1759 delete_name_lsa(name_lsa->header->orig_router->name, name_lsa->name_prefix->name);
1760 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
1761 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
1762 write_log_for_name_lsa(name_lsa);
1763 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
1764 hashtb_delete(e);
1765 i++;
akmhoque14b3f342012-09-14 10:39:02 -05001766 }
akmhoqueda5b6832012-09-13 22:33:55 -05001767
akmhoque7b791452012-10-30 11:24:56 -05001768 if ( nlsr->debugging )
1769 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1770 if ( nlsr->detailed_logging )
1771 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1772
akmhoqueda5b6832012-09-13 22:33:55 -05001773 set_new_lsdb_version();
akmhoque7b791452012-10-30 11:24:56 -05001774
1775 if ( nlsr->debugging )
1776 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1777 if ( nlsr->detailed_logging )
1778 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1779
1780
akmhoqueda5b6832012-09-13 22:33:55 -05001781
1782 print_name_lsdb();
akmhoque866c2222013-02-12 10:49:33 -06001783 }
1784 else
1785 {
1786 hashtb_next(e);
akmhoqueda5b6832012-09-13 22:33:55 -05001787 }
1788 }
1789 else
1790 {
1791 if ( lsa_life_time > nlsr->router_dead_interval )
1792 {
akmhoque7b791452012-10-30 11:24:56 -05001793 if ( nlsr->debugging )
1794 printf("Others Name LSA need to be deleted\n");
1795 if ( nlsr->detailed_logging )
1796 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Others Name LSA need to be deleted\n");
akmhoqueda5b6832012-09-13 22:33:55 -05001797
akmhoque866c2222013-02-12 10:49:33 -06001798 /*char lst[2];
akmhoqueda5b6832012-09-13 22:33:55 -05001799 memset(lst,0,2);
1800 sprintf(lst,"%d",name_lsa->header->ls_type);
1801
1802 char lsid[10];
1803 memset(lsid,0,10);
1804 sprintf(lsid,"%ld",name_lsa->header->ls_id);
1805
1806
1807 char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
1808 memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
1809
1810
1811 make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
akmhoqueda5b6832012-09-13 22:33:55 -05001812
1813 nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_name_lsa, (void *)key, 0);
akmhoque866c2222013-02-12 10:49:33 -06001814 */
1815 delete_name_lsa(name_lsa->header->orig_router->name, name_lsa->name_prefix->name);
1816 writeLogg(__FILE__,__FUNCTION__,__LINE__," Name-LSA\n");
1817 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting name lsa\n");
1818 write_log_for_name_lsa(name_lsa);
1819 writeLogg(__FILE__,__FUNCTION__,__LINE__," name_lsa_end\n");
1820 hashtb_delete(e);
1821 i++;
1822 }
1823 else
1824 {
1825 hashtb_next(e);
akmhoqueda5b6832012-09-13 22:33:55 -05001826 }
1827 }
akmhoque866c2222013-02-12 10:49:33 -06001828 /*else
1829 {
1830 hashtb_next(e);
1831 }*/
akmhoqueffacaa82012-09-13 17:48:30 -05001832 }
1833
1834 hashtb_end(e);
1835
1836 free(time_stamp);
akmhoqueda5b6832012-09-13 22:33:55 -05001837
akmhoqueffacaa82012-09-13 17:48:30 -05001838
1839}
1840
akmhoqueda5b6832012-09-13 22:33:55 -05001841void
akmhoqueffacaa82012-09-13 17:48:30 -05001842refresh_adj_lsdb(void)
1843{
akmhoqueffacaa82012-09-13 17:48:30 -05001844
akmhoque7b791452012-10-30 11:24:56 -05001845 if ( nlsr->debugging )
1846 printf("refresh_adj_lsdb called \n");
1847 if ( nlsr->detailed_logging )
1848 writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_adj_lsdb called \n");
akmhoqueda5b6832012-09-13 22:33:55 -05001849
akmhoqueffacaa82012-09-13 17:48:30 -05001850 char *time_stamp=(char *)malloc(20);
1851 memset(time_stamp,0,20);
1852 get_current_timestamp_micro(time_stamp);
1853
1854 long int lsa_life_time;
1855
1856 int i, adj_lsdb_element;
1857 struct alsa *adj_lsa;
1858
1859 struct hashtb_enumerator ee;
1860 struct hashtb_enumerator *e = &ee;
1861
1862 hashtb_start(nlsr->lsdb->adj_lsdb, e);
1863 adj_lsdb_element=hashtb_n(nlsr->lsdb->adj_lsdb);
1864
1865 for(i=0;i<adj_lsdb_element;i++)
1866 {
1867 adj_lsa=e->data;
1868
akmhoqueb77b95f2013-02-08 12:28:47 -06001869 lsa_life_time=get_time_diff(time_stamp,adj_lsa->header->orig_time);
akmhoque7b791452012-10-30 11:24:56 -05001870
1871 if ( nlsr->debugging )
1872 printf("LSA Life Time: %ld \n",lsa_life_time);
1873 if ( nlsr->detailed_logging )
1874 writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Life Time: %ld \n",lsa_life_time);
akmhoqueffacaa82012-09-13 17:48:30 -05001875
akmhoqueda5b6832012-09-13 22:33:55 -05001876 if ( strcmp(adj_lsa->header->orig_router->name,nlsr->router_name) == 0)
1877 {
1878 if ( lsa_life_time > nlsr->lsa_refresh_time )
1879 {
akmhoque7b791452012-10-30 11:24:56 -05001880 if ( nlsr->debugging )
1881 printf("Own Adj LSA need to be refrshed\n");
1882 if ( nlsr->detailed_logging )
1883 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Own Adj LSA need to be refrshed\n");
akmhoqueda5b6832012-09-13 22:33:55 -05001884
akmhoquea98c2142012-10-25 15:22:24 -05001885 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
1886 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
1887 write_log_for_adj_lsa(adj_lsa);
1888 writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
1889
akmhoqueda5b6832012-09-13 22:33:55 -05001890 char *current_time_stamp=(char *)malloc(20);
1891 memset(current_time_stamp,0,20);
1892 get_current_timestamp_micro(current_time_stamp);
1893
1894 free(adj_lsa->header->orig_time);
1895 adj_lsa->header->orig_time=(char *)malloc(strlen(current_time_stamp)+1); //free
1896 memset(adj_lsa->header->orig_time,0,strlen(current_time_stamp)+1);
1897 memcpy(adj_lsa->header->orig_time,current_time_stamp,strlen(current_time_stamp)+1);
1898
1899 free(current_time_stamp);
1900
akmhoquea98c2142012-10-25 15:22:24 -05001901 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
1902 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding adj lsa\n");
1903 write_log_for_adj_lsa(adj_lsa);
1904 writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
akmhoqueda5b6832012-09-13 22:33:55 -05001905
akmhoque7b791452012-10-30 11:24:56 -05001906 if ( nlsr->debugging )
1907 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1908 if ( nlsr->detailed_logging )
1909 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1910
akmhoqueda5b6832012-09-13 22:33:55 -05001911 set_new_lsdb_version();
akmhoque7b791452012-10-30 11:24:56 -05001912
1913 if ( nlsr->debugging )
1914 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
1915 if ( nlsr->detailed_logging )
1916 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
akmhoqueda5b6832012-09-13 22:33:55 -05001917
1918 print_adj_lsdb();
akmhoque866c2222013-02-12 10:49:33 -06001919
1920
akmhoqueda5b6832012-09-13 22:33:55 -05001921 }
akmhoque866c2222013-02-12 10:49:33 -06001922
1923 hashtb_next(e);
akmhoqueda5b6832012-09-13 22:33:55 -05001924 }
1925 else
1926 {
1927 if ( lsa_life_time > nlsr->router_dead_interval )
1928 {
akmhoque7b791452012-10-30 11:24:56 -05001929
1930 if ( nlsr->debugging )
1931 printf("Others Adj LSA need to be deleted\n");
1932 if ( nlsr->detailed_logging )
1933 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Others Adj LSA need to be deleted\n");
akmhoque866c2222013-02-12 10:49:33 -06001934 /*
akmhoqueda5b6832012-09-13 22:33:55 -05001935 char *key=(char *)malloc(adj_lsa->header->orig_router->length+2+2);
1936 memset(key,0,adj_lsa->header->orig_router->length+2);
1937 make_adj_lsa_key(key,adj_lsa);
akmhoqueb77b95f2013-02-08 12:28:47 -06001938
akmhoqueda5b6832012-09-13 22:33:55 -05001939 nlsr->event = ccn_schedule_event(nlsr->sched, 10, &delete_adj_lsa, (void *)key, 0);
akmhoque866c2222013-02-12 10:49:33 -06001940 */
1941
1942 writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
1943 writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
1944 write_log_for_adj_lsa(adj_lsa);
1945 writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
1946 delete_adj_lsa();
1947 hashtb_delete(e);
1948 i++;
1949
1950 }
1951 else
1952 {
1953 hashtb_next(e);
akmhoqueda5b6832012-09-13 22:33:55 -05001954 }
1955 }
1956
1957
1958
akmhoque866c2222013-02-12 10:49:33 -06001959 //hashtb_next(e);
akmhoqueffacaa82012-09-13 17:48:30 -05001960 }
1961
1962 hashtb_end(e);
1963
1964 free(time_stamp);
akmhoqueffacaa82012-09-13 17:48:30 -05001965}
1966
akmhoqueb77b95f2013-02-08 12:28:47 -06001967
1968void
1969refresh_cor_lsdb(void)
1970{
1971
1972 if ( nlsr->debugging )
1973 printf("refresh_cor_lsdb called \n");
1974 if ( nlsr->detailed_logging )
1975 writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_cor_lsdb called \n");
1976
1977 char *time_stamp=(char *)malloc(20);
1978 memset(time_stamp,0,20);
1979 get_current_timestamp_micro(time_stamp);
1980
1981 long int lsa_life_time;
1982
1983 int i, cor_lsdb_element;
1984 struct clsa *cor_lsa;
1985
1986 struct hashtb_enumerator ee;
1987 struct hashtb_enumerator *e = &ee;
1988
1989 hashtb_start(nlsr->lsdb->cor_lsdb, e);
1990 cor_lsdb_element=hashtb_n(nlsr->lsdb->cor_lsdb);
1991
1992 for(i=0;i<cor_lsdb_element;i++)
1993 {
1994 cor_lsa=e->data;
1995
1996 lsa_life_time=get_time_diff(time_stamp,cor_lsa->header->orig_time);
1997
1998 if ( nlsr->debugging )
1999 printf("LSA Life Time: %ld \n",lsa_life_time);
2000 if ( nlsr->detailed_logging )
2001 writeLogg(__FILE__,__FUNCTION__,__LINE__,"LSA Life Time: %ld \n",lsa_life_time);
2002
2003 if ( strcmp(cor_lsa->header->orig_router->name,nlsr->router_name) == 0)
2004 {
2005 if ( lsa_life_time > nlsr->lsa_refresh_time )
2006 {
2007 if ( nlsr->debugging )
2008 printf("Own Cor LSA need to be refrshed\n");
2009 if ( nlsr->detailed_logging )
2010 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Own Cor LSA need to be refrshed\n");
2011
2012 //writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
2013 //writeLogg(__FILE__,__FUNCTION__,__LINE__," Deleting adj lsa\n");
2014 //write_log_for_adj_lsa(adj_lsa);
2015 //writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
2016
2017 char *current_time_stamp=(char *)malloc(20);
2018 memset(current_time_stamp,0,20);
2019 get_current_timestamp_micro(current_time_stamp);
2020
2021 free(cor_lsa->header->orig_time);
2022 cor_lsa->header->orig_time=(char *)malloc(strlen(current_time_stamp)+1); //free
2023 memset(cor_lsa->header->orig_time,0,strlen(current_time_stamp)+1);
2024 memcpy(cor_lsa->header->orig_time,current_time_stamp,strlen(current_time_stamp)+1);
2025
2026 free(current_time_stamp);
2027
2028 //writeLogg(__FILE__,__FUNCTION__,__LINE__," Adj-LSA\n");
2029 //writeLogg(__FILE__,__FUNCTION__,__LINE__," Adding adj lsa\n");
2030 //write_log_for_adj_lsa(adj_lsa);
2031 //writeLogg(__FILE__,__FUNCTION__,__LINE__," adj_lsa_end\n");
2032
2033 if ( nlsr->debugging )
2034 printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
2035 if ( nlsr->detailed_logging )
2036 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
2037
2038 set_new_lsdb_version();
2039
2040 if ( nlsr->debugging )
2041 printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
2042 if ( nlsr->detailed_logging )
2043 writeLogg(__FILE__,__FUNCTION__,__LINE__,"New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
2044
2045 print_adj_lsdb();
akmhoque866c2222013-02-12 10:49:33 -06002046 }
2047
2048 hashtb_next(e);
akmhoqueb77b95f2013-02-08 12:28:47 -06002049 }
2050 else
2051 {
2052 if ( lsa_life_time > nlsr->router_dead_interval )
2053 {
2054
2055 if ( nlsr->debugging )
2056 printf("Others Adj LSA need to be deleted\n");
2057 if ( nlsr->detailed_logging )
2058 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Others Adj LSA need to be deleted\n");
2059
2060 hashtb_delete(e);
2061 i++;
2062 }
akmhoque866c2222013-02-12 10:49:33 -06002063 else
2064 {
2065 hashtb_next(e);
2066 }
akmhoqueb77b95f2013-02-08 12:28:47 -06002067 }
2068
2069
akmhoque866c2222013-02-12 10:49:33 -06002070
akmhoqueb77b95f2013-02-08 12:28:47 -06002071 }
2072
2073 hashtb_end(e);
2074
2075 free(time_stamp);
2076}
2077
akmhoqueffacaa82012-09-13 17:48:30 -05002078int
2079refresh_lsdb(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
2080{
2081 if(flags == CCN_SCHEDULE_CANCEL)
2082 {
2083 return -1;
2084 }
2085
2086 nlsr_lock();
akmhoqueda5b6832012-09-13 22:33:55 -05002087
akmhoque7b791452012-10-30 11:24:56 -05002088 if ( nlsr->debugging )
2089 printf("refresh_lsdb called\n");
2090 if ( nlsr->detailed_logging )
2091 writeLogg(__FILE__,__FUNCTION__,__LINE__,"refresh_lsdb called\n");
akmhoqueffacaa82012-09-13 17:48:30 -05002092
2093 refresh_name_lsdb();
2094 refresh_adj_lsdb();
akmhoqueb77b95f2013-02-08 12:28:47 -06002095 refresh_cor_lsdb();
akmhoqueffacaa82012-09-13 17:48:30 -05002096
akmhoqueffacaa82012-09-13 17:48:30 -05002097 nlsr->event = ccn_schedule_event(nlsr->sched, 60000000, &refresh_lsdb, NULL, 0);
akmhoqueda5b6832012-09-13 22:33:55 -05002098
akmhoqueffacaa82012-09-13 17:48:30 -05002099 nlsr_unlock();
2100 return 0;
2101}
akmhoqueb77b95f2013-02-08 12:28:47 -06002102
2103void
2104write_adj_lsa_to_repo(char *repo_content_prefix, struct name_prefix *lsa_id)
2105{
2106 if ( nlsr->debugging )
2107 printf("write_adj_lsa_to_repo called\n");
2108 if ( nlsr->debugging )
2109 printf("Content Prefix: %s\n",repo_content_prefix);
2110
2111 struct ccn_charbuf *lsa_data=ccn_charbuf_create();
2112 get_adj_lsa_data(lsa_data,lsa_id);
2113 if ( nlsr->debugging )
2114 printf("Adj LSA Data: %s \n",ccn_charbuf_as_string(lsa_data));
2115
2116 write_data_to_repo(ccn_charbuf_as_string(lsa_data), repo_content_prefix);
2117
2118 ccn_charbuf_destroy(&lsa_data);
2119}
2120
2121void
2122write_name_lsa_to_repo(char *repo_content_prefix, struct name_prefix *lsa_id)
2123{
2124 if ( nlsr->debugging )
2125 printf("write_name_lsa_to_repo called\n");
2126 if ( nlsr->debugging )
2127 printf("Content Prefix: %s\n",repo_content_prefix);
2128
2129 struct ccn_charbuf *lsa_data=ccn_charbuf_create();
2130 get_name_lsa_data(lsa_data,lsa_id);
2131
2132 if ( nlsr->debugging )
2133 printf("Name LSA Data: %s \n",ccn_charbuf_as_string(lsa_data));
2134
2135 write_data_to_repo(ccn_charbuf_as_string(lsa_data), repo_content_prefix);
2136
2137 ccn_charbuf_destroy(&lsa_data);
2138}
2139
2140
2141void
2142write_name_lsdb_to_repo(char *slice_prefix)
2143{
2144 int i, name_lsdb_element;
2145
2146 struct nlsa *name_lsa;
2147 struct hashtb_enumerator ee;
2148 struct hashtb_enumerator *e = &ee;
2149
2150 hashtb_start(nlsr->lsdb->name_lsdb, e);
2151 name_lsdb_element=hashtb_n(nlsr->lsdb->name_lsdb);
2152
2153 for(i=0;i<name_lsdb_element;i++)
2154 {
2155 name_lsa=e->data;
2156
2157 char lst[2];
2158 memset(lst,0,2);
2159 sprintf(lst,"%d",name_lsa->header->ls_type);
2160
2161 char lsid[10];
2162 memset(lsid,0,10);
2163 sprintf(lsid,"%ld",name_lsa->header->ls_id);
2164
2165
2166 char *key=(char *)malloc(strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
2167 memset(key,0,strlen(name_lsa->header->orig_router->name)+1+strlen(lst)+1+strlen(lsid)+1);
2168
2169
2170 make_name_lsa_key(key, name_lsa->header->orig_router->name,name_lsa->header->ls_type,name_lsa->header->ls_id);
2171
2172 if ( nlsr->debugging )
2173 printf("Name LSA Key: %s \n",key);
2174
2175
2176 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);
2177 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);
2178 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);
2179
2180 if ( nlsr->debugging )
2181 printf("Name LSA Repo Key: %s \n",repo_key);
2182
2183 struct name_prefix *lsaid=(struct name_prefix *)malloc(sizeof(struct name_prefix));
2184 lsaid->name=(char *)malloc(strlen(key)+1);
2185 memset(lsaid->name, 0, strlen(key)+1);
2186 memcpy(lsaid->name,key,strlen(key));
2187 lsaid->length=strlen(key)+1;
2188
2189
2190 write_name_lsa_to_repo(repo_key, lsaid);
2191
2192 free(key);
2193 free(repo_key);
2194 free(lsaid->name);
2195 free(lsaid);
2196
2197 hashtb_next(e);
2198 }
2199
2200 hashtb_end(e);
2201
2202
2203}
2204
2205void
2206print_cor_lsa(struct clsa *cor_lsa)
2207{
2208 if ( nlsr->debugging )
2209 {
2210 printf("-----------Cor LSA Content---------------\n");
2211 printf(" Origination Router : %s\n",cor_lsa->header->orig_router->name);
2212 printf(" Origination Router Length: %d\n",cor_lsa->header->orig_router->length);
2213 printf(" LS Type : %d\n",cor_lsa->header->ls_type);
2214 printf(" Origination Time : %s\n",cor_lsa->header->orig_time);
2215 printf(" LSA Data \n");
2216 printf(" Cor R: : %f\n",cor_lsa->cor_r);
2217 printf(" Cor Theta : %f\n",cor_lsa->cor_theta);
2218
2219 printf("\n");
2220 }
2221}
2222
2223void
2224print_cor_lsdb()
2225{
2226
2227 if ( nlsr->debugging )
2228 printf("print_cor_lsdb called \n");
2229
2230 struct hashtb_enumerator ee;
2231 struct hashtb_enumerator *e = &ee;
2232
2233 int i=1;
2234
2235 for (hashtb_start(nlsr->lsdb->cor_lsdb, e); e->key != NULL; hashtb_next(e))
2236 {
2237 if ( nlsr->debugging )
2238 printf("-----------Cor LSA (%d)---------------\n",i);
2239 struct clsa *cor_lsa=e->data;
2240 print_cor_lsa(cor_lsa);
2241 i++;
2242 }
2243 hashtb_end(e);
2244
2245 if ( nlsr->debugging )
2246 printf("\n");
2247 if ( nlsr->detailed_logging )
2248 writeLogg(__FILE__,__FUNCTION__,__LINE__,"\n");
2249}
2250
2251void
2252install_cor_lsa(struct clsa *cor_lsa)
2253{
2254 if ( nlsr->debugging )
2255 printf("install_cor_lsa called \n");
2256 if ( nlsr->detailed_logging )
2257 writeLogg(__FILE__,__FUNCTION__,__LINE__,"install_cor_lsa called \n");
2258
2259
2260 char *time_stamp=(char *)malloc(20);
2261 memset(time_stamp,0,20);
2262 get_current_timestamp_micro(time_stamp);
2263
2264
2265 char *key=(char *)malloc(cor_lsa->header->orig_router->length+2+2);
2266 memset(key,0,cor_lsa->header->orig_router->length+2);
2267 make_cor_lsa_key(key,cor_lsa);
2268
2269 if ( nlsr->debugging )
2270 printf("Cor LSA key: %s \n",key);
2271
2272 struct hashtb_enumerator ee;
2273 struct hashtb_enumerator *e = &ee;
2274 int res;
2275
2276 hashtb_start(nlsr->lsdb->cor_lsdb, e);
2277 res = hashtb_seek(e, key, strlen(key), 0);
2278
2279 if ( res == HT_NEW_ENTRY )
2280 {
2281 if ( nlsr->debugging )
2282 printf("New Cor LSA... \n");
2283
2284 struct clsa *new_cor_lsa=(struct clsa *)malloc(sizeof( struct clsa ));
2285 new_cor_lsa=e->data;
2286 new_cor_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
2287
2288 new_cor_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
2289 new_cor_lsa->header->orig_router->name=(char *)malloc(strlen(cor_lsa->header->orig_router->name)+1);
2290 memset(new_cor_lsa->header->orig_router->name,0,strlen(cor_lsa->header->orig_router->name)+1);
2291 memcpy(new_cor_lsa->header->orig_router->name,cor_lsa->header->orig_router->name,strlen(cor_lsa->header->orig_router->name)+1);
2292 new_cor_lsa->header->orig_router->length=cor_lsa->header->orig_router->length;
2293
2294 new_cor_lsa->header->orig_time=(char *)malloc(strlen(cor_lsa->header->orig_time)+1); //free
2295 memset(new_cor_lsa->header->orig_time,0,strlen(cor_lsa->header->orig_time)+1);
2296 memcpy(new_cor_lsa->header->orig_time,cor_lsa->header->orig_time,strlen(cor_lsa->header->orig_time)+1);
2297
2298 new_cor_lsa->header->ls_type=cor_lsa->header->ls_type;
2299
2300 new_cor_lsa->cor_r=cor_lsa->cor_r;
2301 new_cor_lsa->cor_theta=cor_lsa->cor_theta;
2302 }
2303 else if ( res == HT_OLD_ENTRY )
2304 {
2305 if ( nlsr->debugging )
2306 printf("Cor LSA exists (Old)... \n");
2307 }
2308 hashtb_end(e);
2309
2310 free(key);
2311
2312}
2313
2314void
2315build_cor_lsa(struct clsa *cor_lsa, double cor_r, double cor_theta)
2316{
2317 cor_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
2318 cor_lsa->header->ls_type=LS_TYPE_COR;
2319
2320 char *time_stamp=(char *)malloc(20);
2321 memset(time_stamp,0,20);
2322 get_current_timestamp_micro(time_stamp);
2323
2324 cor_lsa->header->orig_time=(char *)malloc(strlen(time_stamp)+1); //free
2325 memset(cor_lsa->header->orig_time,0,strlen(time_stamp)+1);
2326 memcpy(cor_lsa->header->orig_time,time_stamp,strlen(time_stamp)+1);
2327 free(time_stamp);
2328
2329 cor_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
2330 cor_lsa->header->orig_router->name=(char *)malloc(strlen(nlsr->router_name)+1);
2331 memset(cor_lsa->header->orig_router->name,0,strlen(nlsr->router_name)+1);
2332 memcpy(cor_lsa->header->orig_router->name,nlsr->router_name,strlen(nlsr->router_name)+1);
2333 cor_lsa->header->orig_router->length=strlen(nlsr->router_name)+1;
2334
2335 cor_lsa->cor_r=cor_r;
2336 cor_lsa->cor_theta=cor_theta;
2337
2338}
2339
2340void
2341build_others_cor_lsa(struct clsa *cor_lsa,char *orig_router, int ls_type,char *orig_time, double cor_r, double cor_theta)
2342{
2343 cor_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
2344 cor_lsa->header->ls_type=ls_type;
2345
2346 cor_lsa->header->orig_time=(char *)malloc(strlen(orig_time)+1);
2347 memset(cor_lsa->header->orig_time,0,strlen(orig_time)+1);
2348 memcpy(cor_lsa->header->orig_time,orig_time,strlen(orig_time)+1);
2349
2350 cor_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
2351 cor_lsa->header->orig_router->name=(char *)malloc(strlen(orig_router)+1);
2352 memset(cor_lsa->header->orig_router->name,0,strlen(orig_router)+1);
2353 memcpy(cor_lsa->header->orig_router->name,orig_router,strlen(orig_router)+1);
2354 cor_lsa->header->orig_router->length=strlen(orig_router)+1;
2355
2356 cor_lsa->cor_r=cor_r;
2357 cor_lsa->cor_theta=cor_theta;
2358
2359}
2360
2361void
2362build_and_install_others_cor_lsa(char *orig_router,int ls_type,char *orig_time, double cor_r, double cor_theta)
2363{
2364 struct clsa *cor_lsa=(struct clsa *)malloc(sizeof( struct clsa ));
2365 build_others_cor_lsa(cor_lsa,orig_router,ls_type, orig_time, cor_r, cor_theta);
2366 install_cor_lsa(cor_lsa);
2367
2368 print_cor_lsdb();
2369
2370 free(cor_lsa->header->orig_router);
2371 free(cor_lsa->header->orig_time);
2372 free(cor_lsa->header);
2373 free(cor_lsa);
2374
2375}
2376
2377
2378void
2379build_and_install_cor_lsa()
2380{
2381
2382
2383
2384 struct clsa *cor_lsa=(struct clsa *)malloc(sizeof( struct clsa ));
2385
2386 build_cor_lsa(cor_lsa,nlsr->cor_r,nlsr->cor_theta);
2387 install_cor_lsa(cor_lsa);
2388
2389 write_cor_lsa_to_repo(cor_lsa);
2390
2391 print_cor_lsdb();
2392
2393 free(cor_lsa->header->orig_router);
2394 free(cor_lsa->header->orig_time);
2395 free(cor_lsa->header);
2396 free(cor_lsa);
2397
2398}
2399
2400void
2401get_cor_lsa_data(struct ccn_charbuf *lsa_data,char *cor_lsa_key)
2402{
2403 if ( nlsr->debugging )
2404 printf("get_cor_lsa_data called \n");
2405 if ( nlsr->detailed_logging )
2406 writeLogg(__FILE__,__FUNCTION__,__LINE__,"get_adj_lsa_data called \n");
2407
2408 struct clsa *cor_lsa=(struct clsa*)malloc(sizeof(struct clsa ));
2409
2410 struct hashtb_enumerator ee;
2411 struct hashtb_enumerator *e = &ee;
2412 int res;
2413
2414 hashtb_start(nlsr->lsdb->cor_lsdb, e);
2415 res = hashtb_seek(e, cor_lsa_key, strlen(cor_lsa_key), 0);
2416
2417 if( res == HT_OLD_ENTRY )
2418 {
2419 cor_lsa=e->data;
2420
2421 if ( nlsr->debugging )
2422 printf("Cor LSA found \n");
2423 if ( nlsr->detailed_logging )
2424 writeLogg(__FILE__,__FUNCTION__,__LINE__,"Cor LSA found \n");
2425
2426 ccn_charbuf_append_string(lsa_data,cor_lsa->header->orig_router->name);
2427 ccn_charbuf_append_string(lsa_data,"|");
2428
2429 char *temp_length=(char *)malloc(20);
2430 memset(temp_length,0,20);
2431 sprintf(temp_length,"%d",cor_lsa->header->orig_router->length);
2432 ccn_charbuf_append_string(lsa_data,temp_length);
2433 ccn_charbuf_append_string(lsa_data,"|");
2434 free(temp_length);
2435
2436 char *temp_ltype=(char *)malloc(20);
2437 memset(temp_ltype,0,20);
2438 sprintf(temp_ltype,"%d",cor_lsa->header->ls_type);
2439 ccn_charbuf_append_string(lsa_data,temp_ltype);
2440 ccn_charbuf_append_string(lsa_data,"|");
2441 free(temp_ltype);
2442
2443 ccn_charbuf_append_string(lsa_data,cor_lsa->header->orig_time);
2444 ccn_charbuf_append_string(lsa_data,"|");
2445
2446 char *cor_r=(char *)malloc(20);
2447 memset(cor_r,0,20);
2448 sprintf(cor_r,"%f",cor_lsa->cor_r);
2449 ccn_charbuf_append_string(lsa_data,cor_r);
2450 ccn_charbuf_append_string(lsa_data,"|");
2451 free(cor_r);
2452
2453 char *cor_theta=(char *)malloc(20);
2454 memset(cor_theta,0,20);
2455 sprintf(cor_theta,"%f",cor_lsa->cor_theta);
2456 ccn_charbuf_append_string(lsa_data,cor_theta);
2457 ccn_charbuf_append_string(lsa_data,"|");
2458 free(cor_theta);
2459
2460 }
2461 else if(res == HT_NEW_ENTRY)
2462 {
2463 hashtb_delete(e);
2464 }
2465
2466 hashtb_end(e);
2467}
2468
2469void
2470write_cor_lsa_to_repo(struct clsa *cor_lsa)
2471{
2472
2473
2474 if ( nlsr->debugging )
2475 printf("write_cor_lsa_to_repo called\n");
2476
2477
2478 char *key=(char *)malloc(cor_lsa->header->orig_router->length+2+2);
2479 memset(key,0,cor_lsa->header->orig_router->length+2+2);
2480 make_cor_lsa_key(key,cor_lsa);
2481
2482 struct ccn_charbuf *lsa_data=ccn_charbuf_create();
2483 get_cor_lsa_data(lsa_data,key);
2484
2485 if ( nlsr->debugging )
2486 printf("Cor LSA Data: %s \n",ccn_charbuf_as_string(lsa_data));
2487 char *lst=(char *)malloc(20);
2488 memset(lst,0,20);
2489 sprintf(lst,"%d",cor_lsa->header->ls_type);
2490 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);
2491 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);
2492 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);
2493
2494 if ( nlsr->debugging )
2495 printf("Cor LSA Repo Key: %s \n",repo_key);
2496
2497 write_data_to_repo(ccn_charbuf_as_string(lsa_data), repo_key);
2498
2499
2500
2501 free(lst);
2502 free(key);
2503 free(repo_key);
2504 ccn_charbuf_destroy(&lsa_data);
2505}
2506
2507void
2508make_cor_lsa_key_by_router_name(char *key,char *router_name)
2509{
2510 memcpy(key+strlen(key),router_name,strlen(router_name));
2511 memcpy(key+strlen(key),"/",1);
2512 char ls_type[2];
2513 sprintf(ls_type,"%d",LS_TYPE_COR);
2514 memcpy(key+strlen(key),ls_type,strlen(ls_type));
2515 key[strlen(key)]='\0';
2516}
2517
2518
2519double
2520get_hyperbolic_r(char *router)
2521{
2522 double ret=-1.0;
2523 char *cor_lsa_key=(char *)calloc(strlen(router)+4,sizeof(char));
2524 make_cor_lsa_key_by_router_name(cor_lsa_key,router);
2525
2526
2527 struct clsa *cor_lsa;
2528 struct hashtb_enumerator ee;
2529 struct hashtb_enumerator *e = &ee;
2530 int res;
2531
2532 hashtb_start(nlsr->lsdb->cor_lsdb, e);
2533 res = hashtb_seek(e, cor_lsa_key, strlen(cor_lsa_key), 0);
2534
2535 if ( res == HT_OLD_ENTRY)
2536 {
2537 cor_lsa=e->data;
2538 ret=cor_lsa->cor_r;
2539 }
2540 else if(res == HT_NEW_ENTRY)
2541 {
2542 hashtb_delete(e);
2543 }
2544
2545 hashtb_end(e);
2546
2547 free(cor_lsa_key);
2548 return ret;
2549}
2550
2551double
2552get_hyperbolic_theta(char *router)
2553{
2554 double ret=-1.0;
2555 char *cor_lsa_key=(char *)calloc(strlen(router)+4,sizeof(char));
2556 make_cor_lsa_key_by_router_name(cor_lsa_key,router);
2557
2558 struct clsa *cor_lsa;
2559 struct hashtb_enumerator ee;
2560 struct hashtb_enumerator *e = &ee;
2561 int res;
2562
2563 hashtb_start(nlsr->lsdb->cor_lsdb, e);
2564 res = hashtb_seek(e, cor_lsa_key, strlen(cor_lsa_key), 0);
2565
2566 if ( res == HT_OLD_ENTRY)
2567 {
2568 cor_lsa=e->data;
2569 ret=cor_lsa->cor_theta;
2570 }
2571 else if(res == HT_NEW_ENTRY)
2572 {
2573 hashtb_delete(e);
2574 }
2575
2576 hashtb_end(e);
2577
2578 free(cor_lsa_key);
2579 return ret;
2580}