VOL-1474: Support for GetChildDevice and proper PeerPort

Correct peerport relationship needed for get child devices
to work.  Also set root device properly

Change-Id: I8320e809cfd54206ef69ba3a75c42875a6539008
diff --git a/python/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py b/python/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py
index 817a138..c9eefaf 100644
--- a/python/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py
+++ b/python/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py
@@ -172,23 +172,18 @@
     def activate(self, device):
         self.log.debug('function-entry', device=device)
 
-        # first we verify that we got parent reference and proxy info
         assert device.parent_id
+        assert device.parent_port_no
         assert device.proxy_address.device_id
 
-        # register for proxied messages right away
         self.proxy_address = device.proxy_address
         self.parent_id = device.parent_id
-        # TODO NEW CORE:  seems no reason for this now
-        #parent_device = yield self.adapter_agent.get_device(self.parent_id)
-        #if parent_device.type == 'openolt':
-        #    self.parent_adapter = registry('adapter_loader'). \
-        #       get_agent(parent_device.adapter).adapter
+        self._pon_port_number = device.parent_port_no
 
         if self.enabled is not True:
             self.log.info('activating-new-onu')
             # populate what we know.  rest comes later after mib sync
-            device.root = True
+            device.root = False
             device.vendor = 'Broadcom'
             device.connect_status = ConnectStatus.REACHABLE
             device.oper_status = OperStatus.DISCOVERED
@@ -283,15 +278,12 @@
         self.log.debug('function-entry', device=device)
 
         self._pon = PonPort.create(self, self._pon_port_number)
+        self._pon.add_peer(self.parent_id, self._pon_port_number)
+        self.log.debug('adding-pon-port-to-agent', pon=self._pon.get_port())
+
         yield self.adapter_agent.port_created(device.id, self._pon.get_port())
 
-        self.log.debug('added-pon-port-to-agent', pon=self._pon)
-
-        # TODO NEW CORE:  Need to either get logical device id from core or use regular device id
-        #parent_device = yield self.adapter_agent.get_device(device.parent_id)
-        #self.logical_device_id = parent_device.parent_id
-
-        #self.adapter_agent.update_device(device)
+        self.log.debug('added-pon-port-to-agent', pon=self._pon.get_port())
 
         # Create and start the OpenOMCI ONU Device Entry for this ONU
         self._onu_omci_device = self.omci_agent.add_device(self.device_id,
diff --git a/python/adapters/brcm_openomci_onu/pon_port.py b/python/adapters/brcm_openomci_onu/pon_port.py
index 887d3f3..9f9755b 100644
--- a/python/adapters/brcm_openomci_onu/pon_port.py
+++ b/python/adapters/brcm_openomci_onu/pon_port.py
@@ -41,6 +41,7 @@
         self._deferred = None
         self._port = None
         self._port_number = port_no
+        self._peers = []
         self._next_entity_id = PonPort.MIN_GEM_ENTITY_ID
 
         self._admin_state = AdminState.ENABLED
@@ -151,15 +152,19 @@
         """
         self.log.debug('function-entry')
 
-        if self._port is None:
-            self._port = Port(port_no=self.port_number,
-                              label='PON port',
-                              type=Port.PON_ONU,
-                              admin_state=self._admin_state,
-                              oper_status=self._oper_status,
-                              peers=[])
+        self._port = Port(port_no=self.port_number,
+                          label='PON port',
+                          type=Port.PON_ONU,
+                          admin_state=self._admin_state,
+                          oper_status=self._oper_status,
+                          peers=self._peers)
         return self._port
 
+    def add_peer(self, parent_device_id, parent_port_no):
+        self.log.debug('add-peer-port', parent_device_id=parent_device_id, parent_port_no=parent_port_no)
+        new_peer = Port.PeerPort(device_id=parent_device_id, port_no=parent_port_no)
+        self._peers.extend([new_peer])
+
     @inlineCallbacks
     def _update_adapter_agent(self):
         """