VOL-577:asfvolt16: add support for reporting XGPON registration ID from ONU

Change-Id: I2ed786da17698c47529d4b557cd6b7a1390d1f3f
diff --git a/voltha/adapters/asfvolt16_olt/asfvolt16_device_handler.py b/voltha/adapters/asfvolt16_olt/asfvolt16_device_handler.py
index 851dd11..1539246 100644
--- a/voltha/adapters/asfvolt16_olt/asfvolt16_device_handler.py
+++ b/voltha/adapters/asfvolt16_olt/asfvolt16_device_handler.py
@@ -927,10 +927,22 @@
             msg = {'proxy_address': child_device.proxy_address,
                    'event': 'activation-completed', 'event_data': ind_info}
 
+            balSubTermInd = {}
+            serial_number=(ind_info['_vendor_id'] +
+                           ind_info['_vendor_specific'])
+            balSubTermInd["serial_number"] = serial_number.__str__()
+            balSubTermInd["registration_id"] = ind_info['registration_id'].__str__()
+            self.log.info('onu_activated:registration_id',balSubTermInd["registration_id"])
+            balSubTermInd["device_id"] = (self.device_id).__str__()
+
             # Send the event message to the ONU adapter
             self.adapter_agent.publish_inter_adapter_message(child_device.id,
                                                              msg)
             if ind_info['activation_successful'] is True:
+                self.handle_alarms(self.device_id,"onu",\
+                       ind_info['_pon_id'],\
+                       "ONU_ACTIVATED",1,"high",\
+                       balSubTermInd)
                 for key, v_ont_ani in self.v_ont_anis.items():
                     if v_ont_ani.v_ont_ani.data.onu_id == \
                             child_device.proxy_address.onu_id:
@@ -960,13 +972,22 @@
     }
 
     def handle_sub_term_ind(self, ind_info):
+        serial_number=(ind_info['_vendor_id'] +
+                           ind_info['_vendor_specific'])
         child_device = self.adapter_agent.get_child_device(
             self.device_id,
-            serial_number=(ind_info['_vendor_id'] +
-                           ind_info['_vendor_specific']))
+            serial_number=serial_number)
         if child_device is None:
             self.log.info('Onu-is-not-configured', olt_id=self.olt_id,
                           pon_ni=ind_info['_pon_id'], onu_data=ind_info)
+            if ind_info['_sub_group_type'] == 'onu_discovery':
+                balSubTermDisc = {}
+                balSubTermDisc["serial_number"] = serial_number.__str__()
+                balSubTermDisc["device_id"] = (self.device_id).__str__()
+                self.handle_alarms(self.device_id,"onu",\
+                               ind_info['_pon_id'],\
+                               "ONU_DISCOVERED",1,"high",\
+                               balSubTermDisc)
             return
 
         handler = self.onu_handlers.get(child_device.oper_status)
diff --git a/voltha/adapters/asfvolt16_olt/asfvolt16_ind_handler.py b/voltha/adapters/asfvolt16_olt/asfvolt16_ind_handler.py
old mode 100755
new mode 100644
index 2ffa2d2..826ff4f
--- a/voltha/adapters/asfvolt16_olt/asfvolt16_ind_handler.py
+++ b/voltha/adapters/asfvolt16_olt/asfvolt16_ind_handler.py
@@ -42,8 +42,10 @@
         ind_info = dict()
         ind_info['_object_type'] = 'access_terminal_indication'
         ind_info['_sub_group_type'] = 'access_terminal_indication'
-        if indication.access_term_ind.data.admin_state == \
-                bal_model_types_pb2.BAL_STATE_UP:
+        if ((indication.access_term_ind.data.admin_state == \
+                bal_model_types_pb2.BAL_STATE_UP) and \
+                (indication.access_term_ind.data.oper_status == \
+                bal_model_types_pb2.BAL_STATUS_UP)):
             ind_info['activation_successful'] = True
         else:
             ind_info['activation_successful'] = False
@@ -242,10 +244,15 @@
         ind_info['_vendor_id'] = onu_data.data.serial_number.vendor_id
         ind_info['_vendor_specific'] = \
             onu_data.data.serial_number.vendor_specific
-        if ((bal_model_types_pb2.BAL_STATE_DOWN == onu_data.data.admin_state)\
-            or (bal_model_types_pb2.BAL_STATUS_UP != onu_data.data.oper_status)):
+        self.log.info('registration-id-in-bal-subs-term-ind-is',\
+                       registration_id=onu_data.data.registration_id[:36])
+        ind_info['registration_id'] = onu_data.data.registration_id[:36]
+        ind_info['activation_successful'] = None
+        if (bal_model_types_pb2.BAL_STATE_DOWN == onu_data.data.admin_state or
+            bal_model_types_pb2.BAL_STATUS_UP != onu_data.data.oper_status):
             ind_info['activation_successful'] = False
-        elif (bal_model_types_pb2.BAL_STATE_UP == onu_data.data.admin_state):
+        elif (bal_model_types_pb2.BAL_STATE_UP == onu_data.data.admin_state and
+            bal_model_types_pb2.BAL_STATUS_UP == onu_data.data.oper_status):
             ind_info['activation_successful'] = True
 
         reactor.callLater(0,
diff --git a/voltha/adapters/asfvolt16_olt/asfvolt16_olt.py b/voltha/adapters/asfvolt16_olt/asfvolt16_olt.py
index 1f4c8b1..aaa1699 100644
--- a/voltha/adapters/asfvolt16_olt/asfvolt16_olt.py
+++ b/voltha/adapters/asfvolt16_olt/asfvolt16_olt.py
@@ -33,7 +33,7 @@
                                                device_handler_class=Asfvolt16Handler,
                                                name='asfvolt16_olt',
                                                vendor='Edgecore',
-                                               version='0.96',
+                                               version='0.97',
                                                device_type='asfvolt16_olt')
         # register for adapter messages
         self.port = 60001