Class: Tinet::Link

Inherits:
Object
  • Object
show all
Defined in:
lib/tinet/link.rb

Constant Summary collapse

TYPES =
%w(n2n s2n).freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(left, right, type) ⇒ Link

Returns a new instance of Link.

Parameters:



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

#leftObject (readonly)

Returns the value of attribute left.



54
55
56
# File 'lib/tinet/link.rb', line 54

def left
  @left
end

#rightObject (readonly)

Returns the value of attribute right.



54
55
56
# File 'lib/tinet/link.rb', line 54

def right
  @right
end

#typeObject (readonly)

Returns the value of attribute type.



54
55
56
# File 'lib/tinet/link.rb', line 54

def type
  @type
end

Class Method Details

Parameters:

Returns:



9
10
11
# File 'lib/tinet/link.rb', line 9

def link(nodes, switches)
  link_n2n(nodes) + link_s2n(nodes, switches)
end

Parameters:

Returns:



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

Parameters:

Returns:



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