diff --git a/controller/api/configurationManagement.go b/controller/api/configurationManagement.go new file mode 100644 index 0000000000000000000000000000000000000000..986a192af234ae077cfb128121f38618cc6a23ac --- /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 0000000000000000000000000000000000000000..8e008d173165d70a5098f3c0ff20605b4b089004 --- /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 +}