71 lines
1.6 KiB
Elixir
71 lines
1.6 KiB
Elixir
defmodule Openflow.Multipart.Aggregate.Reply do
|
|
defstruct(
|
|
version: 4,
|
|
xid: 0,
|
|
# virtual field
|
|
datapath_id: nil,
|
|
aux_id: nil,
|
|
flags: [],
|
|
packet_count: 0,
|
|
byte_count: 0,
|
|
flow_count: 0
|
|
)
|
|
|
|
alias __MODULE__
|
|
|
|
@type t :: %Reply{
|
|
version: 4,
|
|
xid: 0..0xFFFFFFFF,
|
|
datapath_id: String.t() | nil,
|
|
aux_id: 0..0xFF,
|
|
flags: [],
|
|
packet_count: 0..0xFFFFFFFFFFFFFFFF,
|
|
byte_count: 0..0xFFFFFFFFFFFFFFFF,
|
|
flow_count: 0..0xFFFFFFFF
|
|
}
|
|
|
|
@spec ofp_type() :: 19
|
|
def ofp_type, do: 19
|
|
|
|
@spec new(
|
|
xid: 0..0xFFFFFFFF,
|
|
flags: [],
|
|
packet_count: 0..0xFFFFFFFFFFFFFFFF,
|
|
byte_count: 0..0xFFFFFFFFFFFFFFFF,
|
|
flow_count: 0..0xFFFFFFFF
|
|
) :: t()
|
|
def new(options \\ []) do
|
|
%Reply{
|
|
xid: options[:xid] || 0,
|
|
flags: options[:flags] || [],
|
|
packet_count: options[:packet_count] || 0,
|
|
byte_count: options[:byte_count] || 0,
|
|
flow_count: options[:flow_count] || 0
|
|
}
|
|
end
|
|
|
|
@spec to_binary(t()) :: <<_::192>>
|
|
def to_binary(aggregate) do
|
|
<<
|
|
Openflow.Multipart.Reply.header(aggregate)::bytes,
|
|
aggregate.packet_count::64,
|
|
aggregate.byte_count::64,
|
|
aggregate.flow_count::32,
|
|
0::size(4)-unit(8)
|
|
>>
|
|
end
|
|
|
|
@spec read(<<_::192>>) :: t()
|
|
def read(<<
|
|
packet_count::64,
|
|
byte_count::64,
|
|
flow_count::32,
|
|
_::size(4)-unit(8)
|
|
>>) do
|
|
%Reply{
|
|
packet_count: packet_count,
|
|
byte_count: byte_count,
|
|
flow_count: flow_count
|
|
}
|
|
end
|
|
end
|