Sha256: ba5eb135df5ef191021ff4bcc770faaf7ff9aee195f38b49e9f39b11492fc2a2

Contents?: true

Size: 1.58 KB

Versions: 7

Compression:

Stored size: 1.58 KB

Contents

require 'forwardable'
require 'pio/open_flow'

# Base module.
module Pio
  # OpenFlow 1.3 Features Request and Reply message.
  class Features
    remove_const :Request

    # OpenFlow 1.3 Features Request message.
    class Request
      # OpenFlow 1.3 Features Request message format.
      class Format < BinData::Record
        extend Forwardable

        endian :big
        open_flow_header(:open_flow_header,
                         ofp_version_value: 4, message_type_value: 5)
        string :body, value: ''

        def_delegators :open_flow_header, :ofp_version
        def_delegators :open_flow_header, :message_type
        def_delegators :open_flow_header, :message_length
        def_delegators :open_flow_header, :transaction_id
        def_delegator :open_flow_header, :transaction_id, :xid

        def to_binary
          to_binary_s
        end
      end

      def self.read(raw_data)
        allocate.tap do |message|
          message.instance_variable_set(:@format, Format.read(raw_data))
        end
      rescue BinData::ValidityError
        raise Pio::ParseError, 'Invalid Features Request 1.3 message.'
      end

      def initialize(user_attrs = {})
        unknown_attrs = user_attrs.keys - [:transaction_id, :xid]
        unless unknown_attrs.empty?
          fail "Unknown keyword: #{unknown_attrs.first}"
        end
        header_options = OpenFlowHeader::Options.parse(user_attrs)
        @format = Format.new(open_flow_header: header_options)
      end

      def method_missing(method, *args, &block)
        @format.__send__ method, *args, &block
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pio-0.23.1 lib/pio/open_flow13/features_request.rb
pio-0.23.0 lib/pio/open_flow13/features_request.rb
pio-0.22.0 lib/pio/open_flow13/features_request.rb
pio-0.21.1 lib/pio/open_flow13/features_request.rb
pio-0.21.0 lib/pio/open_flow13/features_request.rb
pio-0.20.1 lib/pio/open_flow13/features_request.rb
pio-0.20.0 lib/pio/open_flow13/features_request.rb