NetSim Source Code Help
Loading...
Searching...
No Matches
OSPF_Area.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_Typedef.h"
16#include "OSPF.h"
17#include "OSPF_List.h"
18#include "OSPF_Interface.h"
19#include "OSPF_Msg.h"
20
22 NETSIM_ID in,
23 OSPFID areaId,
24 NETSIM_IPAddress interfaceIP)
25{
26 UINT i;
27 for (i = 0; i < ospf->areaCount; i++)
28 {
29 if (areaId && !OSPFID_COMPARE(ospf->areaDS[i]->areaId, areaId))
30 return ospf->areaDS[i];
31 UINT j;
32 for (j = 0; j < ospf->areaDS[i]->assocInterfaceCount; j++)
33 {
34 if (in && ospf->areaDS[i]->assocRouterInterfaceId[j] == in)
35 return ospf->areaDS[i];
36 if (interfaceIP && !IP_COMPARE(ospf->areaDS[i]->assocRouterInterface[j], interfaceIP))
37 return ospf->areaDS[i];
38 }
39 }
40 return NULL;
41}
42
44 ptrOSPFAREA_DS area)
45{
46 if (ospf->areaCount)
47 ospf->areaDS = realloc(ospf->areaDS, (ospf->areaCount + 1)*(sizeof* ospf->areaDS));
48 else
49 ospf->areaDS = calloc(1, sizeof* ospf->areaDS);
50 ospf->areaDS[ospf->areaCount] = area;
51 ospf->areaCount++;
52}
53
54static void ADDR_RN_FREE(ptrADDR_RN rn)
55{
56 free(rn);
57}
58
60 ptrOSPFAREA_DS area)
61{
63 NETSIM_ID i;
64 for (i = 0; i < DEVICE(d)->nNumOfInterface; i++)
65 {
66 ptrADDR_RN rn = calloc(1, sizeof* rn);
69 inter->szSubnetMask,
70 inter->prefix_len);
71 rn->mask = inter->szSubnetMask;
74 }
75}
76
78 NETSIM_ID d,
79 NETSIM_ID in)
80{
81 if (area->assocInterfaceCount)
82 {
84 (area->assocInterfaceCount + 1)*
85 (sizeof* area->assocRouterInterface));
86
88 (area->assocInterfaceCount + 1)*
89 (sizeof* area->assocRouterInterfaceId));
90 }
91 else
92 {
93 area->assocRouterInterface = calloc(1, sizeof* area->assocRouterInterface);
95 }
98 area->assocInterfaceCount++;
99}
100
102{
103 ptrOSPF_PDS pds = OSPF_PDS_GET(d);
104 ptrOSPF_IF ospf = OSPF_IF_GET(pds, in);
105 ptrOSPFAREA_DS area = OSPF_AREA_GET_ID(pds, ospf->areaId);
106 if (area)
107 {
108 add_interface_to_area(area, d, in);
109 return;
110 }
111
112 area = calloc(1, sizeof* area);
113 OSPF_AREA_SET(pds, area);
114 area->areaId = ospf->areaId;
115 add_interface_to_area(area, d, in);
118
124}
125
127{
128 fnNetSimError("Implement %s after area implementation", __FUNCTION__);
129}
unsigned int NETSIM_ID
Definition: Animation.h:45
NETSIM_IPAddress IP_NETWORK_ADDRESS(NETSIM_IPAddress ip, NETSIM_IPAddress subnet, unsigned int prefix_len)
#define IP_COMPARE(ip1, ip2)
Definition: IP_Addressing.h:67
#define UINT
Definition: Linux.h:38
#define fnNetSimError(x,...)
Definition: Linux.h:56
#define realloc(p, s)
Definition: Memory.h:32
#define free(p)
Definition: Memory.h:31
#define calloc(c, s)
Definition: Memory.h:29
ptrOSPF_IF OSPF_IF_GET(ptrOSPF_PDS ospf, NETSIM_ID ifId)
@ ADDRRNSTATUS_ADVERTISE
Definition: OSPF.h:70
#define OSPF_AREA_GET_ID(ospf, id)
Definition: OSPF.h:106
#define OSPF_PDS_GET(d)
Definition: OSPF.h:150
static void add_interface_to_area(ptrOSPFAREA_DS area, NETSIM_ID d, NETSIM_ID in)
Definition: OSPF_Area.c:77
void ospf_area_handleABRTask(ptrOSPF_PDS ospf)
Definition: OSPF_Area.c:126
static void ADDR_RN_FREE(ptrADDR_RN rn)
Definition: OSPF_Area.c:54
static void ospf_area_addressRange_init(NETSIM_ID d, ptrOSPFAREA_DS area)
Definition: OSPF_Area.c:59
void ospf_area_init(NETSIM_ID d, NETSIM_ID in)
Definition: OSPF_Area.c:101
void OSPF_AREA_SET(ptrOSPF_PDS ospf, ptrOSPFAREA_DS area)
Definition: OSPF_Area.c:43
ptrOSPFAREA_DS OSPF_AREA_GET(ptrOSPF_PDS ospf, NETSIM_ID in, OSPFID areaId, NETSIM_IPAddress interfaceIP)
Definition: OSPF_Area.c:21
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
ptrOSPFLIST ospf_list_init(void(*freeMem)(void *), void *(*copyMem)(void *))
#define OSPFID_COMPARE
Definition: OSPF_Typedef.h:42
#define DEVICE(DeviceId)
Definition: Stack.h:769
#define DEVICE_NWADDRESS(DeviceId, InterfaceId)
Definition: Stack.h:805
#define DEVICE_INTERFACE(DeviceId, InterfaceId)
Definition: Stack.h:780
unsigned int prefix_len
Definition: Stack.h:691
NETSIM_IPAddress szSubnetMask
Definition: Stack.h:690
NETSIM_IPAddress szAddress
Definition: Stack.h:688
NETSIM_IPAddress address
Definition: OSPF.h:76
NETSIM_IPAddress mask
Definition: OSPF.h:77
ADDR_RN_STATUS status
Definition: OSPF.h:78
NETSIM_ID * assocRouterInterfaceId
Definition: OSPF.h:87
UINT assocInterfaceCount
Definition: OSPF.h:85
bool extRoutingCapability
Definition: OSPF.h:94
ptrOSPFLIST addressRangeList
Definition: OSPF.h:84
ptrOSPFLIST routerLSAList
Definition: OSPF.h:89
ptrOSPFLIST routerSummaryLSAList
Definition: OSPF.h:91
ptrOSPFLIST nwLSAList
Definition: OSPF.h:90
OSPFID areaId
Definition: OSPF.h:83
ptrOSPFLIST maxAgeList
Definition: OSPF.h:93
ptrOSPFLIST nwSummaryLSAList
Definition: OSPF.h:92
NETSIM_IPAddress * assocRouterInterface
Definition: OSPF.h:86
bool extRoutingCapability
ptrOSPFAREA_DS * areaDS
Definition: OSPF.h:119
UINT areaCount
Definition: OSPF.h:116