コード例 #1
0
ファイル: Operator.py プロジェクト: tuantmb/springbok
    def toBDD(self, index):
        """Construct the ROBDD

        Parameters
        ----------
        index : int. Used for variable index in ROBDD.

        Return
        ------
        Return the computed ROBDD
        """
        if self.operator == 'LT':
            if isinstance(self.v1, Protocol):
                return Protocol.range2bdd(0, self.v1.get_value(), index)
            elif isinstance(self.v1, Ip):
                return Ip.range2bdd(0, self.v1.ip | ~self.v1.mask & 0xFFFFFFFF,
                                    index)
            elif isinstance(self.v1, Port):
                return Port.range2bdd(0, self.v1.get_value(), index)
            else:
                return self.v1.toBDD(index)
        elif self.operator == 'GT':
            if isinstance(self.v1, Protocol):
                return Protocol.range2bdd(self.v1.get_value(), 2**8 - 1, index)
            elif isinstance(self.v1, Ip):
                return Ip.range2bdd(self.v1.ip & self.v1.mask, 2**32 - 1,
                                    index)
            elif isinstance(self.v1, Port):
                return Port.range2bdd(self.v1.get_value(), 2**16 - 1, index)
            else:
                return self.v1.toBDD(index)
        elif self.operator == 'EQ':
            return self.v1.toBDD(index)
        elif self.operator == 'NEQ':
            return negate_bdd(self.v1.toBDD(index))
        elif self.operator == 'RANGE':
            if isinstance(self.v1, Protocol):
                return Protocol.range2bdd(self.v1.get_value(),
                                          self.v2.get_value(), index)
            elif isinstance(self.v1, Ip):
                return Ip.range2bdd(self.v1.ip & self.v1.mask,
                                    self.v2.ip | ~self.v2.mask & 0xFFFFFFFF,
                                    index)
            elif isinstance(self.v1, Port):
                return Port.range2bdd(self.v1.get_value(), self.v2.get_value(),
                                      index)
            else:
                return self.v1.toBDD(index)
        else:
            return self.v1.toBDD(index)
コード例 #2
0
ファイル: Operator.py プロジェクト: jogaulupeau/springbok
    def toBDD(self, index):
        """Construct the ROBDD

        Parameters
        ----------
        index : int. Used for variable index in ROBDD.

        Return
        ------
        Return the computed ROBDD
        """
        if self.operator == 'LT':
            if isinstance(self.v1, Protocol):
                return Protocol.range2bdd(0, self.v1.get_value(), index)
            elif isinstance(self.v1, Ip):
                return Ip.range2bdd(0, self.v1.ip | ~self.v1.mask & 0xFFFFFFFF, index)
            elif isinstance(self.v1, Port):
                return Port.range2bdd(0, self.v1.get_value(), index)
            else:
                return self.v1.toBDD(index)
        elif self.operator == 'GT':
            if isinstance(self.v1, Protocol):
                return Protocol.range2bdd(self.v1.get_value(), 2**8 - 1, index)
            elif isinstance(self.v1, Ip):
                return Ip.range2bdd(self.v1.ip & self.v1.mask, 2**32 - 1, index)
            elif isinstance(self.v1, Port):
                return Port.range2bdd(self.v1.get_value(), 2**16 - 1, index)
            else:
                return self.v1.toBDD(index)
        elif self.operator == 'EQ':
            return self.v1.toBDD(index)
        elif self.operator == 'NEQ':
            return negate_bdd(self.v1.toBDD(index))
        elif self.operator == 'RANGE':
            if isinstance(self.v1, Protocol):
                return Protocol.range2bdd(self.v1.get_value(), self.v2.get_value(), index)
            elif isinstance(self.v1, Ip):
                return Ip.range2bdd(self.v1.ip & self.v1.mask, self.v2.ip | ~self.v2.mask & 0xFFFFFFFF, index)
            elif isinstance(self.v1, Port):
                return Port.range2bdd(self.v1.get_value(), self.v2.get_value(), index)
            else:
                return self.v1.toBDD(index)
        else:
            return self.v1.toBDD(index)