Module: SDN::Message::Helpers

Included in:
SDN::Message
Defined in:
lib/sdn/messages/helpers.rb

Instance Method Summary collapse

Instance Method Details

#checksum(bytes) ⇒ Object



45
46
47
48
# File 'lib/sdn/messages/helpers.rb', line 45

def checksum(bytes)
  result = bytes.inject(&:+)
  [result >> 8, result & 0xff]
end

#from_number(number, bytes) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/sdn/messages/helpers.rb', line 26

def from_number(number, bytes)
  bytes.times.inject([]) do |res, _|
    res << (0xff - number & 0xff)
    number >>= 8
    res
  end
end

#from_string(string, bytes) ⇒ Object



39
40
41
42
43
# File 'lib/sdn/messages/helpers.rb', line 39

def from_string(string, bytes)
  chars = string.bytes
  chars = chars[0...16].fill(0, chars.length, bytes - chars.length)
  chars.map { |b| 0xff - b }
end

#is_group_address?(addr_bytes) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/sdn/messages/helpers.rb', line 12

def is_group_address?(addr_bytes)
  addr_bytes[0..1] == [1, 1]
end

#parse_address(addr_string) ⇒ Object



4
5
6
# File 'lib/sdn/messages/helpers.rb', line 4

def parse_address(addr_string)
  addr_string.match(/^(\h{2})[:.]?(\h{2})[:.]?(\h{2})$/).captures.map { |byte| byte.to_i(16) }
end


8
9
10
# File 'lib/sdn/messages/helpers.rb', line 8

def print_address(addr_bytes)
  "%02X.%02X.%02X" % addr_bytes
end

#to_number(param, nillable: false) ⇒ Object



20
21
22
23
24
# File 'lib/sdn/messages/helpers.rb', line 20

def to_number(param, nillable: false)
  result = Array(param).reverse.inject(0) { |sum, byte| (sum << 8) + 0xff - byte }
  result = nil if nillable && result == (1 << (8 * Array(param).length)) - 1
  result
end

#to_string(param) ⇒ Object



34
35
36
37
# File 'lib/sdn/messages/helpers.rb', line 34

def to_string(param)
  chars = param.map { |b| 0xff - b }
  chars[0..-1].pack("C*").sub(/\0+$/, '')
end

#transform_param(param) ⇒ Object



16
17
18
# File 'lib/sdn/messages/helpers.rb', line 16

def transform_param(param)
  Array(param).reverse.map { |byte| 0xff - byte }
end