Esempio n. 1
0
 def _raise_subport_invalid_mtu(self, context, subport, trunk_port_mtu):
     # Check MTU sanity - subport MTU must not exceed trunk MTU.
     # If for whatever reason trunk_port_mtu is not available,
     # the MTU sanity check cannot be enforced.
     if trunk_port_mtu:
         port_mtu = self._get_port_mtu(context, subport['port_id'])
         if port_mtu and port_mtu > trunk_port_mtu:
             raise trunk_exc.SubPortMtuGreaterThanTrunkPortMtu(
                 port_id=subport['port_id'],
                 port_mtu=port_mtu,
                 trunk_id=self.trunk_port_id,
                 trunk_mtu=trunk_port_mtu)
Esempio n. 2
0
    def _validate(self, context, subport, trunk_port_mtu):
        # Check that the subport doesn't reference the same port_id as a
        # trunk we may be in the middle of trying to create, in other words
        # make the validation idiot proof.
        if subport['port_id'] == self.trunk_port_id:
            raise trunk_exc.ParentPortInUse(port_id=subport['port_id'])

        # Check MTU sanity - subport MTU must not exceed trunk MTU.
        # If for whatever reason trunk_port_mtu is not available,
        # the MTU sanity check cannot be enforced.
        if trunk_port_mtu:
            port_mtu = self._get_port_mtu(context, subport['port_id'])
            if port_mtu and port_mtu > trunk_port_mtu:
                raise trunk_exc.SubPortMtuGreaterThanTrunkPortMtu(
                    port_id=subport['port_id'],
                    port_mtu=port_mtu,
                    trunk_id=self.trunk_port_id,
                    trunk_mtu=trunk_port_mtu)

        # If the segmentation details are missing, we will need to
        # figure out defaults when the time comes to support Ironic.
        # We can reasonably expect segmentation details to be provided
        # in all other cases for now.
        try:
            segmentation_type = subport["segmentation_type"]
            segmentation_id = (converters.convert_to_int(
                subport["segmentation_id"]))
        except KeyError:
            msg = _("Invalid subport details '%s': missing segmentation "
                    "information. Must specify both segmentation_id and "
                    "segmentation_type") % subport
            raise n_exc.InvalidInput(error_message=msg)
        except n_exc.InvalidInput:
            msg = _("Invalid subport details: segmentation_id '%s' is "
                    "not an integer") % subport["segmentation_id"]
            raise n_exc.InvalidInput(error_message=msg)

        if segmentation_type not in self._segmentation_types:
            msg = _("Unknown segmentation_type '%s'") % segmentation_type
            raise n_exc.InvalidInput(error_message=msg)

        if not self._segmentation_types[segmentation_type](segmentation_id):
            msg = _("Segmentation ID '%s' is not in range") % segmentation_id
            raise n_exc.InvalidInput(error_message=msg)

        # Check if the subport is already participating in an active trunk
        trunk_validator = TrunkPortValidator(subport['port_id'])
        trunk_validator.validate(context, parent_port=False)
        return subport
Esempio n. 3
0
 def _raise_subport_invalid_mtu(self, context, subport, trunk_port_mtu,
                                subport_mtus):
     # Check MTU sanity - subport MTU must not exceed trunk MTU.
     # If for whatever reason trunk_port_mtu is not available,
     # the MTU sanity check cannot be enforced.
     if trunk_port_mtu:
         # missing MTUs for subports is not an error condition: the
         # subport UUID may be invalid or non existent.
         subport_mtu = subport_mtus.get(subport['port_id'])
         if subport_mtu and subport_mtu > trunk_port_mtu:
             raise trunk_exc.SubPortMtuGreaterThanTrunkPortMtu(
                 port_id=subport['port_id'],
                 port_mtu=subport_mtu,
                 trunk_id=self.trunk_port_id,
                 trunk_mtu=trunk_port_mtu)