def __init__(self, time, packet_loss, node_id, maximum_transmission_time): """ *Parameters*: - **time**: a simulation time object of the :class:`sim2net._time.Time` class; - **packet_loss**: an object representing a packet loss model to use (see :mod:`sim2net.packet_loss`); - **node_id** (`int`): an identifier of the node for which the output channel is created; - **maximum_transmission_time** (`float`): maximum message transmission time between neighboring nodes in the *simulation time* units (see: :mod:`sim2net._time`). """ self.__logger = logger.get_logger('channel.output') assert self.__logger is not None, \ 'A logger object expected but "None" value got!' self.__random_generator = get_random_generator() assert self.__random_generator is not None, \ 'A random generator object expected but "None" value got!' super(_Output, self).__init__(node_id) self.__time = time self.__packet_loss = packet_loss self.__node_id = node_id self.__packet_counter = int(-1) self.__maximum_transmission_time = maximum_transmission_time self.__next_transmission_time = float(-1.0) # [ transmission start time, transmission end time, # message identifier, (sending node identifier, message), # [ list of neighboring nodes ] ] self.__transmitted_packets = list()
def __init__(self, name): """ *Parameters*: - **name** (`str`): a name of the implemented simulation area. """ self.__logger = logger.get_logger('area.' + str(name)) assert self.__logger is not None, \ 'A logger object expected but "None" value got!'
def __init__(self, name): """ *Parameters*: - **name** (`str`): a name of the implemented speed distribution. """ self.__random_generator = get_random_generator() assert self.__random_generator is not None, \ 'A random generator object expected but "None" value got!' self.__logger = logger.get_logger('speed.' + str(name)) assert self.__logger is not None, \ 'A logger object expected but "None" value got!'
def __init__(self, name): """ *Parameters*: - **name** (`str`): a name of the implemented mobility model. """ self.__random_generator = get_random_generator() assert self.__random_generator is not None, \ 'A random generator object expected but "None" value got!' self.__logger = logger.get_logger('mobility.' + str(name)) assert self.__logger is not None, \ 'A logger object expected but "None" value got!'
def __init__(self, name): """ *Parameters*: - **name** (`str`): a name of the implemented process failure model. """ self.__random_generator = get_random_generator() assert self.__random_generator is not None, \ 'A random generator object expected but "None" value got!' self.__logger = logger.get_logger('failure.' + str(name)) assert self.__logger is not None, \ 'A logger object expected but "None" value got!'
def __init__(self, node_id): """ *Parameters*: - **node_id** (`int`): an identifier of the node for which the input channel is created. """ self.__logger = logger.get_logger('channel.input') assert self.__logger is not None, \ 'A logger object expected but "None" value got!' self.__random_generator = get_random_generator() assert self.__random_generator is not None, \ 'A random generator object expected but "None" value got!' self.__node_id = node_id self.__captured_packets = list()
def __init__(self, environment): """ *Parameters*: - **environment**: a dictionary that contains objects, which form the network environment for simulations (see :attr:`sim2net._network.Network.__ENVIRONMENT` for the objects list). """ self.__logger = logger.get_logger(Network.__name__) self.__logger.debug('Initializing the simulated network') try: for key in Network.__ENVIRONMENT: if environment[key] is None: raise KeyError(key) except KeyError, err: self.__logger.critical('No settings given for "%s" parameter!' % err) raise
def __init__(self, time, packet_loss, node_id, maximum_transmission_time): """ *Parameters*: - **time**: a simulation time object of the :class:`sim2net._time.Time` class; - **packet_loss**: an object representing the packet loss model (see :mod:`sim2net.packet_loss`); - **node_id** (`int`): an identifier of the node; - **maximum_transmission_time** (`float`): maximum message transmission time between neighboring nodes in the *simulation time* units (see: :mod:`sim2net._time`). *Raises*: - **ValueError**: raised when the given value of the *time* or *packet_loss* parameter is `None`; or when the given value of the *node_id* or *maximum_transmission_time* parameter is less than zero. """ if time is None: raise ValueError('Parameter "time": a time abstraction object' ' expected but "None" value given!') if packet_loss is None: raise ValueError('Parameter "packet_loss": an object' ' representing a packet loss model expected' ' but "None" value given!') self.__logger = logger.get_logger(Channel.__name__) assert self.__logger is not None, \ 'A logger object expected but "None" value got!' check_argument_type(Channel.__name__, 'node_id', int, node_id, self.__logger) if node_id < 0: raise ValueError('Parameter "node_id": a value of the identifier' ' cannot be less that zero but %d given!' % int(node_id)) check_argument_type(Channel.__name__, 'maximum_transmission_time', float, maximum_transmission_time, self.__logger) if maximum_transmission_time < 0.0: raise ValueError('Parameter "maximum_transmission_time": a value' ' of the maximum message transmission time' ' cannot be less that zero but %f given!' % float(maximum_transmission_time)) super(Channel, self).__init__(time, packet_loss, node_id, maximum_transmission_time)
def setup(self, simulation_frequency=1): """ Initializes time abstractions for simulations. *Parameters*: - **simulation_frequency** (`int`): a value of the simulation frequency (greater than 0). *Raises*: - **ValueError**: raised when a given value of the simulation frequency is less or equal to 0. *Examples*: .. testsetup:: from sim2net._time import Time .. doctest:: >>> clock = Time() >>> clock.setup() >>> clock.tick() (0, 0.0) >>> clock.tick() (1, 1.0) >>> clock.tick() (2, 2.0) >>> clock.simulation_period 1.0 >>> clock = Time() >>> clock.setup(4) >>> clock.tick() (0, 0.0) >>> clock.tick() (1, 0.25) >>> clock.tick() (2, 0.5) >>> clock.tick() (3, 0.75) >>> clock.tick() (4, 1.0) >>> clock.simulation_period 0.25 """ self.__logger = logger.get_logger(Time.__name__) assert self.__logger is not None, \ 'A logger object expected but "None" value got!' self.__simulation_step = int(-1) self.__simulation_time = float(-1.0) check_argument_type(Time.__name__, 'simulation_frequency', int, simulation_frequency, self.__logger) if simulation_frequency <= 0: raise ValueError('Parameter "simulation_frequency": a value of' \ ' the simulation frequency parameter cannot be' \ ' less or equal to zero, but %d given!' % int(simulation_frequency)) self.__simulation_frequency = float(simulation_frequency) self.__simulation_period = 1.0 / self.__simulation_frequency self.__logger.debug('The simulation time has been initialized with' \ ' the simulation frequency set to %d and the' \ ' simulation period equal to %f' % (self.__simulation_frequency, self.__simulation_period))