24#pragma region HEADER_FILES
28#include "LTENR_NetworkSlicing.h"
33static FILE* fpPRBLog = NULL;
34static FILE* fpSLICELog = NULL;
35void fn_NetSim_LTE_MAC_PRBLOG()
37 if (get_protocol_log_status(
"LTENR_Radio_Resource_Allocation"))
42 sprintf(str,
"%s\\%s", pszIOLogPath,
"NTN_Radio_Resource_Allocation.csv");
44 sprintf(str,
"%s\\%s", pszIOLogPath,
"LTENR_Radio_Resource_Allocation.csv");
45 fpPRBLog = fopen(str,
"w");
49 fnSystemError(
"Unable to open LTENR_Radio_Resource_Allocation.csv file");
53 fprintf(fpPRBLog,
"%s,%s,%s,%s,",
54 "gNB ID",
"CC ID",
"Slot ID",
"Slot");
56 fprintf(fpPRBLog,
"%s,%s,%s,%s,%s,",
57 "Total PRBs",
"Control PRBs",
"Slot Start Time(ms)",
"Slot End Time(ms)",
"UE ID");
59 fprintf(fpPRBLog,
"%s,%s,%s,%s,%s,%s,",
60 "BitsPerPRB",
"BufferFill(B)",
"Allocated PRBs",
"Rank",
"EWMA MAC Throughput (Mbps)",
"Index Bias");
65 fprintf(fpPRBLog,
"%s,",
"Beam Id");
67 fprintf(fpPRBLog,
"%s,%s,%s,",
68 "Slice ID",
"Slice Type",
"Slice Differentiator");
71 fprintf(fpPRBLog,
"%s,%s,%s,",
72 "phi",
"Lambda_L",
"Lambda_U");
74 fprintf(fpPRBLog,
"\n");
77 if (nDbgFlag) fflush(fpPRBLog);
82void close_ltenr_PRB_log()
88static void write_prb_log(ptrLTENR_SCHEDULERINFO schedulerInfo, ptrLTENR_UESCHEDULERINFO list, UINT sliceId)
90 if (fpPRBLog == NULL)
return;
92 ptrLTENR_GNBPHY phy = LTENR_GNBPHY_GET(schedulerInfo->gnbId, schedulerInfo->gnbIf);
93 int CA_ID = phy->currentFrameInfo->Current_CA_ID;
94 LTENR_SLOTTYPE slotType = phy->frameInfo[CA_ID]->slotType;
95 double control_prb = (slotType == SLOT_UPLINK ? (ceil(schedulerInfo->OH_UL * schedulerInfo->PRBCount)) :
96 (ceil(schedulerInfo->OH_DL * schedulerInfo->PRBCount))) + schedulerInfo->TotalPRBReqdForHARQRetransmission;
99 if(list->bufferSize<=0)
101 if (nws->rsrcSharingTechnique== LTENR_RESOURCE_SHARING_STATIC && nws->ueSliceId[list->ueId] != sliceId)
103 fprintf(fpPRBLog,
"%d, %d, %d,%s,",
104 fn_NetSim_Stack_GetConfigIdOfDeviceById(schedulerInfo->gnbId), CA_ID + 1, phy->currentFrameInfo->slotId,
105 slotType == SLOT_UPLINK ?
"Uplink" :
"Downlink");
107 fprintf(fpPRBLog,
"%u, %lf, %lf, %lf,%d,", schedulerInfo->PRBCount,
108 control_prb, phy->currentFrameInfo->slotStartTime / MILLISECOND,
109 phy->currentFrameInfo->slotEndTime / MILLISECOND, fn_NetSim_Stack_GetConfigIdOfDeviceById(list->ueId));
110 double ewma = schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_PF_WITH_RG ?
111 list->dThetaAverage : list->var2;
112 fprintf(fpPRBLog,
"%llu,%u,%u,%lf,%lf,",
113 list->bitsPerPRB, list->bufferSize,
114 list->allocatedPRBCount,
116 int slID = (nws->rsrcSharingTechnique == LTENR_RESOURCE_SHARING_DYNAMIC)?nws->ueSliceId[list->ueId]: sliceId;
118 if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_PF_WITH_RG)
124 if (slotType == SLOT_UPLINK)
125 nu = nws->Info[slID].uplinkBandwidth.nu;
127 nu = nws->Info[slID].downlinkBandwidth.nu;
129 fprintf(fpPRBLog,
"%lf,", nu);
134 fprintf(fpPRBLog,
"%d,", slID+1);
137 fprintf(fpPRBLog,
"%d,%s,%d,",
139 strSLICE_SERVICE_TYPE[nws->Info[slID].sliceServiceType],
140 nws->Info[slID].sliceDifferentiator);
143 fprintf(fpPRBLog,
"%lf,%lf,%lf,",
144 list->dPhi,list->lambda_L,list->lambda_U);
146 fprintf(fpPRBLog,
"\n");
151 if (nDbgFlag) fflush(fpPRBLog);
154static void fn_NetSim_PRB_Utilization_log(ptrLTENR_SCHEDULERINFO schedulerInfo, ptrLTENR_UESCHEDULERINFO list, UINT sliceId)
156 ptrLTENR_GNBPHY phy = LTENR_GNBPHY_GET(schedulerInfo->gnbId, schedulerInfo->gnbIf);
157 int CA_ID = phy->currentFrameInfo->Current_CA_ID;
158 LTENR_SLOTTYPE slotType = phy->frameInfo[CA_ID]->slotType;
159 UINT control_prb = (slotType == SLOT_UPLINK ? (ceil(schedulerInfo->OH_UL * schedulerInfo->PRBCount)) :
160 (ceil(schedulerInfo->OH_DL * schedulerInfo->PRBCount)));
161 double slotStartTime = phy->currentFrameInfo->slotStartTime / MILLISECOND;
162 double availablePRBs = schedulerInfo->PRBCount - control_prb;
165 UINT sliceCount = nws->sliceCount + 1;
166 UINT* slicePRBMap = (UINT*)calloc(sliceCount,
sizeof(UINT));
167 bool* sliceLogged = (
bool*)calloc(sliceCount,
sizeof(
bool));
170 if (nws->rsrcSharingTechnique == LTENR_RESOURCE_SHARING_STATIC && nws->ueSliceId[list->ueId] != sliceId)
172 slID = (nws->rsrcSharingTechnique == LTENR_RESOURCE_SHARING_DYNAMIC) ? nws->ueSliceId[list->ueId] : sliceId;
174 slicePRBMap[slID] += list->allocatedPRBCount;
175 sliceLogged[slID] =
true;
181 for (UINT i = 0; i < sliceCount;i++)
185 if (slotType == SLOT_UPLINK)
187 LTENR_PRBUtilization_AddEntry(schedulerInfo->gnbId, CA_ID, i, 1, slicePRBMap[i], slotStartTime, availablePRBs, schedulerInfo->PRBCount, control_prb);
191 LTENR_PRBUtilization_AddEntry(schedulerInfo->gnbId, CA_ID, i, 0, slicePRBMap[i], slotStartTime, availablePRBs, schedulerInfo->PRBCount, control_prb);
203#pragma region SORTING_OF_RANK
204ptrLTENR_UESCHEDULERINFO LTENR_PRB_SortingofRank(ptrLTENR_UESCHEDULERINFO list)
206 ptrLTENR_UESCHEDULERINFO head = NULL;
207 ptrLTENR_UESCHEDULERINFO tail = NULL;
208 ptrLTENR_UESCHEDULERINFO t = NULL;
221 if (list->rank >= head->rank)
231 if (list->rank <= tail->rank)
244 ptrLTENR_UESCHEDULERINFO info = head;
245 while (info->next && info->next->rank > list->rank)
251 list->next = info->next;
261#pragma region SET_RANK
262static void LTENR_PRB_SetRank(ptrLTENR_UESCHEDULERINFO list, ptrLTENR_SCHEDULERINFO schedulerInfo) {
263 double sigmaofBitperPRB = 0;
264 ptrLTENR_UESCHEDULERINFO current = list;
265 if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_ROUNDROBIN) {
268 list->initRank = 1.0;
273 else if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_PROPORTIONALFAIR) {
282 else if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_FAIR_SCHEDULING) {
285 sigmaofBitperPRB += current->bitsPerPRB;
286 current = current->next;
290 if (sigmaofBitperPRB) {
291 current->rank = (double)(current->bitsPerPRB / sigmaofBitperPRB);
292 product *= current->rank;
293 current->initRank = current->rank;
295 current = current->next;
301 current->rank = product / current->rank;
302 current->initRank = current->rank;
304 current = current->next;
310#pragma region UPDATE_AND_RESET_RANK
311static void LTENR_PRB_ResetAllocationPRBCount(ptrLTENR_UESCHEDULERINFO list) {
312 NETSIM_ID gnbId = pstruEventDetails->nDeviceId;
313 NETSIM_ID gnbIf = pstruEventDetails->nInterfaceId;
314 ptrLTENR_GNBPHY phy = LTENR_GNBPHY_GET(gnbId, gnbIf);
315 int CA_ID = phy->currentFrameInfo->Current_CA_ID;
316 ptrLTENR_CA ca = phy->spectrumConfig->CA[CA_ID];
319 double rate = ((list->allocatedPRBCount * list->bitsPerPRB) / ca->slotDuration_us);
320 list->averageThroughput = list->averageThroughput + nws->EWMA_Learning_Rate*
321 (rate - list->averageThroughput);
322 list->allocatedPRBCount = 0;
327static void LTENR_PRB_UpdateRank_RoundRobin(ptrLTENR_UESCHEDULERINFO list) {
328 bool isanyzero =
false;
329 ptrLTENR_UESCHEDULERINFO info = list;
331 list->rank = (list->rank - (list->allocatedPRBCount / initTotalPRBAvailable));
401static void LTENR_PRB_UpdateSumAvgThroughput_ProportionalFair(ptrLTENR_UESCHEDULERINFO list)
403 NETSIM_ID gnbId = pstruEventDetails->nDeviceId;
404 NETSIM_ID gnbIf = pstruEventDetails->nInterfaceId;
405 ptrLTENR_GNBPHY phy = LTENR_GNBPHY_GET(gnbId, gnbIf);
407#pragma warning (disable : 4047)
408 int CA_ID = pstruEventDetails->szOtherDetails;
409#pragma warning (default : 4047)
411 LTENR_SLOTTYPE slotType = phy->frameInfo[CA_ID]->slotType;
413 for(
int sliceId =0; sliceId <=nws->sliceCount; sliceId++)
415 ptrLTENR_UESCHEDULERINFO temp = list;
416 if (slotType == SLOT_DOWNLINK)
417 nws->Info[sliceId].downlinkBandwidth.sumAvgThroughput = 0;
418 else if(slotType == SLOT_UPLINK)
419 nws->Info[sliceId].uplinkBandwidth.sumAvgThroughput = 0;
421 fnNetSimError(
"Unknown slot type %s in %s\n",
422 strLTENR_SLOTTYPE[slotType],
426 if (nws->ueSliceId[temp->ueId] == sliceId)
428 if (slotType == SLOT_DOWNLINK)
429 nws->Info[sliceId].downlinkBandwidth.sumAvgThroughput += temp->averageThroughput;
430 else if(slotType == SLOT_UPLINK)
431 nws->Info[sliceId].uplinkBandwidth.sumAvgThroughput += temp->averageThroughput;
433 fnNetSimError(
"Unknown slot type %s in %s\n",
434 strLTENR_SLOTTYPE[slotType],
442static void LTENR_PRB_UpdateRank_ProportionalFair(ptrLTENR_UESCHEDULERINFO list,
double alpha)
444 if (list->bufferSize > 0)
446 LTENR_PRB_UpdateSumAvgThroughput_ProportionalFair(list);
454 list->var2 = list->averageThroughput;
455 if (list->var2 == 0) list->var2 = 1;
460static void LTENR_PRB_InitRank_ProportionalFair(ptrLTENR_UESCHEDULERINFO list)
462 NETSIM_ID gnbId = pstruEventDetails->nDeviceId;
463 NETSIM_ID gnbIf = pstruEventDetails->nInterfaceId;
464 ptrLTENR_GNBPHY phy = LTENR_GNBPHY_GET(gnbId, gnbIf);
466#pragma warning (disable : 4047)
467 int CA_ID = pstruEventDetails->szOtherDetails;
468#pragma warning (default : 4047)
470 LTENR_SLOTTYPE slotType = phy->frameInfo[CA_ID]->slotType;
478 if (slotType == SLOT_DOWNLINK)
479 list->rank = list->bitsPerPRB *((1.0 / list->var2) + nws->Info[nws->ueSliceId[list->ueId]].downlinkBandwidth.nu);
480 else if(slotType == SLOT_UPLINK)
481 list->rank = list->bitsPerPRB *((1.0 / list->var2) + nws->Info[nws->ueSliceId[list->ueId]].uplinkBandwidth.nu);
483 fnNetSimError(
"Unknown slot type %s in %s\n",
484 strLTENR_SLOTTYPE[slotType],
490static void LTENR_PRB_InitRank_MaxThroughput(ptrLTENR_UESCHEDULERINFO list)
492 ptrLTENR_UESCHEDULERINFO info = list;
495 info->rank = info->bitsPerPRB;
500static void LTENR_PRB_UpdateRank_FAIR(ptrLTENR_UESCHEDULERINFO list) {
501 double min_rank = INT_MAX;
503 bool isnegative =
false;
504 ptrLTENR_UESCHEDULERINFO current = list;
506 if (current->initRank < min_rank)
507 min_rank = current->initRank;
508 product *= current->rank;
509 current = current->next;
513 current->rank = current->rank - (min_rank * (current->allocatedPRBCount / initTotalPRBAvailable));
514 if (current->rank <= 0)
516 current = current->next;
521 current->rank = current->rank + current->initRank;
522 current = current->next;
528#pragma region ALLOCATE_RESOURCE
529static void NTN_AllocatePRB(ptrLTENR_SCHEDULERINFO schedulerInfo, ptrLTENR_UESCHEDULERINFO* curr, UINT totalPRBAvailable, UINT sliceId)
531 ptrLTENR_UESCHEDULERINFO current = *curr;
532 if (schedulerInfo->isUERRCSetUpCompleted ==
false)
return;
534 if (!schedulerInfo->isPRBRankInit)
537 LTENR_PRB_SetRank(schedulerInfo->downlinkInfo, schedulerInfo);
538 LTENR_PRB_SetRank(schedulerInfo->uplinkInfo, schedulerInfo);
539 schedulerInfo->isPRBRankInit = TRUE;
542 if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_PROPORTIONALFAIR)
543 LTENR_PRB_InitRank_ProportionalFair(current);
544 else if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_MAXTHROUGHTPUT)
545 LTENR_PRB_InitRank_MaxThroughput(current);
548 UINT totalPRB = totalPRBAvailable;
549 current = LTENR_PRB_SortingofRank(current);
550 ptrLTENR_UESCHEDULERINFO current1 = current;
553 while (current && totalPRBAvailable > 0)
555 if (nws->rsrcSharingTechnique == LTENR_RESOURCE_SHARING_STATIC &&
556 nws->ueSliceId[current->ueId] != sliceId)
558 if (current->bitsPerPRB > 0)
560 UINT PRBallocation = (UINT)ceil(current->bufferSize * 8.0 / (current->bitsPerPRB));
562 if (PRBallocation < totalPRBAvailable) {
563 current->allocatedPRBCount += PRBallocation;
564 totalPRBAvailable -= current->allocatedPRBCount;
568 ptrLTENR_BwpSwitch bwp_switch = LTENR_BWP_Switch(schedulerInfo, current1, PRBallocation);
570 if (bwp_switch->bwp_active) {
571 if (PRBallocation > bwp_switch->prb_count) {
572 current->allocatedPRBCount = bwp_switch->prb_count;
573 totalPRBAvailable = 0;
575 else if (PRBallocation <= bwp_switch->prb_count) {
576 current->allocatedPRBCount = PRBallocation;
577 totalPRBAvailable = bwp_switch->prb_count - PRBallocation;
580 else if (!bwp_switch->bwp_active)
582 current->allocatedPRBCount = totalPRBAvailable;
583 totalPRBAvailable = 0;
589 current = current->next;
592 if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_FAIR_SCHEDULING)
593 LTENR_PRB_UpdateRank_FAIR(current1);
594 else if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_ROUNDROBIN)
595 LTENR_PRB_UpdateRank_RoundRobin(current1);
596 else if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_PROPORTIONALFAIR)
597 LTENR_PRB_UpdateRank_ProportionalFair(current1, schedulerInfo->alpha);
599 write_prb_log(schedulerInfo, current1, sliceId);
600 fn_NetSim_PRB_Utilization_log(schedulerInfo, current1, sliceId);
603static void LTENR_PRB_AllocatePRB(ptrLTENR_SCHEDULERINFO schedulerInfo, ptrLTENR_UESCHEDULERINFO* curr, UINT totalPRBAvailable, UINT sliceId)
605 ptrLTENR_UESCHEDULERINFO current = *curr;
606 if (schedulerInfo->isUERRCSetUpCompleted ==
false)
return;
609 if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_PF_WITH_RG)
614 PFS_RG_AllocatePRB(¤t, schedulerInfo, sliceId);
616 write_prb_log(schedulerInfo, current, sliceId);
617 fn_NetSim_PRB_Utilization_log(schedulerInfo, current, sliceId);
621 if (!schedulerInfo->isPRBRankInit)
624 LTENR_PRB_SetRank(schedulerInfo->downlinkInfo, schedulerInfo);
625 LTENR_PRB_SetRank(schedulerInfo->uplinkInfo, schedulerInfo);
626 schedulerInfo->isPRBRankInit = TRUE;
629 if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_PROPORTIONALFAIR)
630 LTENR_PRB_InitRank_ProportionalFair(current);
631 else if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_MAXTHROUGHTPUT)
632 LTENR_PRB_InitRank_MaxThroughput(current);
635 UINT totalPRB = totalPRBAvailable;
636 current = LTENR_PRB_SortingofRank(current);
637 ptrLTENR_UESCHEDULERINFO current1 = current;
640 while (current && totalPRBAvailable > 0)
642 if (nws->rsrcSharingTechnique == LTENR_RESOURCE_SHARING_STATIC &&
643 nws->ueSliceId[current->ueId] != sliceId)
645 if (current->bitsPerPRB > 0)
647 UINT PRBallocation = (UINT)ceil(current->bufferSize * 8.0 / (current->bitsPerPRB));
649 if (PRBallocation < totalPRBAvailable) {
650 current->allocatedPRBCount += PRBallocation;
651 totalPRBAvailable -= current->allocatedPRBCount;
655 ptrLTENR_BwpSwitch bwp_switch = LTENR_BWP_Switch(schedulerInfo, current1, PRBallocation);
657 if (bwp_switch->bwp_active) {
658 if (PRBallocation > bwp_switch->prb_count) {
659 current->allocatedPRBCount = bwp_switch->prb_count;
660 totalPRBAvailable = 0;
662 else if (PRBallocation <= bwp_switch->prb_count) {
663 current->allocatedPRBCount = PRBallocation;
664 totalPRBAvailable = bwp_switch->prb_count - PRBallocation;
667 else if (!bwp_switch->bwp_active)
669 current->allocatedPRBCount = totalPRBAvailable;
670 totalPRBAvailable = 0;
676 current = current->next;
678 if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_FAIR_SCHEDULING)
679 LTENR_PRB_UpdateRank_FAIR(current1);
680 else if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_ROUNDROBIN)
681 LTENR_PRB_UpdateRank_RoundRobin(current1);
682 else if (schedulerInfo->schedulingType == LTENR_MAC_SCHEDULING_PROPORTIONALFAIR)
683 LTENR_PRB_UpdateRank_ProportionalFair(current1, schedulerInfo->alpha);
685 write_prb_log(schedulerInfo, current1, sliceId);
686 fn_NetSim_PRB_Utilization_log(schedulerInfo, current1, sliceId);
689static int sumofAllocation(ptrLTENR_UESCHEDULERINFO list)
691 int totalPRBAllocated = 0;
693 totalPRBAllocated += list->allocatedPRBCount;
696 return totalPRBAllocated;
700#pragma region RESOURCE_SCHEDULER
702void LTENR_PRB_Scheduler(ptrLTENR_SCHEDULERINFO schedulerInfo) {
703 NETSIM_ID gnbId = pstruEventDetails->nDeviceId;
704 NETSIM_ID gnbIf = pstruEventDetails->nInterfaceId;
705 ptrLTENR_GNBPHY phy = LTENR_GNBPHY_GET(gnbId, gnbIf);
706 int CA_ID = phy->currentFrameInfo->Current_CA_ID;
707 LTENR_SLOTTYPE slotType = phy->frameInfo[CA_ID]->slotType;
708 UINT totalPRBAvailable = schedulerInfo->PRBCount;
709 initTotalPRBAvailable = totalPRBAvailable;
711 if (slotType == SLOT_UPLINK) {
712 if (!schedulerInfo->uplinkInfo) {
716 totalPRBAvailable -= (UINT)ceil(totalPRBAvailable * schedulerInfo->OH_UL);
717 LTENR_PRB_ResetAllocationPRBCount(schedulerInfo->uplinkInfo);
720 totalPRBAvailable -= schedulerInfo->TotalPRBReqdForHARQRetransmission;
724 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(gnbId, gnbIf);
725 if (nws->isSlicing && nws->rsrcSharingTechnique == LTENR_RESOURCE_SHARING_STATIC)
727 double PRB_fraction = (double)totalPRBAvailable / 100;
728 UINT PRBforSlice = totalPRBAvailable;
729 for (
int i = 0; i <= nws->sliceCount; i++)
731 PRBforSlice = (UINT)(PRB_fraction * nws->Info[i].uplinkBandwidth.resourceAllocationPercentage);
732 LTENR_PRB_AllocatePRB(schedulerInfo, &schedulerInfo->uplinkInfo, PRBforSlice, i);
736 LTENR_PRB_AllocatePRB(schedulerInfo, &schedulerInfo->uplinkInfo, totalPRBAvailable, 0);
739 else if (schedulerInfo->slotType == SLOT_DOWNLINK) {
740 if (!schedulerInfo->downlinkInfo) {
744 totalPRBAvailable -= (UINT)ceil(totalPRBAvailable * schedulerInfo->OH_DL);
745 LTENR_PRB_ResetAllocationPRBCount(schedulerInfo->downlinkInfo);
748 totalPRBAvailable -= schedulerInfo->TotalPRBReqdForHARQRetransmission;
751 ptrLTENR_PROTODATA pd = LTENR_PROTODATA_GET(gnbId, gnbIf);
755 ptrNTN_PROPAGATIONCONFIG ntnInfo = getNTN_PropInfo();
757 for (
int i = 0; i <ntnInfo->beamCount; i++)
759 PRBforSlice = (UINT)(totalPRBAvailable/ntnInfo->channelCount);
760 NTN_AllocatePRB(schedulerInfo, &schedulerInfo->downlinkInfo, totalPRBAvailable, i);
765 if (nws->isSlicing && nws->rsrcSharingTechnique == LTENR_RESOURCE_SHARING_STATIC)
767 double PRB_fraction = (double)totalPRBAvailable / 100;
768 UINT PRBforSlice = totalPRBAvailable;
769 for (
int i = 0; i <= nws->sliceCount; i++)
771 PRBforSlice = (UINT)(PRB_fraction * nws->Info[i].downlinkBandwidth.resourceAllocationPercentage);
772 LTENR_PRB_AllocatePRB(schedulerInfo, &schedulerInfo->downlinkInfo, PRBforSlice, i);
776 LTENR_PRB_AllocatePRB(schedulerInfo, &schedulerInfo->downlinkInfo, totalPRBAvailable, 0);
781 fnNetSimError(
"Unknown slot type %s in %s\n",
782 strLTENR_SLOTTYPE[schedulerInfo->slotType],