Exemple #1
0
    def __pre_check(self):
        # Check if the name of the new node is given
        if not self.node_id:
            emsg = "Missing name of the new virtual node that IP address should be managed."
            self.logger.error("[localhost] HappyNodeAddress: %s" % (emsg))
            self.exit()

        # Check if the name of new node is not a duplicate (that it does not already exists).
        if not self._nodeExists():
            emsg = "virtual node %s does not exist." % (self.node_id)
            self.logger.warning("[%s] HappyNodeAddress: %s" %
                                (self.node_id, emsg))

        # Check if the name of the interface is given
        if not self.interface:
            emsg = "Missing name of the network interface in virtual node."
            self.logger.error("[%s] HappyNodeAddress: %s" %
                              (self.node_id, emsg))
            self.exit()

        # Check if node has a given interface
        if not self._nodeInterfaceExists(self.interface, self.node_id):
            emsg = "virtual node %s does not have interface %s." % (
                self.node_id, self.interface)
            self.logger.warning("[%s] HappyNodeAddress: %s" %
                                (self.node_id, emsg))
            self.exit()

        # Check if address is given
        if not self.address:
            emsg = "Missing IP address for virtual node."
            self.logger.error("[%s] HappyNodeAddress: %s" %
                              (self.node_id, emsg))
            self.exit()

        self.ip_address, self.ip_mask = IP.splitAddressMask(self.address)
        self.ip_address = IP.paddingZeros(self.ip_address)

        if not self.delete:
            self.add = True

        # Check if node has given prefix
        addr_prefix = IP.getPrefix(self.ip_address, self.ip_mask)
        if self.delete and addr_prefix not in self.getNodeInterfacePrefixes(
                self.interface):
            emsg = "virtual node %s may not have any addresses on prefix %s." % (
                self.node_id, addr_prefix)
            self.logger.warning("[%s] HappyNodeAddress: %s" %
                                (self.node_id, emsg))

        # Check if node has this address already
        if self.add and self.address in self.getNodeInterfaceAddresses(
                self.interface):
            emsg = "virtual node %s already has addresses %s." % (self.node_id,
                                                                  self.address)
            self.logger.error("[%s] HappyNodeAddress: %s" %
                              (self.node_id, emsg))
            self.done = True
Exemple #2
0
 def getNodeInterfacePrefixes(self, interface_id, node_id=None, state=None):
     if node_id is None:
         node_id = self.node_id
     if node_id is None:
         return []
     if node_id not in self.getNodeIds(state):
         return []
     if interface_id not in self.getNodeInterfaceIds(node_id, state):
         return []
     prefixes = []
     for addr in self.getNodeInterfaceAddresses(interface_id, node_id,
                                                state):
         mask = self.getNodeInterfaceAddressMask(interface_id, addr,
                                                 node_id, state)
         prefix = IP.getPrefix(addr, mask)
         prefixes.append(prefix)
     return prefixes
Exemple #3
0
    def __pre_check(self):
        # Check if the name of the new network is given
        if not self.network_id:
            emsg = "Missing name of the new virtual network that should be created."
            self.logger.error("[localhost] HappyNetworkAddress: %s" % (emsg))
            self.exit()

        # Check if the name of new network is not a duplicate (that it does not already exists).
        if not self._networkExists():
            emsg = "virtual network %s does not exist." % (self.network_id)
            self.logger.warning("[%s] HappyNetworkAddress: %s" %
                                (self.network_id, emsg))
            self.exit()

        # Check if address is given
        if not self.address:
            emsg = "Missing IP preifx for network %s." % (self.network_id)
            self.logger.error("[%s] HappyNetworkAddress: %s" %
                              (self.network_id, emsg))
            self.exit()

        self.ip_prefix, self.ip_mask = IP.splitAddressMask(self.address)
        self.ip_prefix = IP.getPrefix(self.ip_prefix, self.ip_mask)

        # Check if successfully parsed prefix
        if self.ip_prefix is None or self.ip_mask is None:
            emsg = "Did not understand address format %s." % (self.address)
            self.logger.error("[%s] HappyNetworkAddress: %s" %
                              (self.network_id, emsg))
            self.exit()

        if not self.delete:
            self.add = True

        # Check if network has given prefix
        if self.delete and self.ip_prefix not in self.getNetworkPrefixes():
            emsg = "Network %s may not have prefix %s." % (self.network_id,
                                                           self.ip_prefix)
            self.logger.warning("[%s] HappyNetworkAddress: %s" %
                                (self.network_id, emsg))
Exemple #4
0
    def __pre_check(self):
        # Check if the name of the new node is given
        if not self.node_id:
            emsg = "Missing name of the new virtual node that IP routes should be managed."
            self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
            self.exit()

        # Check if the name of new node is not a duplicate (that it does not already exists).
        if not self._nodeExists():
            emsg = "virtual node %s does not exist." % (self.node_id)
            self.logger.warning("[%s] HappyNodeRoute: %s" % (self.node_id, emsg))

        if not self.delete:
            self.add = True

        # Check if address is given
        if not self.to:
            emsg = "Missing address for virtual node destination (to)."
            self.logger.error("[%s] HappyNodeRoute: %s" % (self.node_id, emsg))
            self.exit()

        # Check if address is given
        if not self.via:
            emsg = "Missing address for virtual gateway (via)."
            self.logger.error("[%s] HappyNodeRoute: %s" % (self.node_id, emsg))
            self.exit()

        # Check for mix IP addresses
        if IP.isIpAddress(self.to) and IP.isIpAddress(self.via) and IP.isIpv6(self.to) != IP.isIpv6(self.via):
            emsg = "Mixing addresses %s and %s." % (self.to, self.via)
            self.logger.error("[%s] HappyNodeRoute: %s" % (self.node_id, emsg))
            self.exit()

        # Check if destination is a node
        if self.to != "default" and not IP.isIpAddress(self.to):
            if not self._nodeExists(self.to):
                emsg = "Don't know what %s to-address is. If it is a node, it can't be found." % (self.to)
                self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
                self.exit()
            else:
                # 'to' is a node
                emsg = "Destination address must be 'default' or a IP address."
                self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
                self.exit()

        if IP.isIpAddress(self.to):
            self.to = IP.paddingZeros(self.to)

        # Check if gateway is a node
        if IP.isIpAddress(self.via):
            self.via_address = self.via
            self.via_address = IP.paddingZeros(self.via_address)
            return

        if self._nodeInterfaceExists(self.via):
            self.via_device = self.via
            return

        if not self._nodeExists(self.via):
            emsg = "Don't know what %s via-address is. If it is a node, it can't be found." % (self.to)
            self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
            self.exit()

        this_node_networks = self.getNodeNetworkIds(self.node_id)
        gateway_networks = self.getNodeNetworkIds(self.via)
        common_networks = list(set(this_node_networks).intersection(gateway_networks))

        if len(common_networks) == 0:
            emsg = "Node %s and gateway node %s are not on the same network." % \
                (self.node_id, self.via)
            self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
            self.exit()

        if len(common_networks) > 1 and not self.prefix:
            emsg = "Node %s and gateway %s share more than one network. Need gateway prefix to disambiguate." % \
                (self.node_id, self.via)
            self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
            self.exit()

        if not self.prefix:

            gateway_addresses = self.getNodeAddressesOnNetwork(common_networks[0], self.via)

            if len(gateway_addresses) == 0:
                emsg = "Gateway node (via) %s does not have any IP addresses." % \
                    (self.via)
                self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
                self.exit()

            if len(gateway_addresses) > 1 and self.prefix is None:
                emsg = "Node %s has more than one IP address. Need gateway prefix to disambiguate." % \
                    (self.via)
                self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
                self.exit()

            # We find gateway address without using prefix.
            self.via_address = gateway_addresses[0]
            return

        else:
            if not IP.isIpAddress(self.prefix):
                emsg = "Prefix %s is not a valid IP address."
                self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
                self.exit()

            self.ip_prefix, self.ip_mask = IP.splitAddressMask(self.prefix)
            self.prefix = IP.getPrefix(self.ip_prefix, self.ip_mask)

            gateway_addresses = self.getNodeAddressesOnNetworkOnPrefix(common_networks[0], self.prefix, self.via)

            if len(gateway_addresses) == 0:
                emsg = "Cannot find any IP address on %s with prefix %s." % (self.via, self.prefix)
                self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
                self.exit()

            if len(gateway_addresses) > 1:
                emsg = "Found more than one IP address on %s with prefix %s. (%s)" % \
                  (self.via, self.prefix, ",".join(gateway_addresses))
                self.logger.error("[localhost] HappyNodeRoute: %s" % (emsg))
                self.exit()

            self.via_address = gateway_addresses[0]