Beispiel #1
0
 def delete_child_device(self, child_device):
     self.log.debug('sending-deactivate-onu',
                    olt_device_id=self.device_id,
                    onu_device=child_device,
                    onu_serial_number=child_device.serial_number)
     try:
         self.adapter_agent.delete_child_device(self.device_id,
                                                child_device.id,
                                                child_device)
     except Exception as e:
         self.log.error('adapter_agent error', error=e)
     try:
         self.delete_logical_port(child_device.id)
     except Exception as e:
         self.log.error('logical_port delete error', error=e)
     try:
         self.delete_port(child_device.serial_number)
     except Exception as e:
         self.log.error('port delete error', error=e)
     serial_number = self.destringify_serial_number(
         child_device.serial_number)
     onu = openolt_pb2.Onu(intf_id=child_device.proxy_address.channel_id,
                           onu_id=child_device.proxy_address.onu_id,
                           serial_number=serial_number)
     self.stub.DeleteOnu(onu)
Beispiel #2
0
    def delete_child_device(self, child_device):
        serial_number = OpenoltUtils.destringify_serial_number(
            child_device.serial_number)
        pon_intf_id = child_device.proxy_address.channel_id
        onu_id = child_device.proxy_address.onu_id
        self.log.debug('delete-device',
                       onu_device=child_device,
                       onu_serial_number=serial_number,
                       device_id=child_device.id)

        try:
            self.data_model.onu_delete(self.flow_mgr, child_device)
            onu = openolt_pb2.Onu(intf_id=pon_intf_id,
                                  onu_id=onu_id,
                                  serial_number=serial_number)
            self.stub.DeleteOnu(onu)
        except Exception as e:
            self.log.exception("error-deleting-the-onu-on-olt-device", error=e)

        # TODO FIXME - For each uni.
        # TODO FIXME - Flows are not deleted
        uni_id = 0  # FIXME
        try:
            self.flow_mgr.delete_tech_profile_instance(
                pon_intf_id, child_device.proxy_address.onu_id, uni_id,
                child_device.serial_number)
        except Exception as e:
            self.log.exception("error-removing-tp-instance")

        try:
            pon_intf_id_onu_id = (pon_intf_id, onu_id, uni_id)
            # Free any PON resources that were reserved for the ONU
            self.resource_mgr.free_pon_resources_for_onu(pon_intf_id_onu_id)
        except Exception as e:
            self.log.exception("error-removing-pon-resources-for-onu")
Beispiel #3
0
    def delete_child_device(self, child_device):
        self.log.debug('sending-deactivate-onu',
                       olt_device_id=self.device_id,
                       onu_device=child_device,
                       onu_serial_number=child_device.serial_number)
        try:
            self.adapter_agent.delete_child_device(self.device_id,
                                                   child_device.id,
                                                   child_device)
        except Exception as e:
            self.log.error('adapter_agent error', error=e)
        try:
            self.delete_logical_port(child_device)
        except Exception as e:
            self.log.error('logical_port delete error', error=e)
        try:
            self.delete_port(child_device.serial_number)
        except Exception as e:
            self.log.error('port delete error', error=e)
        serial_number = self.destringify_serial_number(
            child_device.serial_number)
        pon_intf_id_onu_id = (child_device.proxy_address.channel_id,
                              child_device.proxy_address.onu_id)
        alloc_id = self.resource_mgr.get_alloc_id(pon_intf_id_onu_id)
        # Free any PON resources that were reserved for the ONU
        self.resource_mgr.free_pon_resources_for_onu(pon_intf_id_onu_id)

        onu = openolt_pb2.Onu(intf_id=child_device.proxy_address.channel_id,
                              onu_id=child_device.proxy_address.onu_id,
                              serial_number=serial_number,
                              alloc_id=alloc_id)
        self.stub.DeleteOnu(onu)
Beispiel #4
0
 def delete_child_device(self, child_device):
     self.log.debug('sending-deactivate-onu',
                    olt_device_id=self.device_id,
                    onu_device=child_device,
                    onu_serial_number=child_device.serial_number)
     try:
         self.adapter_agent.delete_child_device(self.device_id,
                                                child_device.id,
                                                child_device)
     except Exception as e:
         self.log.error('adapter_agent error', error=e)
     try:
         self.delete_logical_port(child_device.id)
     except Exception as e:
         self.log.error('logical_port delete error', error=e)
     try:
         self.delete_port(child_device.serial_number)
     except Exception as e:
         self.log.error('port delete error', error=e)
     vendor_id = child_device.vendor_id.encode('hex')
     vendor_specific = child_device.serial_number.replace(
         child_device.vendor_id, '').encode('hex')
     serial_number = openolt_pb2.SerialNumber(
         vendor_id=vendor_id, vendor_specific=vendor_specific)
     onu = openolt_pb2.Onu(intf_id=child_device.proxy_address.channel_id,
                           onu_id=child_device.proxy_address.onu_id,
                           serial_number=serial_number)
     self.stub.DeleteOnu(onu)
Beispiel #5
0
    def activate_onu(self, intf_id, onu_id, serial_number):
        self.log.info("activate onu", intf_id=intf_id, onu_id=onu_id,
                serial_number=serial_number)

        self.onus[Onu(intf_id=intf_id, onu_id=onu_id)] = serial_number

        onu = openolt_pb2.Onu(intf_id=intf_id, onu_id=onu_id,
                serial_number=serial_number)

        self.stub.ActivateOnu(onu)
Beispiel #6
0
 def activate_onu(self, intf_id, onu_id, serial_number,
                  serial_number_str):
     pir = self.bw_mgr.pir(serial_number_str)
     self.log.debug("activating-onu", intf_id=intf_id, onu_id=onu_id,
                    serial_number_str=serial_number_str,
                    serial_number=serial_number, pir=pir)
     onu = openolt_pb2.Onu(intf_id=intf_id, onu_id=onu_id,
                           serial_number=serial_number, pir=pir)
     self.stub.ActivateOnu(onu)
     self.log.info('onu-activated', serial_number=serial_number_str)
Beispiel #7
0
 def delete_child_device(self, child_device):
     self.log.debug('sending-deactivate-onu',
                    olt_device_id=self.device_id,
                    onu_device=child_device,
                    onu_serial_number=child_device.serial_number)
     vendor_id = child_device.vendor_id.encode('hex')
     vendor_specific = child_device.serial_number.replace(
         child_device.vendor_id, '').encode('hex')
     serial_number = openolt_pb2.SerialNumber(
         vendor_id=vendor_id, vendor_specific=vendor_specific)
     onu = openolt_pb2.Onu(intf_id=child_device.proxy_address.channel_id,
                           onu_id=child_device.proxy_address.onu_id,
                           serial_number=serial_number)
     self.stub.DeleteOnu(onu)
Beispiel #8
0
 def activate_onu(self, intf_id, onu_id, serial_number,
                  serial_number_str):
     self.log.debug("activating-onu", intf_id=intf_id, onu_id=onu_id,
                    serial_number_str=serial_number_str,
                    serial_number=serial_number)
     onu = openolt_pb2.Onu(intf_id=intf_id, onu_id=onu_id,
                           serial_number=serial_number)
     try:
         self.stub.ActivateOnu(onu)
     except grpc.RpcError as grpc_e:
         if grpc_e.code() == grpc.StatusCode.ALREADY_EXISTS:
             self.log.info('onu activation in progress',
                           serial_number=serial_number_str,
                           e=grpc_e)
         else:
             self.log.error('onu activation failed',
                            serial_number=serial_number_str,
                            grpc_error=grpc_e)
     else:
         self.log.info('onu-activated', serial_number=serial_number_str)
Beispiel #9
0
    def delete_child_device(self, child_device):
        self.log.debug('sending-deactivate-onu',
                       olt_device_id=self.device_id,
                       onu_device=child_device,
                       onu_serial_number=child_device.serial_number)
        try:
            self.adapter_agent.delete_child_device(self.device_id,
                                                   child_device.id,
                                                   child_device)
        except Exception as e:
            self.log.error('adapter_agent error', error=e)
        try:
            self.delete_logical_port(child_device.id)
        except Exception as e:
            self.log.error('logical_port delete error', error=e)
        try:
            self.delete_port(child_device.serial_number)
        except Exception as e:
            self.log.error('port delete error', error=e)
        serial_number = self.destringify_serial_number(
            child_device.serial_number)
        pon_intf_id_onu_id = (child_device.proxy_address.channel_id,
                              child_device.proxy_address.onu_id)
        alloc_id = yield self.resource_manager.get_alloc_id(pon_intf_id_onu_id)
        # Use sched_id same as alloc_id for the Onu.
        onu = openolt_pb2.Onu(intf_id=child_device.proxy_address.channel_id,
                              onu_id=child_device.proxy_address.onu_id,
                              serial_number=serial_number,
                              agg_port_id=alloc_id,
                              sched_id=alloc_id)
        self.stub.DeleteOnu(onu)

        # Remove reference to (pon_intf_id, onu_id) from the dictionary
        # when ONU is being removed.
        del self.resource_manager.pon_intf_id_onu_id_to_resource_map[
            pon_intf_id_onu_id]
        # Free any PON resources that were reserved for the ONU
        self.resource_manager.free_pon_resources_for_onu(
            child_device.proxy_address.channel_id,
            child_device.proxy_address.onu_id)
Beispiel #10
0
    def delete_child_device(self, child_device):
        self.log.debug('sending-deactivate-onu',
                       olt_device_id=self.device_id,
                       onu_device=child_device,
                       onu_serial_number=child_device.serial_number)
        try:
            self.adapter_agent.delete_child_device(self.device_id,
                                                   child_device.id,
                                                   child_device)
        except Exception as e:
            self.log.error('adapter_agent error', error=e)
        try:
            self.delete_logical_port(child_device)
        except Exception as e:
            self.log.error('logical_port delete error', error=e)
        try:
            self.delete_port(child_device.serial_number)
        except Exception as e:
            self.log.error('port delete error', error=e)
        serial_number = self.destringify_serial_number(
            child_device.serial_number)
        # TODO FIXME - For each uni.
        # TODO FIXME - Flows are not deleted
        uni_id = 0  # FIXME
        self.flow_mgr.delete_tech_profile_instance(
            child_device.proxy_address.channel_id,
            child_device.proxy_address.onu_id, uni_id)
        pon_intf_id_onu_id = (child_device.proxy_address.channel_id,
                              child_device.proxy_address.onu_id, uni_id)
        # Free any PON resources that were reserved for the ONU
        self.resource_mgr.free_pon_resources_for_onu(pon_intf_id_onu_id)

        onu = openolt_pb2.Onu(intf_id=child_device.proxy_address.channel_id,
                              onu_id=child_device.proxy_address.onu_id,
                              serial_number=serial_number)
        self.stub.DeleteOnu(onu)
Beispiel #11
0
    def onu_discovery_indication(self, onu_disc_indication):
        intf_id = onu_disc_indication.intf_id
        serial_number = onu_disc_indication.serial_number

        serial_number_str = self.stringify_serial_number(serial_number)

        self.log.debug("onu discovery indication",
                       intf_id=intf_id,
                       serial_number=serial_number_str)

        # Post ONU Discover alarm  20180809_0805
        try:
            OnuDiscoveryAlarm(self.alarm_mgr.alarms,
                              pon_id=intf_id,
                              serial_number=serial_number_str).raise_alarm()
        except Exception as disc_alarm_error:
            self.log.exception("onu-discovery-alarm-error",
                               errmsg=disc_alarm_error.message)
            # continue for now.

        pir = self.bw_mgr.pir(serial_number_str)
        self.log.debug("peak information rate",
                       serial_number=serial_number,
                       pir=pir)

        onu_device = self.adapter_agent.get_child_device(
            self.device_id, serial_number=serial_number_str)

        if onu_device is None:
            onu_id = self.new_onu_id(intf_id)
            try:
                self.add_onu_device(
                    intf_id,
                    platform.intf_id_to_port_no(intf_id, Port.PON_OLT), onu_id,
                    serial_number)
                self.log.info("activate-onu",
                              intf_id=intf_id,
                              onu_id=onu_id,
                              serial_number=serial_number_str)
                onu = openolt_pb2.Onu(intf_id=intf_id,
                                      onu_id=onu_id,
                                      serial_number=serial_number,
                                      pir=pir)
                self.stub.ActivateOnu(onu)
            except Exception as e:
                self.log.exception('onu-activation-failed', e=e)

        else:
            if onu_device.connect_status != ConnectStatus.REACHABLE:
                onu_device.connect_status = ConnectStatus.REACHABLE
                self.adapter_agent.update_device(onu_device)

            onu_id = onu_device.proxy_address.onu_id
            if onu_device.oper_status == OperStatus.DISCOVERED \
               or onu_device.oper_status == OperStatus.ACTIVATING:
                self.log.debug("ignore onu discovery indication, \
                               the onu has been discovered and should be \
                               activating shorlty",
                               intf_id=intf_id,
                               onu_id=onu_id,
                               state=onu_device.oper_status)
            elif onu_device.oper_status == OperStatus.ACTIVE:
                self.log.warn("onu discovery indication whereas onu is \
                              supposed to be active",
                              intf_id=intf_id,
                              onu_id=onu_id,
                              state=onu_device.oper_status)
            elif onu_device.oper_status == OperStatus.UNKNOWN:
                self.log.info("onu in unknown state, recovering from olt \
                              reboot, activate onu",
                              intf_id=intf_id,
                              onu_id=onu_id,
                              serial_number=serial_number_str)

                onu_device.oper_status = OperStatus.DISCOVERED
                self.adapter_agent.update_device(onu_device)

                onu = openolt_pb2.Onu(intf_id=intf_id,
                                      onu_id=onu_id,
                                      serial_number=serial_number,
                                      pir=pir)
                self.stub.ActivateOnu(onu)
            else:
                self.log.warn('unexpected state',
                              onu_id=onu_id,
                              onu_device_oper_state=onu_device.oper_status)
Beispiel #12
0
    def onu_discovery_indication(self, onu_disc_indication):
        intf_id = onu_disc_indication.intf_id
        serial_number = onu_disc_indication.serial_number

        serial_number_str = self.stringify_serial_number(serial_number)

        self.log.debug("onu discovery indication",
                       intf_id=intf_id,
                       serial_number=serial_number_str)

        onu_device = self.adapter_agent.get_child_device(
            self.device_id, serial_number=serial_number_str)

        if onu_device is None:
            onu_id = self.new_onu_id(intf_id)
            try:
                self.add_onu_device(
                    intf_id,
                    platform.intf_id_to_port_no(intf_id, Port.PON_OLT), onu_id,
                    serial_number)
                self.log.info("activate-onu",
                              intf_id=intf_id,
                              onu_id=onu_id,
                              serial_number=serial_number_str)
                onu = openolt_pb2.Onu(intf_id=intf_id,
                                      onu_id=onu_id,
                                      serial_number=serial_number)
                self.stub.ActivateOnu(onu)
            except Exception as e:
                self.log.exception('onu-activation-failed', e=e)

        else:
            if onu_device.connect_status != ConnectStatus.REACHABLE:
                onu_device.connect_status = ConnectStatus.REACHABLE
                self.adapter_agent.update_device(onu_device)

            onu_id = onu_device.proxy_address.onu_id
            if onu_device.oper_status == OperStatus.DISCOVERED or onu_device.oper_status == OperStatus.ACTIVATING:
                self.log.debug(
                    "ignore onu discovery indication, the onu has been discovered and should be \
                              activating shorlty",
                    intf_id=intf_id,
                    onu_id=onu_id,
                    state=onu_device.oper_status)
            elif onu_device.oper_status == OperStatus.ACTIVE:
                self.log.warn(
                    "onu discovery indication whereas onu is supposed to be active",
                    intf_id=intf_id,
                    onu_id=onu_id,
                    state=onu_device.oper_status)
            elif onu_device.oper_status == OperStatus.UNKNOWN:
                self.log.info(
                    "onu-in-unknow-state-recovering-form-olt-reboot-activate-onu",
                    intf_id=intf_id,
                    onu_id=onu_id,
                    serial_number=serial_number_str)

                onu_device.oper_status = OperStatus.DISCOVERED
                self.adapter_agent.update_device(onu_device)

                onu = openolt_pb2.Onu(intf_id=intf_id,
                                      onu_id=onu_id,
                                      serial_number=serial_number)
                self.stub.ActivateOnu(onu)
            else:
                self.log.warn('unexpected state',
                              onu_id=onu_id,
                              onu_device_oper_state=onu_device.oper_status)