X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fconfiguration%2Fconfiguration.go;h=56b9d1ea717d393b23024a20aa0954551d57c698;hb=2e2df47c2adf829fc8dfcd57362061b1a09e1125;hp=5e4c31e10f9b55369b1c3196722be0766ef34376;hpb=313355950ec536c37ea40e630b0d81e4e674e07c;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/configuration/configuration.go b/E2Manager/configuration/configuration.go index 5e4c31e..56b9d1e 100644 --- a/E2Manager/configuration/configuration.go +++ b/E2Manager/configuration/configuration.go @@ -20,10 +20,18 @@ package configuration import ( + "errors" "fmt" + "strconv" + "github.com/spf13/viper" ) +type RnibWriterConfig struct { + StateChangeMessageChannel string + RanManipulationMessageChannel string +} + type Configuration struct { Logging struct { LogLevel string @@ -38,10 +46,7 @@ type Configuration struct { RoutingManager struct { BaseUrl string } -/* Kubernetes struct { - ConfigPath string - KubeNamespace string - }*/ + NotificationResponseBuffer int BigRedButtonTimeoutSec int MaxRnibConnectionAttempts int @@ -49,10 +54,13 @@ type Configuration struct { KeepAliveResponseTimeoutMs int KeepAliveDelayMs int E2TInstanceDeletionTimeoutMs int + E2ResetTimeOutSec int GlobalRicId struct { - PlmnId string - RicNearRtId string + RicId string + Mcc string + Mnc string } + RnibWriter RnibWriterConfig } func ParseConfiguration() *Configuration { @@ -72,7 +80,6 @@ func ParseConfiguration() *Configuration { config.populateHttpConfig(viper.Sub("http")) config.populateLoggingConfig(viper.Sub("logging")) config.populateRoutingManagerConfig(viper.Sub("routingManager")) - //config.populateKubernetesConfig(viper.Sub("kubernetes")) config.NotificationResponseBuffer = viper.GetInt("notificationResponseBuffer") config.BigRedButtonTimeoutSec = viper.GetInt("bigRedButtonTimeoutSec") config.MaxRnibConnectionAttempts = viper.GetInt("maxRnibConnectionAttempts") @@ -80,7 +87,10 @@ func ParseConfiguration() *Configuration { config.KeepAliveResponseTimeoutMs = viper.GetInt("keepAliveResponseTimeoutMs") config.KeepAliveDelayMs = viper.GetInt("KeepAliveDelayMs") config.E2TInstanceDeletionTimeoutMs = viper.GetInt("e2tInstanceDeletionTimeoutMs") + //E2ResetTimeOutSec : timeout expiry threshold required for handling reset and thus the time for which the nodeb is under reset connection state. + config.E2ResetTimeOutSec = viper.GetInt("e2ResetTimeOutSec") config.populateGlobalRicIdConfig(viper.Sub("globalRicId")) + config.populateRnibWriterConfig(viper.Sub("rnibWriter")) return &config } @@ -113,27 +123,118 @@ func (c *Configuration) populateRoutingManagerConfig(rmConfig *viper.Viper) { c.RoutingManager.BaseUrl = rmConfig.GetString("baseUrl") } -/*func (c *Configuration) populateKubernetesConfig(rmConfig *viper.Viper) { - if rmConfig == nil { - panic(fmt.Sprintf("#configuration.populateKubernetesConfig - failed to populate Kubernetes configuration: The entry 'kubernetes' not found\n")) +func (c *Configuration) populateRnibWriterConfig(rnibWriterConfig *viper.Viper) { + if rnibWriterConfig == nil { + panic(fmt.Sprintf("#configuration.populateRnibWriterConfig - failed to populate Rnib Writer configuration: The entry 'rnibWriter' not found\n")) } - c.Kubernetes.ConfigPath = rmConfig.GetString("configPath") - c.Kubernetes.KubeNamespace = rmConfig.GetString("kubeNamespace") -}*/ + c.RnibWriter.StateChangeMessageChannel = rnibWriterConfig.GetString("stateChangeMessageChannel") + c.RnibWriter.RanManipulationMessageChannel = rnibWriterConfig.GetString("ranManipulationMessageChannel") +} func (c *Configuration) populateGlobalRicIdConfig(globalRicIdConfig *viper.Viper) { + err := validateGlobalRicIdConfig(globalRicIdConfig) + if err != nil { + panic(err.Error()) + } + c.GlobalRicId.RicId = globalRicIdConfig.GetString("ricId") + c.GlobalRicId.Mcc = globalRicIdConfig.GetString("mcc") + c.GlobalRicId.Mnc = globalRicIdConfig.GetString("mnc") +} + +func validateGlobalRicIdConfig(globalRicIdConfig *viper.Viper) error { if globalRicIdConfig == nil { - panic(fmt.Sprintf("#configuration.populateGlobalRicIdConfig - failed to populate Global RicId configuration: The entry 'globalRicId' not found\n")) + return errors.New("#configuration.validateGlobalRicIdConfig - failed to populate Global RicId configuration: The entry 'globalRicId' not found\n") + } + + err := validateRicId(globalRicIdConfig.GetString("ricId")) + + if err != nil { + return err + } + + err = validateMcc(globalRicIdConfig.GetString("mcc")) + + if err != nil { + return err + } + + err = validateMnc(globalRicIdConfig.GetString("mnc")) + + if err != nil { + return err + } + + return nil +} + +func validateMcc(mcc string) error { + + if len(mcc) == 0 { + return errors.New("#configuration.validateMcc - mcc is missing or empty\n") + } + + if len(mcc) != 3 { + return errors.New("#configuration.validateMcc - mcc is not 3 digits\n") } - c.GlobalRicId.PlmnId = globalRicIdConfig.GetString("plmnId") - c.GlobalRicId.RicNearRtId = globalRicIdConfig.GetString("ricNearRtId") + + mccInt, err := strconv.Atoi(mcc) + + if err != nil { + return errors.New("#configuration.validateMcc - mcc is not a number\n") + } + + if mccInt < 0 { + return errors.New("#configuration.validateMcc - mcc is negative\n") + } + return nil +} + +func validateMnc(mnc string) error { + + if len(mnc) == 0 { + return errors.New("#configuration.validateMnc - mnc is missing or empty\n") + } + + if len(mnc) < 2 || len(mnc) > 3 { + return errors.New("#configuration.validateMnc - mnc is not 2 or 3 digits\n") + } + + mncAsInt, err := strconv.Atoi(mnc) + + if err != nil { + return errors.New("#configuration.validateMnc - mnc is not a number\n") + } + + if mncAsInt < 0 { + return errors.New("#configuration.validateMnc - mnc is negative\n") + } + + return nil +} + +func validateRicId(ricId string) error { + + if len(ricId) == 0 { + return errors.New("#configuration.validateRicId - ricId is missing or empty\n") + } + + if len(ricId) != 5 { + return errors.New("#configuration.validateRicId - ricId length should be 5 hex characters\n") + } + + _, err := strconv.ParseUint(ricId, 16, 64) + if err != nil { + return errors.New("#configuration.validateRicId - ricId is not hex number\n") + } + + return nil } func (c *Configuration) String() string { return fmt.Sprintf("{logging.logLevel: %s, http.port: %d, rmr: { port: %d, maxMsgSize: %d}, routingManager.baseUrl: %s, "+ "notificationResponseBuffer: %d, bigRedButtonTimeoutSec: %d, maxRnibConnectionAttempts: %d, "+ - "rnibRetryIntervalMs: %d, keepAliveResponseTimeoutMs: %d, keepAliveDelayMs: %d, e2tInstanceDeletionTimeoutMs: %d, "+ - "globalRicId: { plmnId: %s, ricNearRtId: %s}",//, kubernetes: {configPath: %s, kubeNamespace: %s}}", + "rnibRetryIntervalMs: %d, keepAliveResponseTimeoutMs: %d, keepAliveDelayMs: %d, e2tInstanceDeletionTimeoutMs: %d,e2ResetTimeOutSec: %d,"+ + "globalRicId: { ricId: %s, mcc: %s, mnc: %s}, rnibWriter: { stateChangeMessageChannel: %s, ranManipulationChannel: %s}", c.Logging.LogLevel, c.Http.Port, c.Rmr.Port, @@ -146,9 +247,11 @@ func (c *Configuration) String() string { c.KeepAliveResponseTimeoutMs, c.KeepAliveDelayMs, c.E2TInstanceDeletionTimeoutMs, - c.GlobalRicId.PlmnId, - c.GlobalRicId.RicNearRtId, -/* c.Kubernetes.ConfigPath, - c.Kubernetes.KubeNamespace,*/ + c.E2ResetTimeOutSec, + c.GlobalRicId.RicId, + c.GlobalRicId.Mcc, + c.GlobalRicId.Mnc, + c.RnibWriter.StateChangeMessageChannel, + c.RnibWriter.RanManipulationMessageChannel, ) }