Пример #1
0
    def _target_set_trigger(self, device, remote_trigger=False):
        if not self._target_set_check_state(device, remote_trigger):
            return False

        port_trigger = device.port.port_no is not None
        if port_trigger:
            assert device.port.active, 'Target port %d is not active' % device.port.port_no

        device.wait_remote = False
        external_dhcp = device.dhcp_mode == DhcpMode.EXTERNAL

        try:
            group_name = self.network.device_group_for(device)
            device.group = group_name
            gateway = self._create_gateway(device)
            if gateway.activated and not external_dhcp:
                LOGGER.warning(
                    'Target device %s trigger ignored b/c activated gateway',
                    device.mac)
                return False
        except Exception as e:
            LOGGER.error('Target device %s target trigger error %s',
                         device.mac, str(e))
            LOGGER.exception(e)
            if self.fail_mode:
                LOGGER.warning('Suppressing further tests due to failure.')
                self.run_tests = False
            return False

        # Stops all DHCP response initially
        # Selectively enables dhcp response at ipaddr stage based on dhcp mode
        if not external_dhcp:
            gateway.stop_dhcp_response(device.mac)
        gateway.attach_target(device)
        device.gateway = gateway
        try:
            self.run_count += 1
            new_host = connected_host.ConnectedHost(self, device, self.config)
            device.host = new_host
            new_host.register_dhcp_ready_listener(self._dhcp_ready_listener)
            new_host.initialize()

            if port_trigger:
                target = {
                    'port': device.port.port_no,
                    'group': group_name,
                    'fake': gateway.fake_target,
                    'port_set': gateway.port_set,
                    'mac': device.mac
                }
                self._direct_port_traffic(device, device.port.port_no, target)
            else:
                self._direct_device_traffic(device, gateway.port_set)
        except Exception as e:
            self.target_set_error(device, e)
            return False

        return True
Пример #2
0
    def _target_set_trigger(self, target_port):
        assert target_port in self.active_ports, 'Target port %d not active' % target_port

        target_mac = self.active_ports[target_port]
        assert target_mac is not True, 'Target port %d triggered but not learned' % target_port

        if not self._system_active:
            LOGGER.warning('Target port %d ignored, system not active', target_port)
            return False

        if target_port in self.port_targets:
            LOGGER.debug('Target port %d already active', target_port)
            return False

        if not self.run_tests:
            LOGGER.debug('Target port %d trigger ignored', target_port)
            return False

        try:
            group_name = self.network.device_group_for(target_mac)
            gateway = self._activate_device_group(group_name, target_port)
            if gateway.activated:
                LOGGER.debug('Target port %d trigger ignored b/c activated gateway', target_port)
                return False
        except Exception as e:
            LOGGER.error('Target port %d target trigger error %s', target_port, str(e))
            if self.fail_mode:
                LOGGER.warning('Suppressing further tests due to failure.')
                self.run_tests = False
            return False

        target = {
            'port': target_port,
            'group': group_name,
            'fake': gateway.fake_target,
            'port_set': gateway.port_set,
            'mac': target_mac
        }
        gateway.attach_target(target_port, target)

        try:
            self.run_count += 1
            new_host = connected_host.ConnectedHost(self, gateway.host, target, self.config)
            self.mac_targets[target_mac] = new_host
            self.port_targets[target_port] = new_host
            self.port_gateways[target_port] = gateway
            LOGGER.info('Target port %d registered %s', target_port, target_mac)

            new_host.initialize()

            self._direct_port_traffic(target_mac, target_port, target)

            self._send_heartbeat(new_host.get_tests())
            return True
        except Exception as e:
            self.target_set_error(target_port, e)
            gateway.detach_target(target_port)
Пример #3
0
 def _trigger_target_set(self, port_set):
     assert port_set not in self.target_sets, 'target set %d already exists' % port_set
     try:
         LOGGER.debug('Trigger target set %d', port_set)
         self.target_sets[port_set] = connected_host.ConnectedHost(
             self, port_set, self.config)
         self.target_sets[port_set].initialize()
         self._send_heartbeat()
     except Exception as e:
         self.target_set_error(port_set, e)
Пример #4
0
    def _target_set_trigger(self, device):
        assert self._devices.contains(
            device), 'Target device %s is not expected' % device.mac
        port_trigger = device.port.port_no is not None
        if port_trigger:
            assert device.port.active, 'Target port %d is not active' % device.port.port_no

        if not self._system_active:
            LOGGER.warning('Target device %s ignored, system is not active',
                           device.mac)
            return False

        if device.host:
            LOGGER.debug('Target device %s already triggered', device.mac)
            return False

        if not self.run_tests:
            LOGGER.debug('Target device %s trigger suppressed', device.mac)
            return False

        try:
            group_name = self.network.device_group_for(device.mac)
            device.group = group_name
            gateway = self._activate_device_group(device)
            if gateway.activated:
                LOGGER.debug(
                    'Target device %s trigger ignored b/c activated gateway',
                    device.mac)
                return False
        except Exception as e:
            LOGGER.error('Target device %s target trigger error %s',
                         device.mac, str(e))
            if self.fail_mode:
                LOGGER.warning('Suppressing further tests due to failure.')
                self.run_tests = False
            return False

        # Stops all DHCP response initially
        # Selectively enables dhcp response at ipaddr stage based on dhcp mode
        gateway.stop_dhcp_response(device.mac)
        gateway.attach_target(device)
        device.gateway = gateway
        try:
            self.run_count += 1
            new_host = connected_host.ConnectedHost(self, device, self.config)
            device.host = new_host
            new_host.register_dhcp_ready_listener(self._dhcp_ready_listener)
            new_host.initialize()

            if port_trigger:
                target = {
                    'port': device.port.port_no,
                    'group': group_name,
                    'fake': gateway.fake_target,
                    'port_set': gateway.port_set,
                    'mac': device.mac
                }
                self._direct_port_traffic(device.mac, device.port.port_no,
                                          target)
            return True
        except Exception as e:
            self.target_set_error(device, e)