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" )
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))
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), )
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
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
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")