42 lines
1.2 KiB
Elixir
42 lines
1.2 KiB
Elixir
defmodule Openflow.Action.NxResubmitTable do
|
|
defstruct(in_port: :in_port, table_id: :all)
|
|
|
|
@experimenter 0x00002320
|
|
@nxast 14
|
|
|
|
alias __MODULE__
|
|
alias Openflow.Action.Experimenter
|
|
|
|
def new(options \\ [])
|
|
|
|
def new(table_id) when is_atom(table_id) or is_integer(table_id) do
|
|
new(table_id: table_id)
|
|
end
|
|
|
|
def new(options) do
|
|
in_port = options[:in_port] || :in_port
|
|
table_id = options[:table_id] || :all
|
|
%NxResubmitTable{in_port: in_port, table_id: table_id}
|
|
end
|
|
|
|
def to_binary(%NxResubmitTable{} = resubmit_table) do
|
|
in_port_int = Openflow.Utils.get_enum(resubmit_table.in_port, :openflow10_port_no)
|
|
table_id_int = Openflow.Utils.get_enum(resubmit_table.table_id, :table_id)
|
|
|
|
Experimenter.pack_exp_header(<<
|
|
@experimenter::32,
|
|
@nxast::16,
|
|
in_port_int::16,
|
|
table_id_int::8,
|
|
0::24
|
|
>>)
|
|
end
|
|
|
|
def read(
|
|
<<@experimenter::32, @nxast::16, in_port_int::16, table_id_int::8, 0::size(3)-unit(8)>>
|
|
) do
|
|
in_port = Openflow.Utils.get_enum(in_port_int, :openflow10_port_no)
|
|
table_id = Openflow.Utils.get_enum(table_id_int, :table_id)
|
|
%NxResubmitTable{in_port: in_port, table_id: table_id}
|
|
end
|
|
end
|