Sha256: 40da2d32986b176795eeae1592c9e45d55d90f6e665a0792d65b501c474d8ad1

Contents?: true

Size: 1.37 KB

Versions: 4

Compression:

Stored size: 1.37 KB

Contents

# 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.

# frozen_string_literal: true

module PacketGen
  module Header

    # 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_header ICMPv6, next: ICMPv6::IP_PROTOCOL
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
packetgen-2.6.0 lib/packetgen/header/icmpv6.rb
packetgen-2.5.2 lib/packetgen/header/icmpv6.rb
packetgen-2.5.1 lib/packetgen/header/icmpv6.rb
packetgen-2.5.0 lib/packetgen/header/icmpv6.rb