From 9c33424aa6e271cf48d97f6c8b216ac35d73b14e Mon Sep 17 00:00:00 2001
From: Fabian Seidl <fabian.seidl@h-da.de>
Date: Wed, 13 Mar 2024 15:32:20 +0100
Subject: [PATCH] add API stuff for configuration management

---
 controller/api/configurationManagement.go     | 38 +++++++++++++++++++
 .../client/configurationManagement.go         | 17 +++++++++
 2 files changed, 55 insertions(+)
 create mode 100644 controller/api/configurationManagement.go
 create mode 100644 controller/northbound/client/configurationManagement.go

diff --git a/controller/api/configurationManagement.go b/controller/api/configurationManagement.go
new file mode 100644
index 000000000..986a192af
--- /dev/null
+++ b/controller/api/configurationManagement.go
@@ -0,0 +1,38 @@
+package api
+
+import (
+	"context"
+	"time"
+
+	cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement"
+	nbi "code.fbi.h-da.de/danet/gosdn/controller/northbound/client"
+)
+
+// ExportSDNConfig returns the SDN configuration.
+func ExportSDNConfig(ctx context.Context, addr, pid string) (*cpb.ExportSDNConfigResponse, error) {
+	configClient, err := nbi.ConfigurationManagementClient(addr, dialOptions...)
+	if err != nil {
+		return nil, err
+	}
+
+	req := &cpb.ExportSDNConfigRequest{
+		Timestamp: time.Now().UnixNano(),
+		Pid:       pid,
+	}
+	return configClient.ExportSDNConfig(ctx, req)
+}
+
+// ImportSDNConfig receives an SDN configuration and imports it.
+func ImportSDNConfig(ctx context.Context, addr, pid, sdnConfigData string) (*cpb.ImportSDNConfigResponse, error) {
+	configClient, err := nbi.ConfigurationManagementClient(addr, dialOptions...)
+	if err != nil {
+		return nil, err
+	}
+
+	req := &cpb.ImportSDNConfigRequest{
+		Timestamp:     time.Now().UnixNano(),
+		Pid:           pid,
+		SdnConfigData: sdnConfigData,
+	}
+	return configClient.ImportSDNConfig(ctx, req)
+}
diff --git a/controller/northbound/client/configurationManagement.go b/controller/northbound/client/configurationManagement.go
new file mode 100644
index 000000000..8e008d173
--- /dev/null
+++ b/controller/northbound/client/configurationManagement.go
@@ -0,0 +1,17 @@
+package client
+
+import (
+	cpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/configurationmanagement"
+	"google.golang.org/grpc"
+)
+
+// ConfigurationManagementClient returns a client for the gRPC ConfigurationManagement service. It takes
+// the address of the gRPC endpoint and optional grpc.DialOption
+// as argument.
+func ConfigurationManagementClient(addr string, opts ...grpc.DialOption) (cpb.ConfigurationManagementServiceClient, error) {
+	conn, err := grpc.Dial(addr, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return cpb.NewConfigurationManagementServiceClient(conn), nil
+}
-- 
GitLab