blob: 7ce19704d79a8e3d2603f62e63174d49442eb230 [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 Hagerman2a07b862020-06-19 15:23:07 -040022
khenaidoob9203542018-09-17 22:56:37 -040023 "github.com/golang/protobuf/ptypes"
24 "github.com/golang/protobuf/ptypes/empty"
Kent Hagerman2f0d0552020-04-23 17:28:52 -040025 "github.com/opencord/voltha-go/rw_core/core/adapter"
26 "github.com/opencord/voltha-go/rw_core/core/device"
serkant.uluderya2ae470f2020-01-21 11:13:09 -080027 "github.com/opencord/voltha-lib-go/v3/pkg/kafka"
28 "github.com/opencord/voltha-lib-go/v3/pkg/log"
29 ic "github.com/opencord/voltha-protos/v3/go/inter_container"
30 "github.com/opencord/voltha-protos/v3/go/voltha"
khenaidoob9203542018-09-17 22:56:37 -040031)
32
npujar1d86a522019-11-14 17:11:16 +053033// AdapterRequestHandlerProxy represent adapter request handler proxy attributes
khenaidoob9203542018-09-17 22:56:37 -040034type AdapterRequestHandlerProxy struct {
Kent Hagerman2f0d0552020-04-23 17:28:52 -040035 deviceMgr *device.Manager
36 adapterMgr *adapter.Manager
khenaidoob9203542018-09-17 22:56:37 -040037}
38
npujar1d86a522019-11-14 17:11:16 +053039// NewAdapterRequestHandlerProxy assigns values for adapter request handler proxy attributes and returns the new instance
Kent Hagerman2f0d0552020-04-23 17:28:52 -040040func NewAdapterRequestHandlerProxy(dMgr *device.Manager, aMgr *adapter.Manager) *AdapterRequestHandlerProxy {
41 return &AdapterRequestHandlerProxy{
42 deviceMgr: dMgr,
43 adapterMgr: aMgr,
44 }
khenaidoob9203542018-09-17 22:56:37 -040045}
46
Rohan Agrawal31f21802020-06-12 05:38:46 +000047func (rhp *AdapterRequestHandlerProxy) Register(ctx context.Context, args []*ic.Argument) (*voltha.CoreInstance, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -050048 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +000049 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -040050 err := errors.New("invalid-number-of-args")
51 return nil, err
52 }
53 adapter := &voltha.Adapter{}
khenaidoo91ecfd62018-11-04 17:13:42 -050054 deviceTypes := &voltha.DeviceTypes{}
npujar1d86a522019-11-14 17:11:16 +053055 transactionID := &ic.StrType{}
khenaidoo91ecfd62018-11-04 17:13:42 -050056 for _, arg := range args {
57 switch arg.Key {
58 case "adapter":
59 if err := ptypes.UnmarshalAny(arg.Value, adapter); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +000060 logger.Warnw(ctx, "cannot-unmarshal-adapter", log.Fields{"error": err})
khenaidoo91ecfd62018-11-04 17:13:42 -050061 return nil, err
62 }
63 case "deviceTypes":
64 if err := ptypes.UnmarshalAny(arg.Value, deviceTypes); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +000065 logger.Warnw(ctx, "cannot-unmarshal-device-types", log.Fields{"error": err})
khenaidoo91ecfd62018-11-04 17:13:42 -050066 return nil, err
67 }
khenaidoo297cd252019-02-07 22:10:23 -050068 case kafka.TransactionKey:
npujar1d86a522019-11-14 17:11:16 +053069 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +000070 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -050071 return nil, err
72 }
khenaidoo91ecfd62018-11-04 17:13:42 -050073 }
khenaidoob9203542018-09-17 22:56:37 -040074 }
Rohan Agrawal31f21802020-06-12 05:38:46 +000075 logger.Debugw(ctx, "Register", log.Fields{"adapter": *adapter, "device-types": deviceTypes, "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -050076
Rohan Agrawal31f21802020-06-12 05:38:46 +000077 return rhp.adapterMgr.RegisterAdapter(ctx, adapter, deviceTypes)
khenaidoob9203542018-09-17 22:56:37 -040078}
79
npujar1d86a522019-11-14 17:11:16 +053080// GetDevice returns device info
Rohan Agrawal31f21802020-06-12 05:38:46 +000081func (rhp *AdapterRequestHandlerProxy) GetDevice(ctx context.Context, args []*ic.Argument) (*voltha.Device, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -050082 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +000083 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -040084 err := errors.New("invalid-number-of-args")
85 return nil, err
86 }
khenaidoo297cd252019-02-07 22:10:23 -050087
khenaidoob9203542018-09-17 22:56:37 -040088 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -050089 transactionID := &ic.StrType{}
90 for _, arg := range args {
91 switch arg.Key {
92 case "device_id":
93 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +000094 logger.Warnw(ctx, "cannot-unmarshal-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -050095 return nil, err
96 }
97 case kafka.TransactionKey:
98 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +000099 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500100 return nil, err
101 }
102 }
khenaidoob9203542018-09-17 22:56:37 -0400103 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000104 logger.Debugw(ctx, "getDevice", log.Fields{"device-id": pID.Id, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500105
khenaidoob9203542018-09-17 22:56:37 -0400106 // Get the device via the device manager
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000107 device, err := rhp.deviceMgr.GetDevice(log.WithSpanFromContext(context.TODO(), ctx), pID)
npujar1d86a522019-11-14 17:11:16 +0530108 if err != nil {
divyadesaicb8b59d2020-08-18 09:55:47 +0000109 logger.Debugw(ctx, "get-device-failed", log.Fields{"device-id": pID.Id, "error": err})
khenaidoob9203542018-09-17 22:56:37 -0400110 }
khenaidoo442e7c72020-03-10 16:13:48 -0400111 return device, err
khenaidoob9203542018-09-17 22:56:37 -0400112}
113
npujar1d86a522019-11-14 17:11:16 +0530114// DeviceUpdate updates device using adapter data
Rohan Agrawal31f21802020-06-12 05:38:46 +0000115func (rhp *AdapterRequestHandlerProxy) DeviceUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500116 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000117 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400118 err := errors.New("invalid-number-of-args")
119 return nil, err
120 }
khenaidoo297cd252019-02-07 22:10:23 -0500121
khenaidoob9203542018-09-17 22:56:37 -0400122 device := &voltha.Device{}
khenaidoo297cd252019-02-07 22:10:23 -0500123 transactionID := &ic.StrType{}
124 for _, arg := range args {
125 switch arg.Key {
126 case "device":
127 if err := ptypes.UnmarshalAny(arg.Value, device); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000128 logger.Warnw(ctx, "cannot-unmarshal-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500129 return nil, err
130 }
131 case kafka.TransactionKey:
132 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000133 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500134 return nil, err
135 }
136 }
khenaidoob9203542018-09-17 22:56:37 -0400137 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000138 logger.Debugw(ctx, "DeviceUpdate", log.Fields{"device-id": device.Id, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500139
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000140 if err := rhp.deviceMgr.UpdateDeviceUsingAdapterData(log.WithSpanFromContext(context.TODO(), ctx), device); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000141 logger.Debugw(ctx, "unable-to-update-device-using-adapter-data", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400142 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400143 }
khenaidoo442e7c72020-03-10 16:13:48 -0400144 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400145}
146
npujar1d86a522019-11-14 17:11:16 +0530147// GetChildDevice returns details of child device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000148func (rhp *AdapterRequestHandlerProxy) GetChildDevice(ctx context.Context, args []*ic.Argument) (*voltha.Device, error) {
Matt Jeanneret4e241952019-02-28 11:16:04 -0500149 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000150 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400151 err := errors.New("invalid-number-of-args")
152 return nil, err
153 }
khenaidoo297cd252019-02-07 22:10:23 -0500154
khenaidoo2c6f1672018-09-20 23:14:41 -0400155 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -0500156 transactionID := &ic.StrType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500157 serialNumber := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530158 onuID := &ic.IntType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500159 parentPortNo := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500160 for _, arg := range args {
161 switch arg.Key {
162 case "device_id":
163 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000164 logger.Warnw(ctx, "cannot-unmarshal-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500165 return nil, err
166 }
Matt Jeanneret4e241952019-02-28 11:16:04 -0500167 case "serial_number":
168 if err := ptypes.UnmarshalAny(arg.Value, serialNumber); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000169 logger.Warnw(ctx, "cannot-unmarshal-ID", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500170 return nil, err
171 }
172 case "onu_id":
npujar1d86a522019-11-14 17:11:16 +0530173 if err := ptypes.UnmarshalAny(arg.Value, onuID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000174 logger.Warnw(ctx, "cannot-unmarshal-ID", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500175 return nil, err
176 }
177 case "parent_port_no":
178 if err := ptypes.UnmarshalAny(arg.Value, parentPortNo); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000179 logger.Warnw(ctx, "cannot-unmarshal-ID", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500180 return nil, err
181 }
khenaidoo297cd252019-02-07 22:10:23 -0500182 case kafka.TransactionKey:
183 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000184 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500185 return nil, err
186 }
187 }
khenaidoob9203542018-09-17 22:56:37 -0400188 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000189 logger.Debugw(ctx, "GetChildDevice", log.Fields{"parent-device-id": pID.Id, "args": args, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500190
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000191 return rhp.deviceMgr.GetChildDevice(log.WithSpanFromContext(context.TODO(), ctx), pID.Id, serialNumber.Val, onuID.Val, parentPortNo.Val)
khenaidoob9203542018-09-17 22:56:37 -0400192}
193
npujar1d86a522019-11-14 17:11:16 +0530194// GetChildDeviceWithProxyAddress returns details of child device with proxy address
Rohan Agrawal31f21802020-06-12 05:38:46 +0000195func (rhp *AdapterRequestHandlerProxy) GetChildDeviceWithProxyAddress(ctx context.Context, args []*ic.Argument) (*voltha.Device, error) {
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500196 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000197 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500198 err := errors.New("invalid-number-of-args")
199 return nil, err
200 }
201
202 proxyAddress := &voltha.Device_ProxyAddress{}
203 transactionID := &ic.StrType{}
204 for _, arg := range args {
205 switch arg.Key {
206 case "proxy_address":
207 if err := ptypes.UnmarshalAny(arg.Value, proxyAddress); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000208 logger.Warnw(ctx, "cannot-unmarshal-proxy-address", log.Fields{"error": err})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500209 return nil, err
210 }
211 case kafka.TransactionKey:
212 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000213 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500214 return nil, err
215 }
216 }
217 }
Rohan Agrawal31f21802020-06-12 05:38:46 +0000218 logger.Debugw(ctx, "GetChildDeviceWithProxyAddress", log.Fields{"proxyAddress": proxyAddress, "transactionID": transactionID.Val})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500219
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000220 return rhp.deviceMgr.GetChildDeviceWithProxyAddress(log.WithSpanFromContext(context.TODO(), ctx), proxyAddress)
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500221}
222
npujar1d86a522019-11-14 17:11:16 +0530223// GetPorts returns the ports information of the device based on the port type.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000224func (rhp *AdapterRequestHandlerProxy) GetPorts(ctx context.Context, args []*ic.Argument) (*voltha.Ports, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500225 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000226 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400227 err := errors.New("invalid-number-of-args")
228 return nil, err
229 }
npujar1d86a522019-11-14 17:11:16 +0530230 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500231 pt := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500232 transactionID := &ic.StrType{}
khenaidoo92e62c52018-10-03 14:02:54 -0400233 for _, arg := range args {
234 switch arg.Key {
235 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530236 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000237 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400238 return nil, err
239 }
240 case "port_type":
241 if err := ptypes.UnmarshalAny(arg.Value, pt); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000242 logger.Warnw(ctx, "cannot-unmarshal-porttype", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400243 return nil, err
244 }
khenaidoo297cd252019-02-07 22:10:23 -0500245 case kafka.TransactionKey:
246 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000247 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500248 return nil, err
249 }
khenaidoo92e62c52018-10-03 14:02:54 -0400250 }
khenaidoob9203542018-09-17 22:56:37 -0400251 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000252 logger.Debugw(ctx, "GetPorts", log.Fields{"device-id": deviceID.Id, "portype": pt.Val, "transactionID": transactionID.Val})
khenaidoo442e7c72020-03-10 16:13:48 -0400253
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000254 return rhp.deviceMgr.GetPorts(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, voltha.Port_PortType(pt.Val))
khenaidoob9203542018-09-17 22:56:37 -0400255}
256
npujar1d86a522019-11-14 17:11:16 +0530257// GetChildDevices gets all the child device IDs from the device passed as parameter
Rohan Agrawal31f21802020-06-12 05:38:46 +0000258func (rhp *AdapterRequestHandlerProxy) GetChildDevices(ctx context.Context, args []*ic.Argument) (*voltha.Devices, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500259 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000260 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400261 err := errors.New("invalid-number-of-args")
262 return nil, err
263 }
khenaidoo297cd252019-02-07 22:10:23 -0500264
khenaidoo2c6f1672018-09-20 23:14:41 -0400265 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -0500266 transactionID := &ic.StrType{}
267 for _, arg := range args {
268 switch arg.Key {
269 case "device_id":
270 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000271 logger.Warnw(ctx, "cannot-unmarshal-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500272 return nil, err
273 }
274 case kafka.TransactionKey:
275 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000276 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500277 return nil, err
278 }
279 }
khenaidoob9203542018-09-17 22:56:37 -0400280 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000281 logger.Debugw(ctx, "GetChildDevices", log.Fields{"device-id": pID.Id, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500282
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000283 return rhp.deviceMgr.GetAllChildDevices(log.WithSpanFromContext(context.TODO(), ctx), pID.Id)
khenaidoob9203542018-09-17 22:56:37 -0400284}
285
khenaidoo442e7c72020-03-10 16:13:48 -0400286// ChildDeviceDetected is invoked when a child device is detected. The following parameters are expected:
Matt Jeanneret4e241952019-02-28 11:16:04 -0500287// {parent_device_id, parent_port_no, child_device_type, channel_id, vendor_id, serial_number)
Rohan Agrawal31f21802020-06-12 05:38:46 +0000288func (rhp *AdapterRequestHandlerProxy) ChildDeviceDetected(ctx context.Context, args []*ic.Argument) (*voltha.Device, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500289 if len(args) < 5 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000290 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400291 err := errors.New("invalid-number-of-args")
292 return nil, err
293 }
294
295 pID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500296 portNo := &ic.IntType{}
297 dt := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530298 chnlID := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500299 transactionID := &ic.StrType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500300 serialNumber := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530301 vendorID := &ic.StrType{}
302 onuID := &ic.IntType{}
khenaidoob9203542018-09-17 22:56:37 -0400303 for _, arg := range args {
304 switch arg.Key {
305 case "parent_device_id":
306 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000307 logger.Warnw(ctx, "cannot-unmarshal-parent-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400308 return nil, err
309 }
310 case "parent_port_no":
311 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000312 logger.Warnw(ctx, "cannot-unmarshal-parent-port", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400313 return nil, err
314 }
315 case "child_device_type":
316 if err := ptypes.UnmarshalAny(arg.Value, dt); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000317 logger.Warnw(ctx, "cannot-unmarshal-child-device-type", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400318 return nil, err
319 }
320 case "channel_id":
npujar1d86a522019-11-14 17:11:16 +0530321 if err := ptypes.UnmarshalAny(arg.Value, chnlID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000322 logger.Warnw(ctx, "cannot-unmarshal-channel-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400323 return nil, err
324 }
Matt Jeanneret4e241952019-02-28 11:16:04 -0500325 case "vendor_id":
npujar1d86a522019-11-14 17:11:16 +0530326 if err := ptypes.UnmarshalAny(arg.Value, vendorID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000327 logger.Warnw(ctx, "cannot-unmarshal-vendor-id", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500328 return nil, err
329 }
330 case "serial_number":
331 if err := ptypes.UnmarshalAny(arg.Value, serialNumber); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000332 logger.Warnw(ctx, "cannot-unmarshal-serial-number", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500333 return nil, err
334 }
335 case "onu_id":
npujar1d86a522019-11-14 17:11:16 +0530336 if err := ptypes.UnmarshalAny(arg.Value, onuID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000337 logger.Warnw(ctx, "cannot-unmarshal-onu-id", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500338 return nil, err
339 }
khenaidoo297cd252019-02-07 22:10:23 -0500340 case kafka.TransactionKey:
341 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000342 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500343 return nil, err
344 }
khenaidoob9203542018-09-17 22:56:37 -0400345 }
346 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000347 logger.Debugw(ctx, "ChildDeviceDetected", log.Fields{"parent-device-id": pID.Id, "parentPortNo": portNo.Val,
npujar1d86a522019-11-14 17:11:16 +0530348 "deviceType": dt.Val, "channelID": chnlID.Val, "serialNumber": serialNumber.Val,
349 "vendorID": vendorID.Val, "onuID": onuID.Val, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500350
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000351 device, err := rhp.deviceMgr.ChildDeviceDetected(log.WithSpanFromContext(context.TODO(), ctx), pID.Id, portNo.Val, dt.Val, chnlID.Val, vendorID.Val, serialNumber.Val, onuID.Val)
Mahir Gunyel6deaa242019-06-27 04:53:33 -0700352 if err != nil {
divyadesaicb8b59d2020-08-18 09:55:47 +0000353 logger.Debugw(ctx, "child-detection-failed", log.Fields{"parent-device-id": pID.Id, "onuID": onuID.Val, "error": err})
khenaidoo59ef7be2019-06-21 12:40:28 -0400354 }
khenaidoo442e7c72020-03-10 16:13:48 -0400355 return device, err
khenaidoob9203542018-09-17 22:56:37 -0400356}
357
npujar1d86a522019-11-14 17:11:16 +0530358// DeviceStateUpdate updates device status
Rohan Agrawal31f21802020-06-12 05:38:46 +0000359func (rhp *AdapterRequestHandlerProxy) DeviceStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500360 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000361 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400362 err := errors.New("invalid-number-of-args")
363 return nil, err
364 }
npujar1d86a522019-11-14 17:11:16 +0530365 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500366 operStatus := &ic.IntType{}
367 connStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500368 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400369 for _, arg := range args {
370 switch arg.Key {
371 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530372 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000373 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400374 return nil, err
375 }
376 case "oper_status":
377 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000378 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400379 return nil, err
380 }
khenaidoob9203542018-09-17 22:56:37 -0400381 case "connect_status":
382 if err := ptypes.UnmarshalAny(arg.Value, connStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000383 logger.Warnw(ctx, "cannot-unmarshal-connStatus", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400384 return nil, err
385 }
khenaidoo297cd252019-02-07 22:10:23 -0500386 case kafka.TransactionKey:
387 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000388 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500389 return nil, err
390 }
khenaidoob9203542018-09-17 22:56:37 -0400391 }
392 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000393 logger.Debugw(ctx, "DeviceStateUpdate", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus,
khenaidoo297cd252019-02-07 22:10:23 -0500394 "conn-status": connStatus, "transactionID": transactionID.Val})
395
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000396 if err := rhp.deviceMgr.UpdateDeviceStatus(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, voltha.OperStatus_Types(operStatus.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400397 voltha.ConnectStatus_Types(connStatus.Val)); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000398 logger.Debugw(ctx, "unable-to-update-device-status", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400399 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400400 }
khenaidoo442e7c72020-03-10 16:13:48 -0400401 return &empty.Empty{}, nil
khenaidoo92e62c52018-10-03 14:02:54 -0400402}
403
npujar1d86a522019-11-14 17:11:16 +0530404// ChildrenStateUpdate updates child device status
Rohan Agrawal31f21802020-06-12 05:38:46 +0000405func (rhp *AdapterRequestHandlerProxy) ChildrenStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500406 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000407 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo4d4802d2018-10-04 21:59:49 -0400408 err := errors.New("invalid-number-of-args")
409 return nil, err
410 }
npujar1d86a522019-11-14 17:11:16 +0530411 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500412 operStatus := &ic.IntType{}
413 connStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500414 transactionID := &ic.StrType{}
khenaidoo4d4802d2018-10-04 21:59:49 -0400415 for _, arg := range args {
416 switch arg.Key {
417 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530418 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000419 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400420 return nil, err
421 }
422 case "oper_status":
423 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000424 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400425 return nil, err
426 }
427 case "connect_status":
428 if err := ptypes.UnmarshalAny(arg.Value, connStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000429 logger.Warnw(ctx, "cannot-unmarshal-connStatus", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400430 return nil, err
431 }
khenaidoo297cd252019-02-07 22:10:23 -0500432 case kafka.TransactionKey:
433 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000434 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500435 return nil, err
436 }
khenaidoo4d4802d2018-10-04 21:59:49 -0400437 }
438 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000439 logger.Debugw(ctx, "ChildrenStateUpdate", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus,
khenaidoo297cd252019-02-07 22:10:23 -0500440 "conn-status": connStatus, "transactionID": transactionID.Val})
441
khenaidoo4d4802d2018-10-04 21:59:49 -0400442 // When the enum is not set (i.e. -1), Go still convert to the Enum type with the value being -1
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000443 if err := rhp.deviceMgr.UpdateChildrenStatus(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, voltha.OperStatus_Types(operStatus.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400444 voltha.ConnectStatus_Types(connStatus.Val)); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000445 logger.Debugw(ctx, "unable-to-update-children-status", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400446 return nil, err
447 }
448 return &empty.Empty{}, nil
khenaidoo4d4802d2018-10-04 21:59:49 -0400449}
450
npujar1d86a522019-11-14 17:11:16 +0530451// PortsStateUpdate updates the ports state related to the device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000452func (rhp *AdapterRequestHandlerProxy) PortsStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo3ab34882019-05-02 21:33:30 -0400453 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000454 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo3ab34882019-05-02 21:33:30 -0400455 err := errors.New("invalid-number-of-args")
456 return nil, err
457 }
npujar1d86a522019-11-14 17:11:16 +0530458 deviceID := &voltha.ID{}
Kent Hagerman2a07b862020-06-19 15:23:07 -0400459 portTypeFilter := &ic.IntType{}
khenaidoo3ab34882019-05-02 21:33:30 -0400460 operStatus := &ic.IntType{}
461 transactionID := &ic.StrType{}
462 for _, arg := range args {
463 switch arg.Key {
464 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530465 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000466 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400467 return nil, err
468 }
Kent Hagerman2a07b862020-06-19 15:23:07 -0400469 case "port_type_filter":
470 if err := ptypes.UnmarshalAny(arg.Value, portTypeFilter); err != nil {
471 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
472 return nil, err
473 }
khenaidoo3ab34882019-05-02 21:33:30 -0400474 case "oper_status":
475 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000476 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400477 return nil, err
478 }
479 case kafka.TransactionKey:
480 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000481 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400482 return nil, err
483 }
484 }
485 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000486 logger.Debugw(ctx, "PortsStateUpdate", log.Fields{"device-id": deviceID.Id, "operStatus": operStatus, "transactionID": transactionID.Val})
khenaidoo3ab34882019-05-02 21:33:30 -0400487
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000488 if err := rhp.deviceMgr.UpdatePortsState(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, uint32(portTypeFilter.Val), voltha.OperStatus_Types(operStatus.Val)); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000489 logger.Debugw(ctx, "unable-to-update-ports-state", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400490 return nil, err
khenaidoo3ab34882019-05-02 21:33:30 -0400491 }
khenaidoo442e7c72020-03-10 16:13:48 -0400492 return &empty.Empty{}, nil
khenaidoo3ab34882019-05-02 21:33:30 -0400493}
494
npujar1d86a522019-11-14 17:11:16 +0530495// PortStateUpdate updates the port state of the device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000496func (rhp *AdapterRequestHandlerProxy) PortStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500497 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000498 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo92e62c52018-10-03 14:02:54 -0400499 err := errors.New("invalid-number-of-args")
500 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400501 }
npujar1d86a522019-11-14 17:11:16 +0530502 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500503 portType := &ic.IntType{}
504 portNo := &ic.IntType{}
505 operStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500506 transactionID := &ic.StrType{}
khenaidoo92e62c52018-10-03 14:02:54 -0400507 for _, arg := range args {
508 switch arg.Key {
509 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530510 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000511 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400512 return nil, err
513 }
514 case "oper_status":
515 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000516 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400517 return nil, err
518 }
519 case "port_type":
520 if err := ptypes.UnmarshalAny(arg.Value, portType); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000521 logger.Warnw(ctx, "cannot-unmarshal-porttype", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400522 return nil, err
523 }
524 case "port_no":
525 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000526 logger.Warnw(ctx, "cannot-unmarshal-portno", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400527 return nil, err
528 }
khenaidoo297cd252019-02-07 22:10:23 -0500529 case kafka.TransactionKey:
530 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000531 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500532 return nil, err
533 }
khenaidoo92e62c52018-10-03 14:02:54 -0400534 }
535 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000536 logger.Debugw(ctx, "PortStateUpdate", log.Fields{"device-id": deviceID.Id, "operStatus": operStatus,
khenaidoo297cd252019-02-07 22:10:23 -0500537 "portType": portType, "portNo": portNo, "transactionID": transactionID.Val})
538
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000539 if err := rhp.deviceMgr.UpdatePortState(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, voltha.Port_PortType(portType.Val), uint32(portNo.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400540 voltha.OperStatus_Types(operStatus.Val)); err != nil {
541 // If the error doesn't change behavior and is essentially ignored, it is not an error, it is a
542 // warning.
543 // TODO: VOL-2707
Rohan Agrawal31f21802020-06-12 05:38:46 +0000544 logger.Debugw(ctx, "unable-to-update-port-state", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400545 return nil, err
khenaidoo92e62c52018-10-03 14:02:54 -0400546 }
khenaidoo442e7c72020-03-10 16:13:48 -0400547 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400548}
549
npujar1d86a522019-11-14 17:11:16 +0530550// DeleteAllPorts deletes all ports of device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000551func (rhp *AdapterRequestHandlerProxy) DeleteAllPorts(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo0a822f92019-05-08 15:15:57 -0400552 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000553 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400554 err := errors.New("invalid-number-of-args")
555 return nil, err
556 }
npujar1d86a522019-11-14 17:11:16 +0530557 deviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400558 transactionID := &ic.StrType{}
559 for _, arg := range args {
560 switch arg.Key {
561 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530562 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000563 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400564 return nil, err
565 }
566 case kafka.TransactionKey:
567 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000568 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400569 return nil, err
570 }
571 }
572 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000573 logger.Debugw(ctx, "DeleteAllPorts", log.Fields{"device-id": deviceID.Id, "transactionID": transactionID.Val})
khenaidoo0a822f92019-05-08 15:15:57 -0400574
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000575 if err := rhp.deviceMgr.DeleteAllPorts(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000576 logger.Debugw(ctx, "unable-to-delete-ports", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400577 return nil, err
khenaidoo0a822f92019-05-08 15:15:57 -0400578 }
khenaidoo442e7c72020-03-10 16:13:48 -0400579 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400580}
581
Kent Hagerman2a07b862020-06-19 15:23:07 -0400582// GetDevicePort returns a single port
583func (rhp *AdapterRequestHandlerProxy) GetDevicePort(ctx context.Context, args []*ic.Argument) (*voltha.Port, error) {
584 if len(args) < 3 {
585 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
586 err := errors.New("invalid-number-of-args")
587 return nil, err
588 }
589 deviceID := &voltha.ID{}
590 portNo := &ic.IntType{}
591 transactionID := &ic.StrType{}
592 for _, arg := range args {
593 switch arg.Key {
594 case "device_id":
595 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
596 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
597 return nil, err
598 }
599 case "port_no":
600 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
601 logger.Warnw(ctx, "cannot-unmarshal-port-no", log.Fields{"error": err})
602 return nil, err
603 }
604 case kafka.TransactionKey:
605 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
606 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
607 return nil, err
608 }
609 }
610 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000611 logger.Debugw(ctx, "GetDevicePort", log.Fields{"device-id": deviceID.Id, "portNo": portNo.Val, "transactionID": transactionID.Val})
Kent Hagerman2a07b862020-06-19 15:23:07 -0400612
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000613 return rhp.deviceMgr.GetDevicePort(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, uint32(portNo.Val))
Kent Hagerman2a07b862020-06-19 15:23:07 -0400614}
615
616// ListDevicePorts returns all ports belonging to the device
617func (rhp *AdapterRequestHandlerProxy) ListDevicePorts(ctx context.Context, args []*ic.Argument) (*voltha.Ports, error) {
618 if len(args) < 2 {
619 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
620 err := errors.New("invalid-number-of-args")
621 return nil, err
622 }
623 deviceID := &voltha.ID{}
624 transactionID := &ic.StrType{}
625 for _, arg := range args {
626 switch arg.Key {
627 case "device_id":
628 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
629 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
630 return nil, err
631 }
632 case kafka.TransactionKey:
633 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
634 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
635 return nil, err
636 }
637 }
638 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000639 logger.Debugw(ctx, "ListDevicePorts", log.Fields{"device-id": deviceID.Id, "transactionID": transactionID.Val})
Kent Hagerman2a07b862020-06-19 15:23:07 -0400640
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000641 return rhp.deviceMgr.ListDevicePorts(log.WithSpanFromContext(context.TODO(), ctx), deviceID)
Kent Hagerman2a07b862020-06-19 15:23:07 -0400642}
643
npujar1d86a522019-11-14 17:11:16 +0530644// ChildDevicesLost indicates that a parent device is in a state (Disabled) where it cannot manage the child devices.
645// This will trigger the Core to disable all the child devices.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000646func (rhp *AdapterRequestHandlerProxy) ChildDevicesLost(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo0a822f92019-05-08 15:15:57 -0400647 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000648 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400649 err := errors.New("invalid-number-of-args")
650 return nil, err
651 }
npujar1d86a522019-11-14 17:11:16 +0530652 parentDeviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400653 transactionID := &ic.StrType{}
654 for _, arg := range args {
655 switch arg.Key {
656 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530657 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000658 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400659 return nil, err
660 }
661 case kafka.TransactionKey:
662 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000663 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400664 return nil, err
665 }
666 }
667 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000668 logger.Debugw(ctx, "ChildDevicesLost", log.Fields{"device-id": parentDeviceID.Id, "transactionID": transactionID.Val})
khenaidoo0a822f92019-05-08 15:15:57 -0400669
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000670 if err := rhp.deviceMgr.ChildDevicesLost(log.WithSpanFromContext(context.TODO(), ctx), parentDeviceID.Id); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000671 logger.Debugw(ctx, "unable-to-disable-child-devices", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400672 return nil, err
khenaidoo0a822f92019-05-08 15:15:57 -0400673 }
khenaidoo442e7c72020-03-10 16:13:48 -0400674 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400675}
676
npujar1d86a522019-11-14 17:11:16 +0530677// ChildDevicesDetected invoked by an adapter when child devices are found, typically after after a disable/enable sequence.
678// This will trigger the Core to Enable all the child devices of that parent.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000679func (rhp *AdapterRequestHandlerProxy) ChildDevicesDetected(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo0a822f92019-05-08 15:15:57 -0400680 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000681 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400682 err := errors.New("invalid-number-of-args")
683 return nil, err
684 }
npujar1d86a522019-11-14 17:11:16 +0530685 parentDeviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400686 transactionID := &ic.StrType{}
687 for _, arg := range args {
688 switch arg.Key {
689 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530690 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000691 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400692 return nil, err
693 }
694 case kafka.TransactionKey:
695 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000696 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400697 return nil, err
698 }
699 }
700 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000701 logger.Debugw(ctx, "ChildDevicesDetected", log.Fields{"parent-device-id": parentDeviceID.Id, "transactionID": transactionID.Val})
khenaidoo0a822f92019-05-08 15:15:57 -0400702
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000703 if err := rhp.deviceMgr.ChildDevicesDetected(log.WithSpanFromContext(context.TODO(), ctx), parentDeviceID.Id); err != nil {
divyadesaicb8b59d2020-08-18 09:55:47 +0000704 logger.Debugw(ctx, "child-devices-detection-failed", log.Fields{"parent-device-id": parentDeviceID.Id, "error": err})
khenaidoo59ef7be2019-06-21 12:40:28 -0400705 return nil, err
706 }
khenaidoo442e7c72020-03-10 16:13:48 -0400707 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400708}
709
npujar1d86a522019-11-14 17:11:16 +0530710// PortCreated adds port to device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000711func (rhp *AdapterRequestHandlerProxy) PortCreated(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500712 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000713 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400714 err := errors.New("invalid-number-of-args")
715 return nil, err
716 }
npujar1d86a522019-11-14 17:11:16 +0530717 deviceID := &voltha.ID{}
khenaidoob9203542018-09-17 22:56:37 -0400718 port := &voltha.Port{}
khenaidoo297cd252019-02-07 22:10:23 -0500719 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400720 for _, arg := range args {
721 switch arg.Key {
722 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530723 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000724 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400725 return nil, err
726 }
727 case "port":
728 if err := ptypes.UnmarshalAny(arg.Value, port); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000729 logger.Warnw(ctx, "cannot-unmarshal-port", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400730 return nil, err
731 }
khenaidoo297cd252019-02-07 22:10:23 -0500732 case kafka.TransactionKey:
733 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000734 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500735 return nil, err
736 }
khenaidoob9203542018-09-17 22:56:37 -0400737 }
738 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000739 logger.Debugw(ctx, "PortCreated", log.Fields{"device-id": deviceID.Id, "port": port, "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500740
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000741 if err := rhp.deviceMgr.AddPort(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, port); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000742 logger.Debugw(ctx, "unable-to-add-port", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400743 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400744 }
khenaidoo442e7c72020-03-10 16:13:48 -0400745 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400746}
747
npujar1d86a522019-11-14 17:11:16 +0530748// DevicePMConfigUpdate initializes the pm configs as defined by the adapter.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000749func (rhp *AdapterRequestHandlerProxy) DevicePMConfigUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoob3127472019-07-24 21:04:55 -0400750 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000751 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400752 err := errors.New("invalid-number-of-args")
753 return nil, err
754 }
755 pmConfigs := &voltha.PmConfigs{}
khenaidoo297cd252019-02-07 22:10:23 -0500756 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400757 for _, arg := range args {
758 switch arg.Key {
759 case "device_pm_config":
760 if err := ptypes.UnmarshalAny(arg.Value, pmConfigs); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000761 logger.Warnw(ctx, "cannot-unmarshal-pm-config", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400762 return nil, err
763 }
khenaidoo297cd252019-02-07 22:10:23 -0500764 case kafka.TransactionKey:
765 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000766 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500767 return nil, err
768 }
khenaidoob9203542018-09-17 22:56:37 -0400769 }
770 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000771 logger.Debugw(ctx, "DevicePMConfigUpdate", log.Fields{"device-id": pmConfigs.Id, "configs": pmConfigs,
khenaidoob3127472019-07-24 21:04:55 -0400772 "transactionID": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500773
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000774 if err := rhp.deviceMgr.InitPmConfigs(log.WithSpanFromContext(context.TODO(), ctx), pmConfigs.Id, pmConfigs); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000775 logger.Debugw(ctx, "unable-to-initialize-pm-configs", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400776 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400777 }
khenaidoo442e7c72020-03-10 16:13:48 -0400778 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400779}
khenaidoofdbad6e2018-11-06 22:26:38 -0500780
npujar1d86a522019-11-14 17:11:16 +0530781// PacketIn sends the incoming packet of device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000782func (rhp *AdapterRequestHandlerProxy) PacketIn(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500783 if len(args) < 4 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000784 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoofdbad6e2018-11-06 22:26:38 -0500785 err := errors.New("invalid-number-of-args")
786 return nil, err
787 }
npujar1d86a522019-11-14 17:11:16 +0530788 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500789 portNo := &ic.IntType{}
790 packet := &ic.Packet{}
khenaidoo297cd252019-02-07 22:10:23 -0500791 transactionID := &ic.StrType{}
khenaidoofdbad6e2018-11-06 22:26:38 -0500792 for _, arg := range args {
793 switch arg.Key {
794 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530795 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000796 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500797 return nil, err
798 }
799 case "port":
800 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000801 logger.Warnw(ctx, "cannot-unmarshal-port-no", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500802 return nil, err
803 }
804 case "packet":
805 if err := ptypes.UnmarshalAny(arg.Value, packet); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000806 logger.Warnw(ctx, "cannot-unmarshal-packet", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500807 return nil, err
808 }
khenaidoo297cd252019-02-07 22:10:23 -0500809 case kafka.TransactionKey:
810 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000811 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500812 return nil, err
813 }
khenaidoofdbad6e2018-11-06 22:26:38 -0500814 }
815 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000816 logger.Debugw(ctx, "PacketIn", log.Fields{"device-id": deviceID.Id, "port": portNo.Val, "packet": packet,
khenaidoo297cd252019-02-07 22:10:23 -0500817 "transactionID": transactionID.Val})
818
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000819 if err := rhp.deviceMgr.PacketIn(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, uint32(portNo.Val), transactionID.Val, packet.Payload); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000820 logger.Debugw(ctx, "unable-to-receive-packet-from-adapter", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400821 return nil, err
822
823 }
824 return &empty.Empty{}, nil
khenaidoofdbad6e2018-11-06 22:26:38 -0500825}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500826
npujar1d86a522019-11-14 17:11:16 +0530827// UpdateImageDownload updates image download
Rohan Agrawal31f21802020-06-12 05:38:46 +0000828func (rhp *AdapterRequestHandlerProxy) UpdateImageDownload(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoof5a5bfa2019-01-23 22:20:29 -0500829 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000830 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500831 err := errors.New("invalid-number-of-args")
832 return nil, err
833 }
npujar1d86a522019-11-14 17:11:16 +0530834 deviceID := &voltha.ID{}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500835 img := &voltha.ImageDownload{}
khenaidoo297cd252019-02-07 22:10:23 -0500836 transactionID := &ic.StrType{}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500837 for _, arg := range args {
838 switch arg.Key {
839 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530840 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000841 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500842 return nil, err
843 }
844 case "image_download":
845 if err := ptypes.UnmarshalAny(arg.Value, img); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000846 logger.Warnw(ctx, "cannot-unmarshal-imgaeDownload", log.Fields{"error": err})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500847 return nil, err
848 }
khenaidoo297cd252019-02-07 22:10:23 -0500849 case kafka.TransactionKey:
850 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000851 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500852 return nil, err
853 }
khenaidoof5a5bfa2019-01-23 22:20:29 -0500854 }
855 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000856 logger.Debugw(ctx, "UpdateImageDownload", log.Fields{"device-id": deviceID.Id, "image-download": img,
khenaidoo297cd252019-02-07 22:10:23 -0500857 "transactionID": transactionID.Val})
858
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000859 if err := rhp.deviceMgr.UpdateImageDownload(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, img); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000860 logger.Debugw(ctx, "unable-to-update-image-download", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400861 return nil, err
khenaidoof5a5bfa2019-01-23 22:20:29 -0500862 }
khenaidoo442e7c72020-03-10 16:13:48 -0400863 return &empty.Empty{}, nil
khenaidoof5a5bfa2019-01-23 22:20:29 -0500864}
khenaidooba6b6c42019-08-02 09:11:56 -0400865
npujar1d86a522019-11-14 17:11:16 +0530866// ReconcileChildDevices reconciles child devices
Rohan Agrawal31f21802020-06-12 05:38:46 +0000867func (rhp *AdapterRequestHandlerProxy) ReconcileChildDevices(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidooba6b6c42019-08-02 09:11:56 -0400868 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000869 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidooba6b6c42019-08-02 09:11:56 -0400870 err := errors.New("invalid-number-of-args")
871 return nil, err
872 }
npujar1d86a522019-11-14 17:11:16 +0530873 parentDeviceID := &voltha.ID{}
khenaidooba6b6c42019-08-02 09:11:56 -0400874 transactionID := &ic.StrType{}
875 for _, arg := range args {
876 switch arg.Key {
877 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530878 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000879 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidooba6b6c42019-08-02 09:11:56 -0400880 return nil, err
881 }
882 case kafka.TransactionKey:
883 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000884 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
khenaidooba6b6c42019-08-02 09:11:56 -0400885 return nil, err
886 }
887 }
888 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000889 logger.Debugw(ctx, "ReconcileChildDevices", log.Fields{"parent-device-id": parentDeviceID.Id, "transactionID": transactionID.Val})
khenaidooba6b6c42019-08-02 09:11:56 -0400890
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000891 if err := rhp.deviceMgr.ReconcileChildDevices(log.WithSpanFromContext(context.TODO(), ctx), parentDeviceID.Id); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000892 logger.Debugw(ctx, "unable-to-reconcile-child-devices", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400893 return nil, err
khenaidooba6b6c42019-08-02 09:11:56 -0400894 }
khenaidoo442e7c72020-03-10 16:13:48 -0400895 return &empty.Empty{}, nil
khenaidooba6b6c42019-08-02 09:11:56 -0400896}
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700897
npujar1d86a522019-11-14 17:11:16 +0530898// DeviceReasonUpdate updates device reason
Rohan Agrawal31f21802020-06-12 05:38:46 +0000899func (rhp *AdapterRequestHandlerProxy) DeviceReasonUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700900 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000901 logger.Warn(ctx, "DeviceReasonUpdate: invalid-number-of-args", log.Fields{"args": args})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700902 err := errors.New("DeviceReasonUpdate: invalid-number-of-args")
903 return nil, err
904 }
npujar1d86a522019-11-14 17:11:16 +0530905 deviceID := &voltha.ID{}
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700906 reason := &ic.StrType{}
907 transactionID := &ic.StrType{}
908 for _, arg := range args {
909 switch arg.Key {
910 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530911 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000912 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700913 return nil, err
914 }
915 case "device_reason":
916 if err := ptypes.UnmarshalAny(arg.Value, reason); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000917 logger.Warnw(ctx, "cannot-unmarshal-reason", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700918 return nil, err
919 }
920 case kafka.TransactionKey:
921 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000922 logger.Warnw(ctx, "cannot-unmarshal-transaction-ID", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700923 return nil, err
924 }
925 }
926 }
divyadesaicb8b59d2020-08-18 09:55:47 +0000927 logger.Debugw(ctx, "DeviceReasonUpdate", log.Fields{"device-id": deviceID.Id, "reason": reason.Val,
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700928 "transactionID": transactionID.Val})
929
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000930 if err := rhp.deviceMgr.UpdateDeviceReason(log.WithSpanFromContext(context.TODO(), ctx), deviceID.Id, reason.Val); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000931 logger.Debugw(ctx, "unable-to-update-device-reason", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400932 return nil, err
933
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700934 }
khenaidoo442e7c72020-03-10 16:13:48 -0400935 return &empty.Empty{}, nil
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700936}