VOL-3616 Support for API to retrieve information (example UNI) from an ONU
This commit implements extension service, which includes handling of the GetExtValue and SetExtValue APIs

Change-Id: I537160af5b70eccef77a8bc11235af3b50f9a513
diff --git a/rw_core/core/core.go b/rw_core/core/core.go
index 056594b..1a22267 100644
--- a/rw_core/core/core.go
+++ b/rw_core/core/core.go
@@ -30,6 +30,7 @@
 	"github.com/opencord/voltha-lib-go/v4/pkg/kafka"
 	"github.com/opencord/voltha-lib-go/v4/pkg/log"
 	"github.com/opencord/voltha-lib-go/v4/pkg/probe"
+	"github.com/opencord/voltha-protos/v4/go/extension"
 	"github.com/opencord/voltha-protos/v4/go/voltha"
 	"google.golang.org/grpc"
 )
@@ -136,6 +137,10 @@
 
 	// start gRPC handler
 	grpcServer := grpcserver.NewGrpcServer(cf.GrpcAddress, nil, false, probe.GetProbeFromContext(ctx))
+
+	//Register the 'Extension' service on this gRPC server
+	addGRPCExtensionService(ctx, grpcServer, device.GetNewExtensionManager(deviceMgr))
+
 	go startGRPCService(ctx, grpcServer, api.NewNBIHandler(deviceMgr, logicalDeviceMgr, adapterMgr))
 	defer grpcServer.Stop()
 
@@ -163,3 +168,12 @@
 	server.Start(ctx)
 	probe.UpdateStatusFromContext(ctx, "grpc-service", probe.ServiceStatusStopped)
 }
+
+func addGRPCExtensionService(ctx context.Context, server *grpcserver.GrpcServer, handler extension.ExtensionServer) {
+	logger.Info(ctx, "extension-grpc-server-created")
+
+	server.AddService(func(server *grpc.Server) {
+		extension.RegisterExtensionServer(server, handler)
+	})
+
+}