Sha256: 6c4b9f2cd2706481948f2607876809f5fc54bbb1e8a1dcb027e9ff086e55de15

Contents?: true

Size: 1.17 KB

Versions: 4

Compression:

Stored size: 1.17 KB

Contents

require 'pio/monkey_patch/integer'
require 'pio/open_flow/action'
require 'pio/open_flow10/port16'

module Pio
  module OpenFlow10
    # An action to enqueue the packet on the specified queue attached
    # to a port.
    class Enqueue < OpenFlow::Action
      action_header action_type: 11, action_length: 16
      port16 :port
      string :padding, length: 6
      hide :padding
      uint32 :queue_id

      def initialize(user_options)
        validate_port user_options
        validate_queue_id user_options
        super(user_options)
      end

      private

      def validate_port(user_options)
        port = user_options.fetch(:port)
        if port.is_a?(Symbol) && port != :in_port
          fail(ArgumentError,
               ':port must be a valid physical port or :in_port')
        end
      rescue KeyError
        raise ArgumentError, ':port is a mandatory option'
      end

      def validate_queue_id(user_options)
        unless user_options.fetch(:queue_id).unsigned_32bit?
          fail ArgumentError, ':queue_id must be an unsigned 32-bit integer'
        end
      rescue KeyError
        raise ArgumentError, ':queue_id is a mandatory option'
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
pio-0.30.0 lib/pio/open_flow10/enqueue.rb
pio-0.29.0 lib/pio/open_flow10/enqueue.rb
pio-0.28.1 lib/pio/open_flow10/enqueue.rb
pio-0.28.0 lib/pio/open_flow10/enqueue.rb