Class: PacketGen::Header::ICMPv6

Inherits:
ICMP show all
Defined in:
lib/packetgen/header/icmpv6.rb

Overview

A ICMPv6 header consists of:

Create a ICMPv6 header

# standalone
icmpv6 = PacketGen::Header::ICMPv6.new
# in a packet
pkt = PacketGen.gen('IPv6').add('ICMPv6')
# access to ICMPv6 header
pkt.icmpv6     # => PacketGen::Header::ICMPv6

ICMPv6 attributes

icmpv6.code = 0
icmpv6.type = 200
icmpv6.checksum = 0x248a
icmpv6.body.read 'this is a body'

Constant Summary collapse

IP_PROTOCOL =

ICMPv6 internet protocol number

58

Instance Attribute Summary

Attributes inherited from ICMP

#body, #checksum, #code, #type

Attributes inherited from Base

#packet

Instance Method Summary collapse

Methods inherited from Base

bind_header, #header_id, inherited, #ip_header, known_headers, #parse?, #protocol_name

Methods inherited from Types::Fields

#[], #[]=, #body=, define_bit_fields_on, define_field, define_field_after, define_field_before, #fields, #force_binary, inherited, #initialize, #inspect, #read, #sz, #to_h, #to_s

Constructor Details

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

Instance Method Details

#calc_checksumInteger

Compute checksum and set checksum field

Returns:

  • (Integer)


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/packetgen/header/icmpv6.rb', line 36

def calc_checksum
  sum = ip_header(self).pseudo_header_checksum
  sum += self.sz
  sum += IP_PROTOCOL
  sum +=(type << 8) | code

  payload = body.to_s
  payload << "\x00" unless payload.size % 2 == 0
  payload.unpack('n*').each { |x| sum += x }

  while sum > 0xffff do
    sum = (sum & 0xffff) + (sum >> 16)
  end
  sum = ~sum & 0xffff
  self[:checksum].value = (sum == 0) ? 0xffff : sum
end