VOL-1858 Notify openomci onu device that ports are up
This allows subscribing to port up/down events and reflecting
proper uni link state in the core and onos
Release 2.3.6
Change-Id: If990e7228d2fbab4cbf509f1af5e4a6735b784a6
diff --git a/VERSION b/VERSION
index a2a044c..e75da3e 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.3.6-dev
+2.3.6
diff --git a/pyvoltha/adapters/extensions/omci/onu_device_entry.py b/pyvoltha/adapters/extensions/omci/onu_device_entry.py
index 68a3e04..10d8aac 100644
--- a/pyvoltha/adapters/extensions/omci/onu_device_entry.py
+++ b/pyvoltha/adapters/extensions/omci/onu_device_entry.py
@@ -28,6 +28,7 @@
from pyvoltha.adapters.extensions.omci.tasks.omci_modify_request import OmciModifyRequest
from pyvoltha.adapters.extensions.omci.omci_me import OntGFrame
from pyvoltha.adapters.extensions.omci.state_machines.image_agent import ImageAgent
+from pyvoltha.adapters.extensions.events.device_events.onu.onu_los_event import OnuLosEvent
from twisted.internet import reactor, defer
from enum import IntEnum
@@ -49,6 +50,7 @@
MibDatabaseSyncEvent = 1 # MIB database sync changed
OmciCapabilitiesEvent = 2 # OMCI ME and message type capabilities
AlarmDatabaseSyncEvent = 3 # Alarm database sync changed
+ PortEvent = 4 # Port link state change
# TODO: Add other events here as needed
@@ -641,3 +643,25 @@
def get_image_download_status(self, image_name):
return self._image_agent.get_image_status(image_name)
+ def raise_onu_event(self, event, active):
+ # Notify any event listeners
+ if isinstance(event, OnuLosEvent):
+ topic = OnuDeviceEntry.event_bus_topic(self.device_id,
+ OnuDeviceEvents.PortEvent)
+ context = event.get_context_data()
+
+ # an active port LOS event (or alarm) means the port is down. using meaningful status for consumers
+ port_status = False
+ if active is False:
+ port_status = True
+
+ msg = {
+ 'onu_id': context['onu-id'],
+ 'port_number': context['onu-intf-id'],
+ 'serial_number': context['onu-serial-number'],
+ 'port_status': port_status
+ }
+ self.log.debug('onu-port-event-publish', topic=topic, msg=msg)
+ self.event_bus.publish(topic=topic, msg=msg)
+ else:
+ self.log.warn('unhandled-onu-device-event', classname=event.__class__.__name__)
diff --git a/pyvoltha/adapters/extensions/omci/state_machines/alarm_sync.py b/pyvoltha/adapters/extensions/omci/state_machines/alarm_sync.py
index 364bc58..6efa260 100644
--- a/pyvoltha/adapters/extensions/omci/state_machines/alarm_sync.py
+++ b/pyvoltha/adapters/extensions/omci/state_machines/alarm_sync.py
@@ -533,6 +533,7 @@
alarm = self.omci_alarm_to_onu_alarm(class_id, entity_id, alarm_number)
if alarm is not None:
alarm.send(True)
+ self._device.raise_onu_event(alarm, active=True)
def clear_alarm(self, class_id, entity_id, alarm_number):
"""
@@ -551,6 +552,7 @@
alarm = self.omci_alarm_to_onu_alarm(class_id, entity_id, alarm_number)
if alarm is not None:
alarm.send(False)
+ self._device.raise_onu_event(alarm, active=False)
def query_mib(self, class_id=None, instance_id=None):
"""