blob: 36459ed26ea7a779c144a9140f135376381c52c5 [file] [log] [blame]
khenaidoob9203542018-09-17 22:56:37 -04001#
khenaidoo6fdf0ba2018-11-02 14:38:33 -04002# Copyright 2018 the original author or authors.
khenaidoob9203542018-09-17 22:56:37 -04003#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17"""
khenaidoo6fdf0ba2018-11-02 14:38:33 -040018Agent to play gateway between CORE and an adapter.
khenaidoob9203542018-09-17 22:56:37 -040019"""
khenaidoob9203542018-09-17 22:56:37 -040020import structlog
khenaidoob9203542018-09-17 22:56:37 -040021from google.protobuf.message import Message
khenaidoo6fdf0ba2018-11-02 14:38:33 -040022from twisted.internet.defer import inlineCallbacks, returnValue
23
24from adapters.kafka.container_proxy import ContainerProxy
25from adapters.protos.common_pb2 import ID, ConnectStatus, OperStatus
26from adapters.protos.core_adapter_pb2 import StrType, BoolType, IntType
27from adapters.protos.device_pb2 import Device, Ports
28from adapters.protos.voltha_pb2 import CoreInstance
khenaidoob9203542018-09-17 22:56:37 -040029
30log = structlog.get_logger()
31
khenaidoob9203542018-09-17 22:56:37 -040032
khenaidoo6fdf0ba2018-11-02 14:38:33 -040033class CoreProxy(ContainerProxy):
khenaidoob9203542018-09-17 22:56:37 -040034
35 def __init__(self, kafka_proxy, core_topic, my_listening_topic):
khenaidoo6fdf0ba2018-11-02 14:38:33 -040036 super(CoreProxy, self).__init__(kafka_proxy, core_topic,
37 my_listening_topic)
khenaidoob9203542018-09-17 22:56:37 -040038
khenaidoo6fdf0ba2018-11-02 14:38:33 -040039 @ContainerProxy.wrap_request(CoreInstance)
khenaidoob9203542018-09-17 22:56:37 -040040 @inlineCallbacks
41 def register(self, adapter):
42 log.debug("register")
43 try:
44 res = yield self.invoke(rpc="Register", adapter=adapter)
45 log.info("registration-returned", res=res)
46 returnValue(res)
47 except Exception as e:
48 log.exception("registration-exception", e=e)
49 raise
50
khenaidoo6fdf0ba2018-11-02 14:38:33 -040051 @ContainerProxy.wrap_request(Device)
khenaidoob9203542018-09-17 22:56:37 -040052 @inlineCallbacks
53 def get_device(self, device_id):
54 log.debug("get-device")
55 id = ID()
56 id.id = device_id
57 res = yield self.invoke(rpc="GetDevice", device_id=id)
58 returnValue(res)
59
khenaidoo6fdf0ba2018-11-02 14:38:33 -040060 @ContainerProxy.wrap_request(Device)
khenaidoob9203542018-09-17 22:56:37 -040061 @inlineCallbacks
62 def get_child_device(self, parent_device_id, **kwargs):
63 raise NotImplementedError()
64
khenaidoo6fdf0ba2018-11-02 14:38:33 -040065 @ContainerProxy.wrap_request(Ports)
khenaidoo92e62c52018-10-03 14:02:54 -040066 @inlineCallbacks
khenaidoob9203542018-09-17 22:56:37 -040067 def get_ports(self, device_id, port_type):
khenaidoo92e62c52018-10-03 14:02:54 -040068 id = ID()
69 id.id = device_id
70 p_type = IntType()
71 p_type.val = port_type
72 res = yield self.invoke(rpc="GetPorts",
73 device_id=id,
74 port_type=p_type)
75 returnValue(res)
khenaidoob9203542018-09-17 22:56:37 -040076
77 def get_child_devices(self, parent_device_id):
78 raise NotImplementedError()
79
80 def get_child_device_with_proxy_address(self, proxy_address):
81 raise NotImplementedError()
82
83 def _to_proto(self, **kwargs):
84 encoded = {}
khenaidoo6fdf0ba2018-11-02 14:38:33 -040085 for k, v in kwargs.iteritems():
khenaidoob9203542018-09-17 22:56:37 -040086 if isinstance(v, Message):
87 encoded[k] = v
88 elif type(v) == int:
89 i_proto = IntType()
90 i_proto.val = v
91 encoded[k] = i_proto
92 elif type(v) == str:
93 s_proto = StrType()
94 s_proto.val = v
95 encoded[k] = s_proto
96 elif type(v) == bool:
97 b_proto = BoolType()
98 b_proto.val = v
99 encoded[k] = b_proto
100 return encoded
101
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400102 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400103 @inlineCallbacks
104 def child_device_detected(self,
105 parent_device_id,
106 parent_port_no,
107 child_device_type,
108 channel_id,
109 **kw):
110 id = ID()
111 id.id = parent_device_id
112 ppn = IntType()
113 ppn.val = parent_port_no
114 cdt = StrType()
115 cdt.val = child_device_type
116 channel = IntType()
117 channel.val = channel_id
118
119 args = self._to_proto(**kw)
120 res = yield self.invoke(rpc="ChildDeviceDetected",
121 parent_device_id=id,
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400122 parent_port_no=ppn,
123 child_device_type=cdt,
khenaidoob9203542018-09-17 22:56:37 -0400124 channel_id=channel,
125 **args)
126 returnValue(res)
127
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400128 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400129 @inlineCallbacks
130 def device_update(self, device):
131 log.debug("device_update")
132 res = yield self.invoke(rpc="DeviceUpdate", device=device)
133 returnValue(res)
134
135 def child_device_removed(parent_device_id, child_device_id):
136 raise NotImplementedError()
137
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400138 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400139 @inlineCallbacks
140 def device_state_update(self, device_id,
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400141 oper_status=None,
142 connect_status=None):
khenaidoob9203542018-09-17 22:56:37 -0400143 id = ID()
144 id.id = device_id
145 o_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400146 if oper_status or oper_status == OperStatus.UNKNOWN:
khenaidoob9203542018-09-17 22:56:37 -0400147 o_status.val = oper_status
148 else:
149 o_status.val = -1
150 c_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400151 if connect_status or connect_status == ConnectStatus.UNKNOWN:
khenaidoob9203542018-09-17 22:56:37 -0400152 c_status.val = connect_status
153 else:
154 c_status.val = -1
khenaidoob9203542018-09-17 22:56:37 -0400155
156 res = yield self.invoke(rpc="DeviceStateUpdate",
157 device_id=id,
158 oper_status=o_status,
159 connect_status=c_status)
160 returnValue(res)
161
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400162 @ContainerProxy.wrap_request(None)
khenaidoo4d4802d2018-10-04 21:59:49 -0400163 @inlineCallbacks
164 def children_state_update(self, device_id,
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400165 oper_status=None,
166 connect_status=None):
khenaidoo4d4802d2018-10-04 21:59:49 -0400167 id = ID()
168 id.id = device_id
169 o_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400170 if oper_status or oper_status == OperStatus.UNKNOWN:
khenaidoo4d4802d2018-10-04 21:59:49 -0400171 o_status.val = oper_status
172 else:
173 o_status.val = -1
174 c_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400175 if connect_status or connect_status == ConnectStatus.UNKNOWN:
khenaidoo4d4802d2018-10-04 21:59:49 -0400176 c_status.val = connect_status
177 else:
178 c_status.val = -1
179
180 res = yield self.invoke(rpc="ChildrenStateUpdate",
181 device_id=id,
182 oper_status=o_status,
183 connect_status=c_status)
184 returnValue(res)
185
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400186 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400187 @inlineCallbacks
khenaidoo92e62c52018-10-03 14:02:54 -0400188 def port_state_update(self,
189 device_id,
190 port_type,
191 port_no,
192 oper_status):
193 id = ID()
194 id.id = device_id
195 pt = IntType()
196 pt.val = port_type
197 pNo = IntType()
198 pNo.val = port_no
199 o_status = IntType()
200 o_status.val = oper_status
201
202 res = yield self.invoke(rpc="PortStateUpdate",
203 device_id=id,
204 port_type=pt,
205 port_no=pNo,
206 oper_status=o_status)
207 returnValue(res)
208
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400209 @ContainerProxy.wrap_request(None)
khenaidoo92e62c52018-10-03 14:02:54 -0400210 @inlineCallbacks
khenaidoob9203542018-09-17 22:56:37 -0400211 def child_devices_state_update(self, parent_device_id,
212 oper_status=None,
khenaidoo92e62c52018-10-03 14:02:54 -0400213 connect_status=None):
khenaidoob9203542018-09-17 22:56:37 -0400214
215 id = ID()
216 id.id = parent_device_id
217 o_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400218 if oper_status or oper_status == OperStatus.UNKNOWN:
khenaidoob9203542018-09-17 22:56:37 -0400219 o_status.val = oper_status
220 else:
221 o_status.val = -1
222 c_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400223 if connect_status or connect_status == ConnectStatus.UNKNOWN:
khenaidoob9203542018-09-17 22:56:37 -0400224 c_status.val = connect_status
225 else:
226 c_status.val = -1
khenaidoob9203542018-09-17 22:56:37 -0400227
228 res = yield self.invoke(rpc="child_devices_state_update",
229 parent_device_id=id,
230 oper_status=o_status,
khenaidoo92e62c52018-10-03 14:02:54 -0400231 connect_status=c_status)
khenaidoob9203542018-09-17 22:56:37 -0400232 returnValue(res)
233
khenaidoob9203542018-09-17 22:56:37 -0400234 def child_devices_removed(parent_device_id):
235 raise NotImplementedError()
236
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400237 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400238 @inlineCallbacks
239 def device_pm_config_update(self, device_pm_config, init=False):
240 log.debug("device_pm_config_update")
241 b = BoolType()
242 b.val = init
243 res = yield self.invoke(rpc="DevicePMConfigUpdate",
244 device_pm_config=device_pm_config, init=b)
245 returnValue(res)
246
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400247 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400248 @inlineCallbacks
249 def port_created(self, device_id, port):
250 log.debug("port_created")
251 proto_id = ID()
252 proto_id.id = device_id
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400253 res = yield self.invoke(rpc="PortCreated", device_id=proto_id,
254 port=port)
khenaidoob9203542018-09-17 22:56:37 -0400255 returnValue(res)
256
khenaidoob9203542018-09-17 22:56:37 -0400257 def port_removed(device_id, port):
258 raise NotImplementedError()
259
260 def ports_enabled(device_id):
261 raise NotImplementedError()
262
263 def ports_disabled(device_id):
264 raise NotImplementedError()
265
266 def ports_oper_status_update(device_id, oper_status):
267 raise NotImplementedError()
268
269 def image_download_update(img_dnld):
270 raise NotImplementedError()
271
272 def image_download_deleted(img_dnld):
273 raise NotImplementedError()
274
275 def packet_in(device_id, egress_port_no, packet):
276 raise NotImplementedError()