[VOL-3678] First implementation of the BBSim-sadis-server

Change-Id: I5077a8f861f4cc6af9759f31a4a415042c05eba3
diff --git a/internal/utils/config.go b/internal/utils/config.go
new file mode 100644
index 0000000..19a91a9
--- /dev/null
+++ b/internal/utils/config.go
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package utils
+
+import (
+	"flag"
+	"fmt"
+	"github.com/opencord/voltha-lib-go/v4/pkg/log"
+)
+
+const (
+	defaultLogLevel       = "WARN"
+	defaultLogFormat      = "json" // or "console"
+	defaultBBsimSadisPort = 50074
+)
+
+type ConfigFlags struct {
+	LogLevel       string
+	LogFormat      string
+	Kubeconfig     string
+	BBsimSadisPort int
+}
+
+func NewConfigFlags() *ConfigFlags {
+	flags := &ConfigFlags{
+		LogLevel:   defaultLogLevel,
+		LogFormat:  defaultLogFormat,
+		Kubeconfig: "",
+		BBsimSadisPort: defaultBBsimSadisPort,
+	}
+	return flags
+}
+
+func (cf *ConfigFlags) ParseCommandArguments() {
+	help := fmt.Sprintf("Log level (debug, infor, warn, error)")
+	flag.StringVar(&(cf.LogLevel), "log_level", defaultLogLevel, help)
+
+	help = fmt.Sprintf("Log format (json or console)	")
+	logFormat := flag.String("log_format", defaultLogFormat, help)
+
+	flag.StringVar(&(cf.Kubeconfig), "kubeconfig", "", "Absolute path to the kubeconfig file")
+	flag.IntVar(&(cf.BBsimSadisPort), "bbsim_sadis_port", defaultBBsimSadisPort, "The port on which BBSim exposes the Sadis server")
+
+	flag.Parse()
+
+	if *logFormat != log.CONSOLE && *logFormat != log.JSON {
+		panic(fmt.Sprintf("log_format is invalid, allowed values are: %s, %s", log.JSON, log.CONSOLE))
+	}
+
+	cf.LogFormat = *logFormat
+}