module RouterConcreteBuilder
Public Instance Methods
buildEgressPort(portNumber)
click to toggle source
# File lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Router_concrete_builder.rb, line 108 def buildEgressPort (portNumber) " Coupled { Type = Coordinator Name = egressPort#{portNumber} Ports = 1; 1 Description = Coupled DEVS model Graphic { Position = #{-4710 + 1200 * portNumber}; -1860 Dimension = 1170; 870 Direction = Down Color = 15 Icon = %datanetworks%priorityegressport.jpg Window = 5000; 5000; 5000; 5000 } Parameters { } System { Inport { Name = Inport0 CoupledPort = 1 Description = Graphic { Position = -4695 ; -3525 Dimension = 390 Direction = Right } } Outport { Name = Outport0 CoupledPort = 1 Description = Graphic { Position = -1785 ; 600 Dimension = 435 Direction = Right } } Atomic { Name = Link Ports = 1 ; 1 Path = PhaseI/Link.h Description = Vector to scalar signal Graphic { Position = -3990 ; -915 Dimension = 630 ; 630 Direction = Down Color = 15 Icon = %vectors%vec2scalar.svg } Parameters { link.capacity = Str; #{id}.egressPort#{portNumber}.link.capacity ; Signal Index link.delay = Str; #{id}.egressPort#{portNumber}.link.delay ; } } Coupled { Type = Coordinator Name = PriorityQueue Ports = 2; 1 Description = Coupled DEVS model Graphic { Position = -4080; -2895 Dimension = 810; 990 Direction = Down Color = 15 Icon = %datanetworks%priorityqueue.jpg Window = 5000; 5000; 5000; 5000 } Parameters { } System { Inport { Name = inPackets CoupledPort = 1 Description = Graphic { Position = -10710 ; -2625 Dimension = 570 Direction = Right } } Outport { Name = outPackets CoupledPort = 1 Description = Graphic { Position = -3990 ; -3750 Dimension = 630 Direction = Right } } Inport { Name = inDequeReq CoupledPort = 2 Description = Graphic { Position = -5880 ; -525 Dimension = 525 Direction = Right } } Atomic { Name = prioritySelect Ports = 1 ; 1 Path = PhaseI/PacketPrioritySelect.h Description = Receives packets, and based on their flowId it selects which output port to send it through Graphic { Position = -8805 ; -2985 Dimension = 675 ; 720 Direction = Right Color = 15 Icon = None } Parameters { } } Atomic { Name = VQueues Ports = 2 ; 2 Path = PhaseI/Vector_NetworkQueueWithSizeOutput.h Description = In0 Incomming packets to queue\\nIn1 Incoming signal to request dequeue\\nOut0 Outgoing dequeued packets\\nOut1 Outgoing queue lenght information\\n\\nQueues incoming packets and enqueues them as required by a\\nexternal entity. FIFO Policy (FirstInFirstOut). Provides information\\nits internal state. Graphic { Position = -7200 ; -2805 Dimension = 600 ; 675 Direction = Right Color = 15 Icon = %datanetworks%queue_vec.png } Parameters { MaxCapacity = Str; #{id}.queueCapacity ; Queue Capacity in Bytes. (Use -1 for INF capacity) ForcedPeriod = Str; -1 ; Force minimum period to transition. Use -1 for INF Instances = Str; #{id}.numberOfQueues ; } } Atomic { Name = WRRScheduler Ports = 2 ; 1 Path = PhaseI/WRRScheduler.h Description = Atomic DEVS model Graphic { Position = -4530 ; -2505 Dimension = 675 ; 675 Direction = Right Color = 15 Icon = None } Parameters { numberOfQueues = Str; #{id}.numberOfQueues ; weights = Str; #{id}.egressPort#{portNumber}.PriorityQueue.WRRScheduler.weights; vector<double> with the weights for each queue } } Atomic { Name = Vect2Scal Ports = 1 ; 1 Path = vector/Vector2Scalar.h Description = Vector to scalar signal Graphic { Position = -5505 ; -4080 Dimension = 675 ; 675 Direction = Right Color = 15 Icon = %vectors%vec2scalar.svg } Parameters { Index = Str; -1 ; Signal Index } } Line { Source = Cmp ; 1 ; 1 ; 0 Sink = Cmp ; 2 ; 1 ; -1 PointX = -8025 ; -8025 ; -7365 PointY = -2625 ; -2625 ; -2625 } Line { Source = Prt ; 1 ; 1 ; 0 Sink = Cmp ; 1 ; 1 ; -1 PointX = -9975 ; -9975 ; -8940 PointY = -2625 ; -2625 ; -2625 } Line { Source = Cmp ; 2 ; 2 ; 0 Sink = Cmp ; 3 ; 1 ; -1 PointX = -6450 ; -6450 ; -4665 PointY = -2325 ; -2325 ; -2325 } Line { Source = Prt ; 3 ; 1 ; 0 Sink = Cmp ; 3 ; 2 ; -1 PointX = -5250 ; -5025 ; -5025 ; -4665 PointY = -525 ; -525 ; -2025 ; -2025 } Line { Source = Cmp ; 3 ; 1 ; 0 Sink = Cmp ; 2 ; 2 ; -1 PointX = -3750 ; -3300 ; -3300 ; -7500 ; -7500 ; -7365 PointY = -2175 ; -2175 ; -1275 ; -1275 ; -2325 ; -2325 } Line { Source = Cmp ; 4 ; 1 ; 0 Sink = Prt ; 2 ; 1 ; -1 PointX = -4725 ; -4725 ; -4140 PointY = -3750 ; -3750 ; -3750 } Line { Source = Cmp ; 4 ; 1 ; -1 Sink = Cmp ; 2 ; 1 ; 0 PointX = -5640 ; -6075 ; -6075 ; -6450 PointY = -3750 ; -3750 ; -2625 ; -2625 } } } Point { ConectedLines = 1 ; 4 ; 5 ConectedExtrems = Org ; Org ; Org Position = -3675 ; 150 } Line { Source = Cmp ; 1 ; 1 ; 0 Sink = Pnt ; 1 ; -1 ; 0 PointX = -3675 ; -3675 ; -3675 PointY = -150 ; -150 ; 150 } Line { Source = Prt ; 1 ; 1 ; 0 Sink = Cmp ; 2 ; 1 ; -1 PointX = -4200 ; -3900 ; -3900 PointY = -3525 ; -3525 ; -2940 } Line { Source = Cmp ; 2 ; 1 ; 0 Sink = Cmp ; 1 ; 1 ; -1 PointX = -3675 ; -3675 ; -3675 PointY = -1875 ; -1875 ; -1065 } Line { Source = Cmp ; 2 ; 2 ; -1 Sink = Pnt ; 1 ; -1 ; 0 PointX = -3450 ; -3450 ; -2775 ; -2775 ; -3675 PointY = -2940 ; -3300 ; -3300 ; 150 ; 150 } Line { Source = Pnt ; 1 ; -1 ; 0 Sink = Prt ; 2 ; 1 ; -1 PointX = -3675 ; -3675 ; -1965 PointY = 150 ; 600 ; 600 } } } " end
buildInPort(portNumber)
click to toggle source
# File lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Router_concrete_builder.rb, line 54 def buildInPort (portNumber) " Inport { Name = Inport#{portNumber} CoupledPort = #{portNumber+1} Description = Graphic { Position = #{-5000 + 1000* portNumber+1} ; -6525 Dimension = 600 Direction = Right } } " end
buildLines(in_elements_quantity, out_elements_quantity)
click to toggle source
# File lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Router_concrete_builder.rb, line 404 def buildLines(in_elements_quantity, out_elements_quantity) routing_position = 1 #Because is the first component after ports first_egress_port_position = routing_position first_output_port_position = in_elements_quantity # Because I have as many inputs_ports as in_elements lines = '' #from inports to Routing (1..in_elements_quantity).each do |i| lines += "Line { Source = Prt ; #{i} ; 1 ; 0 Sink = Cmp ; #{routing_position} ; #{i} ; -1 PointX = -11325 ; -11325 ; -9840 PointY = -2625 ; -2625 ; -2625 } " end # from Routing to egressPorts (1..out_elements_quantity).each do |i| lines += "Line { Source = Cmp ; #{routing_position} ; #{i} ; 0 Sink = Cmp ; #{first_egress_port_position + i} ; 1 ; -1 PointX = -11325 ; -11325 ; -9840 PointY = -2625 ; -2625 ; -2625 } " end # from egressPorts to outports (1..out_elements_quantity).each do |i| lines += "Line { Source = Cmp ; #{first_egress_port_position + i} ; 1 ; 0 Sink = Prt ; #{first_output_port_position + i} ; 1 ; -1 PointX = -11325 ; -11325 ; -9840 PointY = -2625 ; -2625 ; -2625 } " end lines end
buildOutPort(portNumber)
click to toggle source
# File lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Router_concrete_builder.rb, line 70 def buildOutPort (portNumber) " Outport { Name = Outport#{portNumber+1} CoupledPort = #{portNumber+1} Description = Graphic { Position = #{-5000 + 1000* portNumber} ; 2175 Dimension = 600 Direction = Right } } " end
buildRouting(nInports, nOutports)
click to toggle source
# File lib/builders_examples/pdm_builders/PhaseIWithPriorityQueues/Router_concrete_builder.rb, line 86 def buildRouting (nInports, nOutports) " Atomic { Name = Routing Ports = #{nInports} ; #{nOutports} Path = PhaseI/Router.h Description = InN: Incomming packets\\nInN: Outgoing packets \\n This model routes incoming packets to outports. The decision is based on the global table GlobalFlowBasedRoutingTable(flowId, routerName). If there are more than one possible outport, the model uses a routingPolicy (currently hardcoded to Round-Robin) to decide. Graphic { Position = -3600 ; -4155 Dimension = 615 ; 1785 Direction = Down Color = 15 Icon = %datanetworks%router.jpg } Parameters { } } " end
build_output_representation()
click to toggle source
# File lib/builders_examples/pdm_builders/PhaseI/Router_concrete_builder.rb, line 2 def build_output_representation "Atomic { Name = #{@id} Ports = #{in_elements.size} ; #{out_elements.size} Path = PhaseI/Router.h Description = In0: Incomming packetsInN: Outgoing packets from a single flowDemultiplexes a single packet flow in N input output streams.Each output stream contains packets belonging to a single flow identifier. Graphic { Position = #{-9975 + 750 * (@my_number-1)} ; -8505 Dimension = 600 ; 800 Direction = Down Color = 15 Icon = %datanetworks%router.jpg } Parameters { } } " end