Skip to content
Snippets Groups Projects
managedNetworkElement.go 6.54 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	"code.fbi.h-da.de/danet/gosdn/api/go/gosdn/conflict"
    
    	mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement"
    
    	spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound"
    	tpb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/transport"
    	nbi "code.fbi.h-da.de/danet/gosdn/controller/northbound/client"
    
    	"github.com/google/uuid"
    	log "github.com/sirupsen/logrus"
    )
    
    
    // AddNetworkElement adds a new network element to the controller. The network element name is optional.
    // If no name is provided a name will be generated upon network element creation.
    
    func AddNetworkElement(ctx context.Context, addr, mneName, mneUUID string, opt *tpb.TransportOption, pluginID, pid uuid.UUID, gNMISubscribePaths []string) (*mnepb.AddListResponse, error) {
    
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    
    		Timestamp: time.Now().UnixNano(),
    
    				Address:            opt.GetAddress(),
    				MneName:            mneName,
    				PluginId:           pluginID.String(),
    				Pid:                pid.String(),
    				TransportOption:    opt,
    				GnmiSubscribePaths: gNMISubscribePaths,
    
    				MneId:              mneUUID,
    
    			},
    		},
    		Pid: pid.String(),
    	}
    	switch t := opt.Type; t {
    	case spb.Type_TYPE_CONTAINERISED, spb.Type_TYPE_PLUGIN:
    
    		req.Mne[0].TransportOption.Type = t
    
    // AddNetworkElementList adds all the network elements to the controller. The name of each network element is optional.
    // If no name is provided a name will be generated upon network element creation.
    func AddNetworkElementList(ctx context.Context, addr, pid string, mneList []*mnepb.SetMne) (*mnepb.AddListResponse, error) {
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    	if err != nil {
    		return nil, err
    	}
    
    	req := &mnepb.AddListRequest{
    		Timestamp: time.Now().UnixNano(),
    		Mne:       mneList,
    		Pid:       pid,
    	}
    
    	return client.AddList(ctx, req)
    }
    
    
    // GetNetworkElement requests one network element belonging to a given
    // PrincipalNetworkDomain from the controller. If no network element identifier
    
    // is provided, an error is thrown.
    
    func GetNetworkElement(ctx context.Context, addr, pid string, mneid string) (*mnepb.GetResponse, error) {
    
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    
    		Timestamp: time.Now().UnixNano(),
    
    // GetNetworkElements requests all available network elements related to one PND.
    func GetNetworkElements(ctx context.Context, addr, pid string) (*mnepb.GetAllResponse, error) {
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    
    		Timestamp: time.Now().UnixNano(),
    
    // GetFlattenedNetworkElement requests a network elements belonging to a given
    // PrincipalNetworkDomain from the controller.
    
    func GetFlattenedNetworkElement(ctx context.Context, addr, pid string, mneid string) (*mnepb.GetFlattenedResponse, error) {
    
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    
    		Timestamp: time.Now().UnixNano(),
    		Mneid:     mneid,
    		Pid:       pid,
    	}
    
    
    // GetFlattenedNetworkElements requests all network elements belonging to a given
    
    // PrincipalNetworkDomain from the controller.
    
    func GetFlattenedNetworkElements(ctx context.Context, addr, pid string) (*mnepb.GetAllFlattenedResponse, error) {
    
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    
    		Timestamp: time.Now().UnixNano(),
    		Pid:       pid,
    	}
    
    
    // GetPath requests a specific path.
    
    func GetPath(ctx context.Context, addr, pid, mneid, path string) (*mnepb.GetPathResponse, error) {
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    
    	req := &mnepb.GetPathRequest{
    
    		Timestamp: time.Now().UnixNano(),
    
    	return client.GetPath(ctx, req)
    
    func GetIntendedPath(ctx context.Context, addr, pid, mneid, intendedPath string) (*mnepb.GetIntendedPathResponse, error) {
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    	if err != nil {
    		return nil, err
    	}
    
    	req := &mnepb.GetIntendedPathRequest{
    		Timestamp:    time.Now().UnixNano(),
    		Mneid:        mneid,
    		Pid:          pid,
    		IntendedPath: intendedPath,
    	}
    
    	return client.GetIntendedPath(ctx, req)
    }
    
    
    // SubscribePath subscribes to paths on a network element.
    
    func SubscribePath(ctx context.Context, addr, pid, mneid string, slist *mnepb.SubscriptionList) (mnepb.NetworkElementService_SubscribePathClient, error) {
    
    	log.Println("subscribePath called")
    
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    
    	req := &mnepb.SubscribePathRequest{
    
    		Timestamp: time.Now().UnixNano(),
    
    	return client.SubscribePath(ctx, req)
    
    // DeleteNetworkElement deletes a network element.
    
    func DeleteNetworkElement(ctx context.Context, addr, pid, mneid string) (*mnepb.DeleteResponse, error) {
    
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    
    		Timestamp: time.Now().UnixNano(),
    
    
    // UpdateNetworkElement changes the metadata of the network element which is stored in the controller storage.
    // Correct resource version needs to be provided to allow a change of the object in the storage.
    func UpdateNetworkElement(ctx context.Context, addr, mneid, updatedName, updatedTransportAddress, updatedPid string, resourceVersion *conflict.Metadata) (*mnepb.UpdateNetworkElementResponse, error) {
    	client, err := nbi.NetworkElementClient(addr, dialOptions...)
    	if err != nil {
    		return nil, err
    	}
    
    	req := &mnepb.UpdateNetworkElementRequest{
    		Timestamp: time.Now().UnixNano(),
    		NetworkElement: &mnepb.ManagedNetworkElement{
    			Id:               mneid,
    			Name:             updatedName,
    			TransportAddress: updatedTransportAddress,
    			TransportOption: &tpb.TransportOption{
    				Address: updatedTransportAddress,
    			},
    			Metadata:      resourceVersion,
    			AssociatedPnd: updatedPid,
    		},
    	}
    
    	return client.Update(ctx, req)
    }