blob: cc3f081948d58ed5e33f3d30d3e3194fb8c36558 [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
khenaidoo91ecfd62018-11-04 17:13:42 -050041 def register(self, adapter, deviceTypes):
khenaidoob9203542018-09-17 22:56:37 -040042 log.debug("register")
43 try:
khenaidoo91ecfd62018-11-04 17:13:42 -050044 res = yield self.invoke(rpc="Register",
45 adapter=adapter,
46 deviceTypes=deviceTypes)
khenaidoob9203542018-09-17 22:56:37 -040047 log.info("registration-returned", res=res)
48 returnValue(res)
49 except Exception as e:
50 log.exception("registration-exception", e=e)
51 raise
52
khenaidoo6fdf0ba2018-11-02 14:38:33 -040053 @ContainerProxy.wrap_request(Device)
khenaidoob9203542018-09-17 22:56:37 -040054 @inlineCallbacks
55 def get_device(self, device_id):
56 log.debug("get-device")
57 id = ID()
58 id.id = device_id
59 res = yield self.invoke(rpc="GetDevice", device_id=id)
60 returnValue(res)
61
khenaidoo6fdf0ba2018-11-02 14:38:33 -040062 @ContainerProxy.wrap_request(Device)
khenaidoob9203542018-09-17 22:56:37 -040063 @inlineCallbacks
64 def get_child_device(self, parent_device_id, **kwargs):
65 raise NotImplementedError()
66
khenaidoo6fdf0ba2018-11-02 14:38:33 -040067 @ContainerProxy.wrap_request(Ports)
khenaidoo92e62c52018-10-03 14:02:54 -040068 @inlineCallbacks
khenaidoob9203542018-09-17 22:56:37 -040069 def get_ports(self, device_id, port_type):
khenaidoo92e62c52018-10-03 14:02:54 -040070 id = ID()
71 id.id = device_id
72 p_type = IntType()
73 p_type.val = port_type
74 res = yield self.invoke(rpc="GetPorts",
75 device_id=id,
76 port_type=p_type)
77 returnValue(res)
khenaidoob9203542018-09-17 22:56:37 -040078
79 def get_child_devices(self, parent_device_id):
80 raise NotImplementedError()
81
82 def get_child_device_with_proxy_address(self, proxy_address):
83 raise NotImplementedError()
84
85 def _to_proto(self, **kwargs):
86 encoded = {}
khenaidoo6fdf0ba2018-11-02 14:38:33 -040087 for k, v in kwargs.iteritems():
khenaidoob9203542018-09-17 22:56:37 -040088 if isinstance(v, Message):
89 encoded[k] = v
90 elif type(v) == int:
91 i_proto = IntType()
92 i_proto.val = v
93 encoded[k] = i_proto
94 elif type(v) == str:
95 s_proto = StrType()
96 s_proto.val = v
97 encoded[k] = s_proto
98 elif type(v) == bool:
99 b_proto = BoolType()
100 b_proto.val = v
101 encoded[k] = b_proto
102 return encoded
103
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400104 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400105 @inlineCallbacks
106 def child_device_detected(self,
107 parent_device_id,
108 parent_port_no,
109 child_device_type,
110 channel_id,
111 **kw):
112 id = ID()
113 id.id = parent_device_id
114 ppn = IntType()
115 ppn.val = parent_port_no
116 cdt = StrType()
117 cdt.val = child_device_type
118 channel = IntType()
119 channel.val = channel_id
120
121 args = self._to_proto(**kw)
122 res = yield self.invoke(rpc="ChildDeviceDetected",
123 parent_device_id=id,
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400124 parent_port_no=ppn,
125 child_device_type=cdt,
khenaidoob9203542018-09-17 22:56:37 -0400126 channel_id=channel,
127 **args)
128 returnValue(res)
129
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400130 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400131 @inlineCallbacks
132 def device_update(self, device):
133 log.debug("device_update")
134 res = yield self.invoke(rpc="DeviceUpdate", device=device)
135 returnValue(res)
136
137 def child_device_removed(parent_device_id, child_device_id):
138 raise NotImplementedError()
139
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400140 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400141 @inlineCallbacks
142 def device_state_update(self, device_id,
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400143 oper_status=None,
144 connect_status=None):
khenaidoob9203542018-09-17 22:56:37 -0400145 id = ID()
146 id.id = device_id
147 o_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400148 if oper_status or oper_status == OperStatus.UNKNOWN:
khenaidoob9203542018-09-17 22:56:37 -0400149 o_status.val = oper_status
150 else:
151 o_status.val = -1
152 c_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400153 if connect_status or connect_status == ConnectStatus.UNKNOWN:
khenaidoob9203542018-09-17 22:56:37 -0400154 c_status.val = connect_status
155 else:
156 c_status.val = -1
khenaidoob9203542018-09-17 22:56:37 -0400157
158 res = yield self.invoke(rpc="DeviceStateUpdate",
159 device_id=id,
160 oper_status=o_status,
161 connect_status=c_status)
162 returnValue(res)
163
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400164 @ContainerProxy.wrap_request(None)
khenaidoo4d4802d2018-10-04 21:59:49 -0400165 @inlineCallbacks
166 def children_state_update(self, device_id,
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400167 oper_status=None,
168 connect_status=None):
khenaidoo4d4802d2018-10-04 21:59:49 -0400169 id = ID()
170 id.id = device_id
171 o_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400172 if oper_status or oper_status == OperStatus.UNKNOWN:
khenaidoo4d4802d2018-10-04 21:59:49 -0400173 o_status.val = oper_status
174 else:
175 o_status.val = -1
176 c_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400177 if connect_status or connect_status == ConnectStatus.UNKNOWN:
khenaidoo4d4802d2018-10-04 21:59:49 -0400178 c_status.val = connect_status
179 else:
180 c_status.val = -1
181
182 res = yield self.invoke(rpc="ChildrenStateUpdate",
183 device_id=id,
184 oper_status=o_status,
185 connect_status=c_status)
186 returnValue(res)
187
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400188 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400189 @inlineCallbacks
khenaidoo92e62c52018-10-03 14:02:54 -0400190 def port_state_update(self,
191 device_id,
192 port_type,
193 port_no,
194 oper_status):
195 id = ID()
196 id.id = device_id
197 pt = IntType()
198 pt.val = port_type
199 pNo = IntType()
200 pNo.val = port_no
201 o_status = IntType()
202 o_status.val = oper_status
203
204 res = yield self.invoke(rpc="PortStateUpdate",
205 device_id=id,
206 port_type=pt,
207 port_no=pNo,
208 oper_status=o_status)
209 returnValue(res)
210
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400211 @ContainerProxy.wrap_request(None)
khenaidoo92e62c52018-10-03 14:02:54 -0400212 @inlineCallbacks
khenaidoob9203542018-09-17 22:56:37 -0400213 def child_devices_state_update(self, parent_device_id,
214 oper_status=None,
khenaidoo92e62c52018-10-03 14:02:54 -0400215 connect_status=None):
khenaidoob9203542018-09-17 22:56:37 -0400216
217 id = ID()
218 id.id = parent_device_id
219 o_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400220 if oper_status or oper_status == OperStatus.UNKNOWN:
khenaidoob9203542018-09-17 22:56:37 -0400221 o_status.val = oper_status
222 else:
223 o_status.val = -1
224 c_status = IntType()
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400225 if connect_status or connect_status == ConnectStatus.UNKNOWN:
khenaidoob9203542018-09-17 22:56:37 -0400226 c_status.val = connect_status
227 else:
228 c_status.val = -1
khenaidoob9203542018-09-17 22:56:37 -0400229
230 res = yield self.invoke(rpc="child_devices_state_update",
231 parent_device_id=id,
232 oper_status=o_status,
khenaidoo92e62c52018-10-03 14:02:54 -0400233 connect_status=c_status)
khenaidoob9203542018-09-17 22:56:37 -0400234 returnValue(res)
235
khenaidoob9203542018-09-17 22:56:37 -0400236 def child_devices_removed(parent_device_id):
237 raise NotImplementedError()
238
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400239 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400240 @inlineCallbacks
241 def device_pm_config_update(self, device_pm_config, init=False):
242 log.debug("device_pm_config_update")
243 b = BoolType()
244 b.val = init
245 res = yield self.invoke(rpc="DevicePMConfigUpdate",
246 device_pm_config=device_pm_config, init=b)
247 returnValue(res)
248
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400249 @ContainerProxy.wrap_request(None)
khenaidoob9203542018-09-17 22:56:37 -0400250 @inlineCallbacks
251 def port_created(self, device_id, port):
252 log.debug("port_created")
253 proto_id = ID()
254 proto_id.id = device_id
khenaidoo6fdf0ba2018-11-02 14:38:33 -0400255 res = yield self.invoke(rpc="PortCreated", device_id=proto_id,
256 port=port)
khenaidoob9203542018-09-17 22:56:37 -0400257 returnValue(res)
258
khenaidoob9203542018-09-17 22:56:37 -0400259 def port_removed(device_id, port):
260 raise NotImplementedError()
261
262 def ports_enabled(device_id):
263 raise NotImplementedError()
264
265 def ports_disabled(device_id):
266 raise NotImplementedError()
267
268 def ports_oper_status_update(device_id, oper_status):
269 raise NotImplementedError()
270
271 def image_download_update(img_dnld):
272 raise NotImplementedError()
273
274 def image_download_deleted(img_dnld):
275 raise NotImplementedError()
276
277 def packet_in(device_id, egress_port_no, packet):
278 raise NotImplementedError()