blob: aff1de32b15f9b0416966854915fe51f96cfd9e6 [file] [log] [blame]
Holger Hildebrandtfa074992020-03-27 15:42:06 +00001/*
2* Copyright 2018-present Open Networking Foundation
3
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7
8* http://www.apache.org/licenses/LICENSE-2.0
9
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15 */
16
17//Package config provides the Log, kvstore, Kafka configuration
18package config
19
20import (
21 "flag"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000022 "os"
23 "time"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000024)
25
26// Open ONU default constants
27const (
khenaidoo7d3c5582021-08-11 18:09:44 -040028 EtcdStoreName = "etcd"
29 OnuVendorIds = "OPEN,ALCL,BRCM,TWSH,ALPH,ISKT,SFAA,BBSM,SCOM,ARPX,DACM,ERSN,HWTC,CIGG,ADTN,ARCA,AVMG"
Holger Hildebrandtfa074992020-03-27 15:42:06 +000030)
31
32// AdapterFlags represents the set of configurations used by the read-write adaptercore service
33type AdapterFlags struct {
34 // Command line parameters
35 InstanceID string
Matteo Scandolo127c59d2021-01-28 11:31:18 -080036 KafkaClusterAddress string // NOTE this is unused across the adapter
Holger Hildebrandtfa074992020-03-27 15:42:06 +000037 KVStoreType string
mpagenkoaf801632020-07-03 10:00:42 +000038 KVStoreTimeout time.Duration
Matteo Scandolo127c59d2021-01-28 11:31:18 -080039 KVStoreAddress string
Holger Hildebrandtfa074992020-03-27 15:42:06 +000040 EventTopic string
41 LogLevel string
42 OnuNumber int
43 Banner bool
44 DisplayVersionOnly bool
mpagenkodff5dda2020-08-28 11:52:01 +000045 AccIncrEvto bool
Holger Hildebrandtfa074992020-03-27 15:42:06 +000046 ProbeHost string
47 ProbePort int
48 LiveProbeInterval time.Duration
49 NotLiveProbeInterval time.Duration
50 HeartbeatCheckInterval time.Duration
51 HeartbeatFailReportInterval time.Duration
52 KafkaReconnectRetries int
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +000053 CurrentReplica int
54 TotalReplicas int
Himani Chawlad96df182020-09-28 11:12:02 +053055 MaxTimeoutInterAdapterComm time.Duration
Holger Hildebrandt38985dc2021-02-18 16:25:20 +000056 MaxTimeoutReconciling time.Duration
dbainbri4d3a0dc2020-12-02 00:33:42 +000057 TraceEnabled bool
58 TraceAgentAddress string
59 LogCorrelationEnabled bool
Andrea Campanella3d7c9312021-01-19 09:20:49 +010060 OnuVendorIds string
Girish Gowdraaf0ad632021-01-27 13:00:01 -080061 MetricsEnabled bool
Holger Hildebrandte3677f12021-02-05 14:50:56 +000062 MibAuditInterval time.Duration
Girish Gowdra0b235842021-03-09 13:06:46 -080063 OmciTimeout time.Duration
Himani Chawla075f1642021-03-15 19:23:24 +053064 AlarmAuditInterval time.Duration
mpagenkoc26d4c02021-05-06 14:27:57 +000065 DownloadToAdapterTimeout time.Duration
66 DownloadToOnuTimeout4MB time.Duration
Matteo Scandolo20d180c2021-06-10 17:20:21 +020067 UniPortMask int
khenaidoo7d3c5582021-08-11 18:09:44 -040068 MinBackoffRetryDelay time.Duration
69 MaxBackoffRetryDelay time.Duration
70 AdapterEndpoint string
71 GrpcAddress string
72 CoreEndpoint string
73 RPCTimeout time.Duration
Holger Hildebrandtfa074992020-03-27 15:42:06 +000074}
75
76// ParseCommandArguments parses the arguments when running read-write adaptercore service
khenaidoo7d3c5582021-08-11 18:09:44 -040077func (so *AdapterFlags) ParseCommandArguments(args []string) {
Holger Hildebrandtfa074992020-03-27 15:42:06 +000078
khenaidoo7d3c5582021-08-11 18:09:44 -040079 fs := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
Holger Hildebrandtfa074992020-03-27 15:42:06 +000080
khenaidoo7d3c5582021-08-11 18:09:44 -040081 fs.StringVar(&(so.KafkaClusterAddress),
82 "kafka_cluster_address",
83 "127.0.0.1:9092",
84 "Kafka - Cluster messaging address")
Holger Hildebrandtfa074992020-03-27 15:42:06 +000085
khenaidoo7d3c5582021-08-11 18:09:44 -040086 fs.StringVar(&(so.EventTopic),
87 "event_topic",
88 "voltha.events",
89 "Event topic")
Holger Hildebrandta768fe92020-10-01 13:06:21 +000090
khenaidoo7d3c5582021-08-11 18:09:44 -040091 fs.StringVar(&(so.KVStoreType),
92 "kv_store_type",
93 EtcdStoreName,
94 "KV store type")
Holger Hildebrandtfa074992020-03-27 15:42:06 +000095
khenaidoo7d3c5582021-08-11 18:09:44 -040096 fs.DurationVar(&(so.KVStoreTimeout),
97 "kv_store_request_timeout",
98 5*time.Second,
99 "The default timeout when making a kv store request")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000100
khenaidoo7d3c5582021-08-11 18:09:44 -0400101 fs.StringVar(&(so.KVStoreAddress),
102 "kv_store_address",
103 "127.0.0.1:2379",
104 "KV store address")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000105
khenaidoo7d3c5582021-08-11 18:09:44 -0400106 fs.StringVar(&(so.LogLevel),
107 "log_level",
108 "WARN",
109 "Log level")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000110
khenaidoo7d3c5582021-08-11 18:09:44 -0400111 fs.IntVar(&(so.OnuNumber),
112 "onu_number",
113 1,
114 "Number of ONUs")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000115
khenaidoo7d3c5582021-08-11 18:09:44 -0400116 fs.BoolVar(&(so.Banner),
117 "banner",
118 false,
119 "Show startup banner log lines")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000120
khenaidoo7d3c5582021-08-11 18:09:44 -0400121 fs.BoolVar(&(so.DisplayVersionOnly),
122 "version",
123 false,
124 "Show version information and exit")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000125
khenaidoo7d3c5582021-08-11 18:09:44 -0400126 fs.BoolVar(&(so.AccIncrEvto),
127 "accept_incr_evto",
128 false,
129 "Acceptance of incremental EVTOCD configuration")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000130
khenaidoo7d3c5582021-08-11 18:09:44 -0400131 fs.StringVar(&(so.ProbeHost),
132 "probe_host",
133 "",
134 "The address on which to listen to answer liveness and readiness probe queries over HTTP")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000135
khenaidoo7d3c5582021-08-11 18:09:44 -0400136 fs.IntVar(&(so.ProbePort),
137 "probe_port",
138 8080,
139 "The port on which to listen to answer liveness and readiness probe queries over HTTP")
mpagenkodff5dda2020-08-28 11:52:01 +0000140
khenaidoo7d3c5582021-08-11 18:09:44 -0400141 fs.DurationVar(&(so.LiveProbeInterval),
142 "live_probe_interval",
143 60*time.Second,
144 "Number of seconds for the default liveliness check")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000145
khenaidoo7d3c5582021-08-11 18:09:44 -0400146 fs.DurationVar(&(so.NotLiveProbeInterval),
147 "not_live_probe_interval",
148 60*time.Second,
149 "Number of seconds for liveliness check if probe is not running")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000150
khenaidoo7d3c5582021-08-11 18:09:44 -0400151 fs.DurationVar(&(so.HeartbeatCheckInterval),
152 "hearbeat_check_interval",
153 30*time.Second,
154 "Number of seconds for heartbeat check interval")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000155
khenaidoo7d3c5582021-08-11 18:09:44 -0400156 fs.DurationVar(&(so.HeartbeatFailReportInterval),
157 "hearbeat_fail_interval",
158 30*time.Second,
159 "Number of seconds adapter has to wait before reporting core on the hearbeat check failure")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000160
khenaidoo7d3c5582021-08-11 18:09:44 -0400161 fs.IntVar(&(so.KafkaReconnectRetries),
162 "kafka_reconnect_retries",
163 -1,
164 "Number of retries to connect to Kafka")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000165
khenaidoo7d3c5582021-08-11 18:09:44 -0400166 fs.IntVar(&(so.CurrentReplica),
167 "current_replica",
168 1,
169 "Replica number of this particular instance")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000170
khenaidoo7d3c5582021-08-11 18:09:44 -0400171 fs.IntVar(&(so.TotalReplicas),
172 "total_replica",
173 1,
174 "Total number of instances for this adapter")
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000175
khenaidoo7d3c5582021-08-11 18:09:44 -0400176 fs.DurationVar(&(so.MaxTimeoutInterAdapterComm),
177 "max_timeout_interadapter_comm",
178 30*time.Second,
179 "Maximum Number of seconds for the default interadapter communication timeout")
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000180
khenaidoo7d3c5582021-08-11 18:09:44 -0400181 fs.DurationVar(&(so.MaxTimeoutReconciling),
182 "max_timeout_reconciling",
183 10*time.Second,
184 "Maximum Number of seconds for the default ONU reconciling timeout")
Holger Hildebrandt0f9b88d2020-04-20 13:33:25 +0000185
khenaidoo7d3c5582021-08-11 18:09:44 -0400186 fs.BoolVar(&(so.TraceEnabled),
187 "trace_enabled",
188 false,
189 "Whether to send logs to tracing agent")
Himani Chawlad96df182020-09-28 11:12:02 +0530190
khenaidoo7d3c5582021-08-11 18:09:44 -0400191 fs.StringVar(&(so.TraceAgentAddress),
192 "trace_agent_address",
193 "127.0.0.1:6831",
194 "The address of tracing agent to which span info should be sent")
Holger Hildebrandt38985dc2021-02-18 16:25:20 +0000195
khenaidoo7d3c5582021-08-11 18:09:44 -0400196 fs.BoolVar(&(so.LogCorrelationEnabled),
197 "log_correlation_enabled",
198 true,
199 "Whether to enrich log statements with fields denoting operation being executed for achieving correlation")
dbainbri4d3a0dc2020-12-02 00:33:42 +0000200
khenaidoo7d3c5582021-08-11 18:09:44 -0400201 fs.StringVar(&(so.OnuVendorIds),
202 "allowed_onu_vendors",
203 OnuVendorIds,
204 "List of Allowed ONU Vendor Ids")
dbainbri4d3a0dc2020-12-02 00:33:42 +0000205
khenaidoo7d3c5582021-08-11 18:09:44 -0400206 fs.BoolVar(&(so.MetricsEnabled),
207 "metrics_enabled",
208 false,
209 "Whether to enable metrics collection")
dbainbri4d3a0dc2020-12-02 00:33:42 +0000210
khenaidoo7d3c5582021-08-11 18:09:44 -0400211 fs.DurationVar(&(so.MibAuditInterval),
212 "mib_audit_interval",
213 300*time.Second,
214 "Mib Audit Interval in seconds - the value zero will disable Mib Audit")
Andrea Campanella3d7c9312021-01-19 09:20:49 +0100215
khenaidoo7d3c5582021-08-11 18:09:44 -0400216 fs.DurationVar(&(so.OmciTimeout),
217 "omci_timeout",
218 3*time.Second,
219 "OMCI timeout duration - this timeout value is used on the OMCI channel for waiting on response from ONU")
Girish Gowdraaf0ad632021-01-27 13:00:01 -0800220
khenaidoo7d3c5582021-08-11 18:09:44 -0400221 fs.DurationVar(&(so.AlarmAuditInterval),
222 "alarm_audit_interval",
223 300*time.Second,
224 "Alarm Audit Interval in seconds - the value zero will disable alarm audit")
Holger Hildebrandte3677f12021-02-05 14:50:56 +0000225
khenaidoo7d3c5582021-08-11 18:09:44 -0400226 fs.DurationVar(&(so.DownloadToAdapterTimeout),
227 "download_to_adapter_timeout",
228 10*time.Second,
229 "File download to adapter timeout in seconds")
Girish Gowdra0b235842021-03-09 13:06:46 -0800230
khenaidoo7d3c5582021-08-11 18:09:44 -0400231 fs.DurationVar(&(so.DownloadToOnuTimeout4MB),
232 "download_to_onu_timeout_4MB",
233 60*time.Minute,
234 "File download to ONU timeout in minutes for a block of 4MB")
Himani Chawla075f1642021-03-15 19:23:24 +0530235
khenaidoo7d3c5582021-08-11 18:09:44 -0400236 //Mask to indicate which possibly active ONU UNI state is really reported to the core
237 // compare python code - at the moment restrict active state to the first ONU UNI port
238 // check is limited to max 16 uni ports - cmp above UNI limit!!!
239 fs.IntVar(&(so.UniPortMask),
240 "uni_port_mask",
241 0x0001,
242 "The bitmask to identify UNI ports that need to be enabled")
mpagenkoc26d4c02021-05-06 14:27:57 +0000243
khenaidoo7d3c5582021-08-11 18:09:44 -0400244 fs.StringVar(&(so.GrpcAddress),
245 "grpc_address",
246 ":50060",
247 "Adapter GRPC Server address")
mpagenkoc26d4c02021-05-06 14:27:57 +0000248
khenaidoo7d3c5582021-08-11 18:09:44 -0400249 fs.StringVar(&(so.CoreEndpoint),
250 "core_endpoint",
251 ":55555",
252 "Core endpoint")
Matteo Scandolo20d180c2021-06-10 17:20:21 +0200253
khenaidoo7d3c5582021-08-11 18:09:44 -0400254 fs.StringVar(&(so.AdapterEndpoint),
255 "adapter_endpoint",
256 "",
257 "Adapter Endpoint")
258
259 fs.DurationVar(&(so.RPCTimeout),
260 "rpc_timeout",
261 10*time.Second,
262 "The default timeout when making an RPC request")
263
264 fs.DurationVar(&(so.MinBackoffRetryDelay),
265 "min_retry_delay",
266 500*time.Millisecond,
267 "The minimum number of milliseconds to delay before a connection retry attempt")
268
269 fs.DurationVar(&(so.MaxBackoffRetryDelay),
270 "max_retry_delay",
271 10*time.Second,
272 "The maximum number of milliseconds to delay before a connection retry attempt")
273
274 _ = fs.Parse(args)
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000275 containerName := getContainerInfo()
276 if len(containerName) > 0 {
277 so.InstanceID = containerName
khenaidoo7d3c5582021-08-11 18:09:44 -0400278 } else {
279 so.InstanceID = "openonu"
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000280 }
281
Holger Hildebrandtfa074992020-03-27 15:42:06 +0000282}
283
284func getContainerInfo() string {
285 return os.Getenv("HOSTNAME")
286}