Ejemplo n.º 1
0
Archivo: State.py Proyecto: turon/happy
 def getNodePublicIPv4Address(self, node_id=None, state=None):
     node_public_interfaces = self.getNodePublicInterfaces(node_id, state)
     for interface_id in node_public_interfaces:
         addresses = self.getNodeInterfaceAddresses(interface_id, node_id,
                                                    state)
         for addr in addresses:
             if IP.isIpv4(addr):
                 return addr
     return None
Ejemplo n.º 2
0
    def __pre_check(self):
        if not self.delete:
            self.add = True

        if not self.dns:
            if "happy_dns" in os.environ.keys():
                self.dns = os.environ['happy_dns'].split()

        if self.add and self.dns is None:
            emsg = "No DNS servers listed."
            self.logger.error("[localhost] HappyDNS: %s" % (emsg))
            self.exit()

        for dns_addr in self.dns:
            if not IP.isIpv4(dns_addr):
                emsg = "DNS %s is not a valid IPv4 address." % (dns_addr)
                self.logger.error("[localhost] HappyDNS: %s" % (emsg))
                self.exit()
Ejemplo n.º 3
0
    def __pre_check(self):
        # Sanity check the transport
        if self.transport != "udp" and self.transport != "tcp" and self.transport != "raw":
            emsg = "Transport type must be one of 'raw', 'tcp', or 'udp'."
            self.__log_error_and_exit(emsg)

        # Sanity check the IP version
        if self.ipversion != "4" and self.ipversion != "6":
            emsg = "The IP version must be one of '4' or '6'."
            self.__log_error_and_exit(emsg)

        # There must be exactly one sender
        if self.sender['node'] == None:
            emsg = "The test must have exactly one sender."
            self.__log_error_and_exit(emsg)

        # There must be exactly one receiver
        if self.sender['node'] == None:
            emsg = "The test must have exactly one receiver."
            self.__log_error_and_exit(emsg)

        # Each specified sender and receiver node must exist in the
        # loaded Happy configuration.

        self.__checkNodeExists(self.sender['node'], "sender")

        self.__checkNodeExists(self.receiver['node'], "receiver")

        # Use the sender and receiver node names, specified prefix,
        # and IP version and attempt to lookup addresses for the
        # sender and receiver.

        # First, sanity check the prefix

        if self.prefix == None:
            emsg = "Please specifiy a valid IPv%s prefix." % (self.ipversion)
            self.__log_error_and_exit(emsg)

        # Second, sanity check the prefix against the IP version.

        if (self.ipversion == "4" and not IP.isIpv4(self.prefix)) or (
                self.ipversion == "6" and not IP.isIpv6(self.prefix)):
            emsg = "The specified prefix %s is the wrong address family for IPv%s" % (
                self.prefix, self.ipversion)
            self.__log_error_and_exit(emsg)

        # Finally, find and take the first matching addresses for the
        # node names and specified prefix.

        rips = self.getNodeAddressesOnPrefix(self.prefix,
                                             self.receiver['node'])

        if rips != None and len(rips) > 0:
            self.receiver['ip'] = rips[0]

        sips = self.getNodeAddressesOnPrefix(self.prefix, self.sender['node'])

        if sips != None and len(sips) > 0:
            self.sender['ip'] = sips[0]

        # Check if all unknowns were found

        if self.receiver['ip'] == None:
            emsg = "Could not find IP address of the receiver node, %s" % (
                self.receiver['node'])
            self.__log_error_and_exit(emsg)

        if self.sender['ip'] == None:
            emsg = "Could not find IP address of the sender node, %s" % (
                self.sender['node'])
            self.__log_error_and_exit(emsg)

        if self.tx_size == None or not self.tx_size.isdigit():
            emsg = "Please specify a valid size of data to send per transmission."
            self.__log_error_and_exit(emsg)

        if self.rx_tx_length == None or not self.rx_tx_length.isdigit():
            emsg = "Please specify a valid total length of data to send and receive."
            self.__log_error_and_exit(emsg)

        if not self.interval == None and not self.interval.isdigit():
            emsg = "Please specify a valid send interval in milliseconds."
            self.__log_error_and_exit(emsg)