On Sun, 2010-10-24 at 13:01 +0200, Michael Goldish wrote: > This patch removes all code related to the old manual method > (address_pools.cfg). > > Note that now running in TAP mode requires an external DHCP server that accepts > *any* MAC address, because MAC addresses are randomly generated and cannot be > manually configured. Yes, this patch looks good. I don't think there are much DHCP servers that do not accept any MAC address. It might be good to document this information on the wiki though. > Signed-off-by: Michael Goldish <mgoldish@xxxxxxxxxx> > --- > client/tests/kvm/kvm_utils.py | 159 -------------------- > client/tests/kvm/kvm_vm.py | 34 ++--- > client/tests/kvm/tests/physical_resources_check.py | 11 +- > client/tests/kvm/tests/stress_boot.py | 3 - > client/tests/kvm/tests_base.cfg.sample | 2 - > 5 files changed, 16 insertions(+), 193 deletions(-) > > diff --git a/client/tests/kvm/kvm_utils.py b/client/tests/kvm/kvm_utils.py > index 778637d..f749f8d 100644 > --- a/client/tests/kvm/kvm_utils.py > +++ b/client/tests/kvm/kvm_utils.py > @@ -203,165 +203,6 @@ def get_mac_address(vm_instance, nic_index): > return mac > > > -def mac_str_to_int(addr): > - """ > - Convert MAC address string to integer. > - > - @param addr: String representing the MAC address. > - """ > - return sum(int(s, 16) * 256 ** i > - for i, s in enumerate(reversed(addr.split(":")))) > - > - > -def mac_int_to_str(addr): > - """ > - Convert MAC address integer to string. > - > - @param addr: Integer representing the MAC address. > - """ > - return ":".join("%02x" % (addr >> 8 * i & 0xFF) > - for i in reversed(range(6))) > - > - > -def ip_str_to_int(addr): > - """ > - Convert IP address string to integer. > - > - @param addr: String representing the IP address. > - """ > - return sum(int(s) * 256 ** i > - for i, s in enumerate(reversed(addr.split(".")))) > - > - > -def ip_int_to_str(addr): > - """ > - Convert IP address integer to string. > - > - @param addr: Integer representing the IP address. > - """ > - return ".".join(str(addr >> 8 * i & 0xFF) > - for i in reversed(range(4))) > - > - > -def offset_mac(base, offset): > - """ > - Add offset to a given MAC address. > - > - @param base: String representing a MAC address. > - @param offset: Offset to add to base (integer) > - @return: A string representing the offset MAC address. > - """ > - return mac_int_to_str(mac_str_to_int(base) + offset) > - > - > -def offset_ip(base, offset): > - """ > - Add offset to a given IP address. > - > - @param base: String representing an IP address. > - @param offset: Offset to add to base (integer) > - @return: A string representing the offset IP address. > - """ > - return ip_int_to_str(ip_str_to_int(base) + offset) > - > - > -def get_mac_ip_pair_from_dict(dict): > - """ > - Fetch a MAC-IP address pair from dict and return it. > - > - The parameters in dict are expected to conform to a certain syntax. > - Typical usage may be: > - > - address_ranges = r1 r2 r3 > - > - address_range_base_mac_r1 = 55:44:33:22:11:00 > - address_range_base_ip_r1 = 10.0.0.0 > - address_range_size_r1 = 16 > - > - address_range_base_mac_r2 = 55:44:33:22:11:40 > - address_range_base_ip_r2 = 10.0.0.60 > - address_range_size_r2 = 25 > - > - address_range_base_mac_r3 = 55:44:33:22:12:10 > - address_range_base_ip_r3 = 10.0.1.20 > - address_range_size_r3 = 230 > - > - address_index = 0 > - > - All parameters except address_index specify a MAC-IP address pool. The > - pool consists of several MAC-IP address ranges. > - address_index specified the index of the desired MAC-IP pair from the pool. > - > - @param dict: The dictionary from which to fetch the addresses. > - """ > - index = int(dict.get("address_index", 0)) > - for mac_range_name in get_sub_dict_names(dict, "address_ranges"): > - mac_range_params = get_sub_dict(dict, mac_range_name) > - mac_base = mac_range_params.get("address_range_base_mac") > - ip_base = mac_range_params.get("address_range_base_ip") > - size = int(mac_range_params.get("address_range_size", 1)) > - if index < size: > - return (mac_base and offset_mac(mac_base, index), > - ip_base and offset_ip(ip_base, index)) > - index -= size > - return (None, None) > - > - > -def get_sub_pool(dict, piece, num_pieces): > - """ > - Split a MAC-IP pool and return a single requested piece. > - > - For example, get_sub_pool(dict, 0, 3) will split the pool in 3 pieces and > - return a dict representing the first piece. > - > - @param dict: A dict that contains pool parameters. > - @param piece: The index of the requested piece. Should range from 0 to > - num_pieces - 1. > - @param num_pieces: The total number of pieces. > - @return: A copy of dict, modified to describe the requested sub-pool. > - """ > - range_dicts = [get_sub_dict(dict, name) for name in > - get_sub_dict_names(dict, "address_ranges")] > - if not range_dicts: > - return dict > - ranges = [[d.get("address_range_base_mac"), > - d.get("address_range_base_ip"), > - int(d.get("address_range_size", 1))] for d in range_dicts] > - total_size = sum(r[2] for r in ranges) > - base = total_size * piece / num_pieces > - size = total_size * (piece + 1) / num_pieces - base > - > - # Find base of current sub-pool > - for i in range(len(ranges)): > - r = ranges[i] > - if base < r[2]: > - r[0] = r[0] and offset_mac(r[0], base) > - r[1] = r[1] and offset_ip(r[1], base) > - r[2] -= base > - break > - base -= r[2] > - > - # Collect ranges up to end of current sub-pool > - new_ranges = [] > - for i in range(i, len(ranges)): > - r = ranges[i] > - new_ranges.append(r) > - if size <= r[2]: > - r[2] = size > - break > - size -= r[2] > - > - # Write new dict > - new_dict = dict.copy() > - new_dict["address_ranges"] = " ".join("r%d" % i for i in > - range(len(new_ranges))) > - for i in range(len(new_ranges)): > - new_dict["address_range_base_mac_r%d" % i] = new_ranges[i][0] > - new_dict["address_range_base_ip_r%d" % i] = new_ranges[i][1] > - new_dict["address_range_size_r%d" % i] = new_ranges[i][2] > - return new_dict > - > - > def verify_ip_address_ownership(ip, macs, timeout=10.0): > """ > Use arping and the ARP cache to make sure a given IP address belongs to one > diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py > index f3e803b..2db916f 100755 > --- a/client/tests/kvm/kvm_vm.py > +++ b/client/tests/kvm/kvm_vm.py > @@ -920,21 +920,18 @@ class VM: > logging.debug("MAC address unavailable") > return None > mac = mac.lower() > - ip = None > - > - if not ip or nic_params.get("always_use_tcpdump") == "yes": > - # Get the IP address from the cache > - ip = self.address_cache.get(mac) > - if not ip: > - logging.debug("Could not find IP address for MAC address: " > - "%s" % mac) > - return None > - # Make sure the IP address is assigned to this guest > - macs = [self.get_mac_address(i) for i in range(len(nics))] > - if not kvm_utils.verify_ip_address_ownership(ip, macs): > - logging.debug("Could not verify MAC-IP address mapping: " > - "%s ---> %s" % (mac, ip)) > - return None > + # Get the IP address from the cache > + ip = self.address_cache.get(mac) > + if not ip: > + logging.debug("Could not find IP address for MAC address: %s" % > + mac) > + return None > + # Make sure the IP address is assigned to this guest > + macs = [self.get_mac_address(i) for i in range(len(nics))] > + if not kvm_utils.verify_ip_address_ownership(ip, macs): > + logging.debug("Could not verify MAC-IP address mapping: " > + "%s ---> %s" % (mac, ip)) > + return None > return ip > else: > return "localhost" > @@ -985,12 +982,7 @@ class VM: > > @param nic_index: Index of the NIC > """ > - nic_name = kvm_utils.get_sub_dict_names(self.params, "nics")[nic_index] > - nic_params = kvm_utils.get_sub_dict(self.params, nic_name) > - if nic_params.get("address_index"): > - return kvm_utils.get_mac_ip_pair_from_dict(nic_params)[0] > - else: > - return kvm_utils.get_mac_address(self.instance, nic_index) > + return kvm_utils.get_mac_address(self.instance, nic_index) > > > def free_mac_address(self, nic_index=0): > diff --git a/client/tests/kvm/tests/physical_resources_check.py b/client/tests/kvm/tests/physical_resources_check.py > index 6c8e154..682c7b2 100644 > --- a/client/tests/kvm/tests/physical_resources_check.py > +++ b/client/tests/kvm/tests/physical_resources_check.py > @@ -123,14 +123,9 @@ def run_physical_resources_check(test, params, env): > found_mac_addresses = re.findall("macaddr=(\S+)", o) > logging.debug("Found MAC adresses: %s" % found_mac_addresses) > > - nic_index = 0 > - for nic_name in kvm_utils.get_sub_dict_names(params, "nics"): > - nic_params = kvm_utils.get_sub_dict(params, nic_name) > - if "address_index" in nic_params: > - mac, ip = kvm_utils.get_mac_ip_pair_from_dict(nic_params) > - else: > - mac = vm.get_mac_address(nic_index) > - nic_index += 1 > + num_nics = len(kvm_utils.get_sub_dict_names(params, "nics")) > + for nic_index in range(num_nics): > + mac = vm.get_mac_address(nic_index) > if not string.lower(mac) in found_mac_addresses: > n_fail += 1 > logging.error("MAC address mismatch:") > diff --git a/client/tests/kvm/tests/stress_boot.py b/client/tests/kvm/tests/stress_boot.py > index 0d3ed07..b7916b4 100644 > --- a/client/tests/kvm/tests/stress_boot.py > +++ b/client/tests/kvm/tests/stress_boot.py > @@ -28,7 +28,6 @@ def run_stress_boot(tests, params, env): > > num = 2 > sessions = [session] > - address_index = int(params.get("clone_address_index_base", 10)) > > # boot the VMs > while num <= int(params.get("max_vms")): > @@ -36,7 +35,6 @@ def run_stress_boot(tests, params, env): > # clone vm according to the first one > vm_name = "vm" + str(num) > vm_params = vm.get_params().copy() > - vm_params["address_index"] = str(address_index) > curr_vm = vm.clone(vm_name, vm_params) > kvm_utils.env_register_vm(env, vm_name, curr_vm) > logging.info("Booting guest #%d" % num) > @@ -56,7 +54,6 @@ def run_stress_boot(tests, params, env): > if se.get_command_status(params.get("alive_test_cmd")) != 0: > raise error.TestFail("Session #%d is not responsive" % i) > num += 1 > - address_index += 1 > > except (error.TestFail, OSError): > for se in sessions: > diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample > index 769d750..5bca544 100644 > --- a/client/tests/kvm/tests_base.cfg.sample > +++ b/client/tests/kvm/tests_base.cfg.sample > @@ -54,7 +54,6 @@ guest_port_remote_shell = 22 > nic_mode = user > #nic_mode = tap > nic_script = scripts/qemu-ifup > -#address_index = 0 > run_tcpdump = yes > > # Misc > @@ -274,7 +273,6 @@ variants: > type = stress_boot > max_vms = 5 > alive_test_cmd = uname -a > - clone_address_index_base = 10 > login_timeout = 240 > kill_vm = yes > kill_vm_vm1 = no -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html