24#ifndef _NETSIM_PACKET_H_
25#define _NETSIM_PACKET_H_
30 enum enum_SuppressionModel
33 SuppModel_Deterministics = 1,
34 SuppModel_MarkovChain,
37 enum enum_Distribution
39 Distribution_NULL = 0,
40 Distribution_Exponential = 1,
42 Distribution_Triangular,
44 Distribution_Constant,
61 PacketType_Peer_to_Peer,
62 PacketType_Erlang_Call,
67 PacketType_Interactive_Gaming,
71 static const char* strPacketType[] = {
"NULL",
"Voice",
"CBR",
"Custom",
"Database",
"Video",
"FTP",
72 "HTTP",
"E-Mail",
"Peer-to-Peer",
"Erlang Call",
"Emulation",
"Sensing",
"Basic Safety Message",
"COAP",
"Interactive Gaming",
"Control_Packet",
"Unknown" };
83 enum enum_PacketPriority
105 enum enum_PacketStatus
107 PacketStatus_NoError = 0,
108 PacketStatus_Error = 1,
109 PacketStatus_Collided = 2,
110 PacketStatus_Buffer_Dropped = 3,
111 PacketStatus_TTL_Expired = 4,
112 PacketStatus_Dropped = 5,
113 PacketStatus_MAC_Lifetime_Expired = 6,
114 PacketStatus_Dropped_Below_Rx_Sensitivity = 7,
117 static const char* strPacketStatus[] =
118 {
"Successful",
"Errored",
"Collided",
"Buffer_Dropped",
"IP_TTL_Expired",
"Dropped",
"MAC_Lifetime_Expired",
"Below_Rx_sensitivity",
"Unknown"};
119 _declspec(dllexport)
char* fn_NetSim_Config_GetPacketStatusAsString(PACKET_STATUS nStatus,
char* buf);
124 Segment_FirstSegment = 10,
125 Segment_ContinuingFragment = 11,
126 Segment_LastFragment = 01,
127 Segment_Unfragment = 00,
138 IPPROTOCOL_NULL = 0x00,
139 IPPROTOCOL_ICMP = 0x01,
140 IPPROTOCOL_IGMP = 0x02,
141 IPPROTOCOL_TCP = 0x06,
142 IPPROTOCOL_UDP = 0x11,
143 IPPROTOCOL_DSR = 0x30,
144 IPPROTOCOL_OSPF = 0x59,
145 IPPROTOCOL_PIM = 0x67,
149 typedef enum enum_ApplicationType
161 TRAFFIC_PEER_TO_PEER,
166 TRAFFIC_SENSOR_EMULATION,
168 TRAFFIC_INTERACTIVE_GAMING,
175 NETSIM_ID nApplicationId;
176 PACKET_FRAGMENT nPacketFragment;
184 APPLICATION_TYPE nAppType;
185 APPLICATION_LAYER_PROTOCOL nApplicationProtocol;
186 void* Packet_AppProtocol;
197 unsigned short int nSourcePort;
198 unsigned short int nDestinationPort;
199 TRANSPORT_LAYER_PROTOCOL nTransportProtocol;
200 void* Packet_TransportProtocol;
211 NETSIM_IPAddress szSourceIP;
212 NETSIM_IPAddress szDestIP;
213 NETSIM_IPAddress szGatewayIP;
214 NETSIM_IPAddress szNextHopIp;
215 unsigned int nTTL : 8;
216 IP_PROTOCOL_NUMBER IPProtocol;
217 NETWORK_LAYER_PROTOCOL nNetworkProtocol;
218 NETWORK_LAYER_PROTOCOL nRoutingProtocol;
219 void* Packet_NetworkProtocol;
220 void* Packet_RoutingProtocol;
221 unsigned int nPacketFlag;
233 PNETSIM_MACADDRESS szSourceMac;
234 PNETSIM_MACADDRESS szDestMac;
235 PNETSIM_MACADDRESS szNextHopMac;
236 MAC_LAYER_PROTOCOL nMACProtocol;
237 void* Packet_MACProtocol;
249 PACKET_STATUS nPacketErrorFlag;
250 PHYSICAL_LAYER_MEDIUM nPhyMedium;
251 void* Packet_PhyData;
257 unsigned char packet[MAXBUF];
258 unsigned int packet_len;
261 long long int captureTime;
262 long long int reinjectTime;
263 }PACKET_INFO, * PPACKET_INFO;
265#define MAX_PACKET_TYPE_LEN 100
269 long long int nPacketId;
270 PACKET_TYPE nPacketType;
271 unsigned int nControlDataType;
272 SERVICE_TYPE nServiceType;
273 PACKET_PRIORITY nPacketPriority;
274 QUALITY_OF_SERVICE nQOS;
278 NETSIM_ID nTransmitterId;
279 NETSIM_ID nReceiverId;
282 PPACKET_INFO szPayload;
284 char szPacketType[MAX_PACKET_TYPE_LEN];
285 PACKET_STATUS nPacketStatus;
300# define PACKET_ID(pPacket) (pPacket)->nPacketId
301# define PACKET_SERVICETYPE(pPacket) (pPacket)->nServiceType
302# define PACKET_EVENTTIME(pPacket) (pPacket)->dEventTime
303# define PACKET_SOURCE(pPacket) (pPacket)->nSourceId
304# define PACKET_DESTINATION(pPacket) (pPacket)->nDestinationId
305# define PACKET_TRANSMITTER(pPacket) (pPacket)->nTransmitterId
306# define PACKET_RECEIVER(pPacket) (pPacket)->nReceiverId
307# define PACKET_APPDATA(pPacket) (pPacket)->pstruAppData
308# define PACKET_TRXDATA(pPacket) (pPacket)->pstruTransportData
309# define PACKET_NWDATA(pPacket) (pPacket)->pstruNetworkData
310# define PACKET_MACDATA(pPacket) (pPacket)->pstruMacData
311# define PACKET_PHYDATA(pPacket) (pPacket)->pstruPhyData
312# define PACKET_PHYPROTOCOLDATA(pPacket) PACKET_PHYDATA(pPacket)->Packet_PhyData
313# define PACKET_MACPROTOCOLDATA(pPacket) PACKET_MACDATA(pPacket)->Packet_MACProtocol
314# define PACKET_NWPROTOCOLDATA(pPacket) PACKET_NWDATA(pPacket)->Packet_NetworkProtocol
315# define PACKET_TRXPROTOCOLDATA(pPacket) PACKET_TRXDATA(pPacket)->Packet_TransportProtocol
316# define PACKET_APPPROTOCOLDATA(pPacket) PACKET_APPDATA(pPacket)->Packet_AppProtocol
317# define PACKET_NEXTPACKET(pPacket) (pPacket)->pstruNextPacket
321 _declspec(dllexport) NetSim_PACKET* fn_NetSim_Packet_CreatePacket_dbg(
int nLayer,
int line,
const char* file);
323 _declspec(dllexport)
int fn_NetSim_Packet_FreeMacProtocolData(NetSim_PACKET* pstruPacket);
325 _declspec(dllexport)
int fn_NetSim_Packet_FreePacket_dbg(NetSim_PACKET** pstruPacket,
int line,
const char* file);
327 _declspec(dllexport)
int fn_NetSim_Packet_AddPacketToList_dbg(NetSim_BUFFER* pstruBuffer, NetSim_PACKET* pstruPacket,
int nInsertionType ,
int line,
const char* file);
333 _declspec(dllexport)
bool fn_NetSim_GetBufferStatus(NetSim_BUFFER* pstruBuffer);
339 _declspec(dllexport) NetSim_PACKET* fn_NetSim_Packet_GetPacketFromBuffer(NetSim_BUFFER* pstruBuffer,
int nFlag);
342 _declspec(dllexport) PACKET_STATUS fn_NetSim_Packet_DecideError(
double dBER,
long double dPacketSize);
344 _declspec(dllexport) NetSim_PACKET* fn_NetSim_Packet_CopyPacket_dbg(
const NetSim_PACKET* pstruPacket,
int line,
const char* file);
346 _declspec(dllexport) NetSim_PACKET* fn_NetSim_Packet_CopyPacketList_dbg(
const NetSim_PACKET* pstruPacket,
int line,
const char* file);
347 _declspec(dllexport)
int fn_NetSim_Packet_CopyPhyData(NetSim_PACKET* pstruDestPacket,
const NetSim_PACKET* pstruSrcPacket,
int,
const char*);
349 _declspec(dllexport)
int fn_NetSim_Packet_CopyMacData(NetSim_PACKET* pstruDestPacket,
const NetSim_PACKET* pstruSrcPacket,
int,
const char*);
351 _declspec(dllexport)
int fn_NetSim_Packet_CopyNWData(NetSim_PACKET* pstruDestPacket, NetSim_PACKET* pstruSrcPacket);
353 _declspec(dllexport)
int fn_NetSim_Packet_CopyTransportData(NetSim_PACKET* pstruDestPacket,
const NetSim_PACKET* pstruSrcPacket,
int,
const char*);
355 _declspec(dllexport)
int fn_NetSim_Packet_CopyAppData(NetSim_PACKET* pstruDestPacket,
const NetSim_PACKET* pstruSrcPacket,
int,
const char*);
357 _declspec(dllexport)
int fn_NetSim_WritePacketTrace_dbg(
const NetSim_PACKET* pstruPacket,
int line,
const char* file);
359 _declspec(dllexport)
int fnValidatePacket(
const NetSim_PACKET* pstruPacket);
361 _declspec(dllexport)
int fn_NetSim_Stack_FragmentPacket(NetSim_PACKET* pstruPacket,
int nMSS);
363 _declspec(dllexport)
double fnGetPacketSize(NetSim_PACKET* pstruData);
365 _declspec(dllexport)
char* fn_NetSim_Config_GetPacketTypeAsString(PACKET_TYPE nPacketType,
char* buffer);
366 _declspec(dllexport)
char* fn_NetSim_Config_GetControlPacketType(
const NetSim_PACKET*,
char* type);
368 _declspec(dllexport)
int fn_NetSim_Dispatch_to_emulator(NetSim_PACKET* packet);
369 _declspec(dllexport)
unsigned int getPacketInfoSize();
372 _declspec(dllexport)
void add_dest_to_packet(NetSim_PACKET* packet, NETSIM_ID dest);
373 _declspec(dllexport)
void add_destlist_to_packet(NetSim_PACKET* packet, NETSIM_ID* destlist, UINT count);
374 _declspec(dllexport) NETSIM_ID* get_dest_from_packet(NetSim_PACKET* packet, UINT* count);
375 _declspec(dllexport) NETSIM_ID get_first_dest_from_packet(NetSim_PACKET* packet);
376 _declspec(dllexport)
void remove_dest_from_packet(NetSim_PACKET* packet, NETSIM_ID dest);
377 _declspec(dllexport)
bool isDestFoundinPacket(NetSim_PACKET* packet, NETSIM_ID dest);
378 _declspec(dllexport)
bool isBroadcastPacket(NetSim_PACKET* packet);
379 _declspec(dllexport)
bool isMulticastPacket(NetSim_PACKET* packet);
382 _declspec(dllexport)
bool fn_NetSim_HWI_Send(NetSim_PACKET* packet);