16unsigned int nBurstId=0;
22int fn_NetSim_Cellular_FormBurst(NetSim_PACKET* packet,Cellular_MS_MAC* MSMac)
26 NetSim_PACKET* temp,*temp1;
27 NETSIM_ID nApplicationId=packet->pstruAppData->nApplicationId;
28 NETSIM_ID nSourceId=packet->nSourceId;
29 NETSIM_ID nDestinationId = get_first_dest_from_packet(packet);
30 if(MSMac->pstruPacketList==NULL)
33 MSMac->pstruPacketList=calloc(NETWORK->nApplicationCount+1,
sizeof* MSMac->pstruPacketList);
34 for(i=0;i<NETWORK->nApplicationCount+1;i++)
36 MSMac->pstruPacketList[i]=calloc(NETWORK->nDeviceCount,
sizeof* MSMac->pstruPacketList[i]);
37 for(j=0;j<NETWORK->nDeviceCount;j++)
39 MSMac->pstruPacketList[i][j]=calloc(NETWORK->nDeviceCount,
sizeof* MSMac->pstruPacketList[i][j]);
43 if(pstruEventDetails->nProtocolId==MAC_PROTOCOL_GSM)
45 dPacketSize=packet->pstruNetworkData->dPacketSize;
47 temp1=MSMac->pstruPacketList[nApplicationId][nSourceId-1][nDestinationId-1];
48 if(temp1==NULL)flag=1;
49 while(temp1 && temp1->pstruNextPacket)
50 temp1=temp1->pstruNextPacket;
53 Cellular_PACKET* gsmPacket=calloc(1,
sizeof* gsmPacket);
54 temp=fn_NetSim_Packet_CopyPacket(packet);
55 temp->pstruMacData->dArrivalTime=packet->pstruNetworkData->dEndTime;
56 if(dPacketSize>=GSM_PAYLOAD)
58 temp->pstruMacData->dPayload=GSM_PAYLOAD;
59 temp->pstruAppData->dPayload=GSM_PAYLOAD;
60 temp->pstruTransportData->dPayload=GSM_PAYLOAD;
61 temp->pstruNetworkData->dPayload=GSM_PAYLOAD;
65 temp->pstruMacData->dPayload=dPacketSize;
66 temp->pstruAppData->dPayload=dPacketSize;
67 temp->pstruTransportData->dPayload=dPacketSize;
68 temp->pstruNetworkData->dPayload=dPacketSize;
70 dPacketSize-=GSM_PAYLOAD;
71 temp->pstruMacData->nMACProtocol=MAC_PROTOCOL_GSM;
72 temp->pstruMacData->Packet_MACProtocol=gsmPacket;
73 gsmPacket->nId=nBurstId;
74 gsmPacket->originalPacket=packet;
75 gsmPacket->nApplicationId=nApplicationId;
80 temp1->pstruNextPacket=temp;
86 MSMac->pstruPacketList[nApplicationId][nSourceId-1][nDestinationId-1]=temp;
90 else if(pstruEventDetails->nProtocolId==MAC_PROTOCOL_CDMA)
92 Cellular_PACKET* gsmPacket=calloc(1,
sizeof* gsmPacket);
93 temp1=MSMac->pstruPacketList[nApplicationId][nSourceId-1][nDestinationId-1];
94 if(temp1==NULL)flag=1;
95 while(temp1 && temp1->pstruNextPacket)
96 temp1=temp1->pstruNextPacket;
98 temp->pstruMacData->dArrivalTime=packet->pstruNetworkData->dEndTime;
99 temp->pstruMacData->dPayload=packet->pstruNetworkData->dPacketSize;
100 temp->pstruMacData->nMACProtocol=MAC_PROTOCOL_CDMA;
101 temp->pstruMacData->Packet_MACProtocol=gsmPacket;
103 gsmPacket->originalPacket=packet;
104 gsmPacket->nApplicationId=nApplicationId;
108 temp1->pstruNextPacket=temp;
114 MSMac->pstruPacketList[nApplicationId][nSourceId-1][nDestinationId-1]=temp;
117 if(flag && MSMac->pstruAllocatedChannel)
120 Cellular_PACKET* gsmPacket;
121 Cellular_CHANNEL* channel=MSMac->pstruAllocatedChannel;
122 NetSim_PACKET* packet=MSMac->pstruPacketList[channel->
nApplicationId][channel->
nMSId-1][channel->nDestId-1];
123 packet->pstruMacData->dEndTime=pstruEventDetails->dEventTime;
124 if(pstruEventDetails->nProtocolId==MAC_PROTOCOL_GSM)
125 packet->pstruMacData->dOverhead=GSM_OVERHEAD;
127 packet->pstruMacData->dOverhead=0;
128 packet->pstruMacData->dPacketSize=packet->pstruMacData->dOverhead+packet->pstruMacData->dPayload;
129 packet->pstruMacData->dStartTime=pstruEventDetails->dEventTime;
130 gsmPacket=packet->pstruMacData->Packet_MACProtocol;
131 gsmPacket->nTimeSlot=channel->nTimeSlot;
133 if(DEVICE_PHYLAYER(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId)->dLastPacketEndTime>pstruEventDetails->dEventTime)
134 pstruEventDetails->dEventTime=DEVICE_PHYLAYER(pstruEventDetails->nDeviceId,pstruEventDetails->nInterfaceId)->dLastPacketEndTime;
135 pstruEventDetails->dPacketSize=fnGetPacketSize(packet);
136 pstruEventDetails->nApplicationId=packet->pstruAppData->nApplicationId;
137 pstruEventDetails->nEventType=PHYSICAL_OUT_EVENT;
138 pstruEventDetails->nPacketId=packet->nPacketId;
139 pstruEventDetails->nSegmentId=packet->pstruAppData->nSegmentId;
140 pstruEventDetails->pPacket=packet;
141 fnpAddEvent(pstruEventDetails);
142 MSMac->pstruPacketList[channel->
nApplicationId][channel->
nMSId-1][channel->nDestId-1]=MSMac->pstruPacketList[channel->
nApplicationId][channel->
nMSId-1][channel->nDestId-1]->pstruNextPacket;
149int fn_NetSim_Cellular_MS_ReassembleBurst()
151 NetSim_PACKET* temp=pstruEventDetails->pPacket;
152 Cellular_PACKET* gsmPacket=pstruEventDetails->pPacket->pstruMacData->Packet_MACProtocol;
153 if(gsmPacket->isLast)
155 NetSim_PACKET* packet=gsmPacket->originalPacket;
157 pstruEventDetails->dPacketSize=fnGetPacketSize(packet);
158 pstruEventDetails->nEventType=NETWORK_IN_EVENT;
159 pstruEventDetails->nPacketId=packet->nPacketId;
160 pstruEventDetails->nProtocolId=fn_NetSim_Stack_GetNWProtocol(pstruEventDetails->nDeviceId);
161 pstruEventDetails->pPacket=packet;
162 fnpAddEvent(pstruEventDetails);
164 if(temp->pstruMacData->nMACProtocol==MAC_PROTOCOL_GSM)
165 fn_NetSim_Packet_FreePacket(temp);