Esempio n. 1
0
    def validate_netem_parameter(self):
        self.validate_bandwidth_rate()
        self.__validate_network_delay()
        self.__validate_packet_loss_rate()
        self.__validate_packet_duplicate_rate()
        self.__validate_corruption_rate()
        self.__validate_reordering_rate()
        self.__validate_reordering_and_delay()

        netem_param_values = [
            self.__packet_loss_rate,
            self.__packet_duplicate_rate,
            self.__corruption_rate,
            self.__reordering_rate,
        ]
        if self.__bandwidth_rate:
            netem_param_values.append(self.__bandwidth_rate.kilo_bps)

        check_results = [
            not RealNumber(netem_param_value).is_type() or netem_param_value <= 0
            for netem_param_value in netem_param_values
        ]

        if self.__latency_time:
            check_results.append(self.__latency_time <= hr.Time(Tc.ValueRange.LatencyTime.MIN))

        if all(check_results):
            raise hr.ParameterError(
                "there are no valid net emulation parameters found. "
                "at least one or more following parameters are required: "
                "--rate, --delay, --loss, --duplicate, --corrupt, --reordering"
            )
Esempio n. 2
0
    def __validate_network_delay(self):
        if self.__latency_time:
            try:
                self.__latency_time.validate(
                    min_value=Tc.ValueRange.LatencyTime.MIN, max_value=Tc.ValueRange.LatencyTime.MAX
                )
            except hr.ParameterError as e:
                raise hr.ParameterError("delay {}".format(e))

        if self.__latency_distro_time:
            try:
                self.__latency_distro_time.validate(
                    min_value=Tc.ValueRange.LatencyTime.MIN, max_value=Tc.ValueRange.LatencyTime.MAX
                )
            except hr.ParameterError as e:
                raise hr.ParameterError("delay-distro {}".format(e))
Esempio n. 3
0
    def validate_bandwidth_rate(self):
        hr_bps = self.__bandwidth_rate

        if not hr_bps:
            return

        if hr_bps.bps < 8:
            raise hr.ParameterError(
                "bandwidth rate must be greater or equals to 8bps", value="{}bps".format(hr_bps.bps)
            )

        upper_limit_rate = get_upper_limit_rate(self.__device)
        if hr_bps > upper_limit_rate:
            raise hr.ParameterError(
                "exceed bandwidth rate limit",
                value="{} kbps".format(hr_bps.kilo_bps),
                expected="less than {} kbps".format(upper_limit_rate.kilo_bps),
            )
Esempio n. 4
0
    def timeout(self, value):
        if value is None:
            self.__timeout = value
            return

        timeout = hr.Time(str(value), default_unit=hr.Time.Unit.MILLISECOND)
        if timeout <= hr.Time("0s"):
            raise hr.ParameterError("timeout is too low",
                                    expected="greater than zero",
                                    value=timeout)

        self.__timeout = timeout
Esempio n. 5
0
    def deadline(self, value):
        if value is None:
            self.__deadline = value
            return

        deadline = hr.Time(str(value), default_unit=hr.Time.Unit.SECOND)

        if deadline <= hr.Time("0s"):
            raise hr.ParameterError("deadline is too low",
                                    expected="greater than zero",
                                    value=deadline)

        self.__deadline = deadline
Esempio n. 6
0
 def __validate_reordering_and_delay(self):
     if self.__reordering_rate and self.__latency_time and self.__latency_time.milliseconds <= 0:
         raise hr.ParameterError("reordering needs latency to be specified: set latency > 0")