blob: aa633877d62e71d79a15f8e2d0f0cf363d55ed94 [file] [log] [blame]
Girish Gowdru0c588b22019-04-23 23:24:56 -04001/*
Joey Armstrong11f5a572024-01-12 19:11:32 -05002 * Copyright 2018-2024 Open Networking Foundation (ONF) and the ONF Contributors
Girish Gowdru0c588b22019-04-23 23:24:56 -04003
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7
8 * http://www.apache.org/licenses/LICENSE-2.0
9
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Girish Gowdru6a80bbd2019-07-02 07:36:09 -070016
praneeth nalmas55616d62023-02-06 09:19:18 +053017// Package core provides the utility for olt devices, flows and statistics
Scott Bakerdbd960e2020-02-28 08:57:51 -080018package core
Girish Gowdru0c588b22019-04-23 23:24:56 -040019
20import (
21 "context"
khenaidooefff76e2021-12-15 16:51:30 -050022 "fmt"
Akash Sonif49299a2024-04-25 12:06:37 +053023 "sync"
24 "time"
25
khenaidoo106c61a2021-08-11 18:05:46 -040026 "github.com/golang/protobuf/ptypes/empty"
27 conf "github.com/opencord/voltha-lib-go/v7/pkg/config"
28 "github.com/opencord/voltha-lib-go/v7/pkg/events/eventif"
29 vgrpc "github.com/opencord/voltha-lib-go/v7/pkg/grpc"
30 "github.com/opencord/voltha-lib-go/v7/pkg/log"
Scott Bakerdbd960e2020-02-28 08:57:51 -080031 "github.com/opencord/voltha-openolt-adapter/internal/pkg/config"
Thomas Lee S94109f12020-03-03 16:39:29 +053032 "github.com/opencord/voltha-openolt-adapter/internal/pkg/olterrors"
khenaidooefff76e2021-12-15 16:51:30 -050033 "github.com/opencord/voltha-protos/v5/go/adapter_service"
khenaidoo106c61a2021-08-11 18:05:46 -040034 "github.com/opencord/voltha-protos/v5/go/common"
khenaidoodc2116e2021-10-19 17:33:19 -040035 ca "github.com/opencord/voltha-protos/v5/go/core_adapter"
khenaidoo106c61a2021-08-11 18:05:46 -040036 "github.com/opencord/voltha-protos/v5/go/extension"
khenaidoodc2116e2021-10-19 17:33:19 -040037 "github.com/opencord/voltha-protos/v5/go/health"
38 ia "github.com/opencord/voltha-protos/v5/go/inter_adapter"
39 "github.com/opencord/voltha-protos/v5/go/omci"
khenaidoo106c61a2021-08-11 18:05:46 -040040 "github.com/opencord/voltha-protos/v5/go/voltha"
nikesh.krishnan4d644532023-12-16 00:21:07 +053041 "google.golang.org/grpc/codes"
42 "google.golang.org/grpc/status"
Girish Gowdru0c588b22019-04-23 23:24:56 -040043)
44
praneeth nalmas55616d62023-02-06 09:19:18 +053045// OpenOLT structure holds the OLT information
Girish Gowdru0c588b22019-04-23 23:24:56 -040046type OpenOLT struct {
Akash Kankanala041a2122024-10-16 15:49:22 +053047 eventProxy eventif.EventProxy
Abhilash Laxmeshward0f58cf2022-06-01 12:15:19 +053048 configManager *conf.ConfigManager
49 deviceHandlers map[string]*DeviceHandler
50 coreClient *vgrpc.Client
Abhilash Laxmeshward0f58cf2022-06-01 12:15:19 +053051 config *config.AdapterFlags
Akash Kankanala041a2122024-10-16 15:49:22 +053052 exitChannel chan struct{}
Abhilash Laxmeshward0f58cf2022-06-01 12:15:19 +053053 KVStoreAddress string
54 KVStoreType string
Akash Kankanala041a2122024-10-16 15:49:22 +053055 numOnus int
Abhilash Laxmeshward0f58cf2022-06-01 12:15:19 +053056 HeartbeatCheckInterval time.Duration
57 HeartbeatFailReportInterval time.Duration
58 GrpcTimeoutInterval time.Duration
Akash Kankanala041a2122024-10-16 15:49:22 +053059 rpcTimeout time.Duration
Abhilash Laxmeshward0f58cf2022-06-01 12:15:19 +053060 lockDeviceHandlersMap sync.RWMutex
61 enableONUStats bool
62 enableGemStats bool
Abhilash Laxmeshward0f58cf2022-06-01 12:15:19 +053063 CheckOnuDevExistenceAtOnuDiscovery bool
Girish Gowdru0c588b22019-04-23 23:24:56 -040064}
65
praneeth nalmas55616d62023-02-06 09:19:18 +053066// NewOpenOLT returns a new instance of OpenOLT
khenaidoo106c61a2021-08-11 18:05:46 -040067func NewOpenOLT(ctx context.Context,
68 coreClient *vgrpc.Client,
Himani Chawlacd407802020-12-10 12:08:59 +053069 eventProxy eventif.EventProxy, cfg *config.AdapterFlags, cm *conf.ConfigManager) *OpenOLT {
Girish Gowdru0c588b22019-04-23 23:24:56 -040070 var openOLT OpenOLT
khenaidooefff76e2021-12-15 16:51:30 -050071 openOLT.exitChannel = make(chan struct{})
Girish Gowdru0c588b22019-04-23 23:24:56 -040072 openOLT.deviceHandlers = make(map[string]*DeviceHandler)
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053073 openOLT.config = cfg
74 openOLT.numOnus = cfg.OnuNumber
khenaidoo106c61a2021-08-11 18:05:46 -040075 openOLT.coreClient = coreClient
Devmalya Paulfb990a52019-07-09 10:01:49 -040076 openOLT.eventProxy = eventProxy
Neha Sharma3f221ae2020-04-29 19:02:12 +000077 openOLT.KVStoreAddress = cfg.KVStoreAddress
Abhilash Laxmeshwarf9942e92020-01-07 15:32:44 +053078 openOLT.KVStoreType = cfg.KVStoreType
79 openOLT.HeartbeatCheckInterval = cfg.HeartbeatCheckInterval
80 openOLT.HeartbeatFailReportInterval = cfg.HeartbeatFailReportInterval
81 openOLT.GrpcTimeoutInterval = cfg.GrpcTimeoutInterval
Girish Gowdru0c588b22019-04-23 23:24:56 -040082 openOLT.lockDeviceHandlersMap = sync.RWMutex{}
Matteo Scandolodfa7a972020-11-06 13:03:40 -080083 openOLT.configManager = cm
Gamze Abakafcbd6e72020-12-17 13:25:16 +000084 openOLT.enableONUStats = cfg.EnableONUStats
85 openOLT.enableGemStats = cfg.EnableGEMStats
khenaidoo106c61a2021-08-11 18:05:46 -040086 openOLT.rpcTimeout = cfg.RPCTimeout
Abhilash Laxmeshward0f58cf2022-06-01 12:15:19 +053087 openOLT.CheckOnuDevExistenceAtOnuDiscovery = cfg.CheckOnuDevExistenceAtOnuDiscovery
Girish Gowdru0c588b22019-04-23 23:24:56 -040088 return &openOLT
89}
90
praneeth nalmas55616d62023-02-06 09:19:18 +053091// Start starts (logs) the device manager
Girish Gowdru0c588b22019-04-23 23:24:56 -040092func (oo *OpenOLT) Start(ctx context.Context) error {
Neha Sharma96b7bf22020-06-15 10:37:32 +000093 logger.Info(ctx, "starting-device-manager")
94 logger.Info(ctx, "device-manager-started")
Girish Gowdru0c588b22019-04-23 23:24:56 -040095 return nil
96}
97
praneeth nalmas55616d62023-02-06 09:19:18 +053098// Stop terminates the session
Girish Gowdru0c588b22019-04-23 23:24:56 -040099func (oo *OpenOLT) Stop(ctx context.Context) error {
Neha Sharma96b7bf22020-06-15 10:37:32 +0000100 logger.Info(ctx, "stopping-device-manager")
khenaidooefff76e2021-12-15 16:51:30 -0500101 close(oo.exitChannel)
102 // Stop the device handlers
103 oo.stopAllDeviceHandlers(ctx)
104
105 // Stop the core grpc client connection
106 if oo.coreClient != nil {
107 oo.coreClient.Stop(ctx)
108 }
109
Neha Sharma96b7bf22020-06-15 10:37:32 +0000110 logger.Info(ctx, "device-manager-stopped")
Girish Gowdru0c588b22019-04-23 23:24:56 -0400111 return nil
112}
113
Girish Gowdru0c588b22019-04-23 23:24:56 -0400114func (oo *OpenOLT) addDeviceHandlerToMap(agent *DeviceHandler) {
115 oo.lockDeviceHandlersMap.Lock()
116 defer oo.lockDeviceHandlersMap.Unlock()
Thomas Lee S985938d2020-05-04 11:40:41 +0530117 if _, exist := oo.deviceHandlers[agent.device.Id]; !exist {
118 oo.deviceHandlers[agent.device.Id] = agent
Girish Gowdru0c588b22019-04-23 23:24:56 -0400119 }
120}
121
122func (oo *OpenOLT) deleteDeviceHandlerToMap(agent *DeviceHandler) {
123 oo.lockDeviceHandlersMap.Lock()
124 defer oo.lockDeviceHandlersMap.Unlock()
Thomas Lee S985938d2020-05-04 11:40:41 +0530125 delete(oo.deviceHandlers, agent.device.Id)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400126}
127
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700128func (oo *OpenOLT) getDeviceHandler(deviceID string) *DeviceHandler {
Girish Gowdru0c588b22019-04-23 23:24:56 -0400129 oo.lockDeviceHandlersMap.Lock()
130 defer oo.lockDeviceHandlersMap.Unlock()
Girish Gowdru6a80bbd2019-07-02 07:36:09 -0700131 if agent, ok := oo.deviceHandlers[deviceID]; ok {
Girish Gowdru0c588b22019-04-23 23:24:56 -0400132 return agent
133 }
134 return nil
135}
136
khenaidooefff76e2021-12-15 16:51:30 -0500137func (oo *OpenOLT) stopAllDeviceHandlers(ctx context.Context) {
138 oo.lockDeviceHandlersMap.Lock()
139 defer oo.lockDeviceHandlersMap.Unlock()
140 for _, handler := range oo.deviceHandlers {
141 handler.Stop(ctx)
142 }
khenaidoo106c61a2021-08-11 18:05:46 -0400143}
144
145// AdoptDevice creates a new device handler if not present already and then adopts the device
146func (oo *OpenOLT) AdoptDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
Girish Gowdru0c588b22019-04-23 23:24:56 -0400147 if device == nil {
khenaidoo106c61a2021-08-11 18:05:46 -0400148 return nil, olterrors.NewErrInvalidValue(log.Fields{"device": nil}, nil).Log()
Girish Gowdru0c588b22019-04-23 23:24:56 -0400149 }
divyadesai3af43e12020-08-18 07:10:54 +0000150 logger.Infow(ctx, "adopt-device", log.Fields{"device-id": device.Id})
Girish Gowdru0c588b22019-04-23 23:24:56 -0400151 var handler *DeviceHandler
152 if handler = oo.getDeviceHandler(device.Id); handler == nil {
khenaidoo106c61a2021-08-11 18:05:46 -0400153 handler := NewDeviceHandler(oo.coreClient, oo.eventProxy, device, oo, oo.configManager, oo.config)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400154 oo.addDeviceHandlerToMap(handler)
khenaidoo106c61a2021-08-11 18:05:46 -0400155 go handler.AdoptDevice(log.WithSpanFromContext(context.Background(), ctx), device)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400156 }
khenaidoo106c61a2021-08-11 18:05:46 -0400157 return &empty.Empty{}, nil
Girish Gowdru0c588b22019-04-23 23:24:56 -0400158}
159
praneeth nalmas55616d62023-02-06 09:19:18 +0530160// GetOfpDeviceInfo returns OFP information for the given device
khenaidoodc2116e2021-10-19 17:33:19 -0400161func (oo *OpenOLT) GetOfpDeviceInfo(ctx context.Context, device *voltha.Device) (*ca.SwitchCapability, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400162 logger.Infow(ctx, "get_ofp_device_info", log.Fields{"device-id": device.Id})
Girish Gowdru0c588b22019-04-23 23:24:56 -0400163 if handler := oo.getDeviceHandler(device.Id); handler != nil {
164 return handler.GetOfpDeviceInfo(device)
165 }
Girish Kumarf26e4882020-03-05 06:49:10 +0000166 return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400167}
168
praneeth nalmas55616d62023-02-06 09:19:18 +0530169// ReconcileDevice unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400170func (oo *OpenOLT) ReconcileDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
Abhilash Laxmeshwarab0bd522019-10-21 15:05:15 +0530171 if device == nil {
khenaidoo106c61a2021-08-11 18:05:46 -0400172 return nil, olterrors.NewErrInvalidValue(log.Fields{"device": nil}, nil)
Abhilash Laxmeshwarab0bd522019-10-21 15:05:15 +0530173 }
divyadesai3af43e12020-08-18 07:10:54 +0000174 logger.Infow(ctx, "reconcile-device", log.Fields{"device-id": device.Id})
Abhilash Laxmeshwarab0bd522019-10-21 15:05:15 +0530175 var handler *DeviceHandler
176 if handler = oo.getDeviceHandler(device.Id); handler == nil {
Manindere49938d2021-03-19 00:23:24 +0530177 //Setting state to RECONCILING
Nandita Biradar1b590f12024-09-27 10:56:28 +0530178 // Fetch previous state
179 //here we are fetching the previous operation states of the device,so to check which operation state it was previously for proper transition and proper clean up of the resources.
180 PrevOperStatus := device.OperStatus
181
182 // Log previous state
183 logger.Infow(ctx, "previous-device-state", log.Fields{
184 "device-id": device.Id,
185 "previous-operStatus": PrevOperStatus,
186 "Device-connStatus": device.ConnectStatus,
187 })
khenaidoo106c61a2021-08-11 18:05:46 -0400188 cgClient, err := oo.coreClient.GetCoreServiceClient()
Manindere49938d2021-03-19 00:23:24 +0530189 if err != nil {
khenaidoo106c61a2021-08-11 18:05:46 -0400190 return nil, err
Manindere49938d2021-03-19 00:23:24 +0530191 }
khenaidoo106c61a2021-08-11 18:05:46 -0400192 subCtx, cancel := context.WithTimeout(log.WithSpanFromContext(context.Background(), ctx), oo.rpcTimeout)
193 defer cancel()
Nandita Biradar1b590f12024-09-27 10:56:28 +0530194 // Create DeviceStateFilter with new state
195 deviceStateFilter := &ca.DeviceStateFilter{
196 DeviceId: device.Id,
197 OperStatus: voltha.OperStatus_RECONCILING,
198 ConnStatus: device.ConnectStatus,
199 }
200
201 // Log the new state being set
202 logger.Infow(ctx, "setting-new-device-state", log.Fields{
203 "device-id": deviceStateFilter.DeviceId,
204 "new-operStatus": deviceStateFilter.OperStatus,
205 "new-connStatus": deviceStateFilter.ConnStatus,
206 })
khenaidoodc2116e2021-10-19 17:33:19 -0400207 if _, err := cgClient.DeviceStateUpdate(subCtx, &ca.DeviceStateFilter{
khenaidoo106c61a2021-08-11 18:05:46 -0400208 DeviceId: device.Id,
209 OperStatus: voltha.OperStatus_RECONCILING,
Akash Sonif49299a2024-04-25 12:06:37 +0530210 ConnStatus: voltha.ConnectStatus_UNREACHABLE,
khenaidoo106c61a2021-08-11 18:05:46 -0400211 }); err != nil {
212 return nil, olterrors.NewErrAdapter("device-update-failed", log.Fields{"device-id": device.Id}, err)
213 }
214
Akash Sonif49299a2024-04-25 12:06:37 +0530215 // The OperState and connection state of the device is set to RECONCILING and UNREACHABLE in the previous section. This also needs to be set on the
Girish Gowdra0fb24a32021-10-27 15:15:27 -0700216 // locally cached copy of the device struct.
217 device.OperStatus = voltha.OperStatus_RECONCILING
Akash Sonif49299a2024-04-25 12:06:37 +0530218 device.ConnectStatus = voltha.ConnectStatus_UNREACHABLE
Girish Gowdra0fb24a32021-10-27 15:15:27 -0700219 handler := NewDeviceHandler(oo.coreClient, oo.eventProxy, device, oo, oo.configManager, oo.config)
220 handler.adapterPreviouslyConnected = true
Nandita Biradar1b590f12024-09-27 10:56:28 +0530221 handler.prevOperStatus = PrevOperStatus
Girish Gowdra0fb24a32021-10-27 15:15:27 -0700222 oo.addDeviceHandlerToMap(handler)
223 handler.transitionMap = NewTransitionMap(handler)
224
Nandita Biradar1b590f12024-09-27 10:56:28 +0530225 go handler.transitionMap.Handle(log.WithSpanFromContext(context.Background(), ctx), DeviceInit)
nikesh.krishnan4d644532023-12-16 00:21:07 +0530226 } else {
227 logger.Warnf(ctx, "device-already-reconciled-or-active", log.Fields{"device-id": device.Id})
228 return &empty.Empty{}, status.Errorf(codes.AlreadyExists, "handler exists: %s", device.Id)
Abhilash Laxmeshwarab0bd522019-10-21 15:05:15 +0530229 }
khenaidoo106c61a2021-08-11 18:05:46 -0400230 return &empty.Empty{}, nil
Girish Gowdru0c588b22019-04-23 23:24:56 -0400231}
232
praneeth nalmas55616d62023-02-06 09:19:18 +0530233// DisableDevice disables the given device
khenaidoo106c61a2021-08-11 18:05:46 -0400234func (oo *OpenOLT) DisableDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
divyadesai3af43e12020-08-18 07:10:54 +0000235 logger.Infow(ctx, "disable-device", log.Fields{"device-id": device.Id})
Girish Gowdru5ba46c92019-04-25 05:00:05 -0400236 if handler := oo.getDeviceHandler(device.Id); handler != nil {
khenaidoo106c61a2021-08-11 18:05:46 -0400237 if err := handler.DisableDevice(log.WithSpanFromContext(context.Background(), ctx), device); err != nil {
238 return nil, err
239 }
240 return &empty.Empty{}, nil
Girish Gowdru5ba46c92019-04-25 05:00:05 -0400241 }
khenaidoo106c61a2021-08-11 18:05:46 -0400242 return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400243}
244
praneeth nalmas55616d62023-02-06 09:19:18 +0530245// ReEnableDevice enables the olt device after disable
khenaidoo106c61a2021-08-11 18:05:46 -0400246func (oo *OpenOLT) ReEnableDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
divyadesai3af43e12020-08-18 07:10:54 +0000247 logger.Infow(ctx, "reenable-device", log.Fields{"device-id": device.Id})
Girish Gowdru5ba46c92019-04-25 05:00:05 -0400248 if handler := oo.getDeviceHandler(device.Id); handler != nil {
khenaidoo106c61a2021-08-11 18:05:46 -0400249 if err := handler.ReenableDevice(log.WithSpanFromContext(context.Background(), ctx), device); err != nil {
250 return nil, err
251 }
252 return &empty.Empty{}, nil
Girish Gowdru5ba46c92019-04-25 05:00:05 -0400253 }
khenaidoo106c61a2021-08-11 18:05:46 -0400254 return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400255}
256
praneeth nalmas55616d62023-02-06 09:19:18 +0530257// RebootDevice reboots the given device
khenaidoo106c61a2021-08-11 18:05:46 -0400258func (oo *OpenOLT) RebootDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
divyadesai3af43e12020-08-18 07:10:54 +0000259 logger.Infow(ctx, "reboot-device", log.Fields{"device-id": device.Id})
Girish Gowdru0fe5f7e2019-05-28 05:12:27 -0400260 if handler := oo.getDeviceHandler(device.Id); handler != nil {
khenaidoo106c61a2021-08-11 18:05:46 -0400261 if err := handler.RebootDevice(log.WithSpanFromContext(context.Background(), ctx), device); err != nil {
262 return nil, err
263 }
264 return &empty.Empty{}, nil
Girish Gowdru0fe5f7e2019-05-28 05:12:27 -0400265 }
khenaidoo106c61a2021-08-11 18:05:46 -0400266 return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400267}
268
praneeth nalmas55616d62023-02-06 09:19:18 +0530269// DeleteDevice deletes a device
khenaidoo106c61a2021-08-11 18:05:46 -0400270func (oo *OpenOLT) DeleteDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
divyadesai3af43e12020-08-18 07:10:54 +0000271 logger.Infow(ctx, "delete-device", log.Fields{"device-id": device.Id})
Devmalya Paul495b94a2019-08-27 19:42:00 -0400272 if handler := oo.getDeviceHandler(device.Id); handler != nil {
khenaidoo106c61a2021-08-11 18:05:46 -0400273 if err := handler.DeleteDevice(log.WithSpanFromContext(context.Background(), ctx), device); err != nil {
Gustavo Silva41af9122022-10-11 11:05:13 -0300274 return nil, err
Devmalya Paul495b94a2019-08-27 19:42:00 -0400275 }
Akash Soni5c76e272024-01-15 04:09:24 +0530276 // Initialize a ticker with a 2-second interval to periodically check the states
277 ticker := time.NewTicker(2 * time.Second)
278 defer ticker.Stop()
279
280 // Set a maximum timeout duration of 30 seconds for the loop
281 timeout := time.After(30 * time.Second)
282
283 for {
284 select {
285 case <-ticker.C:
286 // Check if all processes have stopped
287 if !handler.isHeartbeatCheckActive && !handler.isCollectorActive && !handler.isReadIndicationRoutineActive {
288 logger.Debugf(ctx, "delete-device-handler")
289 oo.deleteDeviceHandlerToMap(handler)
290 return &empty.Empty{}, nil
291 }
292 case <-timeout:
293 // Timeout exceeded
294 logger.Warnw(ctx, "delete-device-handler timeout exceeded", log.Fields{"device-id": device.Id})
295 oo.deleteDeviceHandlerToMap(handler) // Clean up anyway
296 return &empty.Empty{}, nil
297 }
298 }
Devmalya Paul495b94a2019-08-27 19:42:00 -0400299 }
khenaidoo106c61a2021-08-11 18:05:46 -0400300 return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": device.Id}, nil)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400301}
302
praneeth nalmas55616d62023-02-06 09:19:18 +0530303// UpdateFlowsIncrementally updates (add/remove) the flows on a given device
khenaidoodc2116e2021-10-19 17:33:19 -0400304func (oo *OpenOLT) UpdateFlowsIncrementally(ctx context.Context, incrFlows *ca.IncrementalFlows) (*empty.Empty, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400305 logger.Infow(ctx, "update_flows_incrementally", log.Fields{"device-id": incrFlows.Device.Id, "flows": incrFlows.Flows, "flowMetadata": incrFlows.FlowMetadata})
306 if handler := oo.getDeviceHandler(incrFlows.Device.Id); handler != nil {
307 if err := handler.UpdateFlowsIncrementally(log.WithSpanFromContext(context.Background(), ctx), incrFlows.Device, incrFlows.Flows, incrFlows.Groups, incrFlows.FlowMetadata); err != nil {
308 return nil, err
309 }
310 return &empty.Empty{}, nil
Girish Gowdru0c588b22019-04-23 23:24:56 -0400311 }
khenaidoo106c61a2021-08-11 18:05:46 -0400312 return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": incrFlows.Device.Id}, nil)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400313}
314
praneeth nalmas55616d62023-02-06 09:19:18 +0530315// UpdatePmConfig returns PmConfigs nil or error
khenaidoodc2116e2021-10-19 17:33:19 -0400316func (oo *OpenOLT) UpdatePmConfig(ctx context.Context, configs *ca.PmConfigsInfo) (*empty.Empty, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400317 logger.Debugw(ctx, "update_pm_config", log.Fields{"device-id": configs.DeviceId, "pm-configs": configs.PmConfigs})
318 if handler := oo.getDeviceHandler(configs.DeviceId); handler != nil {
319 handler.UpdatePmConfig(log.WithSpanFromContext(context.Background(), ctx), configs.PmConfigs)
320 return &empty.Empty{}, nil
Rohan Agrawalda5e0b22020-05-20 11:10:26 +0000321 }
khenaidoo106c61a2021-08-11 18:05:46 -0400322 return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": configs.DeviceId}, nil)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400323}
324
praneeth nalmas55616d62023-02-06 09:19:18 +0530325// SendPacketOut sends packet out to the device
khenaidoodc2116e2021-10-19 17:33:19 -0400326func (oo *OpenOLT) SendPacketOut(ctx context.Context, packet *ca.PacketOut) (*empty.Empty, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400327 logger.Debugw(ctx, "send_packet_out", log.Fields{"device-id": packet.DeviceId, "egress_port_no": packet.EgressPortNo, "pkt": packet.Packet})
328 if handler := oo.getDeviceHandler(packet.DeviceId); handler != nil {
329 if err := handler.PacketOut(log.WithSpanFromContext(context.Background(), ctx), packet.EgressPortNo, packet.Packet); err != nil {
330 return nil, err
331 }
332 return &empty.Empty{}, nil
manikkaraj k9eb6cac2019-05-09 12:32:03 -0400333 }
khenaidoo106c61a2021-08-11 18:05:46 -0400334 return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": packet.DeviceId}, nil)
Girish Gowdru0c588b22019-04-23 23:24:56 -0400335}
336
khenaidoo106c61a2021-08-11 18:05:46 -0400337// EnablePort to Enable PON/NNI interface
338func (oo *OpenOLT) EnablePort(ctx context.Context, port *voltha.Port) (*empty.Empty, error) {
339 logger.Infow(ctx, "enable_port", log.Fields{"device-id": port.DeviceId, "port": port})
340 if err := oo.enableDisablePort(log.WithSpanFromContext(context.Background(), ctx), port.DeviceId, port, true); err != nil {
341 return nil, err
342 }
343 return &empty.Empty{}, nil
Girish Gowdru0c588b22019-04-23 23:24:56 -0400344}
345
khenaidoo106c61a2021-08-11 18:05:46 -0400346// DisablePort to Disable pon/nni interface
347func (oo *OpenOLT) DisablePort(ctx context.Context, port *voltha.Port) (*empty.Empty, error) {
348 logger.Infow(ctx, "disable_port", log.Fields{"device-id": port.DeviceId, "port": port})
349 if err := oo.enableDisablePort(log.WithSpanFromContext(context.Background(), ctx), port.DeviceId, port, false); err != nil {
350 return nil, err
351 }
352 return &empty.Empty{}, nil
kesavand39e0aa32020-01-28 20:58:50 -0500353}
354
355// enableDisablePort to Disable pon or Enable PON interface
Neha Sharma96b7bf22020-06-15 10:37:32 +0000356func (oo *OpenOLT) enableDisablePort(ctx context.Context, deviceID string, port *voltha.Port, enablePort bool) error {
divyadesai3af43e12020-08-18 07:10:54 +0000357 logger.Infow(ctx, "enableDisablePort", log.Fields{"device-id": deviceID, "port": port})
kesavand39e0aa32020-01-28 20:58:50 -0500358 if port == nil {
Thomas Lee S94109f12020-03-03 16:39:29 +0530359 return olterrors.NewErrInvalidValue(log.Fields{
David K. Bainbridge794735f2020-02-11 21:01:37 -0800360 "reason": "port cannot be nil",
361 "device-id": deviceID,
Girish Kumarf26e4882020-03-05 06:49:10 +0000362 "port": nil}, nil)
kesavand39e0aa32020-01-28 20:58:50 -0500363 }
364 if handler := oo.getDeviceHandler(deviceID); handler != nil {
divyadesai3af43e12020-08-18 07:10:54 +0000365 logger.Debugw(ctx, "Enable_Disable_Port", log.Fields{"device-id": deviceID, "port": port})
kesavand39e0aa32020-01-28 20:58:50 -0500366 if enablePort {
Neha Sharma96b7bf22020-06-15 10:37:32 +0000367 if err := handler.EnablePort(ctx, port); err != nil {
divyadesai3af43e12020-08-18 07:10:54 +0000368 return olterrors.NewErrAdapter("error-occurred-during-enable-port", log.Fields{"device-id": deviceID, "port": port}, err)
kesavand39e0aa32020-01-28 20:58:50 -0500369 }
370 } else {
Neha Sharma96b7bf22020-06-15 10:37:32 +0000371 if err := handler.DisablePort(ctx, port); err != nil {
divyadesai3af43e12020-08-18 07:10:54 +0000372 return olterrors.NewErrAdapter("error-occurred-during-disable-port", log.Fields{"device-id": deviceID, "port": port}, err)
kesavand39e0aa32020-01-28 20:58:50 -0500373 }
374 }
375 }
376 return nil
377}
Chaitrashree G S1a55b882020-02-04 17:35:35 -0500378
praneeth nalmas55616d62023-02-06 09:19:18 +0530379// ChildDeviceLost deletes the ONU and its references from PONResources
khenaidoo106c61a2021-08-11 18:05:46 -0400380func (oo *OpenOLT) ChildDeviceLost(ctx context.Context, childDevice *voltha.Device) (*empty.Empty, error) {
Girish Gowdraa0870562021-03-11 14:30:14 -0800381 logger.Infow(ctx, "Child-device-lost", log.Fields{"parent-device-id": childDevice.ParentId, "child-device-id": childDevice.Id})
382 if handler := oo.getDeviceHandler(childDevice.ParentId); handler != nil {
khenaidoo106c61a2021-08-11 18:05:46 -0400383 if err := handler.ChildDeviceLost(log.WithSpanFromContext(context.Background(), ctx), childDevice.ParentPortNo, childDevice.ProxyAddress.OnuId, childDevice.SerialNumber); err != nil {
384 return nil, err
385 }
386 return &empty.Empty{}, nil
Chaitrashree G S1a55b882020-02-04 17:35:35 -0500387 }
khenaidoo106c61a2021-08-11 18:05:46 -0400388 return nil, olterrors.NewErrNotFound("device-handler", log.Fields{"parent-device-id": childDevice.ParentId}, nil).Log()
Chaitrashree G S1a55b882020-02-04 17:35:35 -0500389}
Scott Baker24f83e22020-03-30 16:14:28 -0700390
khenaidoo106c61a2021-08-11 18:05:46 -0400391// GetExtValue retrieves a value on a particular ONU
khenaidoodc2116e2021-10-19 17:33:19 -0400392func (oo *OpenOLT) GetExtValue(ctx context.Context, extInfo *ca.GetExtValueMessage) (*extension.ReturnValues, error) {
Dinesh Belwalkardb587af2020-02-27 15:37:16 -0800393 var err error
khenaidoodc2116e2021-10-19 17:33:19 -0400394 resp := new(extension.ReturnValues)
khenaidoo106c61a2021-08-11 18:05:46 -0400395 logger.Infow(ctx, "get_ext_value", log.Fields{"parent-device-id": extInfo.ParentDevice.Id, "onu-id": extInfo.ChildDevice.Id})
396 if handler := oo.getDeviceHandler(extInfo.ParentDevice.Id); handler != nil {
397 if resp, err = handler.getExtValue(ctx, extInfo.ChildDevice, extInfo.ValueType); err != nil {
398 logger.Errorw(ctx, "error-occurred-during-get-ext-value",
399 log.Fields{"parent-device-id": extInfo.ParentDevice.Id, "onu-id": extInfo.ChildDevice.Id, "error": err})
Dinesh Belwalkardb587af2020-02-27 15:37:16 -0800400 return nil, err
401 }
402 }
403 return resp, nil
404}
kesavand62126212021-01-12 04:56:06 -0500405
praneeth nalmas55616d62023-02-06 09:19:18 +0530406// GetSingleValue handles get uni status on ONU and ondemand metric on OLT
khenaidoo106c61a2021-08-11 18:05:46 -0400407func (oo *OpenOLT) GetSingleValue(ctx context.Context, request *extension.SingleGetValueRequest) (*extension.SingleGetValueResponse, error) {
408 logger.Infow(ctx, "single_get_value_request", log.Fields{"request": request})
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +0530409 var handler *DeviceHandler
410 var onuDevice *voltha.Device
kesavand62126212021-01-12 04:56:06 -0500411
412 errResp := func(status extension.GetValueResponse_Status,
413 reason extension.GetValueResponse_ErrorReason) *extension.SingleGetValueResponse {
414 return &extension.SingleGetValueResponse{
415 Response: &extension.GetValueResponse{
416 Status: status,
417 ErrReason: reason,
418 },
419 }
420 }
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +0530421
422 switch request.GetRequest().GetRequest().(type) {
423 case *extension.GetValueRequest_OnuStatsFromOlt:
424 handler, onuDevice = oo.GetDeviceHandlerFromChild(ctx, request.TargetId)
425 default:
426 handler = oo.getDeviceHandler(request.TargetId)
427 }
428
429 if handler != nil {
kesavand62126212021-01-12 04:56:06 -0500430 switch reqType := request.GetRequest().GetRequest().(type) {
431 case *extension.GetValueRequest_OltPortInfo:
432 return handler.getOltPortCounters(ctx, reqType.OltPortInfo), nil
Himani Chawla2c8ae0f2021-05-18 23:27:00 +0530433 case *extension.GetValueRequest_OnuPonInfo:
434 return handler.getOnuPonCounters(ctx, reqType.OnuPonInfo), nil
Gamze Abaka85e9a142021-05-26 13:41:39 +0000435 case *extension.GetValueRequest_RxPower:
436 return handler.getRxPower(ctx, reqType.RxPower), nil
praneeth nalmas55616d62023-02-06 09:19:18 +0530437 case *extension.GetValueRequest_OltRxPower:
438 return handler.getPONRxPower(ctx, reqType.OltRxPower), nil
Akash Soni3bcf5e02024-12-03 08:01:48 +0530439 case *extension.GetValueRequest_OffloadedAppsStats:
440 return handler.getOltOffloadStats(ctx, reqType.OffloadedAppsStats), nil
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +0530441 case *extension.GetValueRequest_OnuStatsFromOlt:
442 return handler.getOnuStatsFromOlt(ctx, reqType.OnuStatsFromOlt, onuDevice), nil
kesavand62126212021-01-12 04:56:06 -0500443 default:
444 return errResp(extension.GetValueResponse_ERROR, extension.GetValueResponse_UNSUPPORTED), nil
445 }
446 }
447
448 logger.Infow(ctx, "Single_get_value_request failed ", log.Fields{"request": request})
449 return errResp(extension.GetValueResponse_ERROR, extension.GetValueResponse_INVALID_DEVICE_ID), nil
450}
khenaidoo106c61a2021-08-11 18:05:46 -0400451
Akash Soni3bcf5e02024-12-03 08:01:48 +0530452// SetSingleValue is implemented
453func (oo *OpenOLT) SetSingleValue(ctx context.Context, request *extension.SingleSetValueRequest) (*extension.SingleSetValueResponse, error) {
454 logger.Infow(ctx, "single_set_value_request", log.Fields{"request": request})
455
456 errResp := func(status extension.SetValueResponse_Status,
457 reason extension.SetValueResponse_ErrorReason) *extension.SingleSetValueResponse {
458 return &extension.SingleSetValueResponse{
459 Response: &extension.SetValueResponse{
460 Status: status,
461 ErrReason: reason,
462 },
463 }
464 }
465 if handler := oo.getDeviceHandler(request.TargetId); handler != nil {
466 switch reqType := request.GetRequest().GetRequest().(type) {
467 case *extension.SetValueRequest_AppOffloadConfig:
Akash Soni3c75ad72024-12-23 12:09:48 +0530468 return handler.setOltOffload(ctx, reqType.AppOffloadConfig), nil
469 case *extension.SetValueRequest_AppOffloadOnuConfig:
470 return handler.setOnuOffload(ctx, reqType.AppOffloadOnuConfig), nil
Akash Soni3bcf5e02024-12-03 08:01:48 +0530471 default:
472 return errResp(extension.SetValueResponse_ERROR, extension.SetValueResponse_UNSUPPORTED), nil
473 }
474 }
475
476 logger.Infow(ctx, "Single_set_value_request failed ", log.Fields{"request": request})
477 return errResp(extension.SetValueResponse_ERROR, extension.SetValueResponse_INVALID_DEVICE_ID), nil
478}
479
Akash Reddy Kankanalac6b6ca12025-06-12 14:26:57 +0530480func (oo *OpenOLT) GetDeviceHandlerFromChild(ctx context.Context, deviceId string) (*DeviceHandler, *voltha.Device) {
481 oo.lockDeviceHandlersMap.Lock()
482 defer oo.lockDeviceHandlersMap.Unlock()
483
484 for parentId, handler := range oo.deviceHandlers {
485 devices, _ := handler.getChildDevicesFromCore(ctx, parentId)
486 if devices != nil {
487 for _, onuDevice := range devices.Items {
488 if onuDevice.Id == deviceId {
489 return handler, onuDevice
490 }
491 }
492 }
493 }
494 return nil, nil
495}
496
khenaidoo106c61a2021-08-11 18:05:46 -0400497/*
498 * OLT Inter-adapter service
499 */
500
kesavandb9f54fd2021-11-25 20:08:04 +0530501// ProxyOmciRequests proxies an onu sw download OMCI request from the child adapter
502func (oo *OpenOLT) ProxyOmciRequests(ctx context.Context, request *ia.OmciMessages) (*empty.Empty, error) {
503 if handler := oo.getDeviceHandler(request.ParentDeviceId); handler != nil {
504 if err := handler.ProxyOmciRequests(ctx, request); err != nil {
Abhilash Laxmeshwar092e6ca2022-12-08 19:51:27 +0530505 return nil, err
kesavandb9f54fd2021-11-25 20:08:04 +0530506 }
507 return &empty.Empty{}, nil
508 }
509 return nil, olterrors.NewErrNotFound("no-device-handler", log.Fields{"parent-device-id": request.ParentDeviceId, "child-device-id": request.ChildDeviceId}, nil).Log()
510}
511
khenaidoo106c61a2021-08-11 18:05:46 -0400512// ProxyOmciRequest proxies an OMCI request from the child adapter
khenaidoodc2116e2021-10-19 17:33:19 -0400513func (oo *OpenOLT) ProxyOmciRequest(ctx context.Context, request *ia.OmciMessage) (*empty.Empty, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400514 logger.Debugw(ctx, "proxy-omci-request", log.Fields{"request": request})
515
516 if handler := oo.getDeviceHandler(request.ParentDeviceId); handler != nil {
517 if err := handler.ProxyOmciMessage(ctx, request); err != nil {
Abhilash Laxmeshwar092e6ca2022-12-08 19:51:27 +0530518 return nil, err
khenaidoo106c61a2021-08-11 18:05:46 -0400519 }
520 return &empty.Empty{}, nil
521 }
522 return nil, olterrors.NewErrNotFound("no-device-handler", log.Fields{"parent-device-id": request.ParentDeviceId, "child-device-id": request.ChildDeviceId}, nil).Log()
523}
524
525// GetTechProfileInstance returns an instance of a tech profile
khenaidoodc2116e2021-10-19 17:33:19 -0400526func (oo *OpenOLT) GetTechProfileInstance(ctx context.Context, request *ia.TechProfileInstanceRequestMessage) (*ia.TechProfileDownloadMessage, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400527 logger.Debugw(ctx, "getting-tech-profile-request", log.Fields{"request": request})
528
529 targetDeviceID := request.ParentDeviceId
530 if targetDeviceID == "" {
531 return nil, olterrors.NewErrNotFound("parent-id-empty", log.Fields{"parent-device-id": request.ParentDeviceId, "child-device-id": request.DeviceId}, nil).Log()
532 }
533 if handler := oo.getDeviceHandler(targetDeviceID); handler != nil {
534 return handler.GetTechProfileDownloadMessage(ctx, request)
535 }
536 return nil, olterrors.NewErrNotFound("no-device-handler", log.Fields{"parent-device-id": request.ParentDeviceId, "child-device-id": request.DeviceId}, nil).Log()
khenaidoo106c61a2021-08-11 18:05:46 -0400537}
538
khenaidooefff76e2021-12-15 16:51:30 -0500539// GetHealthStatus is used by a OltAdapterService client to detect a connection
540// lost with the gRPC server hosting the OltAdapterService service
541func (oo *OpenOLT) GetHealthStatus(stream adapter_service.AdapterService_GetHealthStatusServer) error {
542 ctx := context.Background()
543 logger.Debugw(ctx, "receive-stream-connection", log.Fields{"stream": stream})
544
545 if stream == nil {
546 return fmt.Errorf("conn-is-nil %v", stream)
547 }
548 initialRequestTime := time.Now()
549 var remoteClient *common.Connection
550 var tempClient *common.Connection
551 var err error
552loop:
553 for {
554 tempClient, err = stream.Recv()
555 if err != nil {
556 logger.Warnw(ctx, "received-stream-error", log.Fields{"remote-client": remoteClient, "error": err})
557 break loop
558 }
559 // Send a response back
560 err = stream.Send(&health.HealthStatus{State: health.HealthStatus_HEALTHY})
561 if err != nil {
562 logger.Warnw(ctx, "sending-stream-error", log.Fields{"remote-client": remoteClient, "error": err})
563 break loop
564 }
565
566 remoteClient = tempClient
567 logger.Debugw(ctx, "received-keep-alive", log.Fields{"remote-client": remoteClient})
568
569 select {
570 case <-stream.Context().Done():
571 logger.Infow(ctx, "stream-keep-alive-context-done", log.Fields{"remote-client": remoteClient, "error": stream.Context().Err()})
572 break loop
573 case <-oo.exitChannel:
574 logger.Warnw(ctx, "received-stop", log.Fields{"remote-client": remoteClient, "initial-conn-time": initialRequestTime})
575 break loop
576 default:
577 }
578 }
579 logger.Errorw(ctx, "connection-down", log.Fields{"remote-client": remoteClient, "error": err, "initial-conn-time": initialRequestTime})
580 return err
581}
582
khenaidoo106c61a2021-08-11 18:05:46 -0400583/*
584 *
585 * Unimplemented APIs
586 *
587 */
588
praneeth nalmas55616d62023-02-06 09:19:18 +0530589// SimulateAlarm is unimplemented
khenaidoodc2116e2021-10-19 17:33:19 -0400590func (oo *OpenOLT) SimulateAlarm(context.Context, *ca.SimulateAlarmMessage) (*voltha.OperationResp, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400591 return nil, olterrors.ErrNotImplemented
592}
593
praneeth nalmas55616d62023-02-06 09:19:18 +0530594// SetExtValue is unimplemented
khenaidoodc2116e2021-10-19 17:33:19 -0400595func (oo *OpenOLT) SetExtValue(context.Context, *ca.SetExtValueMessage) (*empty.Empty, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400596 return nil, olterrors.ErrNotImplemented
597}
598
praneeth nalmas55616d62023-02-06 09:19:18 +0530599// StartOmciTest not implemented
khenaidoodc2116e2021-10-19 17:33:19 -0400600func (oo *OpenOLT) StartOmciTest(ctx context.Context, test *ca.OMCITest) (*omci.TestResponse, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400601 return nil, olterrors.ErrNotImplemented
602}
603
praneeth nalmas55616d62023-02-06 09:19:18 +0530604// SuppressEvent unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400605func (oo *OpenOLT) SuppressEvent(ctx context.Context, filter *voltha.EventFilter) (*empty.Empty, error) {
606 return nil, olterrors.ErrNotImplemented
607}
608
praneeth nalmas55616d62023-02-06 09:19:18 +0530609// UnSuppressEvent unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400610func (oo *OpenOLT) UnSuppressEvent(ctx context.Context, filter *voltha.EventFilter) (*empty.Empty, error) {
611 return nil, olterrors.ErrNotImplemented
612}
613
praneeth nalmas55616d62023-02-06 09:19:18 +0530614// DownloadImage is unimplemented
khenaidoodc2116e2021-10-19 17:33:19 -0400615func (oo *OpenOLT) DownloadImage(ctx context.Context, imageInfo *ca.ImageDownloadMessage) (*voltha.ImageDownload, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400616 return nil, olterrors.ErrNotImplemented
617}
618
praneeth nalmas55616d62023-02-06 09:19:18 +0530619// GetImageDownloadStatus is unimplemented
khenaidoodc2116e2021-10-19 17:33:19 -0400620func (oo *OpenOLT) GetImageDownloadStatus(ctx context.Context, imageInfo *ca.ImageDownloadMessage) (*voltha.ImageDownload, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400621 return nil, olterrors.ErrNotImplemented
622}
623
praneeth nalmas55616d62023-02-06 09:19:18 +0530624// CancelImageDownload is unimplemented
khenaidoodc2116e2021-10-19 17:33:19 -0400625func (oo *OpenOLT) CancelImageDownload(ctx context.Context, imageInfo *ca.ImageDownloadMessage) (*voltha.ImageDownload, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400626 return nil, olterrors.ErrNotImplemented
627}
628
praneeth nalmas55616d62023-02-06 09:19:18 +0530629// ActivateImageUpdate is unimplemented
khenaidoodc2116e2021-10-19 17:33:19 -0400630func (oo *OpenOLT) ActivateImageUpdate(ctx context.Context, imageInfo *ca.ImageDownloadMessage) (*voltha.ImageDownload, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400631 return nil, olterrors.ErrNotImplemented
632}
633
praneeth nalmas55616d62023-02-06 09:19:18 +0530634// RevertImageUpdate is unimplemented
khenaidoodc2116e2021-10-19 17:33:19 -0400635func (oo *OpenOLT) RevertImageUpdate(ctx context.Context, imageInfo *ca.ImageDownloadMessage) (*voltha.ImageDownload, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400636 return nil, olterrors.ErrNotImplemented
637}
638
praneeth nalmas55616d62023-02-06 09:19:18 +0530639// DownloadOnuImage unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400640func (oo *OpenOLT) DownloadOnuImage(ctx context.Context, request *voltha.DeviceImageDownloadRequest) (*voltha.DeviceImageResponse, error) {
641 return nil, olterrors.ErrNotImplemented
642}
643
praneeth nalmas55616d62023-02-06 09:19:18 +0530644// GetOnuImageStatus unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400645func (oo *OpenOLT) GetOnuImageStatus(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) {
646 return nil, olterrors.ErrNotImplemented
647}
648
praneeth nalmas55616d62023-02-06 09:19:18 +0530649// AbortOnuImageUpgrade unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400650func (oo *OpenOLT) AbortOnuImageUpgrade(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) {
651 return nil, olterrors.ErrNotImplemented
652}
653
praneeth nalmas55616d62023-02-06 09:19:18 +0530654// GetOnuImages unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400655func (oo *OpenOLT) GetOnuImages(ctx context.Context, deviceID *common.ID) (*voltha.OnuImages, error) {
656 return nil, olterrors.ErrNotImplemented
657}
658
praneeth nalmas55616d62023-02-06 09:19:18 +0530659// ActivateOnuImage unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400660func (oo *OpenOLT) ActivateOnuImage(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) {
661 return nil, olterrors.ErrNotImplemented
662}
663
praneeth nalmas55616d62023-02-06 09:19:18 +0530664// CommitOnuImage unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400665func (oo *OpenOLT) CommitOnuImage(ctx context.Context, in *voltha.DeviceImageRequest) (*voltha.DeviceImageResponse, error) {
666 return nil, olterrors.ErrNotImplemented
667}
668
669// UpdateFlowsBulk is unimplemented
khenaidoodc2116e2021-10-19 17:33:19 -0400670func (oo *OpenOLT) UpdateFlowsBulk(ctx context.Context, flows *ca.BulkFlows) (*empty.Empty, error) {
khenaidoo106c61a2021-08-11 18:05:46 -0400671 return nil, olterrors.ErrNotImplemented
672}
673
praneeth nalmas55616d62023-02-06 09:19:18 +0530674// SelfTestDevice unimplemented
khenaidoo106c61a2021-08-11 18:05:46 -0400675func (oo *OpenOLT) SelfTestDevice(ctx context.Context, device *voltha.Device) (*empty.Empty, error) {
676 return nil, olterrors.ErrNotImplemented
677}