4#pragma comment(lib,"Metrics.lib")
11#define fnGetList(pstruPacketlist,Priority) (pstruPacketlist+Priority/(Priority_High-Priority_Medium))
64 }
while (currPriority > 0);
81 switch (Queuing_Technique)
123 switch (Scheduling_Technique)
172 int nScheduling_Technique;
179 switch (nScheduling_Technique)
191 pstruData =
fn_NetSim_WFQ(pstruBuffer, pstruData, nType, nFlag);
194 pstruData =
fn_NetSim_EDF(pstruBuffer, pstruData, nType, nFlag);
202 if (pstruData == NULL)
208 double d_NN_DataSize;
218 fnNetSimError(
"Assert failure in scheduling. Buffer size is negative.\n");
245 unsigned long long int nMax;
249 for (nLoop = 1; nLoop < 4; nLoop++)
251 if (nCount[nLoop] >= nMax)
253 nMax = nCount[nLoop];
278 double d_NN_DataSize = 0;
279 double ldMaximumBufferSize;
280 double ldCurrentBufferSize;
295 if (ldCurrentBufferSize <= ldMaximumBufferSize)
319 double d_NN_DataSize = 0;
320 double ldCurrentBufferSize;
338 double d_NN_DataSize;
348 fnNetSimError(
"Scheduling--- Buffer size negative. how?????\n");
362 queuing_var->
count++;
367 queuing_var->
count = 0;
376 queuing_var->
count = -1;
382 queuing_var->
count = -1;
397 if (curr_buff_size_in_MB == 0)
420 double max_th,
double min_th,
double max_p,
int* count,
double* random)
426 if (min_th <= queuing_var->avg_queue_size &&
432 if (*count > 0 && *count > * random / pb)
441 else if (max_th <= queuing_var->avg_queue_size)
470 if (curr_buff_size_in_MB == 0)
481 index = (priority / 2) - 1;
490 curr_max_th = *(queuing_var->
max_th + index);
491 curr_min_th = *(queuing_var->
min_th + index);
492 curr_max_p = *(queuing_var->
max_p + index);
493 curr_count = (queuing_var->
count + index);
496 checkBuffer =
wred_algorithm(pstruBuffer, pstruData, curr_max_th, curr_min_th, curr_max_p, curr_count, curr_random);
530 while (pstruTmpBufferPacketList)
545 pstruPrevPacketList = pstruTmpBufferPacketList;
567 printf(
"\nInvalid Selection in Buffer\n");
588 pstruBuffer->
last = p;
593 pstruBuffer->
last = p;
604 pstruBuffer->
last = NULL;
611 printf(
"\nInvalid selection in Buffer\n");
639 pstruTempTraversePacketList = pstruTempTraversePacketList->
pstruNextPacket;
646 pstruTempTraversePacketList = pstruTempTraversePacketList->
pstruNextPacket;
691 printf(
"\nInvalid Selection in Buffer\n");
719 pstruTempTraversePacketList->
nPacketId++;
722 pstruTempTraversePacketList = pstruTempTraversePacketList->
pstruNextPacket;
729 pstruTempTraversePacketList->
nPacketId++;
732 pstruTempTraversePacketList = pstruTempTraversePacketList->
pstruNextPacket;
740 UINT64 nCount[4], nPosition;
749 nCount[0] = pstruLowPriorityList->
nPacketId * 1;
752 nCount[1] = pstruNormalPriorityList->
nPacketId * 2;
755 nCount[2] = pstruMediumPriorityList->
nPacketId * 3;
758 nCount[3] = pstruHighPriorityList->
nPacketId * 4;
781 printf(
"\nInvalid Selection in Buffer\n");
796 double curr_max_latency;
797 double curr_deadline;
802 while (pstruPacket_itr)
804 index = pstruPacket_itr->
nQOS - 1;
807 curr_max_latency = *(scheduling_var->
max_latency + index) * 1000;
810 if (curr_deadline < 0)
813 pstruPacket_drop = pstruPacket_itr;
817 pstruPacket_prev = pstruPacket_itr;
819 if (pstruPacket_itr == NULL)
820 pstruBuffer->
last = NULL;
826 if (pstruPacket_itr == NULL)
827 pstruBuffer->
last = pstruPacket_prev;
833 pstruPacket_prev = pstruPacket_itr;
846 double curr_max_latency;
847 double curr_deadline;
848 double earliest_deadline = (double)0xFFFFFFFFFFFFFFFF;
851 while (pstruPacket_itr)
853 index = pstruPacket_itr->
nQOS - 1;
855 return pstruPacket_itr;
857 curr_max_latency = *(scheduling_var->
max_latency + index) * 1000;
860 if (curr_deadline < earliest_deadline)
862 pstruPacket = pstruPacket_itr;
863 earliest_deadline = curr_deadline;
875 int nType,
int nFlag)
888 pstruBuffer->
last = p;
893 pstruBuffer->
last = p;
902 if (nFlag && pstruPacket != NULL)
906 if (pstruPacket_itr == pstruPacket)
910 pstruBuffer->
last = NULL;
918 pstruBuffer->
last = pstruPacket_itr;
926 printf(
"\nInvalid selection in Buffer\n");
#define _declspec(dllexport)
This function is used to trigger the update.
#define fnNetSimError(x,...)
#define fnpAllocateMemory(count, size)
void add_plot_data_formatted(PNETSIMPLOT g, char *format,...)
PNETSIMPLOT fn_NetSim_Install_Metrics_Plot(PLOT_TYPE plotType, char *menuName, char *heading,...)
@ PacketStatus_Buffer_Dropped
static void add_current_size_buffer(NetSim_BUFFER *pstruBuffer, NetSim_PACKET *pstruData)
NetSim_PACKET * fn_NetSim_GetPacketFromBuffer(NetSim_BUFFER *pstruBuffer, int nFlag)
static void * init_buffer_plot(NETSIM_ID d, NETSIM_ID in)
enum enum_BUFFER fn_NetSim_DropTail(NetSim_BUFFER *, NetSim_PACKET *)
#define fnGetList(pstruPacketlist, Priority)
bool fn_NetSim_GetBufferStatus(NetSim_BUFFER *)
static void edf_algorithm_drop_expired_packets(NetSim_BUFFER *pstruBuffer)
NetSim_PACKET * fn_NetSim_Priority(NetSim_BUFFER *, NetSim_PACKET *, int, int)
UINT64 fn_NetSim_GetPosition_MaximumNumber(UINT64 *nCount)
static void reduce_current_size_buffer(NetSim_BUFFER *pstruBuffer, NetSim_PACKET *pstruData)
enum enum_BUFFER fn_NetSim_WRED(NetSim_BUFFER *, NetSim_PACKET *)
enum enum_BUFFER fn_NetSim_CheckBuffer(NetSim_BUFFER *, NetSim_PACKET *)
enum_Buffer_Manipulation_Type
enum enum_Buffer fn_NetSim_Queuing(NetSim_BUFFER *pstruBuffer, NetSim_PACKET *pstruData)
NetSim_PACKET * fn_NetSim_EDF(NetSim_BUFFER *, NetSim_PACKET *, int, int)
static NetSim_PACKET * edf_algorithm_get_earliest_deadline_packet(NetSim_BUFFER *pstruBuffer)
NetSim_PACKET * fn_NetSim_FIFO(NetSim_BUFFER *, NetSim_PACKET *, int, int)
enum enum_BUFFER fn_NetSim_RED(NetSim_BUFFER *, NetSim_PACKET *)
static enum enum_BUFFER red_algorithm(NetSim_BUFFER *pstruBuffer, NetSim_PACKET *pstruData)
static void fn_NetSim_DropPackets(NetSim_BUFFER *, NetSim_PACKET *)
static enum enum_BUFFER wred_algorithm(NetSim_BUFFER *pstruBuffer, NetSim_PACKET *pstruData, double max_th, double min_th, double max_p, int *count, double *random)
NetSim_PACKET * fn_NetSim_RoundRobin(NetSim_BUFFER *, NetSim_PACKET *, int, int)
NetSim_PACKET * fn_NetSim_WFQ(NetSim_BUFFER *, NetSim_PACKET *, int, int)
int fn_NetSim_Packet_AddPacketToBuffer(NetSim_BUFFER *pstruBuffer, NetSim_PACKET *pstruData)
enum enum_QueuingTechnique QUEUINGTECHNIQUE
#define DEVICE_NAME(DeviceId)
#define DEVICE_INTERFACE_CONFIGID(DeviceId, InterfaceId)
EXPORTED struct stru_NetSim_EventDetails * pstruEventDetails
enum enum_SchedulingType SCHEDULING_TYPE
#define fn_NetSim_Packet_FreePacket(pstruPacket)
#define fn_NetSim_WritePacketTrace(pstruPacket)
enum enum_PacketPriority PACKET_PRIORITY
unsigned int nDroppedPacket
SCHEDULING_TYPE nSchedulingType
struct stru_NetSim_Packet * last
unsigned int nQueuedPacket
QUEUINGTECHNIQUE queuingTechnique
struct stru_NetSim_Packet * pstruPacketlist
unsigned int nDequeuedPacket
double dCurrentBufferSize
PACKET_STATUS nPacketStatus
struct stru_NetSim_Packet_NetworkLayer * pstruNetworkData
struct stru_NetSim_Packet * pstruNextPacket
PACKET_PRIORITY nPacketPriority
struct stru_NetSim_Packet_MACLayer * pstruMacData