Source code for simulator.radios.DtnBasicRadio

from simulator.core.DtnQueue import DtnQueue
from simulator.radios.DtnAbstractRadio import DtnAbstractRadio

[docs]class DtnBasicRadio(DtnAbstractRadio): def __init__(self, env, parent, shared=True): # Call parent constructor super(DtnBasicRadio, self).__init__(env, parent, shared) # Create input queue self.in_queue = DtnQueue(env) @property def stored(self): df = self.in_queue.stored df['where'] = 'radio' return df
[docs] def initialize(self, rate=0, BER=0, J_bit=0, **kwargs): # Store configuration parameters self.datarate = rate self.BER = BER self.J_bit = J_bit # Call parent initializer super(DtnBasicRadio, self).initialize()
def do_put(self, neighbor, message, peer, direction): # Create item to send item = (neighbor, message, peer, direction) # Add it to the queue yield from self.in_queue.put(item) def run(self, **kwargs): while self.is_alive: # Get the next segment to transmit item = yield from self.in_queue.get() # Depack item neighbor, message, peer, direction = item # Get the connection to send this message through conn = self.outcons[neighbor] # Compute total transmission time Ttx = message.num_bits/self.datarate # Apply delay for radio to transmit entire segment yield self.env.timeout(Ttx) # Count the energy consumed self.energy += message.num_bits * self.J_bit # Transmit the message through the connection. self.send_through_connection(message, conn, peer, direction)
[docs] def send_through_connection(self, message, conn, peer, direction): """ Send a message through a connection :param Message message: The message to send :param conn: The connection to send the message through :param peer: The peer duct that will receive the message :param str direction: 'fwd' vs. 'ack'. By default 'fwd', use 'ack' for the acknowledgement messages of protocols like LTP (from dest to origin). """ # This is a non-blocking call since the bundle is out in transit conn.transmit(peer, message, self.BER, direction=direction)