Sha256: a983973b910a2f543de93cec579d1d30457276e43270de772dfedf37e73a6dde

Contents?: true

Size: 893 Bytes

Versions: 1

Compression:

Stored size: 893 Bytes

Contents

# frozen_string_literal: true

require 'pio/dhcp/dhcp_field'
require 'pio/dhcp/field_util'
require 'pio/ipv4_header'
require 'pio/ethernet_header'
require 'pio/udp_header'

module Pio
  class Dhcp
    # Dhcp frame parser.
    class Frame < BinData::Record
      include FieldUtil

      OPTION_FIELD_LENGTH = 60

      include Ethernet
      include IPv4
      include UdpHeader

      endian :big
      ethernet_header ether_type: Ethernet::Type::IPV4
      ipv4_header ip_protocol: ProtocolNumber::UDP
      udp_header
      dhcp_field :dhcp
      string :padding, read_length: 0, initial_value: :ff_and_padding

      def to_binary
        to_binary_s
      end

      private

      def ff_and_padding
        padding_length = OPTION_FIELD_LENGTH - dhcp.optional_tlvs.num_bytes - 1
        [0xFF].pack('C') + (padding_length > 0 ? "\x00" * padding_length : '')
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pio-0.30.2 lib/pio/dhcp/frame.rb