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 #ifndef __DU_CONFIG_H_
20 #define __DU_CONFIG_H__
23 #include "mac_interface.h"
25 #include "BIT_STRING.h"
30 #define DU_IP_V4_ADDR "10.0.2.20"
31 #define CU_IP_V4_ADDR "10.0.2.25"
34 #define DU_EGTP_PORT 39001
35 #define CU_EGTP_PORT 39002
38 #define DU_NAME "ORAN_OAM_DU"
39 #define CELL_TYPE SMALL
40 #define DUPLEX_MODE DUP_MODE_TDD
48 #define NR_ARFCN 2079427
50 #define NR_FREQ_BAND 257
56 #define FREQ_SHIFT_7P5KHZ FALSE
57 #define SSB_PBCH_PWR 0
58 #define BCH_PAYLOAD MAC_GEN_FULL_PBCH_PAYLD
59 #define SUBCARRIER_SPACING 3
61 #define BETA_PSS BETA_PSS_0DB
62 #define SSB_PERIODICITTY SSB_PRDCTY_MS_20
63 #define SSB_SUBCARRIER_OFFSET 0
64 #define SSB_MULT_CARRIER_BAND FALSE
65 #define MULT_CELL_CARRIER FALSE
67 #define PRACH_SEQ_LEN SHORT_SEQUENCE
68 #define PRACH_SUBCARRIER_SPACING 3
69 #define PRACH_RESTRICTED_SET_CFG UNRESTRICTED
70 #define NUM_PRACH_FDM 1
71 #define ROOT_SEQ_IDX 0
72 #define NUM_ROOT_SEQ 1
73 #define ZERO_CORRELATION_ZONE_CFG 2
74 #define NUM_UNUSED_ROOT_SEQ 1
75 #define UNUSED_ROOT_SEQ 1
76 #define SSB_PER_RACH 3
77 #define PRACH_MULT_CARRIER_BAND FALSE
78 #define TDD_PERIODICITY TX_PRDCTY_MS_2P5
79 #define RSS_MEASUREMENT_UNIT DONT_REPORT_RSSI
92 #define DU_SELECTOR_LC 0
93 #define DU_SELECTOR_TC 1
94 #define DU_SELECTOR_LWLC 2
97 /* Macro definitions for EGTP procedures */
98 #define EGTP_LCL_TEID 1 /* EGTP local tunnel id */
99 #define EGTP_REM_TEID 10 /* EGTP remote tinnel id */
103 /* Macro definitions for F1 procedures */
104 #define CU_DU_NAME_LEN_MAX 30 /* Max length of CU/DU name string */
105 #define MAX_F1_CONNECTIONS 65536 /* Max num of F1 connections */
106 #define DU_MAX_CELLS 512 /* Max num of cells served by gNB-DU */
107 #define MAX_PLMN 6 /* Max num of broadcast PLMN ids */
108 #define MAXNRARFCN 3279165 /* Maximum values of NRAFCN */
109 #define MAXNRCELLBANDS 2 /* Maximum number of frequency bands */
110 #define MAXNUMOFSLICEITEMS 1024 /* Maximum number of signalled slice support items */
111 #define MAXBPLMNNRMINUS1 1 /* Maximum number of PLMN Ids broadcast in an NR cell minus 1 */
112 #define MAXNUMOFSIBTYPES 32 /* Maximum number of SIB types */
113 #define MAX_UEID 512 /* Maximum number of UE Ids */
114 #define MAX_TNL_ASSOC 32 /* Max num of TNL Assoc between CU and DU */
115 #define MAXCELLINENB 256 /* Max num of cells served by eNB */
116 #define MAXNUMOFUEID 65536 /* Max num of UEs served by DU */
117 #define MAXNUMOFUACPLMN 12 /* Maximum number of PLMN ids*/
118 #define MAXNUMOFUACPERPLMN 64 /* Maximum number of signalled categories per PLMN */
119 #define DEFAULT_CELLS 1 /* Max num of broadcast PLMN ids */
122 /* Macro definitions for MIB/SIB1 */
123 #define SYS_FRAME_NUM 0
125 #define SSB_SC_OFFSET 8
126 #define CORESET_ZERO 1
127 #define SEARCH_SPACE_ZERO 8
129 #define CELL_IDENTITY 1
142 INVALID_CU_UE_F1AP_ID,
143 INVALID_DU_UE_F1AP_ID,
144 INTERACTION_WITH_OTHER_PROC,
146 RADIO_RELATED_REASON,
147 INSUFFICIENT_RADIO_RESOURCE,
153 SLICE_RESOURCE_UNAVAILABLE,
154 AMF_ABNORMAL_RELEASE,
160 TRANS_CAUSE_UNSPECIFIED,
161 TRANSPORT_RESOURCE_UNAVAIL
167 ABSTRACT_SYNTAX_ERR_REJECT,
168 ABSTRACT_SYNTAX_ERR_NOTIFY,
169 INCOMPATIBLE_MESSAGE,
171 ABSTRACT_SYNTAX_ERR_MSG_CONSTRUCT,
172 PROTOCOL_CAUSE_UNSPECIFIED
177 CONTROL_PROC_OVERLOAD,
178 INSUFF_USER_PLANE_RESOURCE,
180 O_AND_M_INTERVENTION,
181 MISC_CAUSE_UNSPECIFIED
304 REJECT_RRC_CONN_NON_EMERG_MODT,
305 REJECT_RRC_CONN_SIGNALLING,
306 PERMIT_EMERG_SESSION_AND_MOBILE_TERM_SERVICE,
307 PERMIT_HIGH_PRIOR_SESSION_AND_MOBILE_TERM_SERVICE
308 }F1UacStandardAction;
310 typedef struct f1RrcVersion
312 char rrcVer[30]; /* Latest RRC Version */
313 U32 extRrcVer; /* Latest RRC version extended */
316 typedef struct f1FailCause
320 RadioNwCause radioNwCause; /* Radio Network Layer Cause */
321 TransLayerCause transLayerCause; /* Transport Layer Cause */
322 ProtocolCause protCause; /* Protocol Cause */
323 MiscCause miscCause; /* Miscellaneous Cause */
327 typedef struct f1ProcCode
333 typedef struct f1TriggMsg
339 typedef struct f1ProcCrit
345 typedef struct f1CritDignosIE
347 F1ProcCritVal ieCritVal;
352 typedef struct f1CritDiagnostic
355 F1ProcCode procCode; /* Procedure Code */
356 F1TriggMsg triggeringMsg; /* Triggering Message */
357 F1ProcCrit procCrit; /* Criticality of Triggering msg/proc */
359 F1CritDignosIE diagnosIE;
362 typedef struct f1FailureIE
364 U32 transId; /* Uniquely identify transaction */
365 F1FailCause cause; /* Failure cause */
366 U8 timeToWait; /* Seconds to be waited before retry */
367 F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
370 typedef struct f1LogicalConnUeAssoc
374 }F1LogicalConnUeAssoc;
376 typedef struct f1ResetType
380 F1ResetAll resetAll; /* Reset All */
381 F1LogicalConnUeAssoc ueAssocLogicalConn[MAX_F1_CONNECTIONS]; /* In case of Partial Reset : UE associated logical F1 conn list*/
385 typedef struct f1PLMN
391 typedef struct nrEcgi
397 typedef struct f1SibType
404 typedef struct f1TxBw
406 F1NrScs nrScs; /* NR subcarrier spacing */
407 F1Nrb nrb; /* Transmission bandwidth expressed in units of RBs */
410 typedef struct f1SulInfo
412 U32 sulArfcn; /* SUL ARFCN */
413 F1TxBw sulTxBw; /* SUL transmission bandwidth */
416 typedef struct f1FreqBand
419 U16 sulBand[MAXNRCELLBANDS];
422 typedef struct f1NrFreqInfo
426 F1FreqBand freqBand[MAXNRCELLBANDS];
429 typedef struct f1NrFddInfo
431 F1NrFreqInfo ulNrFreqInfo; /* UL NR Frequency Info */
432 F1NrFreqInfo dlNrFreqInfo; /* DL NR Frequency Info */
433 F1TxBw ulTxBw; /* UL Transmission bandwidth */
434 F1TxBw dlTxBw; /* DL Transmission bandwidth */
437 typedef struct f1NrTddInfo
439 F1NrFreqInfo nrFreqInfo; /* NR Frequency Info */
440 F1TxBw nrTxBw; /* NR Transmission Bandwidth */
443 typedef struct f1NrModeInfo
452 typedef struct f1EutraFddInfo
454 U16 ulOffset; /* UL offset to Point A */
455 U16 dlOffset; /* DL offset to Point A */
458 typedef struct f1EutraTddInfo
460 U16 tddOffset; /* Offset to Point A */
463 typedef struct f1EutraModeInfo
472 typedef struct f1Snsaai
478 typedef struct epIpAddr
480 char transportAddr[20]; /* Transport Layer Address */
483 typedef struct epIpAddrPort
489 typedef struct f1TaiSliceSuppLst
492 F1Snsaai snssai[MAXNUMOFSLICEITEMS];
495 typedef struct f1SrvdPlmn
498 F1TaiSliceSuppLst taiSliceSuppLst;
501 typedef struct f1BrdcstPlmnInfo
503 PlmnId plmn[MAX_PLMN]; /* PLMN id list */
504 PlmnId extPlmn[MAX_PLMN]; /* Extended PLMN id list */
505 U16 tac; /* 5GS-TAC */
506 U32 nrCellId; /* NR Cell id */
507 U8 ranac; /* RAN Area code */
510 typedef struct f1CellInfo
512 NrEcgi nrCgi; /* Cell global Identity */
513 U32 nrPci; /* Physical Cell Identity */
514 PlmnId plmn[MAX_PLMN]; /* Available PLMN list */
515 PlmnId extPlmn[MAX_PLMN]; /* Extended available PLMN list */
518 typedef struct f1DuCellInfo
520 F1CellInfo cellInfo; /* cell info */
521 U16 tac; /* tracking area code */
522 U16 epsTac; /* Configured EPS TAC */
523 NrModeInfo f1Mode; /* NR mode info : FDD/TDD */
524 U8 measTimeCfg; /* Measurement timing configuration */
525 F1CellDir cellDir; /* Cell Direction */
526 F1CellType cellType; /* Cell Type */
527 F1BrdcstPlmnInfo brdcstPlmnInfo[MAXBPLMNNRMINUS1]; /* Broadcast PLMN Identity Info List */
530 typedef struct f1DuSysInfo
532 U8 *mibMsg; /* MIB message */
533 U8 *sib1Msg; /* SIB1 message */
536 typedef struct f1CuSysInfo
538 F1SibType sibTypeToUpd[MAXNUMOFSIBTYPES]; /* SIB types to be updated */
541 typedef struct f1DuSrvdCellInfo
543 F1DuCellInfo duCellInfo; /* gNB-DU served cell info */
544 F1DuSysInfo duSysInfo; /* gNB-DU System Information */
547 typedef struct f1DuSrvdCellToDel
549 NrEcgi oldNrCgi; /* Old NR CGI */
550 F1DuSrvdCellInfo srvdCellInfo; /* Info of served cell to be deleted */
553 typedef struct f1CuActCellInfo
555 F1CellInfo cuCellInfo; /* gNB-CU available cell info */
556 F1CuSysInfo cuSysInfo; /* gNB-CU System Information */
559 typedef struct f1ActCellFail
565 typedef struct srvStatus
568 Bool switchOffOngoing;
571 typedef struct f1CellStatus
574 SrvStatus status; /* Service status */
577 typedef struct f1DedSIDelUE
583 typedef struct tnlAssocInfo
586 EpIpAddr epIpAddr; /* Endpoint-IP Address */
587 EpIpAddrPort epIpAddrport; /* Endpoint-IP Address and Port */
590 typedef struct f1TnlAssocUsage
596 typedef struct f1TnlAssoc
598 F1TnlAssocAddr assocInfo; /* TNL Assoc Transport Layer Info */
599 F1TnlAssocUsage assocUsage; /* TNL Assoc usage */
602 typedef struct f1TnlAssocToRmv
604 F1TnlAssocAddr assocInfoCu; /* TNL Assoc Transport Layer Info of CU */
605 F1TnlAssocAddr assocInfoDu; /* TNL Assoc Transport Layer Info of DU */
608 typedef struct f1TnlAssocSetupFail
610 F1TnlAssocAddr assocInfo;
612 }F1TnlAssocSetupFail;
615 typedef struct f1CellBarred
618 CellBarred cellBarred;
621 typedef struct f1EutraCell
623 U32 eutraCellId; /* EUTRA cell id */
624 F1EutraModeInfo mode; /* EUTRA mode info : FDD/TDD */
625 U8 rsrcInd; /* Protected EUTRA resource Indication */
628 typedef struct f1ProtectEUTRARsrc
630 U32 specShareGrpId; /* Spectrum sharing group id */
631 F1EutraCell eutraCellList[MAXCELLINENB]; /* EUTRA cells list */
634 typedef struct f1UacOperatorDefined
638 }F1UacOperatorDefined;
640 typedef struct f1UacCategoryType
644 F1UacStandardAction action; /* UAC standardized action */
645 F1UacOperatorDefined operatorDef; /* UAC operator defined */
649 typedef struct f1UacType
651 U8 uacReducInd; /* Value 0 means no access rate reduction. Value 100 means full access rate reduction */
652 F1UacCategoryType uacCategoryType; /* UAC Category type */
655 /* Unified Access Class Assistance Information */
656 typedef struct f1UacAssistInfo
658 PlmnId plmn[MAXNUMOFUACPLMN]; /* UAC PLMN list */
659 F1UacType uacType[MAXNUMOFUACPERPLMN]; /* UAC Type list */
662 /* F1 setup related structures */
664 typedef struct f1SetupReq
666 U32 transId; /* Uniquely identify transaction */
667 U32 duId; /* DU ID */
668 char duName[CU_DU_NAME_LEN_MAX]; /* DU name */
669 F1DuSrvdCellInfo srvdCellLst[DU_MAX_CELLS]; /* Serving cell list */
670 F1RrcVersion rrcVersion; /* RRC version */
673 typedef struct f1setupRsp
675 U32 transId; /* Uniquely identify transaction */
676 char cuName[CU_DU_NAME_LEN_MAX]; /* CU Name */
677 F1CuActCellInfo actCellInfo; /* cells to be activated */
678 F1RrcVersion rrcVersion; /* RRC version */
681 typedef struct f1SetupFail
683 F1FailureIE setupFail;
686 /* At reception of the RESET message the gNB-DU shall release all allocated resources on F1
687 * and radio resources related to the UE association(s) indicated explicitly or implicitly in
688 * the RESET message and remove the indicated UE contexts including F1AP ID. */
689 typedef struct f1Reset
691 U32 transId; /* Uniquely identify transaction */
692 F1FailCause cause; /* Failure cause */
693 F1ResetType resetType; /* type of reset */
696 /* After the gNB-CU has released all assigned F1 resources and the UE F1AP IDs for all indicated
697 * UE associations which can be used for new UE-associated logical F1-connections over the F1 interface,
698 * the gNB-CU shall respond with the RESET ACKNOWLEDGE message. */
699 typedef struct f1ResetAck
701 U32 transId; /* Uniquely identify transaction */
702 F1LogicalConnUeAssoc ueAssocLogicalConn[MAX_F1_CONNECTIONS]; /* UE associated logical F1-connection list */
703 F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
706 typedef struct f1ErrorInd
708 U32 transId; /* Uniquely identify transaction */
709 F1Entity errorOrigin; /* Specifies if error is originated at DU or CU */
710 F1FailCause cause; /* Failure cause */
711 /* If failure is due to Ue related message. */
712 U32 gnbCuUeF1apId; /* gNB-CU UE F1AP Id */
713 U32 gnbDuUeF1apId; /* gNB-DU UE F1AP Id */
714 F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
717 typedef struct f1GnbDuCfgUpd
719 U32 transId; /* Uniquely identify transaction */
720 F1DuSrvdCellInfo srvdCellLstAdd[DU_MAX_CELLS]; /* Served cell list to be added */
721 F1DuSrvdCellToDel srvdCellLstMod[DU_MAX_CELLS]; /* Served cell list to be modified */
722 NrEcgi srvdCellLstDel[DU_MAX_CELLS]; /* Served cell list to be deleted */
723 F1CellStatus cellStatus[DU_MAX_CELLS]; /* Cell status */
724 F1DedSIDelUE ueLst[MAX_UEID]; /* Ue list that requires dedicated SI delivery */
726 F1TnlAssocToRmv gnbDuTnlAssocRmv[MAX_TNL_ASSOC]; /* TNL Assoc list to remove */
729 typedef struct f1GnbDuCfgUpdAck
731 U32 transId; /* Uniquely identify transaction */
732 F1CuActCellInfo cellLstAct[DU_MAX_CELLS]; /* List of cells to be activated */
733 F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
734 NrEcgi cellLstDeact[DU_MAX_CELLS]; /* List of cells to be deactivated */
737 typedef struct f1GnbDuCfgUpdFail
739 F1FailureIE gnbDuCfgUpdFail;
742 /* Sent by the gNB-CU to transfer updated information associated to an F1-C interface instance */
743 typedef struct f1GnbCuCfgUpd
745 U32 transId; /* Uniquely identifies transaction */
746 F1CuActCellInfo cellLstAct[DU_MAX_CELLS]; /* List of cells to be activated */
747 NrEcgi cellLstDeact[DU_MAX_CELLS]; /* List of cells to be deactivated */
748 F1TnlAssoc assocLstAdd[MAX_TNL_ASSOC]; /* List of TNL assocs to be added */
749 F1TnlAssoc assocLstUpd[MAX_TNL_ASSOC]; /* List of TNL assocs to be updated */
750 F1TnlAssocToRmv assocLstRmv[MAX_TNL_ASSOC]; /* List of TNL assocs to be removed */
751 F1CellBarred cellToBarList[DU_MAX_CELLS]; /* List of Cells to be barred */
752 F1ProtectEUTRARsrc protectEutraRsrcList[MAXCELLINENB]; /* List of Protected EUTRA resources */
755 /* Sent by a gNB-DU to a gNB-CU to acknowledge update of information
756 * associated to an F1-C interface instance */
757 typedef struct f1GnbCuCfgUpdAck
759 U32 transId; /* Uniquely identify transaction */
760 F1ActCellFail actCellFailList[DU_MAX_CELLS]; /* Cells failed to be activated list */
761 F1CritDiagnostic critDiagnostic; /* Critical diagnostics */
762 F1TnlAssocAddr assocSetupList[MAX_TNL_ASSOC]; /* TNL Assoc Setup list */
763 F1TnlAssocSetupFail assocSetupFailList[MAX_TNL_ASSOC]; /* TNL Assoc Setup fail list */
764 F1DedSIDelUE dedSiDelUelist[MAXNUMOFUEID]; /* Dedicated SI delivery needed UE list */
767 typedef struct f1GnbCuCfgUpdFail
769 F1FailureIE gnbCuCfgUpdFail;
772 /* This procedure enables coordination of radio resource allocation between a gNB-CU and
773 * a gNB-DU. Coordination request is sent by CU to DU */
774 typedef struct f1GnbDuRsrcCoordReq
776 U32 transId; /* Uniquely identifies transaction */
777 F1ReqType reqType; /* Request type */
778 U8 cellResCoordReqCont; /* Container for X2AP E-UTRA - NR cell resource coordination request */
779 F1IgnoreReq ignoreReq; /* Ignore coordination request */
780 }F1GnbDuRsrcCoordReq;
782 /* This message is sent by a gNB-DU to a gNB-CU, to express the desired resource allocation
783 * for data traffic, as a response to the GNB-DU RESOURCE COORDINATION REQUEST. */
784 typedef struct f1GnbDuRsrcCoordRsp
786 U32 transId; /* Uniquely identifies transaction */
787 U8 cellResCoordRspCont; /* Container for X2AP E-UTRA - NR cell resource coordination response */
788 }F1GnbDuRsrcCoordRsp;
790 /* This message is sent by the gNB-DU to indicate to the gNB-CU its status of overload */
791 typedef struct f1GnbDuStatusInd
793 U32 transId; /* Uniquely identifies transaction */
794 F1GnbDuOvrloadInfo ovrloadInfo; /* gNB-DU overloaded information */
797 /* This message is sent by either the gNB-DU or the gNB-CU to intiate the removal
798 * of the interface instance and the related resources */
799 typedef struct f1RmvReq
801 U32 transId; /* Uniquely identifies transaction */
804 /* This message acknowledges the initiation of removal of the interface
805 * instance and the related resources */
806 typedef struct f1RmvRsp
808 U32 transId; /* Uniquely identifies transaction */
809 F1CritDiagnostic critDiagnos; /* Crititcality diagnostics */
812 /* This message indicates that removing the interface instance and the related
813 * resources cannot be accepted */
814 typedef struct f1RmvFail
816 U32 transId; /* Uniquely identifies transaction */
817 F1FailCause cause; /* Failure cause */
818 F1CritDiagnostic critDiagnostic; /* Criticality diagnostics */
821 /* This message is sent by the gNB-CU to indicate to the gNB-DU a need to reduce
822 * the rate at which UEs access the network. */
823 typedef struct f1NwkAccessRateRed
825 U32 transId; /* Uniquely identifies transaction */
826 F1UacAssistInfo uacAssistInfo; /* UAC Assistance Information */
829 typedef struct f1Ipaddr
835 typedef struct f1SctpParams
843 typedef struct f1EgtpParams
845 F1IpAddr localIp; /* Ip address of local node */
846 U16 localPort; /* Sender Port at local node */
847 F1IpAddr destIp; /* Ip address of peer node */
848 U16 destPort; /* Sender port at peer node */
853 typedef struct cellCfgParams
855 NrEcgi nrEcgi; /* ECGI */
857 U16 fiveGsTac; /* 5gSTac */
858 PlmnId plmn[MAX_PLMN]; /* List of serving PLMN IDs */
859 U8 ranac; /* RAN Area Code */
860 U32 maxUe; /* max UE per slot */
863 typedef struct schedulerCfg
865 U8 numTxAntPorts; /*!< Number of Tx antenna ports */
866 U8 ulSchdType; /*!< Indicates which UL scheduler to use, range
867 * is 0..(number of schedulers - 1) */
868 U8 dlSchdType; /*!< Indicates which DL scheduler to use, range
869 * is 0..(number of schedulers - 1) */
870 U8 numCells; /*!< Max number of cells */
871 U8 maxUlUePerTti; /*!< Max number of UE in UL per TTI */
872 U8 maxDlUePerTti; /*!< Max number of UE in DL per TTI */
875 typedef struct mibParams
878 long subCarrierSpacingCommon;
879 long ssb_SubcarrierOffset;
880 long dmrs_TypeA_Position;
881 long controlResourceSetZero;
882 long searchSpaceZero;
884 long intraFreqReselection;
887 typedef struct sib1Params
893 long cellResvdForOpUse;
896 typedef struct duCfgParams
898 F1SctpParams sctpParams; /* SCTP Params */
899 F1EgtpParams egtpParams; /* EGTP Params */
902 U8 duName[CU_DU_NAME_LEN_MAX];
903 SchedulerCfg schedCfg;
904 CellCfgParams cellCfg[DU_MAX_CELLS]; /* Cell info config*/
905 F1DuSrvdCellInfo srvdCellLst[DU_MAX_CELLS]; /* Serving cell list *///TODO: this must be removed eventually
906 F1RrcVersion rrcVersion; /* RRC version */
908 MacCellCfg macCellCfg; /* MAC cell configuration */
909 MibParams mibParams; /* MIB Params */
910 Sib1Params sib1Params; /* SIB1 Params */
913 typedef struct duCellCb
915 U32 cellId; /* Internal cell Id */
916 CellCfgParams cellInfo; /* Cell info */
917 CellStatus cellStatus; /*Cell status */
920 /*function declarations */
921 void FillSlotConfig();
925 S16 bitStringToInt(BIT_STRING_t *bitString, U16 *val);
927 #endif /* __DU_CONFIG_H__ */
929 /**********************************************************************
931 **********************************************************************/