tres/lib/openflow/actions/nx_write_metadata.ex
2019-05-05 23:39:45 +09:00

38 lines
1,019 B
Elixir

defmodule Openflow.Action.NxWriteMetadata do
defstruct(
metadata: 0,
metadata_mask: 0xFFFFFFFFFFFFFFFF
)
@experimenter 0x00002320
@nxast 22
alias __MODULE__
alias Openflow.Action.Experimenter
def new(options \\ [])
def new(metadata) when is_integer(metadata) do
new(metadata: metadata)
end
def new(options) when is_list(options) do
metadata = options[:metadata] || raise "metadata must be specified"
metadata_mask = options[:metadata_mask] || 0xFFFFFFFFFFFFFFFF
%NxWriteMetadata{metadata: metadata, metadata_mask: metadata_mask}
end
def to_binary(%NxWriteMetadata{metadata: metadata, metadata_mask: metadata_mask}) do
Experimenter.pack_exp_header(<<
@experimenter::32,
@nxast::16,
0::size(6)-unit(8),
metadata::64,
metadata_mask::64
>>)
end
def read(<<@experimenter::32, @nxast::16, _::size(6)-unit(8), metadata::64, metadata_mask::64>>) do
%NxWriteMetadata{metadata: metadata, metadata_mask: metadata_mask}
end
end