Sha256: 9fbd13b65b00b96090efa43f8b64bb54316526355c8bf57d7ef87cb39b6475d6

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

require 'forwardable'
require 'pio/open_flow/action'

module Pio
  module OpenFlow13
    # Write metadata
    class WriteMetadata < OpenFlow::Action
      # 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
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pio-0.30.1 lib/pio/open_flow13/write_metadata.rb