15#ifndef _NETSIM_OSPF_MSG_H_
16#define _NETSIM_OSPF_MSG_H_
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)
50 static char strOSPFLINKTYPE[][50] = {
"NULL",
"Point_to_Point",
"Transit",
"Stub",
"Virtual" };
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)))
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))
166#define OSPFHELLO_LEN_FIXED 20
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);
265#define OSPFLSREQ_LEN_SINGLE 12
301#define OSPFLSUPDATE_LEN_FIXED 4
340#define OSPFLSACK_LEN_FIXED 0
366 "SUMMARY_LSA_ROUTER",
367 "SUMMARY_LSA_NETWORK",
402#define OSPFLSAHDR_LEN 20
451 #define OSPFRLSALINK_LEN_FIXED 12
460#define OSPFRLSA_LEN_FIXED 4
void OSPF_DD_MSG_NEW(ptrOSPFPACKETHDR hdr)
void OSPF_LSACK_NEW(ptrOSPFPACKETHDR hdr)
void OSPFLSAINFO_FREE_RLSA(ptrOSPFRLSA rlsa)
ptrOSPFLSAHDR OSPF_LSA_HDR_COPY(ptrOSPFLSAHDR lsa)
ptrOSPFLSACK OSPF_LSACK_COPY(ptrOSPFLSACK ack)
ptrOSPFRLSA OSPFLSAINFO_COPY_RLSA(ptrOSPFRLSA rlsa)
@ OSPFLINKTYPE_POINT_TO_POINT
struct stur_ospf_lsupdate OSPFLSUPDATE
ptrOSPFLSUPDATE OSPF_LSUPDATE_MSG_COPY(ptrOSPFLSUPDATE lsu)
struct stru_ospf_lsack * ptrOSPFLSACK
static char strOSPFLINKTYPE[][50]
void OSPF_SEND_PACKET(NetSim_PACKET *packet)
void OSPF_LSA_MSG_FREE(ptrOSPFLSAHDR hdr)
struct stru_ospf_DD * ptrOSPFDD
void OSPF_LSUPDATE_MSG_NEW(ptrOSPFPACKETHDR hdr)
void OSPF_HELLO_MSG_NEW(ptrOSPFPACKETHDR hdr)
ptrOSPFLSAHDR OSPF_LSA_MSG_COPY(ptrOSPFLSAHDR hdr)
void OSPF_LSA_HDR_FREE(ptrOSPFLSAHDR lsa)
struct stur_ospf_lsupdate * ptrOSPFLSUPDATE
struct stru_ospf_lsrequest OSPFLSREQ
struct stru_ospf_LSREQ_Object * ptrOSPFLSREQOBJ
static char strLSTYPE[][50]
void OSPF_HDR_FREE(ptrOSPFPACKETHDR hdr)
void OSPF_LSUPDATE_MSG_FREE(ptrOSPFLSUPDATE lsu)
void OSPF_HDR_INCREASE_LEN(NetSim_PACKET *packet, UINT16 len)
ptrOSPFLSREQ OSPF_LSREQ_MSG_COPY(ptrOSPFLSREQ lsr)
struct stru_ospf_lsack OSPFLSACK
void OSPF_LSREQ_MSG_FREE(ptrOSPFLSREQ lsr)
bool validate_ospf_packet(NetSim_PACKET *packet, NETSIM_ID d, NETSIM_ID in)
void OSPF_LSACK_FREE(ptrOSPFLSACK ack)
struct stru_ospf_rlsa_link * ptrOSPFRLSALINK
struct stru_ospf_LSREQ_Object OSPFLSREQOBJ
ptrOSPFHELLO OSPF_HELLO_MSG_COPY(ptrOSPFHELLO hello)
struct stru_ospf_DD OSPFDD
void OSPF_LSREQ_MSG_NEW(ptrOSPFPACKETHDR hdr)
ptrOSPFPACKETHDR OSPF_HDR_COPY(ptrOSPFPACKETHDR hdr)
void OSPF_HDR_SET_MSG(ptrOSPFPACKETHDR hdr, OSPFMSG type, void *msg, UINT16 len)
@ LSTYPE_SUMMARYLSA_NETWORK
@ LSTYPE_SUMMARYLSA_ROUTER
struct stru_ospf_lsrequest * ptrOSPFLSREQ
ptrOSPFDD OSPF_DD_MSG_COPY(ptrOSPFDD dd)
void OSPF_DD_MSG_FREE(ptrOSPFDD dd)
NetSim_PACKET * OSPF_PACKET_NEW(double time, OSPFMSG type, NETSIM_ID d, NETSIM_ID in)
void OSPF_HELLO_MSG_FREE(ptrOSPFHELLO hello)
struct stru_ospf_rlsa_link OSPFRLSALINK
enum enum_ospf_msg OSPFMSG
ptrOSPFLSAHDR * LSAHeader
NETSIM_IPAddress LinkStateId
NETSIM_IPAddress AdvertisingRouter
NETSIM_IPAddress NetworkMask
NETSIM_IPAddress DesignatedRouter
NETSIM_IPAddress * Neighbor
NETSIM_IPAddress BackupDesignatedRouter
ptrOSPFLSAHDR * LSAHeader
ptrOSPFRLSALINK * rlsaLink