class PacketGen::Header::IPv6::Addr

IPv6 address, as a group of 8 2-byte words @author Sylvain Daubert

Public Instance Methods

==(other) click to toggle source
# File lib/packetgen/header/ipv6/addr.rb, line 91
def ==(other)
  other.is_a?(self.class) &&
    fields.all? { |attr| self[attr].value == other[attr].value }
end
from_human(str) click to toggle source

Read a colon-delimited address @param [String] str @return [self]

# File lib/packetgen/header/ipv6/addr.rb, line 55
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?() click to toggle source

Return true if this address is a multicast one @return [Boolean]

# File lib/packetgen/header/ipv6/addr.rb, line 87
def mcast?
  self.a1 & 0xff00 == 0xff00
end
to_a() click to toggle source

Return an array of address 16-bit words @return [Array<Integer>]

# File lib/packetgen/header/ipv6/addr.rb, line 81
def to_a
  @fields.values
end
to_human() click to toggle source

Addr6 in human readable form (colon-delimited hex string) @return [String]

# File lib/packetgen/header/ipv6/addr.rb, line 75
def to_human
  IPAddr.new(to_a.map { |a| a.to_i.to_s(16) }.join(':')).to_s
end