def __init__(self, identity, left, right, rate, delay, size): Reporter.__init__(self, identity) self.left_node = left self.right_node = right # Need to standardize units to kbit/ms, kbits, and ms self.capacity_kbit_per_ms = float( rate) # 1000 Kilobits in a Megabit, 1000 ms in a s self.ms_prop_delay = float(delay) # Already standardized self.kbits_in_each_buffer = 8.0 * float( size ) # 8 = conversion from BYTE to BIT, ignore 1024 vs 1000 convention self.left_buff = LinkBuffer(self.kbits_in_each_buffer) self.right_buff = LinkBuffer(self.kbits_in_each_buffer) self.bidirectional_queueing_delay_memory = [ -1 ] * constants.QUEUEING_DELAY_WINDOW
def __init__(self, identifier, rate, delay, buffer_size, node1, node2): """ A network link. Args: identifier (str): The name of the link. rate (float): The link capacity, in Mbps. delay (int): Propagation delay, in ms. buffer_size (int): The buffer size, in KB. node1 (Node): The first endpoint of the link. node2 (Node): The second endpoint of the link. """ super(Link, self).__init__() self.id = identifier self.rate = rate self.delay = delay self.buffer_size = buffer_size * 1024 self.node1 = node1 self.node2 = node2 self.node1.add_link(self) self.node2.add_link(self) # This determines whether the link is in use to handle half-duplex self.in_use = False self.current_dir = None # The buffer of packets going towards node 1 or node 2 self.buffer = LinkBuffer(self) # Bytes sent over this link self.bytesSent = 0.0 # Time it has taken so far to send these bytes self.sendTime = 0.0 self.packets_on_link = {1: [], 2: []}