Class: Tinet::Link
- Inherits:
-
Object
- Object
- Tinet::Link
- Defined in:
- lib/tinet/link.rb
Constant Summary collapse
- TYPES =
%w(n2n s2n).freeze
Instance Attribute Summary collapse
-
#left ⇒ Object
readonly
Returns the value of attribute left.
-
#right ⇒ Object
readonly
Returns the value of attribute right.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Class Method Summary collapse
- .link(nodes, switches) ⇒ Array<Tinet::Link>
- .link_n2n(nodes) ⇒ Array<Tinet::Link>
- .link_s2n(nodes, switches) ⇒ Array<Tinet::Link>
Instance Method Summary collapse
-
#initialize(left, right, type) ⇒ Link
constructor
A new instance of Link.
Constructor Details
#initialize(left, right, type) ⇒ Link
Returns a new instance of Link.
59 60 61 62 63 |
# File 'lib/tinet/link.rb', line 59 def initialize(left, right, type) @left = left @right = right @type = type end |
Instance Attribute Details
#left ⇒ Object (readonly)
Returns the value of attribute left.
54 55 56 |
# File 'lib/tinet/link.rb', line 54 def left @left end |
#right ⇒ Object (readonly)
Returns the value of attribute right.
54 55 56 |
# File 'lib/tinet/link.rb', line 54 def right @right end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
54 55 56 |
# File 'lib/tinet/link.rb', line 54 def type @type end |
Class Method Details
.link(nodes, switches) ⇒ Array<Tinet::Link>
9 10 11 |
# File 'lib/tinet/link.rb', line 9 def link(nodes, switches) link_n2n(nodes) + link_s2n(nodes, switches) end |
.link_n2n(nodes) ⇒ Array<Tinet::Link>
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/tinet/link.rb', line 15 def link_n2n(nodes) list, index = [], {} nodes.each do |node| node.interfaces.each do |interface| if interface.type == :direct key = "#{interface.args}-#{node.name}##{interface.name}" # example: C0#net0-C1#net0 if index.key?(key) list << self.new(index[key], interface, :n2n) else key = "#{node.name}##{interface.name}-#{interface.args}" # example: C1#net0-C0#net0 index[key] = interface end end end end list end |
.link_s2n(nodes, switches) ⇒ Array<Tinet::Link>
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/tinet/link.rb', line 36 def link_s2n(nodes, switches) list, index = [], {} nodes.each do |node| node.interfaces.each do |interface| key = "#{node.name}-#{interface.args}" # example: C0-B0 index[key] = interface if interface.type == :bridge end end switches.each do |switch| switch.interfaces.each do |interface| key = "#{interface.args}-#{switch.name}" # example: C0-B0 list << self.new(interface, index[key], :s2n) if index.key?(key) end end list end |