def get_address(self, index=0): """ Return the IP address of a NIC or guest (in host space). @param index: Name or index of the NIC whose address is requested. @return: 'localhost': Port redirection is in use @return: IP address of NIC if valid in arp cache. @raise VMMACAddressMissingError: If no MAC address is defined for the requested NIC @raise VMIPAddressMissingError: If no IP address is found for the the NIC's MAC address @raise VMAddressVerificationError: If the MAC-IP address mapping cannot be verified (using arping) """ nic = self.virtnet[index] # TODO: Determine port redirection in use w/o checking nettype if nic.nettype != 'bridge': return "localhost" if not nic.has_key('mac'): raise VMMACAddressMissingError(index) else: # Get the IP address from arp cache, try upper and lower case arp_ip = self.address_cache.get(nic.mac.upper()) if not arp_ip: arp_ip = self.address_cache.get(nic.mac.lower()) if not arp_ip: raise VMIPAddressMissingError(nic.mac) # Make sure the IP address is assigned to one or more macs # for this guest macs = self.virtnet.mac_list() if not virt_utils.verify_ip_address_ownership(arp_ip, macs): raise VMAddressVerificationError(nic.mac, arp_ip) logging.debug('Found/Verified IP %s for VM %s NIC %s' % ( arp_ip, self.name, str(index))) return arp_ip
def get_address(self, index=0): """ Return the address of a NIC of the guest, in host space. If port redirection is used, return 'localhost' (the NIC has no IP address of its own). Otherwise return the NIC's IP address. @param index: Index of the NIC whose address is requested. @raise VMMACAddressMissingError: If no MAC address is defined for the requested NIC @raise VMIPAddressMissingError: If no IP address is found for the the NIC's MAC address @raise VMAddressVerificationError: If the MAC-IP address mapping cannot be verified (using arping) """ nics = self.params.objects("nics") nic_name = nics[index] nic_params = self.params.object_params(nic_name) if nic_params.get("nic_mode") == "tap": mac = self.get_mac_address(index).lower() # Get the IP address from the cache ip = self.address_cache.get(mac) if not ip: raise virt_vm.VMIPAddressMissingError(mac) # Make sure the IP address is assigned to this guest macs = [self.get_mac_address(i) for i in range(len(nics))] if not virt_utils.verify_ip_address_ownership(ip, macs): raise virt_vm.VMAddressVerificationError(mac, ip) return ip else: return "localhost"