1 /*******************************************************************************
2 ################################################################################
3 # Copyright (c) [2017-2019] [Radisys] #
5 # Licensed under the Apache License, Version 2.0 (the "License"); #
6 # you may not use this file except in compliance with the License. #
7 # You may obtain a copy of the License at #
9 # http://www.apache.org/licenses/LICENSE-2.0 #
11 # Unless required by applicable law or agreed to in writing, software #
12 # distributed under the License is distributed on an "AS IS" BASIS, #
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
14 # See the License for the specific language governing permissions and #
15 # limitations under the License. #
16 ################################################################################
17 *******************************************************************************/
19 /**********************************************************************
29 **********************************************************************/
31 /** @file cm_tenb_stats.c
32 @brief This file contains
36 * The defines in this file correspond to structures and variables
37 * used by the following TRILLIUM software:
39 * part no. description
40 * -------- ----------------------------------------------
43 /* header include files (.h) */
45 #include "envopt.h" /* Environment options */
46 #include "envdep.h" /* Environment dependent */
47 #include "envind.h" /* Environment independent */
48 #include "gen.h" /* General */
49 #include "ssi.h" /* System services interface */
50 #include "cm_lte.h" /* Common LTE header file */
51 #include "cm_llist.h" /* Linked list header file */
52 #include "cm_tkns.h" /* Common tokens header file */
55 /* header/extern include files (.x) */
57 #include "gen.x" /* General */
58 #include "ssi.x" /* System services interface */
59 #include "cm_lib.x" /* Common lib header file */
60 #include "cm_llist.x" /* Linked list header file */
61 #include "cm_tkns.x" /* Common tokens header file */
62 #include "cm_lte.x" /* Common LTE header file */
68 #include "cm_tenb_stats.x" /* Total EnodeB Stats declarations */
71 static Void TSInfUtlPackUeInfo ARGS((
75 static Void TSInfUtlPackCellInfo ARGS((
77 TSInfL2CellStats *stats
79 static Void TSInfUtlUnpkUeInfo ARGS((
83 static Void TSInfUtlUnpkCellInfo ARGS((
85 TSInfL2CellStats *stats
87 static Buffer* TSInfUtlAllocMsg ARGS((
93 * Fun: TSInfTrigL2Stats
95 * Desc: Indicate PDCP UL to initiate Stats procedure
103 static Void TSInfTrigL2Stats(Region region,Pool pool)
109 SGetMsg(region, pool, &pBuf);
110 //#if defined(SCH_STATS) || defined(TENB_STATS)
111 pst.dstEnt = STATS_DSTENT;
112 pst.dstInst = STATS_DSTINST;
113 pst.selector = CL_DSTENT_SELECTOR;
115 pst.srcProcId = STATS_SRCPROCID;
116 pst.dstProcId = STATS_DSTPROCID;
117 pst.srcEnt = STATS_SRCENT;
118 pst.event = TENBSTATSINIT;
126 * Fun: TSInfTrigStats
128 * Desc: Trigger Sending L2 Stats
136 Void TSInfTrigStats(Region region,Pool pool)
139 TSInfTrigL2Stats(region, pool);
145 static Buffer* TSInfUtlAllocMsg(Pst *pst)
150 if (SGetMsg(pst->region, pst->pool, &mBuf) != ROK) {
151 DU_LOG("\nERROR --> RLC : MBuf Allocation failed\n");
156 static Void TSInfUtlPackUeInfo(Buffer *mBuf,TSInfL2UeStats *stats)
162 CMCHKPK(oduPackUInt32, stats->persistent.numDeactivation, mBuf);
163 CMCHKPK(oduPackUInt32, stats->persistent.numActivation, mBuf);
164 CMCHKPK(oduPackUInt32, stats->persistent.activatedSCells, mBuf);
166 CMCHKPK(oduPackUInt32, stats->nonPersistent.rlc.dlMaxWindowSz, mBuf);
167 CMCHKPK(oduPackUInt32, stats->nonPersistent.rlc.dlMaxPktsInSduQ, mBuf);
168 CMCHKPK(oduPackUInt32, stats->nonPersistent.rlc.ulReOdrTmrExpCnt, mBuf);
170 CMCHKPK(oduPackUInt32, stats->nonPersistent.pdcp.dlFlowCtrlDropCnt, mBuf);
171 CMCHKPK(oduPackUInt32, stats->nonPersistent.pdcp.dlPdcpAckWaitDropCnt, mBuf);
172 CMCHKPK(oduPackUInt32, stats->nonPersistent.pdcp.dlPdcpDropCnt, mBuf);
175 for (k = 0; k < L2_STATS_MAX_CELLS; k++)
177 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulTpt, mBuf);
178 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulNumiTbs, mBuf);
179 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulSumiTbs, mBuf);
180 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulNumCqi, mBuf);
181 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulSumCqi, mBuf);
182 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulDtxCnt, mBuf);
183 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulNackCnt, mBuf);
184 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulAckNackCnt, mBuf);
185 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulPrbUsg, mBuf);
186 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulRetxOccns, mBuf);
187 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].ulTxOccns, mBuf);
188 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlTpt, mBuf);
189 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlBo, mBuf);
192 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].riCnt[i], mBuf);
196 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlPdbLvl[i], mBuf);
198 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].cqiDropCnt, mBuf);
199 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlNumCw1iTbs, mBuf);
200 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlSumCw1iTbs, mBuf);
201 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlNumCw0iTbs, mBuf);
202 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlSumCw0iTbs, mBuf);
203 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlNumCw1Cqi, mBuf);
204 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlSumCw1Cqi, mBuf);
205 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlNumCw0Cqi, mBuf);
206 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlSumCw0Cqi, mBuf);
209 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlDtxCnt[i], mBuf);
213 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlAckNackCnt[i], mBuf);
217 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlNackCnt[i], mBuf);
219 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlPrbUsg, mBuf);
220 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlRetxOccns, mBuf);
221 CMCHKPK(oduPackUInt32, stats->nonPersistent.sch[k].dlTxOccns, mBuf);
223 CMCHKPK(oduPackUInt32, stats->rnti, mBuf);
227 static Void TSInfUtlPackCellInfo(Buffer *mBuf,TSInfL2CellStats *stats )
232 CMCHKPK(oduPackUInt32, stats->rlc.reOdrTmrExp, mBuf);
233 CMCHKPK(oduPackUInt32, stats->rlc.maxRlcDrbRetxFail, mBuf);
234 CMCHKPK(oduPackUInt32, stats->rlc.maxRlcSrbRetxFail, mBuf);
236 CMCHKPK(oduPackUInt32, stats->sch.ulNumiTbs, mBuf);
237 CMCHKPK(oduPackUInt32, stats->sch.ulSumiTbs, mBuf);
238 CMCHKPK(oduPackUInt32, stats->sch.ulNumCqi, mBuf);
239 CMCHKPK(oduPackUInt32, stats->sch.ulSumCqi, mBuf);
241 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfRbAllocFail, mBuf);
242 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfPdcchSend, mBuf);
243 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfUeFnlzReAdd, mBuf);
244 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfUeRmvFnlzZeroBo, mBuf);
245 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfUeRbAllocDone, mBuf);
246 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfAllocAllocated, mBuf);
247 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfPdcchSchd, mBuf);
248 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfUeSchPick, mBuf);
249 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfBsrRecv, mBuf);
250 CMCHKPK(oduPackUInt32, stats->sch.ul5gtfSrRecv, mBuf);
252 CMCHKPK(oduPackUInt32, stats->sch.dl5gtfPdschCons, mBuf);
253 CMCHKPK(oduPackUInt32, stats->sch.dl5gtfPdcchSend, mBuf);
254 CMCHKPK(oduPackUInt32, stats->sch.dl5gtfBoUpd, mBuf);
255 CMCHKPK(oduPackUInt32, stats->sch.dl5gtfFnlzFail, mBuf);
256 CMCHKPK(oduPackUInt32, stats->sch.dl5gtfFnlzPass, mBuf);
257 CMCHKPK(oduPackUInt32, stats->sch.dl5gtfRbAllocFail, mBuf);
258 CMCHKPK(oduPackUInt32, stats->sch.dl5gtfRbAllocPass, mBuf);
259 CMCHKPK(oduPackUInt32, stats->sch.dl5gtfUePick, mBuf);
261 CMCHKPK(oduPackUInt32, stats->sch.cntTtiProcTime500, mBuf);
262 CMCHKPK(oduPackUInt32, stats->sch.cntTtiProcTime600, mBuf);
263 CMCHKPK(oduPackUInt32, stats->sch.cntTtiProcTime700, mBuf);
264 CMCHKPK(oduPackUInt32, stats->sch.cntTtiProcTime800, mBuf);
265 CMCHKPK(oduPackUInt32, stats->sch.cntTtiProcTime900, mBuf);
266 CMCHKPK(oduPackUInt32, stats->sch.cntTtiProcTime1000, mBuf);
267 CMCHKPK(oduPackUInt32, stats->sch.avgTtiProcTime, mBuf);
270 CMCHKPK(oduPackUInt32, stats->sch.dlPdbRatio[i], mBuf);
274 CMCHKPK(oduPackUInt32, stats->sch.ulPrbUsage[i], mBuf);
278 CMCHKPK(oduPackUInt32, stats->sch.dlPrbUsage[i], mBuf);
282 CMCHKPK(oduPackUInt32, stats->sch.ulDtx[i], mBuf);
286 CMCHKPK(oduPackUInt32, stats->sch.ulAckNack[i], mBuf);
290 CMCHKPK(oduPackUInt32, stats->sch.ulNack[i], mBuf);
296 CMCHKPK(oduPackUInt32, stats->sch.dlDtx[i][j], mBuf);
303 CMCHKPK(oduPackUInt32, stats->sch.dlAckNack[i][j], mBuf);
310 CMCHKPK(oduPackUInt32, stats->sch.dlNack[i][j], mBuf);
315 CMCHKPK(oduPackUInt32, stats->sch.riCnt[i], mBuf);
317 CMCHKPK(oduPackUInt32, stats->sch.dlNumCw1iTbs, mBuf);
318 CMCHKPK(oduPackUInt32, stats->sch.dlSumCw1iTbs, mBuf);
319 CMCHKPK(oduPackUInt32, stats->sch.dlNumCw0iTbs, mBuf);
320 CMCHKPK(oduPackUInt32, stats->sch.dlSumCw0iTbs, mBuf);
321 CMCHKPK(oduPackUInt32, stats->sch.dlNumCw1Cqi, mBuf);
322 CMCHKPK(oduPackUInt32, stats->sch.dlSumCw1Cqi, mBuf);
323 CMCHKPK(oduPackUInt32, stats->sch.dlNumCw0Cqi, mBuf);
324 CMCHKPK(oduPackUInt32, stats->sch.dlSumCw0Cqi, mBuf);
325 CMCHKPK(oduPackUInt32, stats->sch.msg3Fail, mBuf);
326 CMCHKPK(oduPackUInt32, stats->sch.msg4Fail, mBuf);
328 CMCHKPK(oduPackUInt32, stats->cellId, mBuf);
333 static Void TSInfUtlUnpkUeInfo(Buffer *mBuf, TSInfL2UeStats *stats )
339 CMCHKUNPK(oduUnpackUInt32, &stats->rnti, mBuf);
341 for (k = L2_STATS_MAX_CELLS; k > 0; k--)
343 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlTxOccns, mBuf);
344 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlRetxOccns, mBuf);
345 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlPrbUsg, mBuf);
348 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlNackCnt[i], mBuf);
352 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlAckNackCnt[i], mBuf);
356 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlDtxCnt[i], mBuf);
358 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlSumCw0Cqi, mBuf);
359 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlNumCw0Cqi, mBuf);
360 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlSumCw1Cqi, mBuf);
361 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlNumCw1Cqi, mBuf);
362 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlSumCw0iTbs, mBuf);
363 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlNumCw0iTbs, mBuf);
364 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlSumCw1iTbs, mBuf);
365 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlNumCw1iTbs, mBuf);
366 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].cqiDropCnt, mBuf);
369 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlPdbLvl[i], mBuf);
373 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].riCnt[i], mBuf);
375 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlBo, mBuf);
376 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].dlTpt, mBuf);
377 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulTxOccns, mBuf);
378 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulRetxOccns, mBuf);
379 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulPrbUsg, mBuf);
380 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulAckNackCnt, mBuf);
381 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulNackCnt, mBuf);
382 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulDtxCnt, mBuf);
383 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulSumCqi, mBuf);
384 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulNumCqi, mBuf);
385 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulSumiTbs, mBuf);
386 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulNumiTbs, mBuf);
387 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.sch[k-1].ulTpt, mBuf);
390 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.pdcp.dlPdcpDropCnt, mBuf);
391 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.pdcp.dlPdcpAckWaitDropCnt, mBuf);
392 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.pdcp.dlFlowCtrlDropCnt, mBuf);
394 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.rlc.ulReOdrTmrExpCnt, mBuf);
395 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.rlc.dlMaxPktsInSduQ, mBuf);
396 CMCHKUNPK(oduUnpackUInt32, &stats->nonPersistent.rlc.dlMaxWindowSz, mBuf);
398 CMCHKUNPK(oduUnpackUInt32, &stats->persistent.activatedSCells, mBuf);
399 CMCHKUNPK(oduUnpackUInt32, &stats->persistent.numActivation, mBuf);
400 CMCHKUNPK(oduUnpackUInt32, &stats->persistent.numDeactivation, mBuf);
405 static Void TSInfUtlUnpkCellInfo(Buffer *mBuf,TSInfL2CellStats *stats )
410 CMCHKUNPK(oduUnpackUInt32, &stats->cellId, mBuf);
412 CMCHKUNPK(oduUnpackUInt32, &stats->sch.msg4Fail, mBuf);
413 CMCHKUNPK(oduUnpackUInt32, &stats->sch.msg3Fail, mBuf);
414 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlSumCw0Cqi, mBuf);
415 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlNumCw0Cqi, mBuf);
416 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlSumCw1Cqi, mBuf);
417 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlNumCw1Cqi, mBuf);
418 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlSumCw0iTbs, mBuf);
419 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlNumCw0iTbs, mBuf);
420 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlSumCw1iTbs, mBuf);
421 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlNumCw1iTbs, mBuf);
424 CMCHKUNPK(oduUnpackUInt32, &stats->sch.riCnt[i], mBuf);
430 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlNack[i][j], mBuf);
437 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlAckNack[i][j], mBuf);
444 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlDtx[i][j], mBuf);
449 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ulNack[i], mBuf);
453 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ulAckNack[i], mBuf);
457 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ulDtx[i], mBuf);
461 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlPrbUsage[i], mBuf);
465 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ulPrbUsage[i], mBuf);
469 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dlPdbRatio[i], mBuf);
471 CMCHKUNPK(oduUnpackUInt32, &stats->sch.avgTtiProcTime, mBuf);
472 CMCHKUNPK(oduUnpackUInt32, &stats->sch.cntTtiProcTime1000, mBuf);
473 CMCHKUNPK(oduUnpackUInt32, &stats->sch.cntTtiProcTime900, mBuf);
474 CMCHKUNPK(oduUnpackUInt32, &stats->sch.cntTtiProcTime800, mBuf);
475 CMCHKUNPK(oduUnpackUInt32, &stats->sch.cntTtiProcTime700, mBuf);
476 CMCHKUNPK(oduUnpackUInt32, &stats->sch.cntTtiProcTime600, mBuf);
477 CMCHKUNPK(oduUnpackUInt32, &stats->sch.cntTtiProcTime500, mBuf);
479 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dl5gtfUePick, mBuf);
480 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dl5gtfRbAllocPass, mBuf);
481 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dl5gtfRbAllocFail, mBuf);
482 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dl5gtfFnlzPass, mBuf);
483 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dl5gtfFnlzFail, mBuf);
484 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dl5gtfBoUpd, mBuf);
485 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dl5gtfPdcchSend, mBuf);
486 CMCHKUNPK(oduUnpackUInt32, &stats->sch.dl5gtfPdschCons, mBuf);
488 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfSrRecv, mBuf);
489 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfBsrRecv, mBuf);
490 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfUeSchPick, mBuf);
491 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfPdcchSchd, mBuf);
492 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfAllocAllocated, mBuf);
493 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfUeRbAllocDone, mBuf);
494 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfUeRmvFnlzZeroBo, mBuf);
495 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfUeFnlzReAdd, mBuf);
496 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfPdcchSend, mBuf);
497 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ul5gtfRbAllocFail, mBuf);
499 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ulSumCqi, mBuf);
500 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ulNumCqi, mBuf);
501 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ulSumiTbs, mBuf);
502 CMCHKUNPK(oduUnpackUInt32, &stats->sch.ulNumiTbs, mBuf);
504 CMCHKUNPK(oduUnpackUInt32, &stats->rlc.maxRlcSrbRetxFail, mBuf);
505 CMCHKUNPK(oduUnpackUInt32, &stats->rlc.maxRlcDrbRetxFail, mBuf);
506 CMCHKUNPK(oduUnpackUInt32, &stats->rlc.reOdrTmrExp, mBuf);
511 Void TSInfPkSndL2UeStats(Pst *pst,SuId suId,TSInfL2UeStats *stats)
516 mBuf = TSInfUtlAllocMsg(pst);
517 TSInfUtlPackUeInfo(mBuf, stats);
519 pst->event = (Event) EVTTENBL2UESTATS;
524 Void TSInfUnpkL2UeStats(TSInfL2UeStatsInd func, Pst *pst,Buffer *mBuf)
527 TSInfL2UeStats stats;
529 SUnpkS16(&suId, mBuf);
530 TSInfUtlUnpkUeInfo(mBuf, &stats);
532 (*func)(pst, suId, &stats);
536 Void TSInfPkSndL2CellStats(Pst *pst,SuId suId,TSInfL2CellStats *stats )
540 mBuf = TSInfUtlAllocMsg(pst);
541 TSInfUtlPackCellInfo(mBuf, stats);
543 pst->event = (Event) EVTTENBL2CELLSTATS;
548 Void TSInfUnpkL2CellStats(TSInfL2CellStatsInd func,Pst *pst,Buffer *mBuf)
551 TSInfL2CellStats stats;
554 SUnpkS16(&suId, mBuf);
555 TSInfUtlUnpkCellInfo(mBuf, &stats);
557 (*func)(pst, suId, &stats);
560 #endif /* TENB_STATS */
562 /**********************************************************************
564 **********************************************************************/