Sha256: 893a0166556033e1bc03429218a5596e1b14863a55861a68f8dbe8767feb507d

Contents?: true

Size: 1.78 KB

Versions: 10

Compression:

Stored size: 1.78 KB

Contents

# frozen_string_literal: true

# This file is part of PacketGen
# See https://github.com/sdaubert/packetgen for more informations
# Copyright (C) 2016 Sylvain Daubert <sylvain.daubert@laposte.net>
# This program is published under MIT license.

module PacketGen
  module Header
    # ICMPv6 header ({https://tools.ietf.org/html/rfc4443 RFC 4443})
    #    0                   1                   2                   3
    #    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    #   |     Type      |     Code      |          Checksum             |
    #   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    # A ICMPv6 header consists of:
    # * a +type+ field ({Types::Int8} type),
    # * a +code+ field ({Types::Int8} type),
    # * a +checksum+ field ({Types::Int16} type),
    # * and a +body+.
    #
    # == 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'
    # @author Sylvain Daubert
    class ICMPv6 < ICMP
      # ICMPv6 internet protocol number
      IP_PROTOCOL = 58

      # Compute checksum and set +checksum+ field
      # @return [Integer]
      def calc_checksum
        sum = ip_header(self).pseudo_header_checksum
        sum += self.sz
        sum += IP_PROTOCOL
        sum += IP.sum16(self)
        self.checksum = IP.reduce_checksum(sum)
      end
    end

    self.add_class ICMPv6
    IPv6.bind ICMPv6, next: ICMPv6::IP_PROTOCOL
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
packetgen-3.3.1 lib/packetgen/header/icmpv6.rb
packetgen-3.3.0 lib/packetgen/header/icmpv6.rb
packetgen-3.2.2 lib/packetgen/header/icmpv6.rb
packetgen-3.2.1 lib/packetgen/header/icmpv6.rb
packetgen-3.2.0 lib/packetgen/header/icmpv6.rb
packetgen-3.1.8 lib/packetgen/header/icmpv6.rb
packetgen-3.1.7 lib/packetgen/header/icmpv6.rb
packetgen-3.1.6 lib/packetgen/header/icmpv6.rb
packetgen-3.1.5 lib/packetgen/header/icmpv6.rb
packetgen-3.1.4 lib/packetgen/header/icmpv6.rb