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
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)
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)
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)