Skip to content
Snippets Groups Projects
networkElement.go 31 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	// switch mne.(type) {
    	// case *CsbiNetworkElement:
    	// 	return pnd.handleCsbiDeletion(mne)
    	// default:
    	// 	return pnd.networkElementService.Delete(mne)
    	// }
    
    	return n.mneService.Delete(mne)
    }
    
    // SubscribePath subscribes to specifc paths of an mne.
    func (n *NetworkElementServer) SubscribePath(request *mnepb.SubscribePathRequest, stream mnepb.NetworkElementService_SubscribePathServer) error {
    
    	networkElement, err := n.getMne(request.Mneid)
    
    		log.Error(err)
    		return status.Errorf(codes.Aborted, "%v", err)
    
    	if err := n.subscribePath(networkElement, request.Sublist); err != nil {
    
    func (n *NetworkElementServer) subscribePath(networkElement networkelement.NetworkElement, subList *mnepb.SubscriptionList) error {
    
    	mode, err := n.mapModeToAristaFork(subList.GetMode())
    	if err != nil {
    		return err
    	}
    
    	for _, sub := range subList.Subscription {
    		streamMode, err := n.mapStreamModeToAristaFork(sub.GetStreamMode())
    		if err != nil {
    			return err
    		}
    
    		opts := &aGNMI.SubscribeOptions{
    			Mode:           mode,
    			StreamMode:     streamMode,
    			Paths:          [][]string{n.splitStringPath(sub.GetPath())},
    			SampleInterval: sub.SampleInterval,
    		}
    
    		ctx := context.Background()
    		ctx = context.WithValue(ctx, types.CtxKeyOpts, opts)
    
    
    		if err = networkElement.Transport().Subscribe(ctx); err != nil {
    
    			return err
    		}
    	}
    
    	return nil
    }
    
    func (n *NetworkElementServer) splitStringPath(s string) []string {
    	return strings.Split(s, "/")
    }
    
    func (n *NetworkElementServer) mapStreamModeToAristaFork(mode mnepb.StreamMode) (string, error) {
    	switch mode {
    	case mnepb.StreamMode_STREAM_MODE_TARGET_DEFINED:
    		return "target_defined", nil
    	case mnepb.StreamMode_STREAM_MODE_ON_CHANGE:
    		return "on_change", nil
    	case mnepb.StreamMode_STREAM_MODE_SAMPLE:
    		return "sample", nil
    	default:
    		return "", fmt.Errorf("StreamMode of type: %T is not supported", mode)
    	}
    }
    
    func (n *NetworkElementServer) mapModeToAristaFork(mode mnepb.SubscriptionMode) (string, error) {
    	switch mode {
    	case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_STREAM:
    		return "stream", nil
    	case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_ONCE:
    		return "once", nil
    	case mnepb.SubscriptionMode_SUBSCRIPTION_MODE_POLL:
    		return "poll", nil
    	default:
    		return "", fmt.Errorf("SubscriptionMode of type: %T is not supported", mode)
    	}
    }