VOL-4019: Initial commit with grpc nbi, sbi, etcd, kafka and hw management rpcs.

Change-Id: I78feaf7da284028fc61f42c5e0c5f56e72fe9e78
diff --git a/pkg/config/core.go b/pkg/config/core.go
new file mode 100644
index 0000000..f828138
--- /dev/null
+++ b/pkg/config/core.go
@@ -0,0 +1,69 @@
+/*
+ * 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 config Common Logger initialization
+package config
+
+import (
+	"context"
+	"fmt"
+
+	"github.com/google/uuid"
+)
+
+var ctxGlobal context.Context
+
+// Core represent read,write core attributes
+type Core struct {
+	Ctx     context.Context
+	Cancel  context.CancelFunc
+	Stopped chan struct{}
+}
+
+// NewCoreConfig will give the new core configuration
+func NewCoreConfig() *Core {
+	ctx, cancelCtx := context.WithCancel(context.Background())
+	core := &Core{Ctx: ctx, Cancel: cancelCtx, Stopped: make(chan struct{})}
+	ctxGlobal = ctx
+	return core
+}
+
+// GetContext returns global context
+func GetContext() context.Context {
+	return ctxGlobal
+}
+
+func retConstructedContxt(ctx context.Context, msg string) context.Context {
+	id, _ := uuid.NewRandom()
+	var reqID string
+	if msg != "" {
+		reqID = fmt.Sprintf("%s-%v", msg, id)
+	} else {
+		reqID = fmt.Sprintf("%v", id)
+	}
+	ctx2 := context.WithValue(ctx, RequestIdKey, reqID)
+	return ctx2
+}
+
+// GetNewContextFromGlobalContxt returns context from global context
+func GetNewContextFromGlobalContxt(msg string) context.Context {
+	return retConstructedContxt(ctxGlobal, msg)
+}
+
+// GetNewContextFromContxt returns new context from passed context
+func GetNewContextFromContxt(ctx context.Context, msg string) context.Context {
+	return retConstructedContxt(ctx, msg)
+}