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

59 lines
1.6 KiB
Elixir

defmodule Openflow.Action.NxSample3 do
defstruct(
probability: 0,
collector_set_id: 0,
obs_domain_id: 0,
obs_point_id: 0,
sampling_port: 0,
direction: :default
)
@experimenter 0x00002320
@nxast 41
alias __MODULE__
alias Openflow.Action.Experimenter
def new(options \\ []) do
%NxSample3{
probability: options[:probability] || 0,
collector_set_id: options[:collector_set_id] || 0,
obs_domain_id: options[:obs_domain_id] || 0,
obs_point_id: options[:obs_point_id] || 0,
sampling_port: options[:sampling_port] || 0,
direction: options[:direction] || :default
}
end
def to_binary(%NxSample3{} = sample) do
sample_direction_int = Openflow.Enums.to_int(sample.direction, :nx_action_sample_direction)
Experimenter.pack_exp_header(<<
@experimenter::32,
@nxast::16,
sample.probability::16,
sample.collector_set_id::32,
sample.obs_domain_id::32,
sample.obs_point_id::32,
sample.sampling_port::16,
sample_direction_int::8,
0::size(5)-unit(8)
>>)
end
def read(
<<@experimenter::32, @nxast::16, probability::16, collector_set_id::32, obs_domain_id::32,
obs_point_id::32, sampling_port::16, direction_int::8, 0::size(5)-unit(8)>>
) do
direction = Openflow.Enums.to_atom(direction_int, :nx_action_sample_direction)
%NxSample3{
probability: probability,
collector_set_id: collector_set_id,
obs_domain_id: obs_domain_id,
obs_point_id: obs_point_id,
sampling_port: sampling_port,
direction: direction
}
end
end