blob: 503d2941216b44a3d7d4ac06b2fe1750739fdb4f [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"
Himani Chawlab4c25912020-11-12 17:16:38 +053027 "github.com/opencord/voltha-go/rw_core/utils"
Maninderdfadc982020-10-28 14:04:33 +053028 "github.com/opencord/voltha-lib-go/v4/pkg/kafka"
29 "github.com/opencord/voltha-lib-go/v4/pkg/log"
30 ic "github.com/opencord/voltha-protos/v4/go/inter_container"
31 "github.com/opencord/voltha-protos/v4/go/voltha"
khenaidoob9203542018-09-17 22:56:37 -040032)
33
npujar1d86a522019-11-14 17:11:16 +053034// AdapterRequestHandlerProxy represent adapter request handler proxy attributes
khenaidoob9203542018-09-17 22:56:37 -040035type AdapterRequestHandlerProxy struct {
Kent Hagerman2f0d0552020-04-23 17:28:52 -040036 deviceMgr *device.Manager
37 adapterMgr *adapter.Manager
khenaidoob9203542018-09-17 22:56:37 -040038}
39
npujar1d86a522019-11-14 17:11:16 +053040// NewAdapterRequestHandlerProxy assigns values for adapter request handler proxy attributes and returns the new instance
Kent Hagerman2f0d0552020-04-23 17:28:52 -040041func NewAdapterRequestHandlerProxy(dMgr *device.Manager, aMgr *adapter.Manager) *AdapterRequestHandlerProxy {
42 return &AdapterRequestHandlerProxy{
43 deviceMgr: dMgr,
44 adapterMgr: aMgr,
45 }
khenaidoob9203542018-09-17 22:56:37 -040046}
47
Rohan Agrawal31f21802020-06-12 05:38:46 +000048func (rhp *AdapterRequestHandlerProxy) Register(ctx context.Context, args []*ic.Argument) (*voltha.CoreInstance, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -050049 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +000050 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -040051 err := errors.New("invalid-number-of-args")
52 return nil, err
53 }
54 adapter := &voltha.Adapter{}
khenaidoo91ecfd62018-11-04 17:13:42 -050055 deviceTypes := &voltha.DeviceTypes{}
npujar1d86a522019-11-14 17:11:16 +053056 transactionID := &ic.StrType{}
khenaidoo91ecfd62018-11-04 17:13:42 -050057 for _, arg := range args {
58 switch arg.Key {
59 case "adapter":
60 if err := ptypes.UnmarshalAny(arg.Value, adapter); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +000061 logger.Warnw(ctx, "cannot-unmarshal-adapter", log.Fields{"error": err})
khenaidoo91ecfd62018-11-04 17:13:42 -050062 return nil, err
63 }
64 case "deviceTypes":
65 if err := ptypes.UnmarshalAny(arg.Value, deviceTypes); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +000066 logger.Warnw(ctx, "cannot-unmarshal-device-types", log.Fields{"error": err})
khenaidoo91ecfd62018-11-04 17:13:42 -050067 return nil, err
68 }
khenaidoo297cd252019-02-07 22:10:23 -050069 case kafka.TransactionKey:
npujar1d86a522019-11-14 17:11:16 +053070 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +053071 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -050072 return nil, err
73 }
khenaidoo91ecfd62018-11-04 17:13:42 -050074 }
khenaidoob9203542018-09-17 22:56:37 -040075 }
Himani Chawlab4c25912020-11-12 17:16:38 +053076 logger.Debugw(ctx, "register", log.Fields{"adapter": *adapter, "device-types": deviceTypes, "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -050077
Rohan Agrawal31f21802020-06-12 05:38:46 +000078 return rhp.adapterMgr.RegisterAdapter(ctx, adapter, deviceTypes)
khenaidoob9203542018-09-17 22:56:37 -040079}
80
npujar1d86a522019-11-14 17:11:16 +053081// GetDevice returns device info
Rohan Agrawal31f21802020-06-12 05:38:46 +000082func (rhp *AdapterRequestHandlerProxy) GetDevice(ctx context.Context, args []*ic.Argument) (*voltha.Device, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -050083 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +000084 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -040085 err := errors.New("invalid-number-of-args")
86 return nil, err
87 }
khenaidoo297cd252019-02-07 22:10:23 -050088
khenaidoob9203542018-09-17 22:56:37 -040089 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -050090 transactionID := &ic.StrType{}
91 for _, arg := range args {
92 switch arg.Key {
93 case "device_id":
94 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +053095 logger.Warnw(ctx, "cannot-unmarshal-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -050096 return nil, err
97 }
98 case kafka.TransactionKey:
99 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530100 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500101 return nil, err
102 }
103 }
khenaidoob9203542018-09-17 22:56:37 -0400104 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530105 logger.Debugw(ctx, "get-device", log.Fields{"device-id": pID.Id, "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500106
khenaidoob9203542018-09-17 22:56:37 -0400107 // Get the device via the device manager
Rohan Agrawalcf12f202020-08-03 04:42:01 +0000108 device, err := rhp.deviceMgr.GetDevice(log.WithSpanFromContext(context.TODO(), ctx), pID)
npujar1d86a522019-11-14 17:11:16 +0530109 if err != nil {
divyadesaicb8b59d2020-08-18 09:55:47 +0000110 logger.Debugw(ctx, "get-device-failed", log.Fields{"device-id": pID.Id, "error": err})
khenaidoob9203542018-09-17 22:56:37 -0400111 }
khenaidoo442e7c72020-03-10 16:13:48 -0400112 return device, err
khenaidoob9203542018-09-17 22:56:37 -0400113}
114
npujar1d86a522019-11-14 17:11:16 +0530115// DeviceUpdate updates device using adapter data
Rohan Agrawal31f21802020-06-12 05:38:46 +0000116func (rhp *AdapterRequestHandlerProxy) DeviceUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500117 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000118 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400119 err := errors.New("invalid-number-of-args")
120 return nil, err
121 }
khenaidoo297cd252019-02-07 22:10:23 -0500122
khenaidoob9203542018-09-17 22:56:37 -0400123 device := &voltha.Device{}
khenaidoo297cd252019-02-07 22:10:23 -0500124 transactionID := &ic.StrType{}
125 for _, arg := range args {
126 switch arg.Key {
127 case "device":
128 if err := ptypes.UnmarshalAny(arg.Value, device); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530129 logger.Warnw(ctx, "cannot-unmarshal-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500130 return nil, err
131 }
132 case kafka.TransactionKey:
133 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530134 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500135 return nil, err
136 }
137 }
khenaidoob9203542018-09-17 22:56:37 -0400138 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530139 logger.Debugw(ctx, "device-update", log.Fields{"device-id": device.Id, "transaction-id": transactionID.Val})
140 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DeviceUpdate")
141 if err := rhp.deviceMgr.UpdateDeviceUsingAdapterData(rpcCtx, device); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000142 logger.Debugw(ctx, "unable-to-update-device-using-adapter-data", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400143 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400144 }
khenaidoo442e7c72020-03-10 16:13:48 -0400145 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400146}
147
npujar1d86a522019-11-14 17:11:16 +0530148// GetChildDevice returns details of child device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000149func (rhp *AdapterRequestHandlerProxy) GetChildDevice(ctx context.Context, args []*ic.Argument) (*voltha.Device, error) {
Matt Jeanneret4e241952019-02-28 11:16:04 -0500150 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000151 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400152 err := errors.New("invalid-number-of-args")
153 return nil, err
154 }
khenaidoo297cd252019-02-07 22:10:23 -0500155
khenaidoo2c6f1672018-09-20 23:14:41 -0400156 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -0500157 transactionID := &ic.StrType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500158 serialNumber := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530159 onuID := &ic.IntType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500160 parentPortNo := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500161 for _, arg := range args {
162 switch arg.Key {
163 case "device_id":
164 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530165 logger.Warnw(ctx, "cannot-unmarshal-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500166 return nil, err
167 }
Matt Jeanneret4e241952019-02-28 11:16:04 -0500168 case "serial_number":
169 if err := ptypes.UnmarshalAny(arg.Value, serialNumber); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530170 logger.Warnw(ctx, "cannot-unmarshal-id", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500171 return nil, err
172 }
173 case "onu_id":
npujar1d86a522019-11-14 17:11:16 +0530174 if err := ptypes.UnmarshalAny(arg.Value, onuID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530175 logger.Warnw(ctx, "cannot-unmarshal-id", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500176 return nil, err
177 }
178 case "parent_port_no":
179 if err := ptypes.UnmarshalAny(arg.Value, parentPortNo); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530180 logger.Warnw(ctx, "cannot-unmarshal-id", log.Fields{"error": err})
Matt Jeanneret4e241952019-02-28 11:16:04 -0500181 return nil, err
182 }
khenaidoo297cd252019-02-07 22:10:23 -0500183 case kafka.TransactionKey:
184 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530185 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500186 return nil, err
187 }
188 }
khenaidoob9203542018-09-17 22:56:37 -0400189 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530190 logger.Debugw(ctx, "get-child-device", log.Fields{"parent-device-id": pID.Id, "args": args, "transaction-id": transactionID.Val})
191 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetChildDevice")
192 return rhp.deviceMgr.GetChildDevice(rpcCtx, pID.Id, serialNumber.Val, onuID.Val, parentPortNo.Val)
khenaidoob9203542018-09-17 22:56:37 -0400193}
194
npujar1d86a522019-11-14 17:11:16 +0530195// GetChildDeviceWithProxyAddress returns details of child device with proxy address
Rohan Agrawal31f21802020-06-12 05:38:46 +0000196func (rhp *AdapterRequestHandlerProxy) GetChildDeviceWithProxyAddress(ctx context.Context, args []*ic.Argument) (*voltha.Device, error) {
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500197 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000198 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500199 err := errors.New("invalid-number-of-args")
200 return nil, err
201 }
202
203 proxyAddress := &voltha.Device_ProxyAddress{}
204 transactionID := &ic.StrType{}
205 for _, arg := range args {
206 switch arg.Key {
207 case "proxy_address":
208 if err := ptypes.UnmarshalAny(arg.Value, proxyAddress); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000209 logger.Warnw(ctx, "cannot-unmarshal-proxy-address", log.Fields{"error": err})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500210 return nil, err
211 }
212 case kafka.TransactionKey:
213 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530214 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500215 return nil, err
216 }
217 }
218 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530219 logger.Debugw(ctx, "get-child-device-with-proxy-address", log.Fields{"proxy-address": proxyAddress, "transaction-id": transactionID.Val})
220 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetChildDeviceWithProxyAddress")
221 return rhp.deviceMgr.GetChildDeviceWithProxyAddress(rpcCtx, proxyAddress)
Matt Jeanneret2a20aaa2019-03-05 21:04:02 -0500222}
223
npujar1d86a522019-11-14 17:11:16 +0530224// GetPorts returns the ports information of the device based on the port type.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000225func (rhp *AdapterRequestHandlerProxy) GetPorts(ctx context.Context, args []*ic.Argument) (*voltha.Ports, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500226 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000227 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400228 err := errors.New("invalid-number-of-args")
229 return nil, err
230 }
npujar1d86a522019-11-14 17:11:16 +0530231 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500232 pt := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500233 transactionID := &ic.StrType{}
khenaidoo92e62c52018-10-03 14:02:54 -0400234 for _, arg := range args {
235 switch arg.Key {
236 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530237 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000238 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400239 return nil, err
240 }
241 case "port_type":
242 if err := ptypes.UnmarshalAny(arg.Value, pt); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000243 logger.Warnw(ctx, "cannot-unmarshal-porttype", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400244 return nil, err
245 }
khenaidoo297cd252019-02-07 22:10:23 -0500246 case kafka.TransactionKey:
247 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530248 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500249 return nil, err
250 }
khenaidoo92e62c52018-10-03 14:02:54 -0400251 }
khenaidoob9203542018-09-17 22:56:37 -0400252 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530253 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 -0400254
Himani Chawlab4c25912020-11-12 17:16:38 +0530255 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetPorts")
256 return rhp.deviceMgr.GetPorts(rpcCtx, deviceID.Id, voltha.Port_PortType(pt.Val))
khenaidoob9203542018-09-17 22:56:37 -0400257}
258
npujar1d86a522019-11-14 17:11:16 +0530259// GetChildDevices gets all the child device IDs from the device passed as parameter
Rohan Agrawal31f21802020-06-12 05:38:46 +0000260func (rhp *AdapterRequestHandlerProxy) GetChildDevices(ctx context.Context, args []*ic.Argument) (*voltha.Devices, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500261 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000262 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400263 err := errors.New("invalid-number-of-args")
264 return nil, err
265 }
khenaidoo297cd252019-02-07 22:10:23 -0500266
khenaidoo2c6f1672018-09-20 23:14:41 -0400267 pID := &voltha.ID{}
khenaidoo297cd252019-02-07 22:10:23 -0500268 transactionID := &ic.StrType{}
269 for _, arg := range args {
270 switch arg.Key {
271 case "device_id":
272 if err := ptypes.UnmarshalAny(arg.Value, pID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530273 logger.Warnw(ctx, "cannot-unmarshal-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500274 return nil, err
275 }
276 case kafka.TransactionKey:
277 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530278 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500279 return nil, err
280 }
281 }
khenaidoob9203542018-09-17 22:56:37 -0400282 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530283 logger.Debugw(ctx, "get-child-devices", log.Fields{"device-id": pID.Id, "transaction-id": transactionID.Val})
284 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetChildDevices")
khenaidoo297cd252019-02-07 22:10:23 -0500285
Himani Chawlab4c25912020-11-12 17:16:38 +0530286 return rhp.deviceMgr.GetAllChildDevices(rpcCtx, pID.Id)
khenaidoob9203542018-09-17 22:56:37 -0400287}
288
khenaidoo442e7c72020-03-10 16:13:48 -0400289// ChildDeviceDetected is invoked when a child device is detected. The following parameters are expected:
Matt Jeanneret4e241952019-02-28 11:16:04 -0500290// {parent_device_id, parent_port_no, child_device_type, channel_id, vendor_id, serial_number)
Rohan Agrawal31f21802020-06-12 05:38:46 +0000291func (rhp *AdapterRequestHandlerProxy) ChildDeviceDetected(ctx context.Context, args []*ic.Argument) (*voltha.Device, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500292 if len(args) < 5 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000293 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400294 err := errors.New("invalid-number-of-args")
295 return nil, err
296 }
297
298 pID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500299 portNo := &ic.IntType{}
300 dt := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530301 chnlID := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500302 transactionID := &ic.StrType{}
Matt Jeanneret4e241952019-02-28 11:16:04 -0500303 serialNumber := &ic.StrType{}
npujar1d86a522019-11-14 17:11:16 +0530304 vendorID := &ic.StrType{}
305 onuID := &ic.IntType{}
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 }
khenaidoob9203542018-09-17 22:56:37 -0400348 }
349 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530350 logger.Debugw(ctx, "child-device-detected", log.Fields{"parent-device-id": pID.Id, "parent-port-no": portNo.Val,
351 "device-type": dt.Val, "channel-id": chnlID.Val, "serial-number": serialNumber.Val,
352 "vendor-id": vendorID.Val, "onu-id": onuID.Val, "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500353
Himani Chawlab4c25912020-11-12 17:16:38 +0530354 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ChildDeviceDetected")
355 device, err := rhp.deviceMgr.ChildDeviceDetected(rpcCtx, pID.Id, portNo.Val, dt.Val, chnlID.Val, vendorID.Val, serialNumber.Val, onuID.Val)
Mahir Gunyel6deaa242019-06-27 04:53:33 -0700356 if err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530357 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 -0400358 }
khenaidoo442e7c72020-03-10 16:13:48 -0400359 return device, err
khenaidoob9203542018-09-17 22:56:37 -0400360}
361
npujar1d86a522019-11-14 17:11:16 +0530362// DeviceStateUpdate updates device status
Rohan Agrawal31f21802020-06-12 05:38:46 +0000363func (rhp *AdapterRequestHandlerProxy) DeviceStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500364 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000365 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400366 err := errors.New("invalid-number-of-args")
367 return nil, err
368 }
npujar1d86a522019-11-14 17:11:16 +0530369 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500370 operStatus := &ic.IntType{}
371 connStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500372 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400373 for _, arg := range args {
374 switch arg.Key {
375 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530376 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000377 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400378 return nil, err
379 }
380 case "oper_status":
381 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000382 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400383 return nil, err
384 }
khenaidoob9203542018-09-17 22:56:37 -0400385 case "connect_status":
386 if err := ptypes.UnmarshalAny(arg.Value, connStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000387 logger.Warnw(ctx, "cannot-unmarshal-connStatus", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400388 return nil, err
389 }
khenaidoo297cd252019-02-07 22:10:23 -0500390 case kafka.TransactionKey:
391 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530392 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500393 return nil, err
394 }
khenaidoob9203542018-09-17 22:56:37 -0400395 }
396 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530397 logger.Debugw(ctx, "device-state-update", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus,
398 "conn-status": connStatus, "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500399
Himani Chawlab4c25912020-11-12 17:16:38 +0530400 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DeviceStateUpdate")
401
402 if err := rhp.deviceMgr.UpdateDeviceStatus(rpcCtx, deviceID.Id, voltha.OperStatus_Types(operStatus.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400403 voltha.ConnectStatus_Types(connStatus.Val)); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000404 logger.Debugw(ctx, "unable-to-update-device-status", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400405 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400406 }
khenaidoo442e7c72020-03-10 16:13:48 -0400407 return &empty.Empty{}, nil
khenaidoo92e62c52018-10-03 14:02:54 -0400408}
409
npujar1d86a522019-11-14 17:11:16 +0530410// ChildrenStateUpdate updates child device status
Rohan Agrawal31f21802020-06-12 05:38:46 +0000411func (rhp *AdapterRequestHandlerProxy) ChildrenStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500412 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000413 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo4d4802d2018-10-04 21:59:49 -0400414 err := errors.New("invalid-number-of-args")
415 return nil, err
416 }
npujar1d86a522019-11-14 17:11:16 +0530417 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500418 operStatus := &ic.IntType{}
419 connStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500420 transactionID := &ic.StrType{}
khenaidoo4d4802d2018-10-04 21:59:49 -0400421 for _, arg := range args {
422 switch arg.Key {
423 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530424 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000425 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400426 return nil, err
427 }
428 case "oper_status":
429 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000430 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400431 return nil, err
432 }
433 case "connect_status":
434 if err := ptypes.UnmarshalAny(arg.Value, connStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000435 logger.Warnw(ctx, "cannot-unmarshal-connStatus", log.Fields{"error": err})
khenaidoo4d4802d2018-10-04 21:59:49 -0400436 return nil, err
437 }
khenaidoo297cd252019-02-07 22:10:23 -0500438 case kafka.TransactionKey:
439 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530440 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500441 return nil, err
442 }
khenaidoo4d4802d2018-10-04 21:59:49 -0400443 }
444 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530445 logger.Debugw(ctx, "children-state-update", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus,
446 "conn-status": connStatus, "transaction-id": transactionID.Val})
447 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ChildrenStateUpdate")
khenaidoo4d4802d2018-10-04 21:59:49 -0400448 // 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 +0530449 if err := rhp.deviceMgr.UpdateChildrenStatus(rpcCtx, deviceID.Id, voltha.OperStatus_Types(operStatus.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400450 voltha.ConnectStatus_Types(connStatus.Val)); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000451 logger.Debugw(ctx, "unable-to-update-children-status", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400452 return nil, err
453 }
454 return &empty.Empty{}, nil
khenaidoo4d4802d2018-10-04 21:59:49 -0400455}
456
npujar1d86a522019-11-14 17:11:16 +0530457// PortsStateUpdate updates the ports state related to the device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000458func (rhp *AdapterRequestHandlerProxy) PortsStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo3ab34882019-05-02 21:33:30 -0400459 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000460 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo3ab34882019-05-02 21:33:30 -0400461 err := errors.New("invalid-number-of-args")
462 return nil, err
463 }
npujar1d86a522019-11-14 17:11:16 +0530464 deviceID := &voltha.ID{}
Kent Hagerman2a07b862020-06-19 15:23:07 -0400465 portTypeFilter := &ic.IntType{}
khenaidoo3ab34882019-05-02 21:33:30 -0400466 operStatus := &ic.IntType{}
467 transactionID := &ic.StrType{}
468 for _, arg := range args {
469 switch arg.Key {
470 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530471 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000472 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400473 return nil, err
474 }
Kent Hagerman2a07b862020-06-19 15:23:07 -0400475 case "port_type_filter":
476 if err := ptypes.UnmarshalAny(arg.Value, portTypeFilter); err != nil {
477 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
478 return nil, err
479 }
khenaidoo3ab34882019-05-02 21:33:30 -0400480 case "oper_status":
481 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000482 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400483 return nil, err
484 }
485 case kafka.TransactionKey:
486 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530487 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo3ab34882019-05-02 21:33:30 -0400488 return nil, err
489 }
490 }
491 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530492 logger.Debugw(ctx, "ports-state-update", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus, "transaction-id": transactionID.Val})
493 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "PortsStateUpdate")
494 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 +0000495 logger.Debugw(ctx, "unable-to-update-ports-state", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400496 return nil, err
khenaidoo3ab34882019-05-02 21:33:30 -0400497 }
khenaidoo442e7c72020-03-10 16:13:48 -0400498 return &empty.Empty{}, nil
khenaidoo3ab34882019-05-02 21:33:30 -0400499}
500
npujar1d86a522019-11-14 17:11:16 +0530501// PortStateUpdate updates the port state of the device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000502func (rhp *AdapterRequestHandlerProxy) PortStateUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500503 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000504 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo92e62c52018-10-03 14:02:54 -0400505 err := errors.New("invalid-number-of-args")
506 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400507 }
npujar1d86a522019-11-14 17:11:16 +0530508 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500509 portType := &ic.IntType{}
510 portNo := &ic.IntType{}
511 operStatus := &ic.IntType{}
khenaidoo297cd252019-02-07 22:10:23 -0500512 transactionID := &ic.StrType{}
khenaidoo92e62c52018-10-03 14:02:54 -0400513 for _, arg := range args {
514 switch arg.Key {
515 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530516 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000517 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400518 return nil, err
519 }
520 case "oper_status":
521 if err := ptypes.UnmarshalAny(arg.Value, operStatus); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000522 logger.Warnw(ctx, "cannot-unmarshal-operStatus", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400523 return nil, err
524 }
525 case "port_type":
526 if err := ptypes.UnmarshalAny(arg.Value, portType); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000527 logger.Warnw(ctx, "cannot-unmarshal-porttype", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400528 return nil, err
529 }
530 case "port_no":
531 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000532 logger.Warnw(ctx, "cannot-unmarshal-portno", log.Fields{"error": err})
khenaidoo92e62c52018-10-03 14:02:54 -0400533 return nil, err
534 }
khenaidoo297cd252019-02-07 22:10:23 -0500535 case kafka.TransactionKey:
536 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530537 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500538 return nil, err
539 }
khenaidoo92e62c52018-10-03 14:02:54 -0400540 }
541 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530542 logger.Debugw(ctx, "port-state-update", log.Fields{"device-id": deviceID.Id, "oper-status": operStatus,
543 "port-type": portType, "port-no": portNo, "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500544
Himani Chawlab4c25912020-11-12 17:16:38 +0530545 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "PortStateUpdate")
546
547 if err := rhp.deviceMgr.UpdatePortState(rpcCtx, deviceID.Id, voltha.Port_PortType(portType.Val), uint32(portNo.Val),
khenaidoo442e7c72020-03-10 16:13:48 -0400548 voltha.OperStatus_Types(operStatus.Val)); err != nil {
549 // If the error doesn't change behavior and is essentially ignored, it is not an error, it is a
550 // warning.
551 // TODO: VOL-2707
Rohan Agrawal31f21802020-06-12 05:38:46 +0000552 logger.Debugw(ctx, "unable-to-update-port-state", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400553 return nil, err
khenaidoo92e62c52018-10-03 14:02:54 -0400554 }
khenaidoo442e7c72020-03-10 16:13:48 -0400555 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400556}
557
npujar1d86a522019-11-14 17:11:16 +0530558// DeleteAllPorts deletes all ports of device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000559func (rhp *AdapterRequestHandlerProxy) DeleteAllPorts(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo0a822f92019-05-08 15:15:57 -0400560 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000561 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400562 err := errors.New("invalid-number-of-args")
563 return nil, err
564 }
npujar1d86a522019-11-14 17:11:16 +0530565 deviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400566 transactionID := &ic.StrType{}
567 for _, arg := range args {
568 switch arg.Key {
569 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530570 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000571 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400572 return nil, err
573 }
574 case kafka.TransactionKey:
575 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530576 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400577 return nil, err
578 }
579 }
580 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530581 logger.Debugw(ctx, "delete-all-ports", log.Fields{"device-id": deviceID.Id, "transaction-id": transactionID.Val})
582 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DeleteAllPorts")
583 if err := rhp.deviceMgr.DeleteAllPorts(rpcCtx, deviceID.Id); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000584 logger.Debugw(ctx, "unable-to-delete-ports", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400585 return nil, err
khenaidoo0a822f92019-05-08 15:15:57 -0400586 }
khenaidoo442e7c72020-03-10 16:13:48 -0400587 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400588}
589
Kent Hagerman2a07b862020-06-19 15:23:07 -0400590// GetDevicePort returns a single port
591func (rhp *AdapterRequestHandlerProxy) GetDevicePort(ctx context.Context, args []*ic.Argument) (*voltha.Port, error) {
592 if len(args) < 3 {
593 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
594 err := errors.New("invalid-number-of-args")
595 return nil, err
596 }
597 deviceID := &voltha.ID{}
598 portNo := &ic.IntType{}
599 transactionID := &ic.StrType{}
600 for _, arg := range args {
601 switch arg.Key {
602 case "device_id":
603 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
604 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
605 return nil, err
606 }
607 case "port_no":
608 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
609 logger.Warnw(ctx, "cannot-unmarshal-port-no", log.Fields{"error": err})
610 return nil, err
611 }
612 case kafka.TransactionKey:
613 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530614 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
Kent Hagerman2a07b862020-06-19 15:23:07 -0400615 return nil, err
616 }
617 }
618 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530619 logger.Debugw(ctx, "get-device-port", log.Fields{"device-id": deviceID.Id, "port-no": portNo.Val, "transaction-id": transactionID.Val})
620 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "GetDevicePort")
Kent Hagerman2a07b862020-06-19 15:23:07 -0400621
Himani Chawlab4c25912020-11-12 17:16:38 +0530622 return rhp.deviceMgr.GetDevicePort(rpcCtx, deviceID.Id, uint32(portNo.Val))
Kent Hagerman2a07b862020-06-19 15:23:07 -0400623}
624
625// ListDevicePorts returns all ports belonging to the device
626func (rhp *AdapterRequestHandlerProxy) ListDevicePorts(ctx context.Context, args []*ic.Argument) (*voltha.Ports, error) {
627 if len(args) < 2 {
628 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
629 err := errors.New("invalid-number-of-args")
630 return nil, err
631 }
632 deviceID := &voltha.ID{}
633 transactionID := &ic.StrType{}
634 for _, arg := range args {
635 switch arg.Key {
636 case "device_id":
637 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
638 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
639 return nil, err
640 }
641 case kafka.TransactionKey:
642 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530643 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
Kent Hagerman2a07b862020-06-19 15:23:07 -0400644 return nil, err
645 }
646 }
647 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530648 logger.Debugw(ctx, "list-device-ports", log.Fields{"device-id": deviceID.Id, "transaction-id": transactionID.Val})
649 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ListDevicePorts")
650 return rhp.deviceMgr.ListDevicePorts(rpcCtx, deviceID)
Kent Hagerman2a07b862020-06-19 15:23:07 -0400651}
652
npujar1d86a522019-11-14 17:11:16 +0530653// ChildDevicesLost indicates that a parent device is in a state (Disabled) where it cannot manage the child devices.
654// This will trigger the Core to disable all the child devices.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000655func (rhp *AdapterRequestHandlerProxy) ChildDevicesLost(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo0a822f92019-05-08 15:15:57 -0400656 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000657 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400658 err := errors.New("invalid-number-of-args")
659 return nil, err
660 }
npujar1d86a522019-11-14 17:11:16 +0530661 parentDeviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400662 transactionID := &ic.StrType{}
663 for _, arg := range args {
664 switch arg.Key {
665 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530666 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000667 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400668 return nil, err
669 }
670 case kafka.TransactionKey:
671 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530672 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400673 return nil, err
674 }
675 }
676 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530677 logger.Debugw(ctx, "child-devices-lost", log.Fields{"device-id": parentDeviceID.Id, "transaction-id": transactionID.Val})
khenaidoo0a822f92019-05-08 15:15:57 -0400678
Himani Chawlab4c25912020-11-12 17:16:38 +0530679 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ChildDevicesLost")
680
681 if err := rhp.deviceMgr.ChildDevicesLost(rpcCtx, parentDeviceID.Id); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000682 logger.Debugw(ctx, "unable-to-disable-child-devices", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400683 return nil, err
khenaidoo0a822f92019-05-08 15:15:57 -0400684 }
khenaidoo442e7c72020-03-10 16:13:48 -0400685 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400686}
687
npujar1d86a522019-11-14 17:11:16 +0530688// ChildDevicesDetected invoked by an adapter when child devices are found, typically after after a disable/enable sequence.
689// This will trigger the Core to Enable all the child devices of that parent.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000690func (rhp *AdapterRequestHandlerProxy) ChildDevicesDetected(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo0a822f92019-05-08 15:15:57 -0400691 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000692 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoo0a822f92019-05-08 15:15:57 -0400693 err := errors.New("invalid-number-of-args")
694 return nil, err
695 }
npujar1d86a522019-11-14 17:11:16 +0530696 parentDeviceID := &voltha.ID{}
khenaidoo0a822f92019-05-08 15:15:57 -0400697 transactionID := &ic.StrType{}
698 for _, arg := range args {
699 switch arg.Key {
700 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530701 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000702 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400703 return nil, err
704 }
705 case kafka.TransactionKey:
706 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530707 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo0a822f92019-05-08 15:15:57 -0400708 return nil, err
709 }
710 }
711 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530712 logger.Debugw(ctx, "child-devices-detected", log.Fields{"parent-device-id": parentDeviceID.Id, "transaction-id": transactionID.Val})
713 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ChildDevicesDetected")
khenaidoo0a822f92019-05-08 15:15:57 -0400714
Himani Chawlab4c25912020-11-12 17:16:38 +0530715 if err := rhp.deviceMgr.ChildDevicesDetected(rpcCtx, parentDeviceID.Id); err != nil {
divyadesaicb8b59d2020-08-18 09:55:47 +0000716 logger.Debugw(ctx, "child-devices-detection-failed", log.Fields{"parent-device-id": parentDeviceID.Id, "error": err})
khenaidoo59ef7be2019-06-21 12:40:28 -0400717 return nil, err
718 }
khenaidoo442e7c72020-03-10 16:13:48 -0400719 return &empty.Empty{}, nil
khenaidoo0a822f92019-05-08 15:15:57 -0400720}
721
npujar1d86a522019-11-14 17:11:16 +0530722// PortCreated adds port to device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000723func (rhp *AdapterRequestHandlerProxy) PortCreated(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo54e0ddf2019-02-27 16:21:33 -0500724 if len(args) < 3 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000725 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400726 err := errors.New("invalid-number-of-args")
727 return nil, err
728 }
npujar1d86a522019-11-14 17:11:16 +0530729 deviceID := &voltha.ID{}
khenaidoob9203542018-09-17 22:56:37 -0400730 port := &voltha.Port{}
khenaidoo297cd252019-02-07 22:10:23 -0500731 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400732 for _, arg := range args {
733 switch arg.Key {
734 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530735 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000736 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400737 return nil, err
738 }
739 case "port":
740 if err := ptypes.UnmarshalAny(arg.Value, port); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000741 logger.Warnw(ctx, "cannot-unmarshal-port", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400742 return nil, err
743 }
khenaidoo297cd252019-02-07 22:10:23 -0500744 case kafka.TransactionKey:
745 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530746 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500747 return nil, err
748 }
khenaidoob9203542018-09-17 22:56:37 -0400749 }
750 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530751 logger.Debugw(ctx, "port-created", log.Fields{"device-id": deviceID.Id, "port": port, "transaction-id": transactionID.Val})
752 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "PortCreated")
khenaidoo297cd252019-02-07 22:10:23 -0500753
Himani Chawlab4c25912020-11-12 17:16:38 +0530754 if err := rhp.deviceMgr.AddPort(rpcCtx, deviceID.Id, port); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000755 logger.Debugw(ctx, "unable-to-add-port", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400756 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400757 }
khenaidoo442e7c72020-03-10 16:13:48 -0400758 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400759}
760
npujar1d86a522019-11-14 17:11:16 +0530761// DevicePMConfigUpdate initializes the pm configs as defined by the adapter.
Rohan Agrawal31f21802020-06-12 05:38:46 +0000762func (rhp *AdapterRequestHandlerProxy) DevicePMConfigUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoob3127472019-07-24 21:04:55 -0400763 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000764 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoob9203542018-09-17 22:56:37 -0400765 err := errors.New("invalid-number-of-args")
766 return nil, err
767 }
768 pmConfigs := &voltha.PmConfigs{}
khenaidoo297cd252019-02-07 22:10:23 -0500769 transactionID := &ic.StrType{}
khenaidoob9203542018-09-17 22:56:37 -0400770 for _, arg := range args {
771 switch arg.Key {
772 case "device_pm_config":
773 if err := ptypes.UnmarshalAny(arg.Value, pmConfigs); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000774 logger.Warnw(ctx, "cannot-unmarshal-pm-config", log.Fields{"error": err})
khenaidoob9203542018-09-17 22:56:37 -0400775 return nil, err
776 }
khenaidoo297cd252019-02-07 22:10:23 -0500777 case kafka.TransactionKey:
778 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530779 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500780 return nil, err
781 }
khenaidoob9203542018-09-17 22:56:37 -0400782 }
783 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530784 logger.Debugw(ctx, "device-pm-config-update", log.Fields{"device-id": pmConfigs.Id, "configs": pmConfigs,
785 "transaction-id": transactionID.Val})
786 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DevicePMConfigUpdate")
khenaidoo297cd252019-02-07 22:10:23 -0500787
Himani Chawlab4c25912020-11-12 17:16:38 +0530788 if err := rhp.deviceMgr.InitPmConfigs(rpcCtx, pmConfigs.Id, pmConfigs); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000789 logger.Debugw(ctx, "unable-to-initialize-pm-configs", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400790 return nil, err
khenaidoob9203542018-09-17 22:56:37 -0400791 }
khenaidoo442e7c72020-03-10 16:13:48 -0400792 return &empty.Empty{}, nil
khenaidoob9203542018-09-17 22:56:37 -0400793}
khenaidoofdbad6e2018-11-06 22:26:38 -0500794
npujar1d86a522019-11-14 17:11:16 +0530795// PacketIn sends the incoming packet of device
Rohan Agrawal31f21802020-06-12 05:38:46 +0000796func (rhp *AdapterRequestHandlerProxy) PacketIn(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoo297cd252019-02-07 22:10:23 -0500797 if len(args) < 4 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000798 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoofdbad6e2018-11-06 22:26:38 -0500799 err := errors.New("invalid-number-of-args")
800 return nil, err
801 }
npujar1d86a522019-11-14 17:11:16 +0530802 deviceID := &voltha.ID{}
khenaidoo79232702018-12-04 11:00:41 -0500803 portNo := &ic.IntType{}
804 packet := &ic.Packet{}
khenaidoo297cd252019-02-07 22:10:23 -0500805 transactionID := &ic.StrType{}
khenaidoofdbad6e2018-11-06 22:26:38 -0500806 for _, arg := range args {
807 switch arg.Key {
808 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530809 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000810 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500811 return nil, err
812 }
813 case "port":
814 if err := ptypes.UnmarshalAny(arg.Value, portNo); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000815 logger.Warnw(ctx, "cannot-unmarshal-port-no", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500816 return nil, err
817 }
818 case "packet":
819 if err := ptypes.UnmarshalAny(arg.Value, packet); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000820 logger.Warnw(ctx, "cannot-unmarshal-packet", log.Fields{"error": err})
khenaidoofdbad6e2018-11-06 22:26:38 -0500821 return nil, err
822 }
khenaidoo297cd252019-02-07 22:10:23 -0500823 case kafka.TransactionKey:
824 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530825 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500826 return nil, err
827 }
khenaidoofdbad6e2018-11-06 22:26:38 -0500828 }
829 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530830 logger.Debugw(ctx, "packet-in", log.Fields{"device-id": deviceID.Id, "port": portNo.Val, "packet": packet,
831 "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500832
Himani Chawlab4c25912020-11-12 17:16:38 +0530833 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "PacketIn")
834
835 if err := rhp.deviceMgr.PacketIn(rpcCtx, deviceID.Id, uint32(portNo.Val), transactionID.Val, packet.Payload); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000836 logger.Debugw(ctx, "unable-to-receive-packet-from-adapter", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400837 return nil, err
838
839 }
840 return &empty.Empty{}, nil
khenaidoofdbad6e2018-11-06 22:26:38 -0500841}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500842
npujar1d86a522019-11-14 17:11:16 +0530843// UpdateImageDownload updates image download
Rohan Agrawal31f21802020-06-12 05:38:46 +0000844func (rhp *AdapterRequestHandlerProxy) UpdateImageDownload(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidoof5a5bfa2019-01-23 22:20:29 -0500845 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000846 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500847 err := errors.New("invalid-number-of-args")
848 return nil, err
849 }
npujar1d86a522019-11-14 17:11:16 +0530850 deviceID := &voltha.ID{}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500851 img := &voltha.ImageDownload{}
khenaidoo297cd252019-02-07 22:10:23 -0500852 transactionID := &ic.StrType{}
khenaidoof5a5bfa2019-01-23 22:20:29 -0500853 for _, arg := range args {
854 switch arg.Key {
855 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530856 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000857 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500858 return nil, err
859 }
860 case "image_download":
861 if err := ptypes.UnmarshalAny(arg.Value, img); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000862 logger.Warnw(ctx, "cannot-unmarshal-imgaeDownload", log.Fields{"error": err})
khenaidoof5a5bfa2019-01-23 22:20:29 -0500863 return nil, err
864 }
khenaidoo297cd252019-02-07 22:10:23 -0500865 case kafka.TransactionKey:
866 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530867 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidoo297cd252019-02-07 22:10:23 -0500868 return nil, err
869 }
khenaidoof5a5bfa2019-01-23 22:20:29 -0500870 }
871 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530872 logger.Debugw(ctx, "update-image-download", log.Fields{"device-id": deviceID.Id, "image-download": img,
873 "transaction-id": transactionID.Val})
khenaidoo297cd252019-02-07 22:10:23 -0500874
Himani Chawlab4c25912020-11-12 17:16:38 +0530875 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "UpdateImageDownload")
876
877 if err := rhp.deviceMgr.UpdateImageDownload(rpcCtx, deviceID.Id, img); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000878 logger.Debugw(ctx, "unable-to-update-image-download", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400879 return nil, err
khenaidoof5a5bfa2019-01-23 22:20:29 -0500880 }
khenaidoo442e7c72020-03-10 16:13:48 -0400881 return &empty.Empty{}, nil
khenaidoof5a5bfa2019-01-23 22:20:29 -0500882}
khenaidooba6b6c42019-08-02 09:11:56 -0400883
npujar1d86a522019-11-14 17:11:16 +0530884// ReconcileChildDevices reconciles child devices
Rohan Agrawal31f21802020-06-12 05:38:46 +0000885func (rhp *AdapterRequestHandlerProxy) ReconcileChildDevices(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
khenaidooba6b6c42019-08-02 09:11:56 -0400886 if len(args) < 2 {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000887 logger.Warn(ctx, "invalid-number-of-args", log.Fields{"args": args})
khenaidooba6b6c42019-08-02 09:11:56 -0400888 err := errors.New("invalid-number-of-args")
889 return nil, err
890 }
npujar1d86a522019-11-14 17:11:16 +0530891 parentDeviceID := &voltha.ID{}
khenaidooba6b6c42019-08-02 09:11:56 -0400892 transactionID := &ic.StrType{}
893 for _, arg := range args {
894 switch arg.Key {
895 case "parent_device_id":
npujar1d86a522019-11-14 17:11:16 +0530896 if err := ptypes.UnmarshalAny(arg.Value, parentDeviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000897 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
khenaidooba6b6c42019-08-02 09:11:56 -0400898 return nil, err
899 }
900 case kafka.TransactionKey:
901 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530902 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
khenaidooba6b6c42019-08-02 09:11:56 -0400903 return nil, err
904 }
905 }
906 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530907 logger.Debugw(ctx, "reconcile-child-devices", log.Fields{"parent-device-id": parentDeviceID.Id, "transaction-id": transactionID.Val})
khenaidooba6b6c42019-08-02 09:11:56 -0400908
Himani Chawlab4c25912020-11-12 17:16:38 +0530909 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "ReconcileChildDevices")
910
911 if err := rhp.deviceMgr.ReconcileChildDevices(rpcCtx, parentDeviceID.Id); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000912 logger.Debugw(ctx, "unable-to-reconcile-child-devices", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400913 return nil, err
khenaidooba6b6c42019-08-02 09:11:56 -0400914 }
khenaidoo442e7c72020-03-10 16:13:48 -0400915 return &empty.Empty{}, nil
khenaidooba6b6c42019-08-02 09:11:56 -0400916}
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700917
npujar1d86a522019-11-14 17:11:16 +0530918// DeviceReasonUpdate updates device reason
Rohan Agrawal31f21802020-06-12 05:38:46 +0000919func (rhp *AdapterRequestHandlerProxy) DeviceReasonUpdate(ctx context.Context, args []*ic.Argument) (*empty.Empty, error) {
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700920 if len(args) < 2 {
Himani Chawlab4c25912020-11-12 17:16:38 +0530921 logger.Warn(ctx, "device-reason-update-invalid-number-of-args", log.Fields{"args": args})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700922 err := errors.New("DeviceReasonUpdate: invalid-number-of-args")
923 return nil, err
924 }
npujar1d86a522019-11-14 17:11:16 +0530925 deviceID := &voltha.ID{}
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700926 reason := &ic.StrType{}
927 transactionID := &ic.StrType{}
928 for _, arg := range args {
929 switch arg.Key {
930 case "device_id":
npujar1d86a522019-11-14 17:11:16 +0530931 if err := ptypes.UnmarshalAny(arg.Value, deviceID); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000932 logger.Warnw(ctx, "cannot-unmarshal-device-id", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700933 return nil, err
934 }
935 case "device_reason":
936 if err := ptypes.UnmarshalAny(arg.Value, reason); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000937 logger.Warnw(ctx, "cannot-unmarshal-reason", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700938 return nil, err
939 }
940 case kafka.TransactionKey:
941 if err := ptypes.UnmarshalAny(arg.Value, transactionID); err != nil {
Himani Chawlab4c25912020-11-12 17:16:38 +0530942 logger.Warnw(ctx, "cannot-unmarshal-transaction-id", log.Fields{"error": err})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700943 return nil, err
944 }
945 }
946 }
Himani Chawlab4c25912020-11-12 17:16:38 +0530947 logger.Debugw(ctx, "device-reason-update", log.Fields{"device-id": deviceID.Id, "reason": reason.Val,
948 "transaction-id": transactionID.Val})
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700949
Himani Chawlab4c25912020-11-12 17:16:38 +0530950 rpcCtx := utils.WithRPCMetadataContext(log.WithSpanFromContext(context.TODO(), ctx), "DeviceReasonUpdate")
951
952 if err := rhp.deviceMgr.UpdateDeviceReason(rpcCtx, deviceID.Id, reason.Val); err != nil {
Rohan Agrawal31f21802020-06-12 05:38:46 +0000953 logger.Debugw(ctx, "unable-to-update-device-reason", log.Fields{"error": err})
khenaidoo442e7c72020-03-10 16:13:48 -0400954 return nil, err
955
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700956 }
khenaidoo442e7c72020-03-10 16:13:48 -0400957 return &empty.Empty{}, nil
Mahir Gunyelfdee9212019-10-16 16:52:21 -0700958}