Sha256: a94a264aacb037f4f9ca1b8c8fd7b1c2db4f1dfcb616f982e198e2a80bded114

Contents?: true

Size: 1.12 KB

Versions: 12

Compression:

Stored size: 1.12 KB

Contents

require 'forwardable'

# Base module.
module Pio
  # Write metadata
  class WriteMetadata
    # OpenFlow 1.3.4 OFPIT_WRITE_METADATA instruction format
    class Format < BinData::Record
      endian :big

      uint16 :instruction_type, value: 2
      uint16 :instruction_length, value: 24
      uint32 :padding
      uint64 :metadata
      uint64 :metadata_mask
    end

    def self.read(raw_data)
      allocate.tap do |write_metadata|
        write_metadata.instance_variable_set :@format, Format.read(raw_data)
      end
    end

    extend Forwardable

    def_delegators :@format, :instruction_type
    def_delegators :@format, :instruction_length
    def_delegators :@format, :metadata
    def_delegators :@format, :metadata_mask
    def_delegators :@format, :to_binary_s

    def initialize(user_options)
      @options = user_options
      @format = Format.new(options)
    end

    def options
      {
        metadata: metadata_option,
        metadata_mask: metadata_mask_option
      }
    end

    def metadata_option
      @options[:metadata]
    end

    def metadata_mask_option
      @options[:metadata_mask]
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
pio-0.30.0 lib/pio/open_flow13/write_metadata.rb
pio-0.29.0 lib/pio/open_flow13/write_metadata.rb
pio-0.28.1 lib/pio/open_flow13/write_metadata.rb
pio-0.28.0 lib/pio/open_flow13/write_metadata.rb
pio-0.27.2 lib/pio/open_flow13/write_metadata.rb
pio-0.27.1 lib/pio/open_flow13/write_metadata.rb
pio-0.27.0 lib/pio/open_flow13/write_metadata.rb
pio-0.26.0 lib/pio/open_flow13/write_metadata.rb
pio-0.25.0 lib/pio/open_flow13/write_metadata.rb
pio-0.24.2 lib/pio/open_flow13/write_metadata.rb
pio-0.24.1 lib/pio/open_flow13/write_metadata.rb
pio-0.24.0 lib/pio/open_flow13/write_metadata.rb