blob: 890ac8bfb12360da5009a463e9a3e43704f213e2 [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"
22 "github.com/golang/protobuf/ptypes"
23 "github.com/golang/protobuf/ptypes/empty"
Kent Hagerman2f0d0552020-04-23 17:28:52 -040024 "github.com/opencord/voltha-go/rw_core/core/adapter"
25 "github.com/opencord/voltha-go/rw_core/core/device"
Himani Chawlab4c25912020-11-12 17:16:38 +053026 "github.com/opencord/voltha-go/rw_core/utils"
yasin sapli5458a1c2021-06-14 22:24:38 +000027 "github.com/opencord/voltha-lib-go/v5/pkg/kafka"
28 "github.com/opencord/voltha-lib-go/v5/pkg/log"
Maninderdfadc982020-10-28 14:04:33 +053029 ic "github.com/opencord/voltha-protos/v4/go/inter_container"
30 "github.com/opencord/voltha-protos/v4/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 {
Himani Chawlab4c25912020-11-12 17:16:38 +053070 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 }
Himani Chawlab4c25912020-11-12 17:16:38 +053075 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +053094 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +053099 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 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530104 logger.Debugw(ctx, "get-device", log.Fields{"device-id": pID.Id, "transaction-id": 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530128 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530133 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 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530138 logger.Debugw(ctx, "device-update", log.Fields{"device-id": device.Id, "transaction-id": transactionID.Val})
139 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DeviceUpdate")
140 if err := rhp.deviceMgr.UpdateDeviceUsingAdapterData(rpcCtx, 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530164 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530169 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530174 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530179 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530184 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 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530189 logger.Debugw(ctx, "get-child-device", log.Fields{"parent-device-id": pID.Id, "args": args, "transaction-id": transactionID.Val})
190 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetChildDevice")
191 return rhp.deviceMgr.GetChildDevice(rpcCtx, 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530213 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 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530218 logger.Debugw(ctx, "get-child-device-with-proxy-address", log.Fields{"proxy-address": proxyAddress, "transaction-id": transactionID.Val})
219 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetChildDeviceWithProxyAddress")
220 return rhp.deviceMgr.GetChildDeviceWithProxyAddress(rpcCtx, 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 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530247 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 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530252 logger.Debugw(ctx, "get-ports", log.Fields{"device-id": deviceID.Id, "port-type": pt.Val, "transaction-id": transactionID.Val})
khenaidoo442e7c72020-03-10 16:13:48 -0400253
Himani Chawlab4c25912020-11-12 17:16:38 +0530254 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetPorts")
255 return rhp.deviceMgr.GetPorts(rpcCtx, deviceID.Id, voltha.Port_PortType(pt.Val))
khenaidoob9203542018-09-17 22:56:37 -0400256}
257
npujar1d86a522019-11-14 17:11:16 +0530258// GetChildDevices gets all the child device IDs from the device passed as parameter
Rohan Agrawal31f21802020-06-12 05:38:46 +0000259func (rhp *AdapterRequestHandlerProxy) GetChildDevices(ctx context.Context, args []*ic.Argument) (*voltha.Devices, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500260 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000261 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400262 err := errors.New("invalid-number-of-args")
263 return nil, err
264 }
khenaidoo297cd252019-02-07 22:10:23 -0500265
khenaidoo2c6f1672018-09-20 23:14:41 -0400266 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -0500267 transactionID := &ic.StrType{}
268 for _, arg := range args {
269 switch arg.Key {
270 case "device_id":
271 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530272 logger.Warnw(ctx, "cannot-unmarshal-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500273 return nil, err
274 }
275 case kafka.TransactionKey:
276 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530277 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500278 return nil, err
279 }
280 }
khenaidoob9203542018-09-17 22:56:37 -0400281 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530282 logger.Debugw(ctx, "get-child-devices", log.Fields{"device-id": pID.Id, "transaction-id": transactionID.Val})
283 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetChildDevices")
khenaidoo297cd252019-02-07 22:10:23 -0500284
Himani Chawlab4c25912020-11-12 17:16:38 +0530285 return rhp.deviceMgr.GetAllChildDevices(rpcCtx, pID.Id)
khenaidoob9203542018-09-17 22:56:37 -0400286}
287
khenaidoo442e7c72020-03-10 16:13:48 -0400288// ChildDeviceDetected is invoked when a child device is detected. The following parameters are expected:
Matt Jeanneret4e241952019-02-28 11:16:04 -0500289// {parent_device_id, parent_port_no, child_device_type, channel_id, vendor_id, serial_number)
Rohan Agrawal31f21802020-06-12 05:38:46 +0000290func (rhp *AdapterRequestHandlerProxy) ChildDeviceDetected(ctx context.Context, args []*ic.Argument) (*voltha.Device, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500291 if len(args) < 5 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000292 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400293 err := errors.New("invalid-number-of-args")
294 return nil, err
295 }
296
297 pID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500298 portNo := &ic.IntType{}
299 dt := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530300 chnlID := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500301 transactionID := &ic.StrType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500302 serialNumber := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530303 vendorID := &ic.StrType{}
304 onuID := &ic.IntType{}
Maninder9a1bc0d2020-10-26 11:34:02 +0530305 fromTopic := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400306 for _, arg := range args {
307 switch arg.Key {
308 case "parent_device_id":
309 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000310 logger.Warnw(ctx, "cannot-unmarshal-parent-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400311 return nil, err
312 }
313 case "parent_port_no":
314 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000315 logger.Warnw(ctx, "cannot-unmarshal-parent-port", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400316 return nil, err
317 }
318 case "child_device_type":
319 if err := ptypes.UnmarshalAny(arg.Value, dt); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000320 logger.Warnw(ctx, "cannot-unmarshal-child-device-type", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400321 return nil, err
322 }
323 case "channel_id":
npujar1d86a522019-11-14 17:11:16 +0530324 if err := ptypes.UnmarshalAny(arg.Value, chnlID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000325 logger.Warnw(ctx, "cannot-unmarshal-channel-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400326 return nil, err
327 }
Matt Jeanneret4e241952019-02-28 11:16:04 -0500328 case "vendor_id":
npujar1d86a522019-11-14 17:11:16 +0530329 if err := ptypes.UnmarshalAny(arg.Value, vendorID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000330 logger.Warnw(ctx, "cannot-unmarshal-vendor-id", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500331 return nil, err
332 }
333 case "serial_number":
334 if err := ptypes.UnmarshalAny(arg.Value, serialNumber); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000335 logger.Warnw(ctx, "cannot-unmarshal-serial-number", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500336 return nil, err
337 }
338 case "onu_id":
npujar1d86a522019-11-14 17:11:16 +0530339 if err := ptypes.UnmarshalAny(arg.Value, onuID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000340 logger.Warnw(ctx, "cannot-unmarshal-onu-id", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500341 return nil, err
342 }
khenaidoo297cd252019-02-07 22:10:23 -0500343 case kafka.TransactionKey:
344 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530345 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500346 return nil, err
347 }
Maninder9a1bc0d2020-10-26 11:34:02 +0530348 case "fromTopic":
349 if err := ptypes.UnmarshalAny(arg.Value, fromTopic); err != nil {
350 logger.Warnw(ctx, "cannot-unmarshal-fromTopic", log.Fields{"error": err})
351 return nil, err
352 }
khenaidoob9203542018-09-17 22:56:37 -0400353 }
354 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530355 logger.Debugw(ctx, "child-device-detected", log.Fields{"parent-device-id": pID.Id, "parent-port-no": portNo.Val,
356 "device-type": dt.Val, "channel-id": chnlID.Val, "serial-number": serialNumber.Val,
357 "vendor-id": vendorID.Val, "onu-id": onuID.Val, "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500358
Himani Chawlab4c25912020-11-12 17:16:38 +0530359 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ChildDeviceDetected")
Maninder9a1bc0d2020-10-26 11:34:02 +0530360 fromTopicContext := utils.WithFromTopicMetadataContext(rpcCtx, fromTopic.Val)
361 device, err := rhp.deviceMgr.ChildDeviceDetected(fromTopicContext, pID.Id, portNo.Val, dt.Val, chnlID.Val, vendorID.Val, serialNumber.Val, onuID.Val)
Mahir Gunyel6deaa242019-06-27 04:53:33 -0700362 if err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530363 logger.Debugw(ctx, "child-detection-failed", log.Fields{"parent-device-id": pID.Id, "onu-id": onuID.Val, "error": err})
khenaidoo59ef7be2019-06-21 12:40:28 -0400364 }
khenaidoo442e7c72020-03-10 16:13:48 -0400365 return device, err
khenaidoob9203542018-09-17 22:56:37 -0400366}
367
npujar1d86a522019-11-14 17:11:16 +0530368// DeviceStateUpdate updates device status
Rohan Agrawal31f21802020-06-12 05:38:46 +0000369func (rhp *AdapterRequestHandlerProxy) DeviceStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500370 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000371 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400372 err := errors.New("invalid-number-of-args")
373 return nil, err
374 }
npujar1d86a522019-11-14 17:11:16 +0530375 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500376 operStatus := &ic.IntType{}
377 connStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500378 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400379 for _, arg := range args {
380 switch arg.Key {
381 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530382 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000383 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400384 return nil, err
385 }
386 case "oper_status":
387 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000388 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400389 return nil, err
390 }
khenaidoob9203542018-09-17 22:56:37 -0400391 case "connect_status":
392 if err := ptypes.UnmarshalAny(arg.Value, connStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000393 logger.Warnw(ctx, "cannot-unmarshal-connStatus", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400394 return nil, err
395 }
khenaidoo297cd252019-02-07 22:10:23 -0500396 case kafka.TransactionKey:
397 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530398 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500399 return nil, err
400 }
khenaidoob9203542018-09-17 22:56:37 -0400401 }
402 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530403 logger.Debugw(ctx, "device-state-update", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus,
404 "conn-status": connStatus, "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500405
Himani Chawlab4c25912020-11-12 17:16:38 +0530406 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DeviceStateUpdate")
407
408 if err := rhp.deviceMgr.UpdateDeviceStatus(rpcCtx, deviceID.Id, voltha.OperStatus_Types(operStatus.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400409 voltha.ConnectStatus_Types(connStatus.Val)); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000410 logger.Debugw(ctx, "unable-to-update-device-status", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400411 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400412 }
khenaidoo442e7c72020-03-10 16:13:48 -0400413 return &empty.Empty{}, nil
khenaidoo92e62c52018-10-03 14:02:54 -0400414}
415
npujar1d86a522019-11-14 17:11:16 +0530416// ChildrenStateUpdate updates child device status
Rohan Agrawal31f21802020-06-12 05:38:46 +0000417func (rhp *AdapterRequestHandlerProxy) ChildrenStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500418 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000419 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo4d4802d2018-10-04 21:59:49 -0400420 err := errors.New("invalid-number-of-args")
421 return nil, err
422 }
npujar1d86a522019-11-14 17:11:16 +0530423 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500424 operStatus := &ic.IntType{}
425 connStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500426 transactionID := &ic.StrType{}
khenaidoo4d4802d2018-10-04 21:59:49 -0400427 for _, arg := range args {
428 switch arg.Key {
429 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530430 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000431 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400432 return nil, err
433 }
434 case "oper_status":
435 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000436 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400437 return nil, err
438 }
439 case "connect_status":
440 if err := ptypes.UnmarshalAny(arg.Value, connStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000441 logger.Warnw(ctx, "cannot-unmarshal-connStatus", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400442 return nil, err
443 }
khenaidoo297cd252019-02-07 22:10:23 -0500444 case kafka.TransactionKey:
445 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530446 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500447 return nil, err
448 }
khenaidoo4d4802d2018-10-04 21:59:49 -0400449 }
450 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530451 logger.Debugw(ctx, "children-state-update", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus,
452 "conn-status": connStatus, "transaction-id": transactionID.Val})
453 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ChildrenStateUpdate")
khenaidoo4d4802d2018-10-04 21:59:49 -0400454 // When the enum is not set (i.e. -1), Go still convert to the Enum type with the value being -1
Himani Chawlab4c25912020-11-12 17:16:38 +0530455 if err := rhp.deviceMgr.UpdateChildrenStatus(rpcCtx, deviceID.Id, voltha.OperStatus_Types(operStatus.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400456 voltha.ConnectStatus_Types(connStatus.Val)); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000457 logger.Debugw(ctx, "unable-to-update-children-status", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400458 return nil, err
459 }
460 return &empty.Empty{}, nil
khenaidoo4d4802d2018-10-04 21:59:49 -0400461}
462
npujar1d86a522019-11-14 17:11:16 +0530463// PortsStateUpdate updates the ports state related to the device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000464func (rhp *AdapterRequestHandlerProxy) PortsStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo3ab34882019-05-02 21:33:30 -0400465 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000466 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo3ab34882019-05-02 21:33:30 -0400467 err := errors.New("invalid-number-of-args")
468 return nil, err
469 }
npujar1d86a522019-11-14 17:11:16 +0530470 deviceID := &voltha.ID{}
Kent Hagerman2a07b862020-06-19 15:23:07 -0400471 portTypeFilter := &ic.IntType{}
khenaidoo3ab34882019-05-02 21:33:30 -0400472 operStatus := &ic.IntType{}
473 transactionID := &ic.StrType{}
474 for _, arg := range args {
475 switch arg.Key {
476 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530477 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000478 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400479 return nil, err
480 }
Kent Hagerman2a07b862020-06-19 15:23:07 -0400481 case "port_type_filter":
482 if err := ptypes.UnmarshalAny(arg.Value, portTypeFilter); err != nil {
483 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
484 return nil, err
485 }
khenaidoo3ab34882019-05-02 21:33:30 -0400486 case "oper_status":
487 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000488 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400489 return nil, err
490 }
491 case kafka.TransactionKey:
492 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530493 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400494 return nil, err
495 }
496 }
497 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530498 logger.Debugw(ctx, "ports-state-update", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus, "transaction-id": transactionID.Val})
499 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "PortsStateUpdate")
500 if err := rhp.deviceMgr.UpdatePortsState(rpcCtx, deviceID.Id, uint32(portTypeFilter.Val), voltha.OperStatus_Types(operStatus.Val)); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000501 logger.Debugw(ctx, "unable-to-update-ports-state", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400502 return nil, err
khenaidoo3ab34882019-05-02 21:33:30 -0400503 }
khenaidoo442e7c72020-03-10 16:13:48 -0400504 return &empty.Empty{}, nil
khenaidoo3ab34882019-05-02 21:33:30 -0400505}
506
npujar1d86a522019-11-14 17:11:16 +0530507// PortStateUpdate updates the port state of the device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000508func (rhp *AdapterRequestHandlerProxy) PortStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500509 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000510 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo92e62c52018-10-03 14:02:54 -0400511 err := errors.New("invalid-number-of-args")
512 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400513 }
npujar1d86a522019-11-14 17:11:16 +0530514 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500515 portType := &ic.IntType{}
516 portNo := &ic.IntType{}
517 operStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500518 transactionID := &ic.StrType{}
khenaidoo92e62c52018-10-03 14:02:54 -0400519 for _, arg := range args {
520 switch arg.Key {
521 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530522 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000523 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400524 return nil, err
525 }
526 case "oper_status":
527 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000528 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400529 return nil, err
530 }
531 case "port_type":
532 if err := ptypes.UnmarshalAny(arg.Value, portType); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000533 logger.Warnw(ctx, "cannot-unmarshal-porttype", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400534 return nil, err
535 }
536 case "port_no":
537 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000538 logger.Warnw(ctx, "cannot-unmarshal-portno", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400539 return nil, err
540 }
khenaidoo297cd252019-02-07 22:10:23 -0500541 case kafka.TransactionKey:
542 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530543 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500544 return nil, err
545 }
khenaidoo92e62c52018-10-03 14:02:54 -0400546 }
547 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530548 logger.Debugw(ctx, "port-state-update", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus,
549 "port-type": portType, "port-no": portNo, "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500550
Himani Chawlab4c25912020-11-12 17:16:38 +0530551 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "PortStateUpdate")
552
553 if err := rhp.deviceMgr.UpdatePortState(rpcCtx, deviceID.Id, voltha.Port_PortType(portType.Val), uint32(portNo.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400554 voltha.OperStatus_Types(operStatus.Val)); err != nil {
555 // If the error doesn't change behavior and is essentially ignored, it is not an error, it is a
556 // warning.
557 // TODO: VOL-2707
Rohan Agrawal31f21802020-06-12 05:38:46 +0000558 logger.Debugw(ctx, "unable-to-update-port-state", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400559 return nil, err
khenaidoo92e62c52018-10-03 14:02:54 -0400560 }
khenaidoo442e7c72020-03-10 16:13:48 -0400561 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400562}
563
npujar1d86a522019-11-14 17:11:16 +0530564// DeleteAllPorts deletes all ports of device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000565func (rhp *AdapterRequestHandlerProxy) DeleteAllPorts(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo0a822f92019-05-08 15:15:57 -0400566 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000567 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400568 err := errors.New("invalid-number-of-args")
569 return nil, err
570 }
npujar1d86a522019-11-14 17:11:16 +0530571 deviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400572 transactionID := &ic.StrType{}
573 for _, arg := range args {
574 switch arg.Key {
575 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530576 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000577 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400578 return nil, err
579 }
580 case kafka.TransactionKey:
581 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530582 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400583 return nil, err
584 }
585 }
586 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530587 logger.Debugw(ctx, "delete-all-ports", log.Fields{"device-id": deviceID.Id, "transaction-id": transactionID.Val})
588 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DeleteAllPorts")
589 if err := rhp.deviceMgr.DeleteAllPorts(rpcCtx, deviceID.Id); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000590 logger.Debugw(ctx, "unable-to-delete-ports", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400591 return nil, err
khenaidoo0a822f92019-05-08 15:15:57 -0400592 }
khenaidoo442e7c72020-03-10 16:13:48 -0400593 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400594}
595
Kent Hagerman2a07b862020-06-19 15:23:07 -0400596// GetDevicePort returns a single port
597func (rhp *AdapterRequestHandlerProxy) GetDevicePort(ctx context.Context, args []*ic.Argument) (*voltha.Port, error) {
598 if len(args) < 3 {
599 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
600 err := errors.New("invalid-number-of-args")
601 return nil, err
602 }
603 deviceID := &voltha.ID{}
604 portNo := &ic.IntType{}
605 transactionID := &ic.StrType{}
606 for _, arg := range args {
607 switch arg.Key {
608 case "device_id":
609 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
610 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
611 return nil, err
612 }
613 case "port_no":
614 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
615 logger.Warnw(ctx, "cannot-unmarshal-port-no", log.Fields{"error": err})
616 return nil, err
617 }
618 case kafka.TransactionKey:
619 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530620 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
Kent Hagerman2a07b862020-06-19 15:23:07 -0400621 return nil, err
622 }
623 }
624 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530625 logger.Debugw(ctx, "get-device-port", log.Fields{"device-id": deviceID.Id, "port-no": portNo.Val, "transaction-id": transactionID.Val})
626 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetDevicePort")
Kent Hagerman2a07b862020-06-19 15:23:07 -0400627
Himani Chawlab4c25912020-11-12 17:16:38 +0530628 return rhp.deviceMgr.GetDevicePort(rpcCtx, deviceID.Id, uint32(portNo.Val))
Kent Hagerman2a07b862020-06-19 15:23:07 -0400629}
630
631// ListDevicePorts returns all ports belonging to the device
632func (rhp *AdapterRequestHandlerProxy) ListDevicePorts(ctx context.Context, args []*ic.Argument) (*voltha.Ports, error) {
633 if len(args) < 2 {
634 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
635 err := errors.New("invalid-number-of-args")
636 return nil, err
637 }
638 deviceID := &voltha.ID{}
639 transactionID := &ic.StrType{}
640 for _, arg := range args {
641 switch arg.Key {
642 case "device_id":
643 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
644 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
645 return nil, err
646 }
647 case kafka.TransactionKey:
648 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530649 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
Kent Hagerman2a07b862020-06-19 15:23:07 -0400650 return nil, err
651 }
652 }
653 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530654 logger.Debugw(ctx, "list-device-ports", log.Fields{"device-id": deviceID.Id, "transaction-id": transactionID.Val})
655 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ListDevicePorts")
656 return rhp.deviceMgr.ListDevicePorts(rpcCtx, deviceID)
Kent Hagerman2a07b862020-06-19 15:23:07 -0400657}
658
npujar1d86a522019-11-14 17:11:16 +0530659// ChildDevicesLost indicates that a parent device is in a state (Disabled) where it cannot manage the child devices.
660// This will trigger the Core to disable all the child devices.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000661func (rhp *AdapterRequestHandlerProxy) ChildDevicesLost(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo0a822f92019-05-08 15:15:57 -0400662 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000663 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400664 err := errors.New("invalid-number-of-args")
665 return nil, err
666 }
npujar1d86a522019-11-14 17:11:16 +0530667 parentDeviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400668 transactionID := &ic.StrType{}
669 for _, arg := range args {
670 switch arg.Key {
671 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530672 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000673 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400674 return nil, err
675 }
676 case kafka.TransactionKey:
677 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530678 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400679 return nil, err
680 }
681 }
682 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530683 logger.Debugw(ctx, "child-devices-lost", log.Fields{"device-id": parentDeviceID.Id, "transaction-id": transactionID.Val})
khenaidoo0a822f92019-05-08 15:15:57 -0400684
Himani Chawlab4c25912020-11-12 17:16:38 +0530685 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ChildDevicesLost")
686
687 if err := rhp.deviceMgr.ChildDevicesLost(rpcCtx, parentDeviceID.Id); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000688 logger.Debugw(ctx, "unable-to-disable-child-devices", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400689 return nil, err
khenaidoo0a822f92019-05-08 15:15:57 -0400690 }
khenaidoo442e7c72020-03-10 16:13:48 -0400691 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400692}
693
npujar1d86a522019-11-14 17:11:16 +0530694// ChildDevicesDetected invoked by an adapter when child devices are found, typically after after a disable/enable sequence.
695// This will trigger the Core to Enable all the child devices of that parent.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000696func (rhp *AdapterRequestHandlerProxy) ChildDevicesDetected(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo0a822f92019-05-08 15:15:57 -0400697 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000698 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400699 err := errors.New("invalid-number-of-args")
700 return nil, err
701 }
npujar1d86a522019-11-14 17:11:16 +0530702 parentDeviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400703 transactionID := &ic.StrType{}
704 for _, arg := range args {
705 switch arg.Key {
706 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530707 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000708 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400709 return nil, err
710 }
711 case kafka.TransactionKey:
712 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530713 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400714 return nil, err
715 }
716 }
717 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530718 logger.Debugw(ctx, "child-devices-detected", log.Fields{"parent-device-id": parentDeviceID.Id, "transaction-id": transactionID.Val})
719 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ChildDevicesDetected")
khenaidoo0a822f92019-05-08 15:15:57 -0400720
Himani Chawlab4c25912020-11-12 17:16:38 +0530721 if err := rhp.deviceMgr.ChildDevicesDetected(rpcCtx, parentDeviceID.Id); err != nil {
divyadesaicb8b59d2020-08-18 09:55:47 +0000722 logger.Debugw(ctx, "child-devices-detection-failed", log.Fields{"parent-device-id": parentDeviceID.Id, "error": err})
khenaidoo59ef7be2019-06-21 12:40:28 -0400723 return nil, err
724 }
khenaidoo442e7c72020-03-10 16:13:48 -0400725 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400726}
727
npujar1d86a522019-11-14 17:11:16 +0530728// PortCreated adds port to device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000729func (rhp *AdapterRequestHandlerProxy) PortCreated(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500730 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000731 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400732 err := errors.New("invalid-number-of-args")
733 return nil, err
734 }
npujar1d86a522019-11-14 17:11:16 +0530735 deviceID := &voltha.ID{}
khenaidoob9203542018-09-17 22:56:37 -0400736 port := &voltha.Port{}
khenaidoo297cd252019-02-07 22:10:23 -0500737 transactionID := &ic.StrType{}
Maninder9a1bc0d2020-10-26 11:34:02 +0530738 fromTopic := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400739 for _, arg := range args {
740 switch arg.Key {
741 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530742 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000743 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400744 return nil, err
745 }
746 case "port":
747 if err := ptypes.UnmarshalAny(arg.Value, port); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000748 logger.Warnw(ctx, "cannot-unmarshal-port", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400749 return nil, err
750 }
khenaidoo297cd252019-02-07 22:10:23 -0500751 case kafka.TransactionKey:
752 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530753 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500754 return nil, err
755 }
Maninder9a1bc0d2020-10-26 11:34:02 +0530756 case "fromTopic":
757 if err := ptypes.UnmarshalAny(arg.Value, fromTopic); err != nil {
758 logger.Warnw(ctx, "cannot-unmarshal-fromTopic", log.Fields{"error": err})
759 return nil, err
760 }
761 //log.EnrichSpan(ctx,log.Fields{"fromTopic": fromTopic})
khenaidoob9203542018-09-17 22:56:37 -0400762 }
763 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530764 logger.Debugw(ctx, "port-created", log.Fields{"device-id": deviceID.Id, "port": port, "transaction-id": transactionID.Val})
765 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "PortCreated")
Maninder9a1bc0d2020-10-26 11:34:02 +0530766 fromTopicContext := utils.WithFromTopicMetadataContext(rpcCtx, fromTopic.Val)
khenaidoo297cd252019-02-07 22:10:23 -0500767
Maninder9a1bc0d2020-10-26 11:34:02 +0530768 if err := rhp.deviceMgr.AddPort(fromTopicContext, deviceID.Id, port); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000769 logger.Debugw(ctx, "unable-to-add-port", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400770 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400771 }
khenaidoo442e7c72020-03-10 16:13:48 -0400772 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400773}
774
npujar1d86a522019-11-14 17:11:16 +0530775// DevicePMConfigUpdate initializes the pm configs as defined by the adapter.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000776func (rhp *AdapterRequestHandlerProxy) DevicePMConfigUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoob3127472019-07-24 21:04:55 -0400777 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000778 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400779 err := errors.New("invalid-number-of-args")
780 return nil, err
781 }
782 pmConfigs := &voltha.PmConfigs{}
khenaidoo297cd252019-02-07 22:10:23 -0500783 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400784 for _, arg := range args {
785 switch arg.Key {
786 case "device_pm_config":
787 if err := ptypes.UnmarshalAny(arg.Value, pmConfigs); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000788 logger.Warnw(ctx, "cannot-unmarshal-pm-config", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400789 return nil, err
790 }
khenaidoo297cd252019-02-07 22:10:23 -0500791 case kafka.TransactionKey:
792 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530793 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500794 return nil, err
795 }
khenaidoob9203542018-09-17 22:56:37 -0400796 }
797 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530798 logger.Debugw(ctx, "device-pm-config-update", log.Fields{"device-id": pmConfigs.Id, "configs": pmConfigs,
799 "transaction-id": transactionID.Val})
800 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DevicePMConfigUpdate")
khenaidoo297cd252019-02-07 22:10:23 -0500801
Himani Chawlab4c25912020-11-12 17:16:38 +0530802 if err := rhp.deviceMgr.InitPmConfigs(rpcCtx, pmConfigs.Id, pmConfigs); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000803 logger.Debugw(ctx, "unable-to-initialize-pm-configs", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400804 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400805 }
khenaidoo442e7c72020-03-10 16:13:48 -0400806 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400807}
khenaidoofdbad6e2018-11-06 22:26:38 -0500808
npujar1d86a522019-11-14 17:11:16 +0530809// PacketIn sends the incoming packet of device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000810func (rhp *AdapterRequestHandlerProxy) PacketIn(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500811 if len(args) < 4 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000812 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoofdbad6e2018-11-06 22:26:38 -0500813 err := errors.New("invalid-number-of-args")
814 return nil, err
815 }
npujar1d86a522019-11-14 17:11:16 +0530816 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500817 portNo := &ic.IntType{}
818 packet := &ic.Packet{}
khenaidoo297cd252019-02-07 22:10:23 -0500819 transactionID := &ic.StrType{}
khenaidoofdbad6e2018-11-06 22:26:38 -0500820 for _, arg := range args {
821 switch arg.Key {
822 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530823 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000824 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500825 return nil, err
826 }
827 case "port":
828 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000829 logger.Warnw(ctx, "cannot-unmarshal-port-no", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500830 return nil, err
831 }
832 case "packet":
833 if err := ptypes.UnmarshalAny(arg.Value, packet); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000834 logger.Warnw(ctx, "cannot-unmarshal-packet", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500835 return nil, err
836 }
khenaidoo297cd252019-02-07 22:10:23 -0500837 case kafka.TransactionKey:
838 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530839 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500840 return nil, err
841 }
khenaidoofdbad6e2018-11-06 22:26:38 -0500842 }
843 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530844 logger.Debugw(ctx, "packet-in", log.Fields{"device-id": deviceID.Id, "port": portNo.Val, "packet": packet,
845 "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500846
Himani Chawlab4c25912020-11-12 17:16:38 +0530847 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "PacketIn")
848
849 if err := rhp.deviceMgr.PacketIn(rpcCtx, deviceID.Id, uint32(portNo.Val), transactionID.Val, packet.Payload); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000850 logger.Debugw(ctx, "unable-to-receive-packet-from-adapter", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400851 return nil, err
852
853 }
854 return &empty.Empty{}, nil
khenaidoofdbad6e2018-11-06 22:26:38 -0500855}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500856
npujar1d86a522019-11-14 17:11:16 +0530857// UpdateImageDownload updates image download
Rohan Agrawal31f21802020-06-12 05:38:46 +0000858func (rhp *AdapterRequestHandlerProxy) UpdateImageDownload(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoof5a5bfa2019-01-23 22:20:29 -0500859 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000860 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500861 err := errors.New("invalid-number-of-args")
862 return nil, err
863 }
npujar1d86a522019-11-14 17:11:16 +0530864 deviceID := &voltha.ID{}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500865 img := &voltha.ImageDownload{}
khenaidoo297cd252019-02-07 22:10:23 -0500866 transactionID := &ic.StrType{}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500867 for _, arg := range args {
868 switch arg.Key {
869 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530870 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000871 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500872 return nil, err
873 }
874 case "image_download":
875 if err := ptypes.UnmarshalAny(arg.Value, img); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000876 logger.Warnw(ctx, "cannot-unmarshal-imgaeDownload", log.Fields{"error": err})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500877 return nil, err
878 }
khenaidoo297cd252019-02-07 22:10:23 -0500879 case kafka.TransactionKey:
880 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530881 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500882 return nil, err
883 }
khenaidoof5a5bfa2019-01-23 22:20:29 -0500884 }
885 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530886 logger.Debugw(ctx, "update-image-download", log.Fields{"device-id": deviceID.Id, "image-download": img,
887 "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500888
Himani Chawlab4c25912020-11-12 17:16:38 +0530889 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "UpdateImageDownload")
890
891 if err := rhp.deviceMgr.UpdateImageDownload(rpcCtx, deviceID.Id, img); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000892 logger.Debugw(ctx, "unable-to-update-image-download", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400893 return nil, err
khenaidoof5a5bfa2019-01-23 22:20:29 -0500894 }
khenaidoo442e7c72020-03-10 16:13:48 -0400895 return &empty.Empty{}, nil
khenaidoof5a5bfa2019-01-23 22:20:29 -0500896}
khenaidooba6b6c42019-08-02 09:11:56 -0400897
npujar1d86a522019-11-14 17:11:16 +0530898// ReconcileChildDevices reconciles child devices
Rohan Agrawal31f21802020-06-12 05:38:46 +0000899func (rhp *AdapterRequestHandlerProxy) ReconcileChildDevices(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidooba6b6c42019-08-02 09:11:56 -0400900 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000901 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidooba6b6c42019-08-02 09:11:56 -0400902 err := errors.New("invalid-number-of-args")
903 return nil, err
904 }
npujar1d86a522019-11-14 17:11:16 +0530905 parentDeviceID := &voltha.ID{}
khenaidooba6b6c42019-08-02 09:11:56 -0400906 transactionID := &ic.StrType{}
907 for _, arg := range args {
908 switch arg.Key {
909 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530910 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000911 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidooba6b6c42019-08-02 09:11:56 -0400912 return nil, err
913 }
914 case kafka.TransactionKey:
915 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530916 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidooba6b6c42019-08-02 09:11:56 -0400917 return nil, err
918 }
919 }
920 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530921 logger.Debugw(ctx, "reconcile-child-devices", log.Fields{"parent-device-id": parentDeviceID.Id, "transaction-id": transactionID.Val})
khenaidooba6b6c42019-08-02 09:11:56 -0400922
Himani Chawlab4c25912020-11-12 17:16:38 +0530923 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ReconcileChildDevices")
924
925 if err := rhp.deviceMgr.ReconcileChildDevices(rpcCtx, parentDeviceID.Id); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000926 logger.Debugw(ctx, "unable-to-reconcile-child-devices", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400927 return nil, err
khenaidooba6b6c42019-08-02 09:11:56 -0400928 }
khenaidoo442e7c72020-03-10 16:13:48 -0400929 return &empty.Empty{}, nil
khenaidooba6b6c42019-08-02 09:11:56 -0400930}
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700931
npujar1d86a522019-11-14 17:11:16 +0530932// DeviceReasonUpdate updates device reason
Rohan Agrawal31f21802020-06-12 05:38:46 +0000933func (rhp *AdapterRequestHandlerProxy) DeviceReasonUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700934 if len(args) < 2 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530935 logger.Warn(ctx, "device-reason-update-invalid-number-of-args", log.Fields{"args": args})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700936 err := errors.New("DeviceReasonUpdate: invalid-number-of-args")
937 return nil, err
938 }
npujar1d86a522019-11-14 17:11:16 +0530939 deviceID := &voltha.ID{}
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700940 reason := &ic.StrType{}
941 transactionID := &ic.StrType{}
Maninder9a1bc0d2020-10-26 11:34:02 +0530942 fromTopic := &ic.StrType{}
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700943 for _, arg := range args {
944 switch arg.Key {
945 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530946 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000947 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700948 return nil, err
949 }
950 case "device_reason":
951 if err := ptypes.UnmarshalAny(arg.Value, reason); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000952 logger.Warnw(ctx, "cannot-unmarshal-reason", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700953 return nil, err
954 }
955 case kafka.TransactionKey:
956 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530957 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700958 return nil, err
959 }
Maninder9a1bc0d2020-10-26 11:34:02 +0530960 case "fromTopic":
961 if err := ptypes.UnmarshalAny(arg.Value, fromTopic); err != nil {
962 logger.Warnw(ctx, "cannot-unmarshal-fromTopic", log.Fields{"error": err})
963 return nil, err
964 }
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700965 }
966 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530967 logger.Debugw(ctx, "device-reason-update", log.Fields{"device-id": deviceID.Id, "reason": reason.Val,
968 "transaction-id": transactionID.Val})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700969
Himani Chawlab4c25912020-11-12 17:16:38 +0530970 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DeviceReasonUpdate")
Maninder9a1bc0d2020-10-26 11:34:02 +0530971 fromTopicContext := utils.WithFromTopicMetadataContext(rpcCtx, fromTopic.Val)
Himani Chawlab4c25912020-11-12 17:16:38 +0530972
Maninder9a1bc0d2020-10-26 11:34:02 +0530973 if err := rhp.deviceMgr.UpdateDeviceReason(fromTopicContext, deviceID.Id, reason.Val); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000974 logger.Debugw(ctx, "unable-to-update-device-reason", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400975 return nil, err
976
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700977 }
khenaidoo442e7c72020-03-10 16:13:48 -0400978 return &empty.Empty{}, nil
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700979}