28int P2P_MacOut_Handler()
30 NETSIM_ID d = pstruEventDetails->nDeviceId;
31 NETSIM_ID in = pstruEventDetails->nInterfaceId;
33 NetSim_BUFFER* buf = DEVICE_ACCESSBUFFER(d, in);
34 NetSim_PACKET* pstruPacket;
36 if (pstruEventDetails->nSubEventType == P2P_MAC_IDLE)
38 P2P_MAC_SET_IDLE(d, in);
39 pstruEventDetails->nSubEventType = 0;
42 if (P2P_MAC_IS_BUSY(d, in))
return -1;
45 pstruPacket = fn_NetSim_Packet_GetPacketFromBuffer(buf, 1);
46 if (!pstruPacket)
return -2;
48 fnValidatePacket(pstruPacket);
50 P2P_MAC_SET_BUSY(d, in);
55 pstruPacket->pstruMacData->dArrivalTime = ldEventTime;
56 pstruPacket->pstruMacData->dEndTime = ldEventTime;
57 if (pstruPacket->pstruNetworkData)
59 pstruPacket->pstruMacData->dOverhead = 0;
60 pstruPacket->pstruMacData->dPayload = pstruPacket->pstruNetworkData->dPacketSize;
61 pstruPacket->pstruMacData->dPacketSize = pstruPacket->pstruMacData->dOverhead +
62 pstruPacket->pstruMacData->dPayload;
64 if (pstruPacket->pstruMacData->Packet_MACProtocol &&
65 !pstruPacket->pstruMacData->dontFree)
67 fn_NetSim_Packet_FreeMacProtocolData(pstruPacket);
68 pstruPacket->pstruMacData->Packet_MACProtocol = NULL;
70 pstruPacket->pstruMacData->nMACProtocol = pstruEventDetails->nProtocolId;
71 pstruPacket->pstruMacData->dStartTime = ldEventTime;
73 pstruEventDetails->dEventTime = ldEventTime;
74 pstruEventDetails->nEventType = PHYSICAL_OUT_EVENT;
75 pstruEventDetails->pPacket = pstruPacket;
76 pstruEventDetails->nPacketId = pstruPacket->nPacketId;
77 if (pstruPacket->pstruAppData)
79 pstruEventDetails->nApplicationId = pstruPacket->pstruAppData->nApplicationId;
80 pstruEventDetails->nSegmentId = pstruPacket->pstruAppData->nSegmentId;
84 pstruEventDetails->nApplicationId = 0;
85 pstruEventDetails->nSegmentId = 0;
88 fnpAddEvent(pstruEventDetails);
92int P2P_MacIn_Handler()
94 NETSIM_ID d = pstruEventDetails->nDeviceId;
95 NETSIM_ID in = pstruEventDetails->nInterfaceId;
96 NetSim_PACKET* packet = pstruEventDetails->pPacket;
97 if (DEVICE_NWLAYER(d))
101 pstruEventDetails->dEventTime = ldEventTime;
102 pstruEventDetails->nEventType = NETWORK_IN_EVENT;
103 pstruEventDetails->nProtocolId = fn_NetSim_Stack_GetNWProtocol(d);
105 fnpAddEvent(pstruEventDetails);
109 bool isTransmitted =
false;
112 for (i = 0; i < DEVICE(d)->nNumOfInterface; i++)
117 NetSim_BUFFER* buf = DEVICE_ACCESSBUFFER(d, i + 1);
119 if (!fn_NetSim_GetBufferStatus(buf))
122 pstruEventDetails->dEventTime = ldEventTime;
123 pstruEventDetails->nEventType = MAC_OUT_EVENT;
124 pstruEventDetails->nInterfaceId = i + 1;
125 pstruEventDetails->pPacket = NULL;
126 pstruEventDetails->nProtocolId = fn_NetSim_Stack_GetMacProtocol(d, i + 1);
128 fnpAddEvent(pstruEventDetails);
131 fn_NetSim_Packet_AddPacketToList(buf,
132 isTransmitted ==
false ? packet : fn_NetSim_Packet_CopyPacket(packet), 0);
133 isTransmitted =
true;