[ Jira id - ODUHIGH-593 ] Pack and unpack function nomenclature correction
[o-du/l2.git] / src / 5gnrmac / mac_msg_router.c
1 /*******************************************************************************
2 ################################################################################
3 #   Copyright (c) [2017-2019] [Radisys]                                        #
4 #                                                                              #
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                                    #
8 #                                                                              #
9 #       http://www.apache.org/licenses/LICENSE-2.0                             #
10 #                                                                              #
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 *******************************************************************************/
18
19 /************************************************************************
20  
21      Name:     LTE-MAC layer
22   
23      Type:     C source file
24   
25      Desc:     C source code SSI Interface Implementation
26   
27      File:     mac_msg_router.c
28   
29 **********************************************************************/
30
31 /** @file mac_msg_router.c
32 @brief This file contains the implementation of callback functions 
33 registered with SSI during the LTE MAC Task initialization.
34 */
35 /* header include files -- defines (.h) */
36 #include "common_def.h"
37 #include "rgu.h"           /* RGU defines */
38 #include "tfu.h"           /* RGU defines */
39 #include "lrg.h"           /* layer management defines for LTE-MAC */
40 #include "rgr.h"           /* layer management defines for LTE-MAC */
41 #include "crg.h"           /* CRG interface includes */
42 #include "rg_sch_inf.h"    /* SCH interface includes */
43 #include "rg_prg.h"        /* PRG interface includes */
44 #include "rg_env.h"        /* customisable defines and macros for LTE-MAC */
45 #include "rg.h"            /* defines and macros for MAC */
46 #include "rgr.h"            /* defines and macros for SCH */
47
48
49 /* header/extern include files (.x) */
50 #include "rgu.x"           /* RGU types */
51 #include "tfu.x"           /* RGU types */
52 #include "lrg.x"           /* layer management typedefs for MAC */
53 #include "rgr.x"           /* layer management typedefs for MAC */
54 #include "crg.x"           /* CRG interface typedes */
55 #include "rg_sch_inf.x"    /* SCH interface typedefs */
56 #include "rg_prg.x"        /*PRG interface includes*/
57 #include "du_app_mac_inf.h"
58 #include "rg.x"            /* typedefs for MAC */
59 #include "rlc_mac_inf.h"
60 #include "lwr_mac_upr_inf.h"
61 #include "mac_sch_interface.h"
62 #include "mac.h"
63 #include "mac_ue_mgr.h"
64 #include "mac_harq_dl.h"
65
66 /**
67  * @brief Task Activation callback function Entity DU APP. 
68  *
69  * @details
70  *
71  *     Function : MacHdlDuappEvents
72  *     
73  *     Process Messages received from Entity DU APP
74  *     
75  *  @param[in]  Pst     *pst, Post structure of the primitive.     
76  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
77  *  @param[in]  Reason reason.
78  *  @return  void
79  **/
80 void MacHdlDuappEvents(Pst *pst, Buffer *mBuf)
81 {
82    switch(pst->event)
83    {
84 #ifdef LCRGMILRG
85       case EVTLRGCFGREQ:
86          /* Process a config. request */
87          cmUnpkLrgCfgReq(RgMiLrgCfgReq, pst, mBuf);
88          break;
89       case EVTMACSCHGENCFGREQ:
90          /* Process a config. request */
91          cmUnpkLrgSchCfgReq(MacSchGenCfgReq, pst, mBuf);
92          break;
93       case EVTLRGSTSREQ:
94          /* Process a statistics request */
95          cmUnpkLrgStsReq(RgMiLrgStsReq, pst, mBuf);
96          break;
97 #endif /* LCRGMILRG */
98       case EVENT_MAC_CELL_CONFIG_REQ:
99          {
100             /* Process MAC cell config */
101             unpackDuMacCellCfg(MacProcCellCfgReq, pst, mBuf);
102             break;
103          }
104       case EVENT_MAC_CELL_START:
105          {
106             /* Process MAC cell start request */
107             unpackMacCellStart(MacProcCellStart, pst, mBuf);
108             break;
109          }
110       case EVENT_MAC_CELL_STOP:
111          {
112             /* Process MAC cell stop request */
113             unpackMacCellStop(MacProcCellStop, pst, mBuf);
114             break;
115          }
116       case EVENT_MAC_DL_CCCH_IND:
117          {
118             /* Process DL CCCH Ind */
119             unpackMacDlCcchInd(MacProcDlCcchInd, pst, mBuf);
120             break;
121          }
122       case EVENT_MAC_UE_CREATE_REQ:
123          {
124             /* Process Ue Create Request */
125             unpackMacUeCreateReq(MacProcUeCreateReq, pst, mBuf);
126             break;
127          }
128       case EVENT_MAC_UE_RECONFIG_REQ:
129          {
130             /* Process Ue Reconfig Request */
131             unpackMacUeReconfigReq(MacProcUeReconfigReq, pst, mBuf);
132             break;
133          }
134       case EVENT_MAC_UE_DELETE_REQ:
135          {
136             /* Process UE Delete Request */  
137             unpackMacUeDeleteReq(MacProcUeDeleteReq, pst, mBuf);
138             break;
139          }
140       case EVENT_MAC_CELL_DELETE_REQ:
141          {
142             /* Process Cell Delete Request */
143             unpackMacCellDeleteReq(MacProcCellDeleteReq, pst, mBuf);
144             break;
145          }
146       case EVENT_MAC_SLICE_CFG_REQ:
147          {
148             /* Process Slice Configuration Request */
149             unpackMacSliceCfgReq(MacProcSliceCfgReq, pst, mBuf);
150             break;
151          }
152       case EVENT_MAC_SLICE_RECFG_REQ:
153          {
154             /* Process Slice Reconfiguration Request */
155             unpackMacSliceRecfgReq(MacProcSliceRecfgReq, pst, mBuf);
156             break;
157          }
158       case EVENT_MAC_RACH_RESOURCE_REQ:
159          {
160             /* Process Rach Resource Request */
161             unpackMacRachRsrcReq(MacProcRachRsrcReq, pst, mBuf);
162             break;
163          }
164       case EVENT_MAC_RACH_RESOURCE_REL:
165          {
166             /* Process Rach Resource Release */
167             unpackMacRachRsrcRel(MacProcRachRsrcRel, pst, mBuf);
168             break;
169          }
170       case EVENT_MAC_DL_PCCH_IND:
171          {
172             /* Process Pcch indication */
173             unpackMacDlPcchInd(MacProcDlPcchInd, pst, mBuf);
174             break;
175          }
176       case EVENT_MAC_DL_BROADCAST_REQ:
177          {
178             /* Process Dl Broadcast Request */  
179             unpackMacDlBroadcastReq(MacProcDlBroadcastReq, pst, mBuf);
180             break;
181          }
182
183       case EVENT_MAC_UE_RESET_REQ:
184          {
185             /* Process UE Reset Request */  
186             unpackMacUeResetReq(MacProcUeResetReq, pst, mBuf);
187             break;
188          }
189
190       case EVENT_MAC_STATISTICS_REQ:
191          {
192             /* Process Statistics Request */
193             unpackMacStatsReq(MacProcStatsReq, pst, mBuf);
194             break;
195          }
196       
197       case EVENT_MAC_STATS_DELETE_REQ:
198          {
199             /* Process Statistics Delete Request */
200             unpackMacStatsDeleteReq(MacProcStatsDeleteReq, pst, mBuf);
201             break;
202          }
203       case EVENT_MAC_STATISTICS_MODIFY_REQ:
204          {
205             /* Process Statistics modification Request */
206             unpackMacStatsModificationReq(MacProcStatsModificationReq, pst, mBuf);
207             break;
208          }
209
210
211       default:
212          RG_FREE_MSG(mBuf);
213          break;
214    }
215 }
216
217 /**
218  * @brief Task Activation callback function Entity RLC. 
219  *
220  * @details
221  *
222  *     Function : MacHdlRlcEvents
223  *     
224  *     Process Messages received from Entity RLC
225  *     
226  *  @param[in]  Pst     *pst, Post structure of the primitive.     
227  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
228  *  @param[in]  Reason reason.
229  *  @return  void
230  **/
231 void MacHdlRlcEvents(Pst *pst, Buffer *mBuf)
232 {
233    switch(pst->event)
234    {
235       case EVTRGUBNDREQ:
236          cmUnpkRguBndReq(RgUiRguBndReq, pst, mBuf);
237          break;
238       case EVTRGUUBNDREQ:
239          cmUnpkRguUbndReq(RgUiRguUbndReq, pst, mBuf);
240          break;
241       case EVENT_DL_DATA_TO_MAC:
242          unpackRlcDlData(MacProcRlcDlData, pst, mBuf);
243          break;
244       case EVENT_BO_STATUS_TO_MAC:
245          unpackRlcBoStatus(MacProcRlcBoStatus, pst, mBuf);
246          break;
247       default:
248          RG_FREE_MSG(mBuf);
249          break;
250    }
251 }
252
253 /**
254  * @brief Task Activation callback function Entity Lower MAC 
255  *
256  * @details
257  *
258  *     Function : MacHdlLwrMacEvents
259  *     
260  *     Process Messages received from Entity Lower MAC
261  *     
262  *  @param[in]  Pst     *pst, Post structure of the primitive.     
263  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
264  *  @param[in]  Reason reason.
265  *  @return  void
266  **/
267 void MacHdlLwrMacEvents(Pst *pst, Buffer *mBuf)
268 {
269    switch(pst->event)
270    {
271       case EVENT_SLOT_IND_TO_MAC:
272          unpackSlotInd(fapiMacSlotInd, pst, mBuf);
273          break;
274       case EVENT_STOP_IND_TO_MAC:
275          unpackStopInd(fapiMacStopInd, pst, mBuf);
276          break;
277       case EVENT_RACH_IND_TO_MAC:
278          unpackRachInd(fapiMacRachInd, pst, mBuf);
279          break;
280       case EVENT_CRC_IND_TO_MAC:
281          unpackCrcInd(fapiMacCrcInd, pst, mBuf);
282          break;
283       case EVENT_RX_DATA_IND_TO_MAC:
284          unpackRxDataInd(fapiMacRxDataInd, pst, mBuf);
285          break;
286       case EVENT_UCI_IND_TO_MAC:
287          unpackUciInd(FapiMacUciInd, pst, mBuf);
288          break;
289       default:
290          RG_FREE_MSG(mBuf);
291          break;
292    }
293 }
294
295 #ifdef CALL_FLOW_DEBUG_LOG
296 /**
297 * @brief Function prints src, dest, msg infor about all the msgs that received.
298 *
299 * @details
300 *
301 *     Function : callFlowMacActvTsk 
302 *
303 *     Function prints src, dest, msg infor about all the msgs that received
304 *
305 *  @param[in]  Pst     *pst, Post structure of the primitive.
306 *
307 *  @return  void
308 **/
309
310 void callFlowMacActvTsk(Pst *pst)
311 {
312    char sourceTask[50];
313    char destTask[50]="ENTMAC";
314    char message[100];
315
316    switch(pst->srcEnt)
317    {
318       case ENTDUAPP:
319          {
320             strcpy(sourceTask,"ENTDUAPP");
321             switch(pst->event)
322             {
323 #ifdef LCRGMILRG
324                case EVTLRGCFGREQ:
325                   strcpy(message,"EVTLRGCFGREQ");
326                   break;
327                case EVTMACSCHGENCFGREQ:
328                   strcpy(message,"EVTMACSCHGENCFGREQ");
329                   break;
330 #endif /* LCRGMILRG */
331                case EVENT_MAC_CELL_CONFIG_REQ:
332                   strcpy(message,"EVENT_MAC_CELL_CONFIG_REQ");
333                   break;
334                case EVENT_MAC_CELL_START:
335                   strcpy(message,"EVENT_MAC_CELL_START");
336                   break;
337                case EVENT_MAC_CELL_STOP:
338                   strcpy(message,"EVENT_MAC_CELL_STOP");
339                   break;
340                case EVENT_MAC_DL_CCCH_IND:
341                   strcpy(message,"EVENT_MAC_DL_CCCH_IND");
342                   break;
343                case EVENT_MAC_UE_CREATE_REQ:
344                   strcpy(message,"EVENT_MAC_UE_CREATE_REQ");
345                   break;
346                case EVENT_MAC_UE_RECONFIG_REQ:
347                   strcpy(message,"EVENT_MAC_UE_RECONFIG_REQ");
348                   break;
349                case EVENT_MAC_UE_DELETE_REQ:
350                   strcpy(message,"EVENT_MAC_UE_DELETE_REQ");
351                   break;
352                case EVENT_MAC_CELL_DELETE_REQ:
353                   strcpy(message,"EVENT_MAC_CELL_DELETE_REQ");
354                   break;
355                case EVENT_MAC_SLICE_CFG_REQ:
356                   strcpy(message,"EVENT_MAC_SLICE_CFG_REQ");
357                   break;
358                case EVENT_MAC_SLICE_RECFG_REQ:
359                   strcpy(message,"EVENT_MAC_SLICE_RECFG_REQ");
360                   break;
361                case EVENT_MAC_STATISTICS_REQ:
362                   strcpy(message,"EVENT_MAC_STATISTICS_REQ");
363                   break;
364                case EVENT_MAC_STATS_DELETE_REQ:
365                   strcpy(message,"EVENT_MAC_STATS_DELETE_REQ");
366                   break;
367                case EVENT_MAC_STATISTICS_MODIFY_REQ:
368                   strcpy(message,"EVENT_MAC_STATISTICS_MODIFY_REQ");
369                   break;
370                default:
371                   strcpy(message,"Invalid Event");
372                   break;
373             }
374             break;
375          }
376       case ENTRLC:
377          { 
378             strcpy(sourceTask,"ENTRLC");
379             switch(pst->event)
380             {
381 #ifdef LCRGUIRGU
382                case EVTRGUBNDREQ:
383                   strcpy(message,"EVTRGUBNDREQ");
384                   break;
385                case EVTRGUUBNDREQ:
386                   strcpy(message,"EVTRGUUBNDREQ");
387                   break;
388                case EVENT_DL_DATA_TO_MAC:
389                   strcpy(message,"EVENT_DL_DATA_TO_MAC");
390                   break;
391                case EVENT_BO_STATUS_TO_MAC:
392                   strcpy(message,"EVENT_BO_STATUS_TO_MAC");
393                   break;
394 #endif
395                default:
396                   strcpy(message,"Invalid Event");
397                   break;
398             }
399
400             break;
401          }
402       case ENTLWRMAC:
403          {
404             strcpy(sourceTask,"ENTLWRMAC");
405             switch(pst->event)
406             {
407                case EVENT_SLOT_IND_TO_MAC:
408                   strcpy(message,"EVENT_SLOT_IND_TO_MAC");
409                   break;
410                case EVENT_STOP_IND_TO_MAC:
411                   strcpy(message,"EVENT_STOP_IND_TO_MAC");
412                   break;
413                case EVENT_RACH_IND_TO_MAC:
414                   strcpy(message,"EVENT_RACH_IND_TO_MAC");
415                   break;
416                case EVENT_CRC_IND_TO_MAC:
417                   strcpy(message,"EVENT_CRC_IND_TO_MAC");
418                   break;
419                case EVENT_RX_DATA_IND_TO_MAC:
420                   strcpy(message,"EVENT_RX_DATA_IND_TO_MAC");
421                   break;
422                case EVENT_UCI_IND_TO_MAC:
423                   strcpy(message,"EVENT_UCI_IND_TO_MAC");
424                   break;
425                default:
426                   strcpy(message,"Invalid Event");
427                   break;
428             }
429
430             break;
431          }
432       case ENTMAC:
433          {
434             if(pst->srcInst == 1)
435             {
436                strcpy(sourceTask,"ENTSCH");
437                switch(pst->event)
438                {
439                   case EVENT_SLICE_CFG_RSP_TO_MAC:
440                      {
441                         strcpy(message,"EVENT_SLICE_CFG_RSP_TO_MAC");
442                         break;
443                      }
444                   case EVENT_SLICE_RECFG_RSP_TO_MAC:
445                      {
446                         strcpy(message,"EVENT_SLICE_RECFG_RSP_TO_MAC");
447                         break;
448                      }
449                   case EVENT_SCH_CELL_CFG_CFM:
450                      {
451                         strcpy(message,"EVENT_SCH_CELL_CFG_CFM");
452                         break;
453                      }
454                   case EVENT_UE_CONFIG_RSP_TO_MAC:
455                      {
456                         strcpy(message,"EVENT_UE_CONFIG_RSP_TO_MAC");
457                         break;
458                      }
459                   case EVENT_UE_RECONFIG_RSP_TO_MAC:
460                      {
461                         strcpy(message,"EVENT_UE_RECONFIG_RSP_TO_MAC");
462                         break;
463                      }
464                   case EVENT_DL_SCH_INFO:
465                      {
466                         strcpy(message,"EVENT_DL_SCH_INFO");
467                         break;
468                      }
469                   case EVENT_UL_SCH_INFO:
470                      {
471                         strcpy(message,"EVENT_UL_SCH_INFO");
472                         break;
473                      }
474                   case EVENT_RACH_RESOURCE_RESPONSE_TO_MAC:
475                      {
476                         strcpy(message,"EVENT_RACH_RESOURCE_RESPONSE_TO_MAC");
477                         break;
478                      }
479                   case EVENT_DL_PAGING_ALLOC:
480                      {
481                         strcpy(message,"EVENT_DL_PAGING_ALLOC");
482                         break;
483                      }
484                   case EVENT_UE_DELETE_RSP_TO_MAC:
485                      {
486                         strcpy(message,"EVENT_UE_DELETE_RSP_TO_MAC");
487                         break;
488                      }
489                   case EVENT_CELL_DELETE_RSP_TO_MAC:
490                      {
491                         strcpy(message,"EVENT_CELL_DELETE_RSP_TO_MAC");
492                         break;
493                      }
494                   case EVENT_DL_REL_HQ_PROC:
495                      {
496                         strcpy(message,"EVENT_DL_REL_HQ_PROC");
497                         break;
498                      }
499                   case EVENT_STATISTICS_RSP_TO_MAC:
500                      {
501                         strcpy(message,"EVENT_STATISTICS_RSP_TO_MAC");
502                         break;
503                      }
504                   case EVENT_STATISTICS_IND_TO_MAC:
505                      {
506                         strcpy(message,"EVENT_STATISTICS_IND_TO_MAC");
507                         break;
508                      }
509                   case EVENT_STATISTICS_DELETE_RSP_TO_MAC:
510                      {
511                         strcpy(message,"EVENT_STATISTICS_DELETE_RSP_TO_MAC");
512                         break;
513                      }
514                   case EVENT_STATISTICS_MODIFY_RSP_TO_MAC:
515                      {
516                         strcpy(message,"EVENT_STATISTICS_MODIFY_RSP_TO_MAC");
517                         break;
518                      }
519                   default:
520                      strcpy(message,"Invalid Event");
521                      break;
522                }
523             }
524             break;
525          }
526       default:
527          {
528             strcpy(sourceTask,"Invalid Source Entity Id");
529             break;
530          }
531    }
532    DU_LOG("\nCall Flow: %s -> %s : %s\n", sourceTask, destTask, message);
533 }
534 #endif
535
536 \f
537 /**
538  * @brief Task Activation callback function. 
539  *
540  * @details
541  *
542  *     Function : macActvTsk
543  *     
544  *     Primitives invoked by MAC's users/providers through
545  *     a loosely coupled interface arrive here by means of 
546  *     SSI's message handling. This API is registered with
547  *     SSI during the Task Registration of MAC.
548  *     
549  *  @param[in]  Pst     *pst, Post structure of the primitive.     
550  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
551  *  @param[in]  Reason reason.
552  *  @return  uint8_t
553  *      -# ROK
554  **/
555 uint8_t macActvTsk(Pst *pst, Buffer *mBuf)
556 {
557
558 #ifdef CALL_FLOW_DEBUG_LOG
559    callFlowMacActvTsk(pst);
560 #endif
561
562    switch(pst->srcEnt)
563    {
564       case ENTDUAPP:
565          MacHdlDuappEvents(pst, mBuf);
566          break;
567       case ENTRLC:
568          MacHdlRlcEvents(pst, mBuf);
569          break;
570       case ENTLWRMAC:
571          MacHdlLwrMacEvents(pst, mBuf);
572          break;
573       default:
574          RG_FREE_MSG(mBuf);
575          break;
576    }
577    ODU_EXIT_TASK();
578    return ROK;
579 }/* end of MacActvTsk */
580
581 /**
582  * @brief Callback function for events from entity SCH
583  *
584  * @details
585  *
586  *     Function :MacMessageRouter
587  *     
588  *     Process Messages received from Entity SCH
589  *     
590  *  @param[in]  Pst     *pst, Post structure of the primitive.     
591  *  @param[in]  Buffer *mBuf, Packed primitive parameters in the buffer.
592  *  @param[in]  Reason reason.
593  *  @return  void
594  **/
595 uint8_t MacMessageRouter(Pst *pst, void *msg)
596 {
597 #ifdef CALL_FLOW_DEBUG_LOG
598    callFlowMacActvTsk(pst);
599 #endif
600
601    switch(pst->event)
602    {
603       case EVENT_SLICE_CFG_RSP_TO_MAC:
604          {
605             MacProcSchSliceCfgRsp(pst, (SchSliceCfgRsp *)msg);
606             break;
607          }
608       case EVENT_SLICE_RECFG_RSP_TO_MAC:
609          {
610             MacProcSchSliceRecfgRsp(pst, (SchSliceRecfgRsp *)msg);
611             break;
612          }
613       case EVENT_SCH_CELL_CFG_CFM:
614          {
615             MacProcSchCellCfgCfm(pst, (SchCellCfgCfm *)msg);
616             break;
617          }
618       case EVENT_UE_CONFIG_RSP_TO_MAC:
619          {
620             MacProcSchUeCfgRsp(pst, (SchUeCfgRsp *)msg);
621             break;
622          }
623       case EVENT_UE_RECONFIG_RSP_TO_MAC:
624          {
625             MacProcSchUeRecfgRsp(pst, (SchUeRecfgRsp *)msg);
626             break;
627          }
628       case EVENT_DL_SCH_INFO:
629          {
630             MacProcDlAlloc(pst, (DlSchedInfo *)msg);
631             break;
632          }
633       case EVENT_UL_SCH_INFO:
634          {
635             MacProcUlSchInfo(pst, (UlSchedInfo *)msg);
636             break;
637          }
638       case EVENT_RACH_RESOURCE_RESPONSE_TO_MAC:
639          {
640             MacProcSchRachRsrcRsp(pst, (SchRachRsrcRsp *)msg);
641             break;
642          }
643       case EVENT_DL_PAGING_ALLOC:
644          {
645             MacProcDlPageAlloc(pst, (DlPageAlloc *)msg);
646             break;
647          }
648       case EVENT_UE_DELETE_RSP_TO_MAC:
649          {
650             MacProcSchUeDeleteRsp(pst, (SchUeDeleteRsp *)msg);
651             break;
652          }
653       case EVENT_CELL_DELETE_RSP_TO_MAC:
654          {
655             MacProcSchCellDeleteRsp(pst, (SchCellDeleteRsp *)msg);
656             break;
657          }
658       case EVENT_DL_REL_HQ_PROC: 
659          {
660             MacSchReleaseDlHarqProc(pst, (SchRlsHqInfo *)msg);
661             break;
662          }
663       case EVENT_STATISTICS_RSP_TO_MAC:
664          {
665             MacProcSchStatsRsp(pst, (SchStatsRsp *)msg);
666             break;
667          }
668       case EVENT_STATISTICS_IND_TO_MAC:
669          {
670             MacProcSchStatsInd(pst, (SchStatsInd *)msg);
671             break;
672          }
673       case EVENT_STATISTICS_DELETE_RSP_TO_MAC:
674          {
675             MacProcSchStatsDeleteRsp(pst, (SchStatsDeleteRsp *)msg);
676             break;
677          }
678       case EVENT_STATISTICS_MODIFY_RSP_TO_MAC:
679          {
680             MacProcSchStatsModificationRsp(pst, (SchStatsModificationRsp *)msg);
681             break;
682          }
683       default:
684          {
685             return RFAILED;
686          }
687    }
688    return ROK;
689 }
690
691 \f
692 /**********************************************************************
693  
694          End of file
695 **********************************************************************/