blob: 7175a2b0d1c994f631ab2d041d80f66cc935a32b [file] [log] [blame]
khenaidoob9203542018-09-17 22:56:37 -04001/*
2 * Copyright 2018-present Open Networking Foundation
3
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 */
npujar1d86a522019-11-14 17:11:16 +053016
Kent Hagerman2b216042020-04-03 18:28:56 -040017package api
khenaidoob9203542018-09-17 22:56:37 -040018
19import (
npujar1d86a522019-11-14 17:11:16 +053020 "context"
khenaidoob9203542018-09-17 22:56:37 -040021 "errors"
Kent Hagerman2b216042020-04-03 18:28:56 -040022 "github.com/opencord/voltha-go/rw_core/core/adapter"
23 "github.com/opencord/voltha-go/rw_core/core/device"
David Bainbridged1afd662020-03-26 18:27:41 -070024 "time"
25
khenaidoob9203542018-09-17 22:56:37 -040026 "github.com/golang/protobuf/ptypes"
27 "github.com/golang/protobuf/ptypes/empty"
sbarbari17d7e222019-11-05 10:02:29 -050028 "github.com/opencord/voltha-go/db/model"
serkant.uluderya2ae470f2020-01-21 11:13:09 -080029 "github.com/opencord/voltha-lib-go/v3/pkg/kafka"
30 "github.com/opencord/voltha-lib-go/v3/pkg/log"
31 ic "github.com/opencord/voltha-protos/v3/go/inter_container"
32 "github.com/opencord/voltha-protos/v3/go/voltha"
khenaidoob9203542018-09-17 22:56:37 -040033)
34
npujar1d86a522019-11-14 17:11:16 +053035// AdapterRequestHandlerProxy represent adapter request handler proxy attributes
khenaidoob9203542018-09-17 22:56:37 -040036type AdapterRequestHandlerProxy struct {
npujar1d86a522019-11-14 17:11:16 +053037 coreInstanceID string
Kent Hagerman2b216042020-04-03 18:28:56 -040038 deviceMgr *device.Manager
39 adapterMgr *adapter.Manager
khenaidoode93b462019-02-13 22:17:21 -050040 localDataProxy *model.Proxy
41 clusterDataProxy *model.Proxy
khenaidoo442e7c72020-03-10 16:13:48 -040042 defaultRequestTimeout time.Duration
43 longRunningRequestTimeout time.Duration
khenaidoob9203542018-09-17 22:56:37 -040044}
45
npujar1d86a522019-11-14 17:11:16 +053046// NewAdapterRequestHandlerProxy assigns values for adapter request handler proxy attributes and returns the new instance
Kent Hagerman2b216042020-04-03 18:28:56 -040047func NewAdapterRequestHandlerProxy(coreInstanceID string, dMgr *device.Manager,
48 aMgr *adapter.Manager, cdProxy *model.Proxy, ldProxy *model.Proxy, longRunningRequestTimeout time.Duration,
khenaidoo442e7c72020-03-10 16:13:48 -040049 defaultRequestTimeout time.Duration) *AdapterRequestHandlerProxy {
khenaidoob9203542018-09-17 22:56:37 -040050 var proxy AdapterRequestHandlerProxy
npujar1d86a522019-11-14 17:11:16 +053051 proxy.coreInstanceID = coreInstanceID
khenaidoob9203542018-09-17 22:56:37 -040052 proxy.deviceMgr = dMgr
khenaidoob9203542018-09-17 22:56:37 -040053 proxy.clusterDataProxy = cdProxy
54 proxy.localDataProxy = ldProxy
khenaidoo21d51152019-02-01 13:48:37 -050055 proxy.adapterMgr = aMgr
khenaidoo297cd252019-02-07 22:10:23 -050056 proxy.defaultRequestTimeout = defaultRequestTimeout
57 proxy.longRunningRequestTimeout = longRunningRequestTimeout
khenaidoob9203542018-09-17 22:56:37 -040058 return &proxy
59}
60
khenaidoo79232702018-12-04 11:00:41 -050061func (rhp *AdapterRequestHandlerProxy) Register(args []*ic.Argument) (*voltha.CoreInstance, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -050062 if len(args) < 3 {
Girish Kumarf56a4682020-03-20 20:07:46 +000063 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -040064 err := errors.New("invalid-number-of-args")
65 return nil, err
66 }
67 adapter := &voltha.Adapter{}
khenaidoo91ecfd62018-11-04 17:13:42 -050068 deviceTypes := &voltha.DeviceTypes{}
npujar1d86a522019-11-14 17:11:16 +053069 transactionID := &ic.StrType{}
khenaidoo91ecfd62018-11-04 17:13:42 -050070 for _, arg := range args {
71 switch arg.Key {
72 case "adapter":
73 if err := ptypes.UnmarshalAny(arg.Value, adapter); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +000074 logger.Warnw("cannot-unmarshal-adapter", log.Fields{"error": err})
khenaidoo91ecfd62018-11-04 17:13:42 -050075 return nil, err
76 }
77 case "deviceTypes":
78 if err := ptypes.UnmarshalAny(arg.Value, deviceTypes); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +000079 logger.Warnw("cannot-unmarshal-device-types", log.Fields{"error": err})
khenaidoo91ecfd62018-11-04 17:13:42 -050080 return nil, err
81 }
khenaidoo297cd252019-02-07 22:10:23 -050082 case kafka.TransactionKey:
npujar1d86a522019-11-14 17:11:16 +053083 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +000084 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -050085 return nil, err
86 }
khenaidoo91ecfd62018-11-04 17:13:42 -050087 }
khenaidoob9203542018-09-17 22:56:37 -040088 }
Girish Kumarf56a4682020-03-20 20:07:46 +000089 logger.Debugw("Register", log.Fields{"adapter": *adapter, "device-types": deviceTypes, "transaction-id": transactionID.Val, "core-id": rhp.coreInstanceID})
khenaidoo297cd252019-02-07 22:10:23 -050090
Kent Hagerman2b216042020-04-03 18:28:56 -040091 return rhp.adapterMgr.RegisterAdapter(adapter, deviceTypes)
khenaidoob9203542018-09-17 22:56:37 -040092}
93
npujar1d86a522019-11-14 17:11:16 +053094// GetDevice returns device info
khenaidoo79232702018-12-04 11:00:41 -050095func (rhp *AdapterRequestHandlerProxy) GetDevice(args []*ic.Argument) (*voltha.Device, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -050096 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +000097 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -040098 err := errors.New("invalid-number-of-args")
99 return nil, err
100 }
khenaidoo297cd252019-02-07 22:10:23 -0500101
khenaidoob9203542018-09-17 22:56:37 -0400102 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -0500103 transactionID := &ic.StrType{}
104 for _, arg := range args {
105 switch arg.Key {
106 case "device_id":
107 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000108 logger.Warnw("cannot-unmarshal-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500109 return nil, err
110 }
111 case kafka.TransactionKey:
112 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000113 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500114 return nil, err
115 }
116 }
khenaidoob9203542018-09-17 22:56:37 -0400117 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000118 logger.Debugw("GetDevice", log.Fields{"deviceID": pID.Id, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500119
khenaidoob9203542018-09-17 22:56:37 -0400120 // Get the device via the device manager
npujar467fe752020-01-16 20:17:45 +0530121 device, err := rhp.deviceMgr.GetDevice(context.TODO(), pID.Id)
npujar1d86a522019-11-14 17:11:16 +0530122 if err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000123 logger.Debugw("get-device-failed", log.Fields{"deviceID": pID.Id, "error": err})
khenaidoob9203542018-09-17 22:56:37 -0400124 }
khenaidoo442e7c72020-03-10 16:13:48 -0400125 return device, err
khenaidoob9203542018-09-17 22:56:37 -0400126}
127
npujar1d86a522019-11-14 17:11:16 +0530128// DeviceUpdate updates device using adapter data
khenaidoo79232702018-12-04 11:00:41 -0500129func (rhp *AdapterRequestHandlerProxy) DeviceUpdate(args []*ic.Argument) (*empty.Empty, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500130 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000131 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400132 err := errors.New("invalid-number-of-args")
133 return nil, err
134 }
khenaidoo297cd252019-02-07 22:10:23 -0500135
khenaidoob9203542018-09-17 22:56:37 -0400136 device := &voltha.Device{}
khenaidoo297cd252019-02-07 22:10:23 -0500137 transactionID := &ic.StrType{}
138 for _, arg := range args {
139 switch arg.Key {
140 case "device":
141 if err := ptypes.UnmarshalAny(arg.Value, device); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000142 logger.Warnw("cannot-unmarshal-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500143 return nil, err
144 }
145 case kafka.TransactionKey:
146 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000147 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500148 return nil, err
149 }
150 }
khenaidoob9203542018-09-17 22:56:37 -0400151 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000152 logger.Debugw("DeviceUpdate", log.Fields{"deviceID": device.Id, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500153
Kent Hagerman2b216042020-04-03 18:28:56 -0400154 if err := rhp.deviceMgr.UpdateDeviceUsingAdapterData(context.TODO(), device); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000155 logger.Debugw("unable-to-update-device-using-adapter-data", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400156 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400157 }
khenaidoo442e7c72020-03-10 16:13:48 -0400158 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400159}
160
npujar1d86a522019-11-14 17:11:16 +0530161// GetChildDevice returns details of child device
khenaidoo79232702018-12-04 11:00:41 -0500162func (rhp *AdapterRequestHandlerProxy) GetChildDevice(args []*ic.Argument) (*voltha.Device, error) {
Matt Jeanneret4e241952019-02-28 11:16:04 -0500163 if len(args) < 3 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000164 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400165 err := errors.New("invalid-number-of-args")
166 return nil, err
167 }
khenaidoo297cd252019-02-07 22:10:23 -0500168
khenaidoo2c6f1672018-09-20 23:14:41 -0400169 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -0500170 transactionID := &ic.StrType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500171 serialNumber := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530172 onuID := &ic.IntType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500173 parentPortNo := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500174 for _, arg := range args {
175 switch arg.Key {
176 case "device_id":
177 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000178 logger.Warnw("cannot-unmarshal-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500179 return nil, err
180 }
Matt Jeanneret4e241952019-02-28 11:16:04 -0500181 case "serial_number":
182 if err := ptypes.UnmarshalAny(arg.Value, serialNumber); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000183 logger.Warnw("cannot-unmarshal-ID", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500184 return nil, err
185 }
186 case "onu_id":
npujar1d86a522019-11-14 17:11:16 +0530187 if err := ptypes.UnmarshalAny(arg.Value, onuID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000188 logger.Warnw("cannot-unmarshal-ID", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500189 return nil, err
190 }
191 case "parent_port_no":
192 if err := ptypes.UnmarshalAny(arg.Value, parentPortNo); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000193 logger.Warnw("cannot-unmarshal-ID", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500194 return nil, err
195 }
khenaidoo297cd252019-02-07 22:10:23 -0500196 case kafka.TransactionKey:
197 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000198 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500199 return nil, err
200 }
201 }
khenaidoob9203542018-09-17 22:56:37 -0400202 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000203 logger.Debugw("GetChildDevice", log.Fields{"parentDeviceID": pID.Id, "args": args, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500204
npujar467fe752020-01-16 20:17:45 +0530205 return rhp.deviceMgr.GetChildDevice(context.TODO(), pID.Id, serialNumber.Val, onuID.Val, parentPortNo.Val)
khenaidoob9203542018-09-17 22:56:37 -0400206}
207
npujar1d86a522019-11-14 17:11:16 +0530208// GetChildDeviceWithProxyAddress returns details of child device with proxy address
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500209func (rhp *AdapterRequestHandlerProxy) GetChildDeviceWithProxyAddress(args []*ic.Argument) (*voltha.Device, error) {
210 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000211 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500212 err := errors.New("invalid-number-of-args")
213 return nil, err
214 }
215
216 proxyAddress := &voltha.Device_ProxyAddress{}
217 transactionID := &ic.StrType{}
218 for _, arg := range args {
219 switch arg.Key {
220 case "proxy_address":
221 if err := ptypes.UnmarshalAny(arg.Value, proxyAddress); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000222 logger.Warnw("cannot-unmarshal-proxy-address", log.Fields{"error": err})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500223 return nil, err
224 }
225 case kafka.TransactionKey:
226 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000227 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500228 return nil, err
229 }
230 }
231 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000232 logger.Debugw("GetChildDeviceWithProxyAddress", log.Fields{"proxyAddress": proxyAddress, "transactionID": transactionID.Val})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500233
npujar467fe752020-01-16 20:17:45 +0530234 return rhp.deviceMgr.GetChildDeviceWithProxyAddress(context.TODO(), proxyAddress)
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500235}
236
npujar1d86a522019-11-14 17:11:16 +0530237// GetPorts returns the ports information of the device based on the port type.
khenaidoo79232702018-12-04 11:00:41 -0500238func (rhp *AdapterRequestHandlerProxy) GetPorts(args []*ic.Argument) (*voltha.Ports, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500239 if len(args) < 3 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000240 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400241 err := errors.New("invalid-number-of-args")
242 return nil, err
243 }
npujar1d86a522019-11-14 17:11:16 +0530244 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500245 pt := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500246 transactionID := &ic.StrType{}
khenaidoo92e62c52018-10-03 14:02:54 -0400247 for _, arg := range args {
248 switch arg.Key {
249 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530250 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000251 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400252 return nil, err
253 }
254 case "port_type":
255 if err := ptypes.UnmarshalAny(arg.Value, pt); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000256 logger.Warnw("cannot-unmarshal-porttype", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400257 return nil, err
258 }
khenaidoo297cd252019-02-07 22:10:23 -0500259 case kafka.TransactionKey:
260 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000261 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500262 return nil, err
263 }
khenaidoo92e62c52018-10-03 14:02:54 -0400264 }
khenaidoob9203542018-09-17 22:56:37 -0400265 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000266 logger.Debugw("GetPorts", log.Fields{"deviceID": deviceID.Id, "portype": pt.Val, "transactionID": transactionID.Val})
khenaidoo442e7c72020-03-10 16:13:48 -0400267
Kent Hagerman2b216042020-04-03 18:28:56 -0400268 return rhp.deviceMgr.GetPorts(context.TODO(), deviceID.Id, voltha.Port_PortType(pt.Val))
khenaidoob9203542018-09-17 22:56:37 -0400269}
270
npujar1d86a522019-11-14 17:11:16 +0530271// GetChildDevices gets all the child device IDs from the device passed as parameter
khenaidoo297cd252019-02-07 22:10:23 -0500272func (rhp *AdapterRequestHandlerProxy) GetChildDevices(args []*ic.Argument) (*voltha.Devices, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500273 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000274 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400275 err := errors.New("invalid-number-of-args")
276 return nil, err
277 }
khenaidoo297cd252019-02-07 22:10:23 -0500278
khenaidoo2c6f1672018-09-20 23:14:41 -0400279 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -0500280 transactionID := &ic.StrType{}
281 for _, arg := range args {
282 switch arg.Key {
283 case "device_id":
284 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000285 logger.Warnw("cannot-unmarshal-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500286 return nil, err
287 }
288 case kafka.TransactionKey:
289 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000290 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500291 return nil, err
292 }
293 }
khenaidoob9203542018-09-17 22:56:37 -0400294 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000295 logger.Debugw("GetChildDevices", log.Fields{"deviceID": pID.Id, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500296
Kent Hagerman2b216042020-04-03 18:28:56 -0400297 return rhp.deviceMgr.GetAllChildDevices(context.TODO(), pID.Id)
khenaidoob9203542018-09-17 22:56:37 -0400298}
299
khenaidoo442e7c72020-03-10 16:13:48 -0400300// ChildDeviceDetected is invoked when a child device is detected. The following parameters are expected:
Matt Jeanneret4e241952019-02-28 11:16:04 -0500301// {parent_device_id, parent_port_no, child_device_type, channel_id, vendor_id, serial_number)
Mahir Gunyel6deaa242019-06-27 04:53:33 -0700302func (rhp *AdapterRequestHandlerProxy) ChildDeviceDetected(args []*ic.Argument) (*voltha.Device, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500303 if len(args) < 5 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000304 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400305 err := errors.New("invalid-number-of-args")
306 return nil, err
307 }
308
309 pID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500310 portNo := &ic.IntType{}
311 dt := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530312 chnlID := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500313 transactionID := &ic.StrType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500314 serialNumber := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530315 vendorID := &ic.StrType{}
316 onuID := &ic.IntType{}
khenaidoob9203542018-09-17 22:56:37 -0400317 for _, arg := range args {
318 switch arg.Key {
319 case "parent_device_id":
320 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000321 logger.Warnw("cannot-unmarshal-parent-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400322 return nil, err
323 }
324 case "parent_port_no":
325 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000326 logger.Warnw("cannot-unmarshal-parent-port", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400327 return nil, err
328 }
329 case "child_device_type":
330 if err := ptypes.UnmarshalAny(arg.Value, dt); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000331 logger.Warnw("cannot-unmarshal-child-device-type", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400332 return nil, err
333 }
334 case "channel_id":
npujar1d86a522019-11-14 17:11:16 +0530335 if err := ptypes.UnmarshalAny(arg.Value, chnlID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000336 logger.Warnw("cannot-unmarshal-channel-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400337 return nil, err
338 }
Matt Jeanneret4e241952019-02-28 11:16:04 -0500339 case "vendor_id":
npujar1d86a522019-11-14 17:11:16 +0530340 if err := ptypes.UnmarshalAny(arg.Value, vendorID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000341 logger.Warnw("cannot-unmarshal-vendor-id", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500342 return nil, err
343 }
344 case "serial_number":
345 if err := ptypes.UnmarshalAny(arg.Value, serialNumber); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000346 logger.Warnw("cannot-unmarshal-serial-number", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500347 return nil, err
348 }
349 case "onu_id":
npujar1d86a522019-11-14 17:11:16 +0530350 if err := ptypes.UnmarshalAny(arg.Value, onuID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000351 logger.Warnw("cannot-unmarshal-onu-id", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500352 return nil, err
353 }
khenaidoo297cd252019-02-07 22:10:23 -0500354 case kafka.TransactionKey:
355 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000356 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500357 return nil, err
358 }
khenaidoob9203542018-09-17 22:56:37 -0400359 }
360 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000361 logger.Debugw("ChildDeviceDetected", log.Fields{"parentDeviceID": pID.Id, "parentPortNo": portNo.Val,
npujar1d86a522019-11-14 17:11:16 +0530362 "deviceType": dt.Val, "channelID": chnlID.Val, "serialNumber": serialNumber.Val,
363 "vendorID": vendorID.Val, "onuID": onuID.Val, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500364
Kent Hagerman2b216042020-04-03 18:28:56 -0400365 device, err := rhp.deviceMgr.ChildDeviceDetected(context.TODO(), pID.Id, portNo.Val, dt.Val, chnlID.Val, vendorID.Val, serialNumber.Val, onuID.Val)
Mahir Gunyel6deaa242019-06-27 04:53:33 -0700366 if err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000367 logger.Debugw("child-detection-failed", log.Fields{"parentID": pID.Id, "onuID": onuID.Val, "error": err})
khenaidoo59ef7be2019-06-21 12:40:28 -0400368 }
khenaidoo442e7c72020-03-10 16:13:48 -0400369 return device, err
khenaidoob9203542018-09-17 22:56:37 -0400370}
371
npujar1d86a522019-11-14 17:11:16 +0530372// DeviceStateUpdate updates device status
khenaidoo79232702018-12-04 11:00:41 -0500373func (rhp *AdapterRequestHandlerProxy) DeviceStateUpdate(args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500374 if len(args) < 3 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000375 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400376 err := errors.New("invalid-number-of-args")
377 return nil, err
378 }
npujar1d86a522019-11-14 17:11:16 +0530379 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500380 operStatus := &ic.IntType{}
381 connStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500382 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400383 for _, arg := range args {
384 switch arg.Key {
385 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530386 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000387 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400388 return nil, err
389 }
390 case "oper_status":
391 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000392 logger.Warnw("cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400393 return nil, err
394 }
khenaidoob9203542018-09-17 22:56:37 -0400395 case "connect_status":
396 if err := ptypes.UnmarshalAny(arg.Value, connStatus); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000397 logger.Warnw("cannot-unmarshal-connStatus", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400398 return nil, err
399 }
khenaidoo297cd252019-02-07 22:10:23 -0500400 case kafka.TransactionKey:
401 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000402 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500403 return nil, err
404 }
khenaidoob9203542018-09-17 22:56:37 -0400405 }
406 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000407 logger.Debugw("DeviceStateUpdate", log.Fields{"deviceID": deviceID.Id, "oper-status": operStatus,
khenaidoo297cd252019-02-07 22:10:23 -0500408 "conn-status": connStatus, "transactionID": transactionID.Val})
409
Kent Hagerman2b216042020-04-03 18:28:56 -0400410 if err := rhp.deviceMgr.UpdateDeviceStatus(context.TODO(), deviceID.Id, voltha.OperStatus_Types(operStatus.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400411 voltha.ConnectStatus_Types(connStatus.Val)); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000412 logger.Debugw("unable-to-update-device-status", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400413 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400414 }
khenaidoo442e7c72020-03-10 16:13:48 -0400415 return &empty.Empty{}, nil
khenaidoo92e62c52018-10-03 14:02:54 -0400416}
417
npujar1d86a522019-11-14 17:11:16 +0530418// ChildrenStateUpdate updates child device status
khenaidoo79232702018-12-04 11:00:41 -0500419func (rhp *AdapterRequestHandlerProxy) ChildrenStateUpdate(args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500420 if len(args) < 3 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000421 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoo4d4802d2018-10-04 21:59:49 -0400422 err := errors.New("invalid-number-of-args")
423 return nil, err
424 }
npujar1d86a522019-11-14 17:11:16 +0530425 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500426 operStatus := &ic.IntType{}
427 connStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500428 transactionID := &ic.StrType{}
khenaidoo4d4802d2018-10-04 21:59:49 -0400429 for _, arg := range args {
430 switch arg.Key {
431 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530432 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000433 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400434 return nil, err
435 }
436 case "oper_status":
437 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000438 logger.Warnw("cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400439 return nil, err
440 }
441 case "connect_status":
442 if err := ptypes.UnmarshalAny(arg.Value, connStatus); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000443 logger.Warnw("cannot-unmarshal-connStatus", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400444 return nil, err
445 }
khenaidoo297cd252019-02-07 22:10:23 -0500446 case kafka.TransactionKey:
447 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000448 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500449 return nil, err
450 }
khenaidoo4d4802d2018-10-04 21:59:49 -0400451 }
452 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000453 logger.Debugw("ChildrenStateUpdate", log.Fields{"deviceID": deviceID.Id, "oper-status": operStatus,
khenaidoo297cd252019-02-07 22:10:23 -0500454 "conn-status": connStatus, "transactionID": transactionID.Val})
455
khenaidoo4d4802d2018-10-04 21:59:49 -0400456 // When the enum is not set (i.e. -1), Go still convert to the Enum type with the value being -1
Kent Hagerman2b216042020-04-03 18:28:56 -0400457 if err := rhp.deviceMgr.UpdateChildrenStatus(context.TODO(), deviceID.Id, voltha.OperStatus_Types(operStatus.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400458 voltha.ConnectStatus_Types(connStatus.Val)); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000459 logger.Debugw("unable-to-update-children-status", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400460 return nil, err
461 }
462 return &empty.Empty{}, nil
khenaidoo4d4802d2018-10-04 21:59:49 -0400463}
464
npujar1d86a522019-11-14 17:11:16 +0530465// PortsStateUpdate updates the ports state related to the device
khenaidoo3ab34882019-05-02 21:33:30 -0400466func (rhp *AdapterRequestHandlerProxy) PortsStateUpdate(args []*ic.Argument) (*empty.Empty, error) {
467 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000468 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoo3ab34882019-05-02 21:33:30 -0400469 err := errors.New("invalid-number-of-args")
470 return nil, err
471 }
npujar1d86a522019-11-14 17:11:16 +0530472 deviceID := &voltha.ID{}
khenaidoo3ab34882019-05-02 21:33:30 -0400473 operStatus := &ic.IntType{}
474 transactionID := &ic.StrType{}
475 for _, arg := range args {
476 switch arg.Key {
477 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530478 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000479 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400480 return nil, err
481 }
482 case "oper_status":
483 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000484 logger.Warnw("cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400485 return nil, err
486 }
487 case kafka.TransactionKey:
488 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000489 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400490 return nil, err
491 }
492 }
493 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000494 logger.Debugw("PortsStateUpdate", log.Fields{"deviceID": deviceID.Id, "operStatus": operStatus, "transactionID": transactionID.Val})
khenaidoo3ab34882019-05-02 21:33:30 -0400495
Kent Hagerman2b216042020-04-03 18:28:56 -0400496 if err := rhp.deviceMgr.UpdatePortsState(context.TODO(), deviceID.Id, voltha.OperStatus_Types(operStatus.Val)); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000497 logger.Debugw("unable-to-update-ports-state", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400498 return nil, err
khenaidoo3ab34882019-05-02 21:33:30 -0400499 }
khenaidoo442e7c72020-03-10 16:13:48 -0400500 return &empty.Empty{}, nil
khenaidoo3ab34882019-05-02 21:33:30 -0400501}
502
npujar1d86a522019-11-14 17:11:16 +0530503// PortStateUpdate updates the port state of the device
khenaidoo79232702018-12-04 11:00:41 -0500504func (rhp *AdapterRequestHandlerProxy) PortStateUpdate(args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500505 if len(args) < 3 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000506 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoo92e62c52018-10-03 14:02:54 -0400507 err := errors.New("invalid-number-of-args")
508 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400509 }
npujar1d86a522019-11-14 17:11:16 +0530510 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500511 portType := &ic.IntType{}
512 portNo := &ic.IntType{}
513 operStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500514 transactionID := &ic.StrType{}
khenaidoo92e62c52018-10-03 14:02:54 -0400515 for _, arg := range args {
516 switch arg.Key {
517 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530518 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000519 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400520 return nil, err
521 }
522 case "oper_status":
523 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000524 logger.Warnw("cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400525 return nil, err
526 }
527 case "port_type":
528 if err := ptypes.UnmarshalAny(arg.Value, portType); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000529 logger.Warnw("cannot-unmarshal-porttype", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400530 return nil, err
531 }
532 case "port_no":
533 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000534 logger.Warnw("cannot-unmarshal-portno", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400535 return nil, err
536 }
khenaidoo297cd252019-02-07 22:10:23 -0500537 case kafka.TransactionKey:
538 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000539 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500540 return nil, err
541 }
khenaidoo92e62c52018-10-03 14:02:54 -0400542 }
543 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000544 logger.Debugw("PortStateUpdate", log.Fields{"deviceID": deviceID.Id, "operStatus": operStatus,
khenaidoo297cd252019-02-07 22:10:23 -0500545 "portType": portType, "portNo": portNo, "transactionID": transactionID.Val})
546
Kent Hagerman2b216042020-04-03 18:28:56 -0400547 if err := rhp.deviceMgr.UpdatePortState(context.TODO(), deviceID.Id, voltha.Port_PortType(portType.Val), uint32(portNo.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400548 voltha.OperStatus_Types(operStatus.Val)); err != nil {
549 // If the error doesn't change behavior and is essentially ignored, it is not an error, it is a
550 // warning.
551 // TODO: VOL-2707
Girish Kumarf56a4682020-03-20 20:07:46 +0000552 logger.Debugw("unable-to-update-port-state", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400553 return nil, err
khenaidoo92e62c52018-10-03 14:02:54 -0400554 }
khenaidoo442e7c72020-03-10 16:13:48 -0400555 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400556}
557
npujar1d86a522019-11-14 17:11:16 +0530558// DeleteAllPorts deletes all ports of device
khenaidoo0a822f92019-05-08 15:15:57 -0400559func (rhp *AdapterRequestHandlerProxy) DeleteAllPorts(args []*ic.Argument) (*empty.Empty, error) {
560 if len(args) < 3 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000561 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400562 err := errors.New("invalid-number-of-args")
563 return nil, err
564 }
npujar1d86a522019-11-14 17:11:16 +0530565 deviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400566 transactionID := &ic.StrType{}
567 for _, arg := range args {
568 switch arg.Key {
569 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530570 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000571 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400572 return nil, err
573 }
574 case kafka.TransactionKey:
575 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000576 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400577 return nil, err
578 }
579 }
580 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000581 logger.Debugw("DeleteAllPorts", log.Fields{"deviceID": deviceID.Id, "transactionID": transactionID.Val})
khenaidoo0a822f92019-05-08 15:15:57 -0400582
Kent Hagerman2b216042020-04-03 18:28:56 -0400583 if err := rhp.deviceMgr.DeleteAllPorts(context.TODO(), deviceID.Id); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000584 logger.Debugw("unable-to-delete-ports", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400585 return nil, err
khenaidoo0a822f92019-05-08 15:15:57 -0400586 }
khenaidoo442e7c72020-03-10 16:13:48 -0400587 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400588}
589
npujar1d86a522019-11-14 17:11:16 +0530590// ChildDevicesLost indicates that a parent device is in a state (Disabled) where it cannot manage the child devices.
591// This will trigger the Core to disable all the child devices.
khenaidoo0a822f92019-05-08 15:15:57 -0400592func (rhp *AdapterRequestHandlerProxy) ChildDevicesLost(args []*ic.Argument) (*empty.Empty, error) {
593 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000594 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400595 err := errors.New("invalid-number-of-args")
596 return nil, err
597 }
npujar1d86a522019-11-14 17:11:16 +0530598 parentDeviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400599 transactionID := &ic.StrType{}
600 for _, arg := range args {
601 switch arg.Key {
602 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530603 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000604 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400605 return nil, err
606 }
607 case kafka.TransactionKey:
608 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000609 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400610 return nil, err
611 }
612 }
613 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000614 logger.Debugw("ChildDevicesLost", log.Fields{"deviceID": parentDeviceID.Id, "transactionID": transactionID.Val})
khenaidoo0a822f92019-05-08 15:15:57 -0400615
Kent Hagerman2b216042020-04-03 18:28:56 -0400616 if err := rhp.deviceMgr.ChildDevicesLost(context.TODO(), parentDeviceID.Id); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000617 logger.Debugw("unable-to-disable-child-devices", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400618 return nil, err
khenaidoo0a822f92019-05-08 15:15:57 -0400619 }
khenaidoo442e7c72020-03-10 16:13:48 -0400620 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400621}
622
npujar1d86a522019-11-14 17:11:16 +0530623// ChildDevicesDetected invoked by an adapter when child devices are found, typically after after a disable/enable sequence.
624// This will trigger the Core to Enable all the child devices of that parent.
khenaidoo0a822f92019-05-08 15:15:57 -0400625func (rhp *AdapterRequestHandlerProxy) ChildDevicesDetected(args []*ic.Argument) (*empty.Empty, error) {
626 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000627 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400628 err := errors.New("invalid-number-of-args")
629 return nil, err
630 }
npujar1d86a522019-11-14 17:11:16 +0530631 parentDeviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400632 transactionID := &ic.StrType{}
633 for _, arg := range args {
634 switch arg.Key {
635 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530636 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000637 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400638 return nil, err
639 }
640 case kafka.TransactionKey:
641 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000642 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400643 return nil, err
644 }
645 }
646 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000647 logger.Debugw("ChildDevicesDetected", log.Fields{"deviceID": parentDeviceID.Id, "transactionID": transactionID.Val})
khenaidoo0a822f92019-05-08 15:15:57 -0400648
Kent Hagerman2b216042020-04-03 18:28:56 -0400649 if err := rhp.deviceMgr.ChildDevicesDetected(context.TODO(), parentDeviceID.Id); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000650 logger.Debugw("child-devices-detection-failed", log.Fields{"parentID": parentDeviceID.Id, "error": err})
khenaidoo59ef7be2019-06-21 12:40:28 -0400651 return nil, err
652 }
khenaidoo442e7c72020-03-10 16:13:48 -0400653 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400654}
655
npujar1d86a522019-11-14 17:11:16 +0530656// PortCreated adds port to device
khenaidoo79232702018-12-04 11:00:41 -0500657func (rhp *AdapterRequestHandlerProxy) PortCreated(args []*ic.Argument) (*empty.Empty, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500658 if len(args) < 3 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000659 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400660 err := errors.New("invalid-number-of-args")
661 return nil, err
662 }
npujar1d86a522019-11-14 17:11:16 +0530663 deviceID := &voltha.ID{}
khenaidoob9203542018-09-17 22:56:37 -0400664 port := &voltha.Port{}
khenaidoo297cd252019-02-07 22:10:23 -0500665 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400666 for _, arg := range args {
667 switch arg.Key {
668 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530669 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000670 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400671 return nil, err
672 }
673 case "port":
674 if err := ptypes.UnmarshalAny(arg.Value, port); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000675 logger.Warnw("cannot-unmarshal-port", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400676 return nil, err
677 }
khenaidoo297cd252019-02-07 22:10:23 -0500678 case kafka.TransactionKey:
679 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000680 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500681 return nil, err
682 }
khenaidoob9203542018-09-17 22:56:37 -0400683 }
684 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000685 logger.Debugw("PortCreated", log.Fields{"deviceID": deviceID.Id, "port": port, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500686
Kent Hagerman2b216042020-04-03 18:28:56 -0400687 if err := rhp.deviceMgr.AddPort(context.TODO(), deviceID.Id, port); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000688 logger.Debugw("unable-to-add-port", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400689 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400690 }
khenaidoo442e7c72020-03-10 16:13:48 -0400691 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400692}
693
npujar1d86a522019-11-14 17:11:16 +0530694// DevicePMConfigUpdate initializes the pm configs as defined by the adapter.
khenaidoo79232702018-12-04 11:00:41 -0500695func (rhp *AdapterRequestHandlerProxy) DevicePMConfigUpdate(args []*ic.Argument) (*empty.Empty, error) {
khenaidoob3127472019-07-24 21:04:55 -0400696 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000697 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400698 err := errors.New("invalid-number-of-args")
699 return nil, err
700 }
701 pmConfigs := &voltha.PmConfigs{}
khenaidoo297cd252019-02-07 22:10:23 -0500702 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400703 for _, arg := range args {
704 switch arg.Key {
705 case "device_pm_config":
706 if err := ptypes.UnmarshalAny(arg.Value, pmConfigs); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000707 logger.Warnw("cannot-unmarshal-pm-config", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400708 return nil, err
709 }
khenaidoo297cd252019-02-07 22:10:23 -0500710 case kafka.TransactionKey:
711 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000712 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500713 return nil, err
714 }
khenaidoob9203542018-09-17 22:56:37 -0400715 }
716 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000717 logger.Debugw("DevicePMConfigUpdate", log.Fields{"deviceID": pmConfigs.Id, "configs": pmConfigs,
khenaidoob3127472019-07-24 21:04:55 -0400718 "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500719
Kent Hagerman2b216042020-04-03 18:28:56 -0400720 if err := rhp.deviceMgr.InitPmConfigs(context.TODO(), pmConfigs.Id, pmConfigs); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000721 logger.Debugw("unable-to-initialize-pm-configs", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400722 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400723 }
khenaidoo442e7c72020-03-10 16:13:48 -0400724 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400725}
khenaidoofdbad6e2018-11-06 22:26:38 -0500726
npujar1d86a522019-11-14 17:11:16 +0530727// PacketIn sends the incoming packet of device
khenaidoo79232702018-12-04 11:00:41 -0500728func (rhp *AdapterRequestHandlerProxy) PacketIn(args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500729 if len(args) < 4 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000730 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoofdbad6e2018-11-06 22:26:38 -0500731 err := errors.New("invalid-number-of-args")
732 return nil, err
733 }
npujar1d86a522019-11-14 17:11:16 +0530734 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500735 portNo := &ic.IntType{}
736 packet := &ic.Packet{}
khenaidoo297cd252019-02-07 22:10:23 -0500737 transactionID := &ic.StrType{}
khenaidoofdbad6e2018-11-06 22:26:38 -0500738 for _, arg := range args {
739 switch arg.Key {
740 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530741 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000742 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500743 return nil, err
744 }
745 case "port":
746 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000747 logger.Warnw("cannot-unmarshal-port-no", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500748 return nil, err
749 }
750 case "packet":
751 if err := ptypes.UnmarshalAny(arg.Value, packet); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000752 logger.Warnw("cannot-unmarshal-packet", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500753 return nil, err
754 }
khenaidoo297cd252019-02-07 22:10:23 -0500755 case kafka.TransactionKey:
756 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000757 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500758 return nil, err
759 }
khenaidoofdbad6e2018-11-06 22:26:38 -0500760 }
761 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000762 logger.Debugw("PacketIn", log.Fields{"deviceID": deviceID.Id, "port": portNo.Val, "packet": packet,
khenaidoo297cd252019-02-07 22:10:23 -0500763 "transactionID": transactionID.Val})
764
khenaidoo442e7c72020-03-10 16:13:48 -0400765 if err := rhp.deviceMgr.PacketIn(context.TODO(), deviceID.Id, uint32(portNo.Val), transactionID.Val, packet.Payload); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000766 logger.Debugw("unable-to-receive-packet-from-adapter", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400767 return nil, err
768
769 }
770 return &empty.Empty{}, nil
khenaidoofdbad6e2018-11-06 22:26:38 -0500771}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500772
npujar1d86a522019-11-14 17:11:16 +0530773// UpdateImageDownload updates image download
khenaidoof5a5bfa2019-01-23 22:20:29 -0500774func (rhp *AdapterRequestHandlerProxy) UpdateImageDownload(args []*ic.Argument) (*empty.Empty, error) {
775 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000776 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500777 err := errors.New("invalid-number-of-args")
778 return nil, err
779 }
npujar1d86a522019-11-14 17:11:16 +0530780 deviceID := &voltha.ID{}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500781 img := &voltha.ImageDownload{}
khenaidoo297cd252019-02-07 22:10:23 -0500782 transactionID := &ic.StrType{}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500783 for _, arg := range args {
784 switch arg.Key {
785 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530786 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000787 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500788 return nil, err
789 }
790 case "image_download":
791 if err := ptypes.UnmarshalAny(arg.Value, img); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000792 logger.Warnw("cannot-unmarshal-imgaeDownload", log.Fields{"error": err})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500793 return nil, err
794 }
khenaidoo297cd252019-02-07 22:10:23 -0500795 case kafka.TransactionKey:
796 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000797 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500798 return nil, err
799 }
khenaidoof5a5bfa2019-01-23 22:20:29 -0500800 }
801 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000802 logger.Debugw("UpdateImageDownload", log.Fields{"deviceID": deviceID.Id, "image-download": img,
khenaidoo297cd252019-02-07 22:10:23 -0500803 "transactionID": transactionID.Val})
804
Kent Hagerman2b216042020-04-03 18:28:56 -0400805 if err := rhp.deviceMgr.UpdateImageDownload(context.TODO(), deviceID.Id, img); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000806 logger.Debugw("unable-to-update-image-download", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400807 return nil, err
khenaidoof5a5bfa2019-01-23 22:20:29 -0500808 }
khenaidoo442e7c72020-03-10 16:13:48 -0400809 return &empty.Empty{}, nil
khenaidoof5a5bfa2019-01-23 22:20:29 -0500810}
khenaidooba6b6c42019-08-02 09:11:56 -0400811
npujar1d86a522019-11-14 17:11:16 +0530812// ReconcileChildDevices reconciles child devices
khenaidooba6b6c42019-08-02 09:11:56 -0400813func (rhp *AdapterRequestHandlerProxy) ReconcileChildDevices(args []*ic.Argument) (*empty.Empty, error) {
814 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000815 logger.Warn("invalid-number-of-args", log.Fields{"args": args})
khenaidooba6b6c42019-08-02 09:11:56 -0400816 err := errors.New("invalid-number-of-args")
817 return nil, err
818 }
npujar1d86a522019-11-14 17:11:16 +0530819 parentDeviceID := &voltha.ID{}
khenaidooba6b6c42019-08-02 09:11:56 -0400820 transactionID := &ic.StrType{}
821 for _, arg := range args {
822 switch arg.Key {
823 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530824 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000825 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidooba6b6c42019-08-02 09:11:56 -0400826 return nil, err
827 }
828 case kafka.TransactionKey:
829 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000830 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidooba6b6c42019-08-02 09:11:56 -0400831 return nil, err
832 }
833 }
834 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000835 logger.Debugw("ReconcileChildDevices", log.Fields{"deviceID": parentDeviceID.Id, "transactionID": transactionID.Val})
khenaidooba6b6c42019-08-02 09:11:56 -0400836
Kent Hagerman2b216042020-04-03 18:28:56 -0400837 if err := rhp.deviceMgr.ReconcileChildDevices(context.TODO(), parentDeviceID.Id); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000838 logger.Debugw("unable-to-reconcile-child-devices", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400839 return nil, err
khenaidooba6b6c42019-08-02 09:11:56 -0400840 }
khenaidoo442e7c72020-03-10 16:13:48 -0400841 return &empty.Empty{}, nil
khenaidooba6b6c42019-08-02 09:11:56 -0400842}
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700843
npujar1d86a522019-11-14 17:11:16 +0530844// DeviceReasonUpdate updates device reason
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700845func (rhp *AdapterRequestHandlerProxy) DeviceReasonUpdate(args []*ic.Argument) (*empty.Empty, error) {
846 if len(args) < 2 {
Girish Kumarf56a4682020-03-20 20:07:46 +0000847 logger.Warn("DeviceReasonUpdate: invalid-number-of-args", log.Fields{"args": args})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700848 err := errors.New("DeviceReasonUpdate: invalid-number-of-args")
849 return nil, err
850 }
npujar1d86a522019-11-14 17:11:16 +0530851 deviceID := &voltha.ID{}
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700852 reason := &ic.StrType{}
853 transactionID := &ic.StrType{}
854 for _, arg := range args {
855 switch arg.Key {
856 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530857 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000858 logger.Warnw("cannot-unmarshal-device-id", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700859 return nil, err
860 }
861 case "device_reason":
862 if err := ptypes.UnmarshalAny(arg.Value, reason); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000863 logger.Warnw("cannot-unmarshal-reason", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700864 return nil, err
865 }
866 case kafka.TransactionKey:
867 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000868 logger.Warnw("cannot-unmarshal-transaction-ID", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700869 return nil, err
870 }
871 }
872 }
Girish Kumarf56a4682020-03-20 20:07:46 +0000873 logger.Debugw("DeviceReasonUpdate", log.Fields{"deviceId": deviceID.Id, "reason": reason.Val,
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700874 "transactionID": transactionID.Val})
875
Kent Hagerman2b216042020-04-03 18:28:56 -0400876 if err := rhp.deviceMgr.UpdateDeviceReason(context.TODO(), deviceID.Id, reason.Val); err != nil {
Girish Kumarf56a4682020-03-20 20:07:46 +0000877 logger.Debugw("unable-to-update-device-reason", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400878 return nil, err
879
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700880 }
khenaidoo442e7c72020-03-10 16:13:48 -0400881 return &empty.Empty{}, nil
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700882}