Class: Pio::OpenFlow::Port

Inherits:
BinData::Primitive
  • Object
show all
Defined in:
lib/pio/open_flow/port.rb

Overview

Port numbering.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.max_port_number(port_number) ⇒ Object



13
14
15
# File 'lib/pio/open_flow/port.rb', line 13

def self.max_port_number(port_number)
  const_set :MAX, port_number
end

.port_size_in_bytes(nbytes) ⇒ Object



9
10
11
# File 'lib/pio/open_flow/port.rb', line 9

def self.port_size_in_bytes(nbytes)
  class_eval "uint#{nbytes} :port"
end

.reserved_port_name?(port_name) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/pio/open_flow/port.rb', line 25

def self.reserved_port_name?(port_name)
  @reserved.key? port_name
end

.reserved_port_number(port_name) ⇒ Object



21
22
23
# File 'lib/pio/open_flow/port.rb', line 21

def self.reserved_port_number(port_name)
  @reserved.fetch port_name
end

.reserved_ports(port_name_and_number) ⇒ Object



17
18
19
# File 'lib/pio/open_flow/port.rb', line 17

def self.reserved_ports(port_name_and_number)
  @reserved = port_name_and_number
end

Instance Method Details

#getObject



49
50
51
52
53
54
55
# File 'lib/pio/open_flow/port.rb', line 49

def get
  if reserved_port_number?(port)
    reserved_port_name(port)
  else
    port
  end
end

#maxObject



29
30
31
# File 'lib/pio/open_flow/port.rb', line 29

def max
  self.class.const_get :MAX
end

#reserved_port_name(port_number) ⇒ Object



45
46
47
# File 'lib/pio/open_flow/port.rb', line 45

def reserved_port_name(port_number)
  self.class.instance_variable_get(:@reserved).invert.fetch(port_number)
end

#reserved_port_name?(port_name) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/pio/open_flow/port.rb', line 37

def reserved_port_name?(port_name)
  self.class.reserved_port_name? port_name
end

#reserved_port_number(port_name) ⇒ Object



33
34
35
# File 'lib/pio/open_flow/port.rb', line 33

def reserved_port_number(port_name)
  self.class.reserved_port_number port_name
end

#reserved_port_number?(port_number) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/pio/open_flow/port.rb', line 41

def reserved_port_number?(port_number)
  self.class.instance_variable_get(:@reserved).invert.key?(port_number)
end

#set(port) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/pio/open_flow/port.rb', line 57

def set(port)
  if reserved_port_name?(port)
    self.port = reserved_port_number(port)
  else
    port_num = port.to_i
    raise ArgumentError, 'The port should be > 0' if port_num < 1
    if port_num >= max
      raise ArgumentError, "The port should be < #{max.to_hex}"
    end
    self.port = port_num
  end
end