15#ifndef _NETSIM_OSPF_MSG_H_
16#define _NETSIM_OSPF_MSG_H_
23 typedef NETSIM_IPAddress OSPFID;
25#define INTERFACE_MTU_DEFAULT 1500
27#define OSPF_INITIAL_SEQUENCE_NUMBER 0x80000001
28#define OSPF_MAX_SEQUENCE_NUMBER 0x7FFFFFFF
39#define OSPFMSG_TO_PACKETTYPE(msg) (APP_PROTOCOL_OSPF*100+msg)
40#define OSPFMSG_FROM_PACKETTYPE(type) (type/100==APP_PROTOCOL_OSPF?type%100:0)
45 OSPFLINKTYPE_POINT_TO_POINT = 1,
46 OSPFLINKTYPE_TRANSIT = 2,
47 OSPFLINKTYPE_STUB = 3,
48 OSPFLINKTYPE_VIRTUAL = 4
50 static char strOSPFLINKTYPE[][50] = {
"NULL",
"Point_to_Point",
"Transit",
"Stub",
"Virtual" };
81 UINT Authentication[2];
85#define OSPFPACKETHDR_LEN 24
86#define OSPF_HDR_SET_ROUTERID(hdr,id) ((hdr)->RouterId = id)
87#define OSPF_HDR_SET_AREAID(hdr,id) ((hdr)->AreaId = id)
88#define OSPF_MSG_TYPE(hdr) ((hdr)->Type)
89#define OSPF_MSG_IS_TYPE(hdr,type) ((hdr)->Type==type)
90#define OSPF_HDR_GET_LEN(hdr) ((hdr)->Packet_length)
91#define OSPF_PACKET_GET_HDR(packet) ((ptrOSPFPACKETHDR)((packet)->pstruAppData->Packet_AppProtocol))
92#define OSPF_PACKET_SET_HDR(packet,hdr) ((packet)->pstruAppData->Packet_AppProtocol=hdr)
93#define OSPF_HDR_GET_MSG(hdr) ((hdr)->ospfMSG)
94#define OSPF_PACKET_GET_MSG(packet) (OSPF_HDR_GET_MSG(OSPF_PACKET_GET_HDR(packet)))
95#define OSPF_PACKET_GET_MSG_TYPE(packet) (OSPF_MSG_TYPE(OSPF_PACKET_GET_HDR(packet)))
96 void OSPF_HDR_INCREASE_LEN(NetSim_PACKET* packet,
98 void OSPF_HDR_SET_MSG(ptrOSPFPACKETHDR hdr,
102 void OSPF_HDR_FREE(ptrOSPFPACKETHDR hdr);
103 ptrOSPFPACKETHDR OSPF_HDR_COPY(ptrOSPFPACKETHDR hdr);
106#define OPT_E_BIT_INDEX 2
107#define OPT_MC_BIT_INDEX 3
108#define OPT_NP_BIT_INDEX 4
109#define OPT_EA_BIT_INDEX 5
110#define OPT_DC_BIT_INDEX 6
111#define OPT_SET_E(opt) ((opt) = setBit((opt),OPT_E_BIT_INDEX))
112#define OPT_SET_MC(opt) ((opt) = setBit((opt),OPT_MC_BIT_INDEX))
113#define OPT_SET_NP(opt) ((opt) = setBit((opt),OPT_NP_BIT_INDEX))
114#define OPT_SET_EA(opt) ((opt) = setBit((opt),OPT_EA_BIT_INDEX))
115#define OPT_SET_DC(opt) ((opt) = setBit((opt),OPT_DC_BIT_INDEX))
116#define OPT_IS_E(opt) (isBitSet((opt),OPT_E_BIT_INDEX))
117#define OPT_IS_MC(opt) (isBitSet((opt),OPT_MC_BIT_INDEX))
118#define OPT_IS_NP(opt) (isBitSet((opt),OPT_NP_BIT_INDEX))
119#define OPT_IS_EA(opt) (isBitSet((opt),OPT_EA_BIT_INDEX))
120#define OPT_IS_DC(opt) (isBitSet((opt),OPT_DC_BIT_INDEX))
155 NETSIM_IPAddress NetworkMask;
156 UINT16 HelloInterval;
159 UINT RouterDeadInterval;
160 NETSIM_IPAddress DesignatedRouter;
161 NETSIM_IPAddress BackupDesignatedRouter;
162 NETSIM_IPAddress* Neighbor;
166#define OSPFHELLO_LEN_FIXED 20
167 void OSPF_HELLO_MSG_NEW(ptrOSPFPACKETHDR hdr);
168 ptrOSPFHELLO OSPF_HELLO_MSG_COPY(ptrOSPFHELLO hello);
169 void OSPF_HELLO_MSG_FREE(ptrOSPFHELLO hello);
209 UINT DDSequenceNumber;
211 ptrOSPFLSAHDR* LSAHeader;
213#define OSPFDD_LEN_FIXED 8
214#define DD_INIT_BIT_INDEX 3
215#define DD_MORE_BIT_INDEX 2
216#define DD_MASTER_BIT_INDEX 1
217#define DD_SET_INIT(dd) ((dd)->IMMS = (UINT8)setBit((dd)->IMMS,DD_INIT_BIT_INDEX))
218#define DD_SET_MORE(dd) ((dd)->IMMS = (UINT8)setBit((dd)->IMMS,DD_MORE_BIT_INDEX))
219#define DD_SET_MASTER(dd) ((dd)->IMMS = (UINT8)setBit((dd)->IMMS,DD_MASTER_BIT_INDEX))
220#define DD_IS_INIT(dd) (isBitSet((dd)->IMMS,DD_INIT_BIT_INDEX))
221#define DD_IS_MORE(dd) (isBitSet((dd)->IMMS,DD_MORE_BIT_INDEX))
222#define DD_IS_MASTER(dd) (isBitSet((dd)->IMMS,DD_MASTER_BIT_INDEX))
223#define OSPF_DD_MAX_LSA_COUNT() ((INTERFACE_MTU_DEFAULT - IP_HDR_LEN - OSPFDD_LEN_FIXED - OSPFPACKETHDR_LEN) / OSPFLSAHDR_LEN);
224 void OSPF_DD_MSG_NEW(ptrOSPFPACKETHDR hdr);
225 ptrOSPFDD OSPF_DD_MSG_COPY(ptrOSPFDD dd);
226 void OSPF_DD_MSG_FREE(ptrOSPFDD dd);
256 NETSIM_IPAddress LinkStateId;
257 NETSIM_IPAddress AdvertisingRouter;
258 }OSPFLSREQOBJ,*ptrOSPFLSREQOBJ;
263 ptrOSPFLSREQOBJ* lsrObj;
264 }OSPFLSREQ, *ptrOSPFLSREQ;
265#define OSPFLSREQ_LEN_SINGLE 12
266 void OSPF_LSREQ_MSG_NEW(ptrOSPFPACKETHDR hdr);
267 ptrOSPFLSREQ OSPF_LSREQ_MSG_COPY(ptrOSPFLSREQ lsr);
268 void OSPF_LSREQ_MSG_FREE(ptrOSPFLSREQ lsr);
300 }OSPFLSUPDATE,*ptrOSPFLSUPDATE;
301#define OSPFLSUPDATE_LEN_FIXED 4
302 void OSPF_LSUPDATE_MSG_NEW(ptrOSPFPACKETHDR hdr);
303 ptrOSPFLSUPDATE OSPF_LSUPDATE_MSG_COPY(ptrOSPFLSUPDATE lsu);
304 void OSPF_LSUPDATE_MSG_FREE(ptrOSPFLSUPDATE lsu);
338 ptrOSPFLSAHDR* LSAHeader;
339 }OSPFLSACK,*ptrOSPFLSACK;
340#define OSPFLSACK_LEN_FIXED 0
341 void OSPF_LSACK_NEW(ptrOSPFPACKETHDR hdr);
342 ptrOSPFLSACK OSPF_LSACK_COPY(ptrOSPFLSACK ack);
343 void OSPF_LSACK_FREE(ptrOSPFLSACK ack);
356 LSTYPE_ROUTERLSA = 1,
358 LSTYPE_SUMMARYLSA_ROUTER,
359 LSTYPE_SUMMARYLSA_NETWORK,
360 LSTYPE_ASEXTERNALLSA,
363 static char strLSTYPE[][50] = {
"UNKNOWN",
366 "SUMMARY_LSA_ROUTER",
367 "SUMMARY_LSA_NETWORK",
393 OSPFID AdvertisingRouter;
394 UINT LSSequenceNumber;
402#define OSPFLSAHDR_LEN 20
403 void OSPF_LSA_MSG_FREE(ptrOSPFLSAHDR hdr);
404 ptrOSPFLSAHDR OSPF_LSA_MSG_COPY(ptrOSPFLSAHDR hdr);
405 ptrOSPFLSAHDR OSPF_LSA_HDR_COPY(ptrOSPFLSAHDR lsa);
406 void OSPF_LSA_HDR_FREE(ptrOSPFLSAHDR lsa);
450 }OSPFRLSALINK,*ptrOSPFRLSALINK;
451 #define OSPFRLSALINK_LEN_FIXED 12
458 ptrOSPFRLSALINK* rlsaLink;
460#define OSPFRLSA_LEN_FIXED 4
461 void OSPFLSAINFO_FREE_RLSA(ptrOSPFRLSA rlsa);
462 ptrOSPFRLSA OSPFLSAINFO_COPY_RLSA(ptrOSPFRLSA rlsa);
465 NetSim_PACKET* OSPF_PACKET_NEW(
double time,
469 void OSPF_SEND_PACKET(NetSim_PACKET* packet);
470 bool validate_ospf_packet(NetSim_PACKET* packet,