Class: PacketGen::Header::IPv6::Addr

Inherits:
Types::Fields show all
Includes:
Types::Fieldable
Defined in:
lib/packetgen/header/ipv6/addr.rb

Overview

IPv6 address, as a group of 8 2-byte words

Author:

  • Sylvain Daubert

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Types::Fieldable

#format_inspect, #read, #sz, #to_s, #type_name

Methods inherited from Types::Fields

#[], #[]=, #bits_on, define_bit_fields_on, define_field, define_field_after, define_field_before, #fields, fields, inherited, #initialize, #inspect, #offset_of, #optional?, #optional_fields, #present?, #read, remove_bit_fields_on, remove_field, #sz, #to_h, #to_s, update_field

Constructor Details

This class inherits a constructor from PacketGen::Types::Fields

Instance Attribute Details

#a1Integer

1st 2-byte word of IPv6 address

Returns:

  • (Integer)


23
# File 'lib/packetgen/header/ipv6/addr.rb', line 23

define_field :a1, Types::Int16

#a2Integer

2nd 2-byte word of IPv6 address

Returns:

  • (Integer)


27
# File 'lib/packetgen/header/ipv6/addr.rb', line 27

define_field :a2, Types::Int16

#a3Integer

3rd 2-byte word of IPv6 address

Returns:

  • (Integer)


31
# File 'lib/packetgen/header/ipv6/addr.rb', line 31

define_field :a3, Types::Int16

#a4Integer

4th 2-byte word of IPv6 address

Returns:

  • (Integer)


35
# File 'lib/packetgen/header/ipv6/addr.rb', line 35

define_field :a4, Types::Int16

#a5Integer

5th 2-byte word of IPv6 address

Returns:

  • (Integer)


39
# File 'lib/packetgen/header/ipv6/addr.rb', line 39

define_field :a5, Types::Int16

#a6Integer

6th 2-byte word of IPv6 address

Returns:

  • (Integer)


43
# File 'lib/packetgen/header/ipv6/addr.rb', line 43

define_field :a6, Types::Int16

#a7Integer

7th 2-byte word of IPv6 address

Returns:

  • (Integer)


47
# File 'lib/packetgen/header/ipv6/addr.rb', line 47

define_field :a7, Types::Int16

#a8Integer

8th 2-byte word of IPv6 address

Returns:

  • (Integer)


51
# File 'lib/packetgen/header/ipv6/addr.rb', line 51

define_field :a8, Types::Int16

Instance Method Details

#==(other) ⇒ Object



95
96
97
98
# File 'lib/packetgen/header/ipv6/addr.rb', line 95

def ==(other)
  other.is_a?(self.class) &&
    fields.all? { |attr| self[attr].value == other[attr].value }
end

#from_human(str) ⇒ self

Read a colon-delimited address

Parameters:

  • str (String)

Returns:

  • (self)

Raises:

  • (ArgumentError)


58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/packetgen/header/ipv6/addr.rb', line 58

def from_human(str)
  return self if str.nil?

  addr = IPAddr.new(str)
  raise ArgumentError, 'string is not a IPv6 address' unless addr.ipv6?

  addri = addr.to_i
  self.a1 = addri >> 112
  self.a2 = addri >> 96 & 0xffff
  self.a3 = addri >> 80 & 0xffff
  self.a4 = addri >> 64 & 0xffff
  self.a5 = addri >> 48 & 0xffff
  self.a6 = addri >> 32 & 0xffff
  self.a7 = addri >> 16 & 0xffff
  self.a8 = addri & 0xffff
  self
end

#mcast?Boolean

Return true if this address is a multicast one

Returns:

  • (Boolean)


91
92
93
# File 'lib/packetgen/header/ipv6/addr.rb', line 91

def mcast?
  self.a1 & 0xff00 == 0xff00
end

#to_aArray<Integer>

Return an array of address 16-bit words

Returns:

  • (Array<Integer>)


85
86
87
# File 'lib/packetgen/header/ipv6/addr.rb', line 85

def to_a
  @fields.values
end

#to_humanString

Addr6 in human readable form (colon-delimited hex string)

Returns:

  • (String)


79
80
81
# File 'lib/packetgen/header/ipv6/addr.rb', line 79

def to_human
  IPAddr.new(to_a.map { |a| a.to_i.to_s(16) }.join(':')).to_s
end