Forward ONU events received by the maple_olt adapter to
the broadcom_onu adapter and handle them as required.
Change-Id: I7128cef40ab2a093ebbd72e8fb50a17e85e44a36
diff --git a/voltha/adapters/broadcom_onu/broadcom_onu.py b/voltha/adapters/broadcom_onu/broadcom_onu.py
index e02c9ed..a424831 100644
--- a/voltha/adapters/broadcom_onu/broadcom_onu.py
+++ b/voltha/adapters/broadcom_onu/broadcom_onu.py
@@ -20,7 +20,7 @@
from uuid import uuid4
import structlog
-from twisted.internet import reactor
+from twisted.internet import reactor, task
from twisted.internet.defer import DeferredQueue, inlineCallbacks
from zope.interface import implementer
@@ -143,6 +143,11 @@
def receive_inter_adapter_message(self, msg):
log.info('receive_inter_adapter_message', msg=msg)
+ proxy_address = msg['proxy_address']
+ assert proxy_address is not None
+
+ handler = self.devices_handlers[proxy_address.channel_id]
+ handler.event_messages.put(msg)
def suppress_alarm(self, filter):
raise NotImplementedError()
@@ -158,12 +163,65 @@
self.device_id = device_id
self.log = structlog.get_logger(device_id=device_id)
self.incoming_messages = DeferredQueue()
+ self.event_messages = DeferredQueue()
self.proxy_address = None
self.tx_id = 0
+ # Need to query ONU for number of supported uni ports
+ # For now, temporarily set number of ports to 1 - port #2
+ self.uni_ports = (2,)
+
+ # Handle received ONU event messages
+ reactor.callLater(0, self.handle_onu_events)
+
def receive_message(self, msg):
self.incoming_messages.put(msg)
+ @inlineCallbacks
+ def handle_onu_events(self):
+ event_msg = yield self.event_messages.get()
+
+ if event_msg['event'] == 'activation-completed':
+
+ if event_msg['event_data']['activation_successful'] == True:
+ for uni in self.uni_ports:
+ port_no = self.proxy_address.channel_id + uni
+ reactor.callLater(1,
+ self.message_exchange,
+ self.proxy_address.onu_id,
+ self.proxy_address.onu_session_id,
+ port_no)
+
+ device = self.adapter_agent.get_device(self.device_id)
+ device.oper_status = OperStatus.ACTIVE
+ self.adapter_agent.update_device(device)
+
+ else:
+ device = self.adapter_agent.get_device(self.device_id)
+ device.oper_status = OperStatus.FAILED
+ self.adapter_agent.update_device(device)
+
+ elif event_msg['event'] == 'deactivation-completed':
+ device = self.adapter_agent.get_device(self.device_id)
+ device.oper_status = OperStatus.DISCOVERED
+ self.adapter_agent.update_device(device)
+
+ elif event_msg['event'] == 'ranging-completed':
+
+ if event_msg['event_data']['ranging_successful'] == True:
+ device = self.adapter_agent.get_device(self.device_id)
+ device.oper_status = OperStatus.ACTIVATING
+ self.adapter_agent.update_device(device)
+
+ else:
+ device = self.adapter_agent.get_device(self.device_id)
+ device.oper_status = OperStatus.FAILED
+ self.adapter_agent.update_device(device)
+
+ # Handle next event
+ reactor.callLater(0, self.handle_onu_events)
+
+
def activate(self, device):
self.log.info('activating')
@@ -205,11 +263,7 @@
logical_device_id = parent_device.parent_id
assert logical_device_id
- # query ONU for number of supported uni ports
- # temporarily set number of ports to 1 - port #2
- uni_ports = (2,)
-
- for uni in uni_ports:
+ for uni in self.uni_ports:
# register physical ports
uni_port = Port(
port_no=uni,
@@ -244,14 +298,8 @@
device_port_no=uni_port.port_no
))
- reactor.callLater(10,
- self.message_exchange,
- self.proxy_address.onu_id,
- self.proxy_address.onu_session_id,
- port_no)
-
device = self.adapter_agent.get_device(device.id)
- device.oper_status = OperStatus.ACTIVE
+ device.oper_status = OperStatus.DISCOVERED
self.adapter_agent.update_device(device)
@inlineCallbacks