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

60 lines
1.5 KiB
Elixir

defmodule Openflow.Action.NxSample do
defstruct(
probability: 0,
collector_set_id: 0,
obs_domain_id: 0,
obs_point_id: 0
)
@experimenter 0x00002320
@nxast 29
alias __MODULE__
alias Openflow.Action.Experimenter
@spec new(
probability: 1..0xFFFF,
collector_set_id: 0..0xFFFFFFFF,
obs_domain_id: 0..0xFFFFFFFF,
obs_point_id: 0..0xFFFFFFFF
) :: %NxSample{
probability: 1..0xFFFF,
collector_set_id: 0..0xFFFFFFFF,
obs_domain_id: 0..0xFFFFFFFF,
obs_point_id: 0..0xFFFFFFFF
}
def new(options) do
(is_integer(options[:probability]) and options[:probability] > 0) ||
raise("probability must be greater than 0")
%NxSample{
probability: options[:probability],
collector_set_id: options[:collector_set_id] || 0,
obs_domain_id: options[:obs_domain_id] || 0,
obs_point_id: options[:obs_point_id] || 0
}
end
def to_binary(%NxSample{} = sample) do
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
>>)
end
def read(
<<@experimenter::32, @nxast::16, probability::16, collector_set_id::32, obs_domain_id::32,
obs_point_id::32>>
) do
%NxSample{
probability: probability,
collector_set_id: collector_set_id,
obs_domain_id: obs_domain_id,
obs_point_id: obs_point_id
}
end
end