Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
gnmi_transport.go 1.93 KiB
package nucleus

import (
	"code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi"
	"context"
	"github.com/google/uuid"
	"github.com/openconfig/gnmi/proto/gnmi_ext"

	gpb "github.com/openconfig/gnmi/proto/gnmi"
)

type Gnmi uuid.UUID

func (g *Gnmi) SetConfig(interface{}) error {
	return nil
}

func (g *Gnmi) GetConfig() interface{} {
	return nil
}

// Capabilities calls GNMI capabilities
func (g *Gnmi) Capabilities(ctx context.Context) (interface{}, error) {
	client, err := gnmi.Dial(ctx.Value("config").(*gnmi.Config))
	if err != nil {
		return nil, err
	}
	resp, err := client.Capabilities(ctx, &gpb.CapabilityRequest{})
	if err != nil {
		return nil, err
	}
	return resp, nil
}

// Get calls GNMI get
func (g *Gnmi) Get(ctx context.Context, paths [][]string, origin string) (interface{}, error) {
	req, err := gnmi.NewGetRequest(paths, origin)
	if err != nil {
		return nil, err
	}
	return GetWithRequest(ctx, req)
}

// GetWithRequest takes a fully formed GetRequest, performs the Get,
// and displays any response.
func GetWithRequest(ctx context.Context, req *gpb.GetRequest) (interface{}, error) {
	client, err := gnmi.Dial(ctx.Value("config").(*gnmi.Config))
	if err != nil {
		return nil, err
	}
	resp, err := client.Get(ctx, req)
	if err != nil {
		return nil, err
	}
	return resp, nil
}

// Set calls GNMI set
func (g *Gnmi) Set(ctx context.Context, setOps []*gnmi.Operation,
	exts ...*gnmi_ext.Extension) error {
	client, err := gnmi.Dial(ctx.Value("config").(*gnmi.Config))
	if err != nil {
		return err
	}
	return gnmi.Set(ctx, client, setOps, exts...)
}

// Subscribe calls GNMI subscribe
func (g *Gnmi) Subscribe(ctx context.Context, subscribeOptions *gnmi.SubscribeOptions,
	respChan chan<- *gpb.SubscribeResponse) error {
	client, err := gnmi.Dial(ctx.Value("config").(*gnmi.Config))
	if err != nil {
		return err
	}
	return gnmi.SubscribeErr(ctx, client, subscribeOptions, respChan)
}

// Close calls GNMI close
func (g *Gnmi) Close() error {
	return nil
}