NetSim Source Code Help
Loading...
Searching...
No Matches
OSPF_Neighbor.c
Go to the documentation of this file.
1/************************************************************************************
2* Copyright (C) 2020 *
3* TETCOS, Bangalore. India *
4* *
5* Tetcos owns the intellectual property rights in the Product and its content. *
6* The copying, redistribution, reselling or publication of any or all of the *
7* Product or its content without express prior written consent of Tetcos is *
8* prohibited. Ownership and / or any other right relating to the software and all *
9* intellectual property rights therein shall remain at all times with Tetcos. *
10* *
11* Author: Shashi Kant Suman *
12* *
13* ---------------------------------------------------------------------------------*/
14#include "main.h"
15#include "OSPF.h"
16#include "OSPF_Msg.h"
17#include "OSPF_Neighbor.h"
18#include "OSPF_Enum.h"
19#include "OSPF_Interface.h"
20#include "OSPF_List.h"
21
22#define is_neighbor_DR(ospf,neigh) (!OSPFID_COMPARE(ospf->designaterRouter,neigh->neighborId))
23#define is_neighbor_backupDR(ospf, neigh) (!OSPFID_COMPARE(ospf->backupDesignaterRouter,neigh->neighborId))
24
26{
27 if (neigh->DDSeqNo)
28 {
29 neigh->DDSeqNo++;
30 print_ospf_log(OSPF_LOG, "New DD seq no is %d", neigh->DDSeqNo);
31 }
32 else
33 {
34 print_ospf_log(OSPF_LOG, "First time adjacency is attempted. Declaring itself as master.");
35 neigh->isMaster = true;
37 print_ospf_log(OSPF_LOG, "New DD seq no is %d", neigh->DDSeqNo);
38 print_ospf_log(OSPF_LOG, "Start sending DD msg");
40 }
41}
42
44 OSPFNEIGHSTATE state)
45{
46 OSPFNEIGHSTATE oldState = neigh->state;
47 print_ospf_log(OSPF_LOG, "Neighbor(%s) state changed to %s from %s",
48 neigh->neighborId->str_ip,
49 strNeighborState[state],
50 strNeighborState[neigh->state]);
51 neigh->state = state;
52
53 // Attempt to form adjacency if new state is S_ExStart
54 if ((oldState != state) && (state == OSPFNEIGHSTATE_ExStart))
55 {
56 {
58 }
59 }
60
61 if ((oldState == OSPFNEIGHSTATE_Full &&
62 neigh->state != OSPFNEIGHSTATE_Full) ||
63 (oldState != OSPFNEIGHSTATE_Full &&
64 neigh->state == OSPFNEIGHSTATE_Full))
65 {
67 ptrOSPF_IF thisInterface = OSPF_IF_CURRENT();
69 ospf_lsa_schedule_routerLSA(ospf, area, false);
70 if (thisInterface->State == OSPFIFSTATE_DR)
71 {
73 thisInterface,
74 area,
75 false);
76 }
77 }
78
79 if ((oldState < OSPFNEIGHSTATE_2Way &&
80 state >= OSPFNEIGHSTATE_2Way) ||
81 (oldState >= OSPFNEIGHSTATE_2Way &&
82 state < OSPFNEIGHSTATE_2Way))
83 {
87 OSPF_NEIGHBORCHANGE,
88 NULL,
89 neigh);
90 }
91}
92
94{
95 UINT i;
96 for (i = 0; i < ospf->neighborRouterCount; i++)
97 {
98 ptrOSPF_NEIGHBOR neigh = ospf->neighborRouterList[i];
99 if (!OSPFID_COMPARE(neigh->neighborId, id) ||
100 !OSPFID_COMPARE(neigh->neighborIPAddr,id))
101 return neigh;
102 }
103 return NULL;
104}
105
107{
108 UINT i;
109 for (i = 0; i < thisInterface->neighborRouterCount; i++)
110 {
111 ptrOSPF_NEIGHBOR neigh = thisInterface->neighborRouterList[i];
112 if (!IP_COMPARE(neigh->neighborIPAddr, ip))
113 return neigh;
114 }
115 return NULL;
116}
117
119 OSPFID rid)
120{
121 ptrOSPF_NEIGHBOR neigh;
122 neigh = calloc(1, sizeof* neigh);
124 neigh->neighborId = rid;
125 neigh->neighborIPAddr = ip;
126
128
133
134 return neigh;
135}
136
138{
139 if (ospf->neighborRouterCount)
141 (ospf->neighborRouterCount + 1) * (sizeof* ospf->neighborRouterList));
142 else
143 ospf->neighborRouterList = calloc(1, sizeof* ospf->neighborRouterList);
144 ospf->neighborRouterList[ospf->neighborRouterCount] = neigh;
145 ospf->neighborRouterCount++;
146}
147
149{
150 UINT n;
151 bool flag = false;
152 for (n = 0; n < thisInterface->neighborRouterCount; n++)
153 {
154 if (thisInterface->neighborRouterList[n] == neigh)
155 flag = true;
156 if (flag)
157 thisInterface->neighborRouterList[n] = thisInterface->neighborRouterList[n + 1];
158 }
159 if (flag)
160 thisInterface->neighborRouterCount--;
161
164
167
170
173
176
178 neigh->inactivityTimerId = false;
179 free(neigh);
180}
181
183{
185
186 print_ospf_log(OSPF_LOG, "Time %0.4lf, Router %d, Interface %d (%s) 1-way event is triggered for neighbor %s",
190 DEVICE_MYIP()->str_ip,
191 neigh->neighborId->str_ip);
192
193 if (neigh->state == OSPFNEIGHSTATE_2Way)
195
197}
198
200 ptrOSPF_NEIGHBOR neigh)
201{
202 if (ospf->Type == OSPFIFTYPE_P2P ||
203 ospf->Type == OSPFIFTYPE_P2MP ||
205 return true;
206
207 if (ospf->State == OSPFIFSTATE_DR)
208 return true;
209
210 if (ospf->State == OSPFIFSTATE_BACKUP)
211 return true;
212
213 if (is_neighbor_DR(ospf, neigh))
214 return true;
215
216 if (is_neighbor_backupDR(ospf, neigh))
217 return true;
218
219 return false;
220}
221
223 ptrOSPF_NEIGHBOR neigh)
224{
225 print_ospf_log(OSPF_LOG, "Neighbor state is Init");
226
227 bool isAdjacency = is_adjacency_should_established(ospf, neigh);
228 if (isAdjacency)
229 {
230 print_ospf_log(OSPF_LOG, "Adjacency is required");
232 }
233 else
234 {
235 print_ospf_log(OSPF_LOG, "Adjacency is not required");
237 }
238}
239
241{
244
245 print_ospf_log(OSPF_LOG, "Time %0.4lf: Router %d, interface %d (%s) 2-Way received event triggered for neighbor %s",
249 DEVICE_MYIP()->str_ip,
250 neigh->neighborId->str_ip);
251
252 if (neigh->state == OSPFNEIGHSTATE_Init)
255}
256
258{
260
261 print_ospf_log(OSPF_LOG, "Time %0.4lf, Router %d, interface %d (%s) HelloReceived event triggered for neighbor %s",
265 DEVICE_MYIP()->str_ip,
266 neigh->neighborId->str_ip);
267
268 if (neigh->state == OSPFNEIGHSTATE_DOWN)
270
272 if (!neigh->isInactivityTimerAdded)
273 {
275
276 double time = pstruEventDetails->dEventTime +
278
279 print_ospf_log(OSPF_LOG, "Adding Inactivity timer at time %0.4lf",
280 time/MILLISECOND);
281
282 neigh->inactivityTimerId = ospf_event_add(time,
285 OSPF_InactivityTimer,
286 NULL,
287 neigh);
288 neigh->isInactivityTimerAdded = true;
289 }
291}
292
294 ptrOSPF_IF thisInterface,
295 ptrOSPF_NEIGHBOR neigh,
296 ptrOSPFLSAHDR lsa)
297{
298 lsa = OSPF_LSA_HDR_COPY(lsa);
299
300 lsa->time = OSPF_CURR_TIME();
302 ospf_lsa_printList(form_dlogId("RXTLIST", ospf->myId), neigh->neighLSRxtList, "add Rxlist");
304
305 if (!neigh->LSRxtTimer)
306 {
307 ptrLSRXTTIMERDETAILS detail = calloc(1, sizeof* detail);
309 detail->msgType = OSPFMSG_LSUPDATE;
310 detail->neighborIP = neigh->neighborIPAddr;
311 detail->rxmtSeqNum = neigh->LSRxtSeqNum;
313 ospf->myId,
314 thisInterface->id,
315 OSPF_RXMTTIMER,
316 NULL,
317 detail);
318 neigh->LSRxtTimer = true;
319 }
320}
321
323 ptrOSPF_IF thisInterface,
324 ptrOSPF_NEIGHBOR neigh,
325 ptrOSPFLIST list)
326{
327 ptrOSPFLSAHDR lsa = NULL;
328 void* item = ospf_list_newIterator();
329 while ((lsa = ospf_list_iterate_mem(list, item)) != NULL)
330 {
331 // Add to retransmission list if LSAge is MaxAge
332 if (ospf_lsa_maskDoNotAge(ospf, lsa->LSAge) == ospf->LSAMaxAge)
333 {
335 thisInterface,
336 neigh,
337 lsa);
338 continue;
339 }
340
343 }
345}
346
348 ptrOSPF_IF ospf,
349 ptrOSPF_NEIGHBOR neigh)
350{
351 ptrOSPFAREA_DS area = OSPF_AREA_GET_IN(pds, ospf->id);
352 ospf_neighbor_update_DBSummaryList(pds, ospf, neigh, area->routerLSAList);
353 ospf_neighbor_update_DBSummaryList(pds, ospf, neigh, area->nwLSAList);
356}
357
359{
361 print_ospf_log(OSPF_LOG, "Time %0.4lf, Router %d, Interface %d (%s), %s event is triggered for neighbor %s",
365 DEVICE_MYIP()->str_ip,
367 neigh->neighborId->str_ip);
368 print_ospf_log(OSPF_LOG, "Neighbor state is %s",
369 strNeighborState[neigh->state]);
370 if(neigh->state != OSPFNEIGHSTATE_ExStart)
371 return;
372
374 print_ospf_log(OSPF_LOG, "Creating DB summary list");
377 neigh);
379}
380
382{
385 print_ospf_log(OSPF_LOG, "Time %0.4lf, Router %d, Interface %d (%s), %s event is triggered for neighbor %s",
389 DEVICE_MYIP()->str_ip,
391 neigh->neighborId->str_ip);
392 print_ospf_log(OSPF_LOG, "Neighbor state is %s",
393 strNeighborState[neigh->state]);
394
395 if (neigh->state != OSPFNEIGHSTATE_Exchange)
396 return;
397
399 {
400 print_ospf_log(OSPF_LOG, "Neighbor LSR list is empty");
402 }
403 else
404 {
405 print_ospf_log(OSPF_LOG, "Neighbor LSR is not empty");
407 ospf_lsreq_send(ospf,
409 neigh->neighborIPAddr,
410 false);
411 }
413}
414
416{
417 //For NBMA network type
418 //Ignore
419}
420
422 ptrOSPF_NEIGHBOR neigh)
423{
424 double time = neigh->lastHelloRecvTime +
426
427 print_ospf_log(OSPF_LOG, "Adding Inactivity timer at time %0.4lf",
428 time / MILLISECOND);
429
430 neigh->inactivityTimerId = ospf_event_add(time,
433 OSPF_InactivityTimer,
434 NULL,
435 neigh);
436 neigh->isInactivityTimerAdded = true;
437}
438
440{
443
444 print_ospf_log(OSPF_LOG, "Time %0.4lf, Router %d, Interface %d (%s), "
445 "%s event is triggered for neighbor %s.",
449 DEVICE_MYIP()->str_ip,
451 neigh->neighborId->str_ip);
452
453 double lt = neigh->lastHelloRecvTime;
454 if (lt + ospf->routerDeadInterval*SECOND <=
456 {
457 print_ospf_log(OSPF_LOG, "Neighbor is inactive");
459
462 neigh->neighLSReqList = NULL;
463
466 neigh->neighDBSummaryList = NULL;
467
470 neigh->neighLSRxtList = NULL;
471
474 neigh->linkStateSendList = NULL;
475
476 neigh->isInactivityTimerAdded = false;
477
479 neigh->lastrecvDDPacket = NULL;
480
482 neigh->lastSentDDPacket = NULL;
483
484 neigh->neighborDesignateBackupRouter = NULL;
485 neigh->neighborDesignateRouter = NULL;
486
487 }
488 else
489 {
490 print_ospf_log(OSPF_LOG, "Neighbor is active");
491 restart_inactivity_timer(ospf, neigh); //reduce number of event for faster execution
492 }
494}
495
497{
498 UINT i;
499 for (i = 0; i < ospf->neighborRouterCount; i++)
500 {
501 ptrOSPF_NEIGHBOR neigh = ospf->neighborRouterList[i];
502 if (!OSPFID_COMPARE(neigh->neighborId, ospf->designaterRouter) &&
503 neigh->state == OSPFNEIGHSTATE_Full)
504 return true;
505 }
506 return false;
507}
508
510{
511 UINT i;
512 for (i = 0; i < ospf->neighborRouterCount; i++)
513 {
514 ptrOSPF_NEIGHBOR neigh = ospf->neighborRouterList[i];
515 if (neigh->state == OSPFNEIGHSTATE_Full)
516 return true;
517 }
518 return false;
519}
520
522{
523 UINT i, n;
524 for (i = 0; i < ospf->ifCount; i++)
525 {
526 ptrOSPF_IF thisInterface = ospf->ospfIf[i];
527 ptrOSPF_NEIGHBOR neigh;
528 for (n = 0; n < thisInterface->neighborRouterCount; n++)
529 {
530 neigh = thisInterface->neighborRouterList[n];
531 if (neigh->state == OSPFNEIGHSTATE_Exchange ||
533 return true;
534 }
535 }
536 return false;
537}
538
540 ptrOSPFLSAHDR lsa)
541{
543 void* pass = ospf_list_newIterator();
544 while ((l = ospf_list_iterate_mem(list, pass)) != NULL)
545 {
546 if (l->LSType == lsa->LSType &&
549 {
551 return l;
552 }
553 }
555 return NULL;
556}
557
559 ptrOSPFLSAHDR lsa,
560 double time)
561{
563 s->time = time;
564 ospf_list_add_mem(list, s);
565}
566
568 NETSIM_IPAddress neighIPaddr)
569{
570 UINT i;
571 for (i = 0; i < ospf->ifCount; i++)
572 {
573 ptrOSPF_IF thisInterface = ospf->ospfIf[i];
574
575 UINT n;
576 for(n=0;n<thisInterface->neighborRouterCount;n++)
577 {
578 ptrOSPF_NEIGHBOR neigh = thisInterface->neighborRouterList[n];
579 if (!IP_COMPARE(neigh->neighborIPAddr, neighIPaddr))
580 return thisInterface->id;
581 }
582 }
583 return 0;
584}
585
587{
590
591 if (tempNeighborInfo->state != OSPFNEIGHSTATE_Loading)
592 return;
593
594 if (tempNeighborInfo->state != OSPFNEIGHSTATE_Full)
595 print_ospf_log(OSPF_LOG, "Router %d, LoadingDone event is triggered"
596 "Neighbor (%s) state move up to Full", d, tempNeighborInfo->neighborId);
597
599}
600
602{
604 ptrOSPF_IF thisInterface = OSPF_IF_CURRENT();
606
608 ospf_neighbor_remove(ospf, thisInterface, neighbor);
609
610}
unsigned int NETSIM_ID
Definition: Animation.h:45
#define IP_COMPARE(ip1, ip2)
Definition: IP_Addressing.h:67
#define UINT
Definition: Linux.h:38
#define realloc(p, s)
Definition: Memory.h:32
#define free(p)
Definition: Memory.h:31
#define calloc(c, s)
Definition: Memory.h:29
char * GetStringOSPF_Subevent(NETSIM_ID)
char * form_dlogId(char *name, NETSIM_ID d)
Definition: OSPF.c:178
#define OSPF_CURR_TIME()
Definition: OSPF.h:40
#define OSPF_PDS_CURRENT()
Definition: OSPF.h:151
#define OSPF_AREA_GET_IN(ospf, in)
Definition: OSPF.h:105
#define OSPF_IF_CURRENT()
Definition: OSPF.h:179
void start_sending_dd_msg()
Definition: OSPF_DD.c:207
void print_ospf_log(OSPFLOGFLAG logFlag, char *format,...)
void ospf_lsa_printList(char *logid, ptrOSPFLIST list, char *name)
Definition: OSPF_LSA.c:61
void ospf_lsreq_send(ptrOSPF_PDS ospf, NETSIM_ID interfaceId, NETSIM_IPAddress nbrAddr, bool retx)
Definition: OSPF_LSREQ.c:189
UINT16 ospf_lsa_maskDoNotAge(ptrOSPF_PDS ospf, UINT16 routerLSAAge)
Definition: OSPF_LSA.c:370
@ OSPF_LOG
Definition: OSPF.h:31
ptrOSPFLIST ospf_lsreq_initList()
Definition: OSPF_LSREQ.c:69
void ospf_lsa_schedule_routerLSA(ptrOSPF_PDS ospf, ptrOSPFAREA_DS area, bool isFlush)
Definition: OSPF_LSA.c:81
#define ospf_event_add(time, d, in, subevent, packet, eventdata)
Definition: OSPF.h:400
void ospf_lsa_scheduleNWLSA(ptrOSPF_PDS ospf, ptrOSPF_IF thisInterface, ptrOSPFAREA_DS area, bool isFlush)
Definition: OSPF_LSA.c:114
@ OSPFIFTYPE_P2MP
@ OSPFIFTYPE_P2P
@ OSPFIFTYPE_VIRTUALLINK
@ OSPFIFSTATE_DR
@ OSPFIFSTATE_BACKUP
ptrOSPFLSAHDR OSPF_LSA_HDR_COPY(ptrOSPFLSAHDR lsa)
Definition: OSPF_LSA.c:245
void OSPF_LSA_MSG_FREE(ptrOSPFLSAHDR hdr)
Definition: OSPF_LSA.c:231
ptrOSPFLSAHDR OSPF_LSA_MSG_COPY(ptrOSPFLSAHDR hdr)
Definition: OSPF_LSA.c:237
#define ospf_list_add_mem(list, mem)
Definition: OSPF_List.h:30
void ospf_list_deleteIterator(void *ite)
void ospf_list_delete_all(ptrOSPFLIST list)
void * ospf_list_iterate_mem(ptrOSPFLIST list, void *iterator)
void ospf_list_destroy(ptrOSPFLIST list)
ptrOSPFLIST ospf_list_init(void(*freeMem)(void *), void *(*copyMem)(void *))
void * ospf_list_newIterator()
bool ospf_list_is_empty(ptrOSPFLIST list)
void OSPF_HDR_FREE(ptrOSPFPACKETHDR hdr)
Definition: OSPF_Msg.c:59
@ OSPFMSG_LSUPDATE
Definition: OSPF_Msg.h:36
static void ospf_neighbor_change_state(ptrOSPF_NEIGHBOR neigh, OSPFNEIGHSTATE state)
Definition: OSPF_Neighbor.c:43
void ospf_neighbor_handle_KillNbrEvent()
#define is_neighbor_backupDR(ospf, neigh)
Definition: OSPF_Neighbor.c:23
void ospf_neighbor_handle_1way_event()
bool ospf_is_dr_router_fulladjacentwithAnother(ptrOSPF_IF ospf)
void ospf_neighbor_handle_exchangeDone_event()
ptrOSPF_NEIGHBOR OSPF_NEIGHBOR_FIND_BY_IP(ptrOSPF_IF thisInterface, NETSIM_IPAddress ip)
void ospf_neighbor_handle_inactivityTimer_event()
void ospf_neighbor_handle_helloReceived_event()
void ospf_neighbor_handle_start_event()
#define is_neighbor_DR(ospf, neigh)
Definition: OSPF_Neighbor.c:22
void ospf_neighbor_add(ptrOSPF_IF ospf, ptrOSPF_NEIGHBOR neigh)
ptrOSPF_NEIGHBOR ospf_neighbor_new(NETSIM_IPAddress ip, OSPFID rid)
void ospf_neighbor_handle_negotiationDone_event()
bool ospf_neighbor_isAnyNeighborInExchangeOrLoadingState(ptrOSPF_PDS ospf)
ptrOSPFLSAHDR ospf_neighbor_searchSendList(ptrOSPFLIST list, ptrOSPFLSAHDR lsa)
static void ospf_handle_2wayReceived_event_in_init_state(ptrOSPF_IF ospf, ptrOSPF_NEIGHBOR neigh)
static void ospf_neighbor_addToRxtList(ptrOSPF_PDS ospf, ptrOSPF_IF thisInterface, ptrOSPF_NEIGHBOR neigh, ptrOSPFLSAHDR lsa)
bool ospf_is_router_fullAdjacentWithDR(ptrOSPF_IF ospf)
NETSIM_ID ospf_neighbor_getInterfaceIdforThisNeighbor(ptrOSPF_PDS ospf, NETSIM_IPAddress neighIPaddr)
static void ospf_neighbor_attempt_adjacency(ptrOSPF_NEIGHBOR neigh)
Definition: OSPF_Neighbor.c:25
static void ospf_neighbor_create_DBSummaryList(ptrOSPF_PDS pds, ptrOSPF_IF ospf, ptrOSPF_NEIGHBOR neigh)
void ospf_neighbor_insertToSendList(ptrOSPFLIST list, ptrOSPFLSAHDR lsa, double time)
void ospf_neighbor_handle_2wayReceived_event()
static void ospf_neighbor_update_DBSummaryList(ptrOSPF_PDS ospf, ptrOSPF_IF thisInterface, ptrOSPF_NEIGHBOR neigh, ptrOSPFLIST list)
static void restart_inactivity_timer(ptrOSPF_IF ospf, ptrOSPF_NEIGHBOR neigh)
static bool is_adjacency_should_established(ptrOSPF_IF ospf, ptrOSPF_NEIGHBOR neigh)
void ospf_neighbor_handle_LoadingDoneEvent()
void ospf_neighbor_remove(ptrOSPF_PDS ospf, ptrOSPF_IF thisInterface, ptrOSPF_NEIGHBOR neigh)
ptrOSPF_NEIGHBOR OSPF_NEIGHBOR_FIND(ptrOSPF_IF ospf, OSPFID id)
Definition: OSPF_Neighbor.c:93
@ OSPFNEIGHSTATE_Exchange
Definition: OSPF_Neighbor.h:29
@ OSPFNEIGHSTATE_Loading
Definition: OSPF_Neighbor.h:31
@ OSPFNEIGHSTATE_2Way
Definition: OSPF_Neighbor.h:28
@ OSPFNEIGHSTATE_Full
Definition: OSPF_Neighbor.h:30
@ OSPFNEIGHSTATE_ExStart
Definition: OSPF_Neighbor.h:27
@ OSPFNEIGHSTATE_Init
Definition: OSPF_Neighbor.h:25
@ OSPFNEIGHSTATE_DOWN
Definition: OSPF_Neighbor.h:24
static char strNeighborState[][50]
Definition: OSPF_Neighbor.h:33
#define OSPFID_COMPARE
Definition: OSPF_Typedef.h:42
enum enum_ospf_neighbor_state OSPFNEIGHSTATE
Definition: OSPF_Typedef.h:34
void * ptrOSPFLIST
Definition: OSPF_Typedef.h:50
#define MILLISECOND
Definition: Stack.h:59
#define SECOND
Definition: Stack.h:60
int fnDeleteEvent(unsigned long long int nEventId)
#define DEVICE_MYIP()
Definition: Stack.h:806
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
Definition: Stack.h:837
NETSIM_ID fn_NetSim_Stack_GetDeviceId_asIP(NETSIM_IPAddress ip, NETSIM_ID *nInterfaceId)
NETSIM_ID nSubEventType
Definition: Stack.h:757
NETSIM_ID nDeviceId
Definition: Stack.h:750
NETSIM_ID nInterfaceId
Definition: Stack.h:751
ptrOSPFLIST routerLSAList
Definition: OSPF.h:89
ptrOSPFLIST routerSummaryLSAList
Definition: OSPF.h:91
ptrOSPFLIST nwLSAList
Definition: OSPF.h:90
ptrOSPFLIST nwSummaryLSAList
Definition: OSPF.h:92
char str_ip[_NETSIM_IP_LEN]
Definition: IP_Addressing.h:54
LSTYPE LSType
Definition: OSPF_Msg.h:391
OSPFID AdvertisingRouter
Definition: OSPF_Msg.h:393
UINT16 LSAge
Definition: OSPF_Msg.h:389
OSPFID LinkStateID
Definition: OSPF_Msg.h:392
NETSIM_IPAddress neighborIP
Definition: OSPF_Neighbor.h:77
OSPFTIME routerDeadInterval
OSPFTIME RxmtInterval
ptrOSPF_NEIGHBOR * neighborRouterList
OSPFIFTYPE Type
OSPFID designaterRouter
NETSIM_ID id
OSPFIFSTATE State
UINT neighborRouterCount
ptrOSPFLIST neighLSRxtList
Definition: OSPF_Neighbor.h:67
ptrOSPFLIST linkStateSendList
Definition: OSPF_Neighbor.h:68
ptrOSPFPACKETHDR lastrecvDDPacket
Definition: OSPF_Neighbor.h:54
OSPFID neighborDesignateBackupRouter
Definition: OSPF_Neighbor.h:62
ptrOSPFPACKETHDR lastSentDDPacket
Definition: OSPF_Neighbor.h:55
OSPFNEIGHSTATE state
Definition: OSPF_Neighbor.h:47
OSPFID neighborDesignateRouter
Definition: OSPF_Neighbor.h:61
ptrOSPFLIST neighDBSummaryList
Definition: OSPF_Neighbor.h:66
ptrOSPFLIST neighLSReqList
Definition: OSPF_Neighbor.h:65
NETSIM_IPAddress neighborIPAddr
Definition: OSPF_Neighbor.h:58
NETSIM_ID devInterface
Definition: OSPF_Neighbor.h:45
UINT16 LSAMaxAge
Definition: OSPF.h:125
ptrOSPF_IF * ospfIf
Definition: OSPF.h:118
UINT ifCount
Definition: OSPF.h:117
NETSIM_ID myId
Definition: OSPF.h:113