94 lines
3.4 KiB
Elixir
94 lines
3.4 KiB
Elixir
defmodule Openflow.GetAsync.Reply do
|
|
defstruct(
|
|
version: 4,
|
|
xid: 0,
|
|
# virtual field
|
|
datapath_id: nil,
|
|
# virtual field
|
|
aux_id: 0,
|
|
packet_in_mask_master: [],
|
|
packet_in_mask_slave: [],
|
|
port_status_mask_master: [],
|
|
port_status_mask_slave: [],
|
|
flow_removed_mask_master: [],
|
|
flow_removed_mask_slave: []
|
|
)
|
|
|
|
alias __MODULE__
|
|
alias Openflow.Enums
|
|
|
|
@type t :: %Reply{
|
|
version: 4,
|
|
datapath_id: String.t() | nil,
|
|
aux_id: 0..0xF,
|
|
xid: 0..0xFFFFFFFF,
|
|
packet_in_mask_master: [Openflow.Packet.reason()],
|
|
packet_in_mask_slave: [Openflow.Packet.reason()],
|
|
port_status_mask_master: [Openflow.Packet.reason()],
|
|
port_status_mask_slave: [Openflow.Packet.reason()],
|
|
flow_removed_mask_master: [Openflow.Packet.reason()],
|
|
flow_removed_mask_slave: [Openflow.Packet.reason()]
|
|
}
|
|
|
|
@spec ofp_type() :: 27
|
|
def ofp_type, do: 27
|
|
|
|
@spec new(
|
|
xid: 0..0xFFFFFFFF,
|
|
packet_in_mask_master: [Openflow.Packet.reason()],
|
|
packet_in_mask_slave: [Openflow.Packet.reason()],
|
|
port_status_mask_master: [Openflow.Packet.reason()],
|
|
port_status_mask_slave: [Openflow.Packet.reason()],
|
|
flow_removed_mask_master: [Openflow.Packet.reason()],
|
|
flow_removed_mask_slave: [Openflow.Packet.reason()]
|
|
) :: t()
|
|
def new(options \\ []) do
|
|
%Reply{
|
|
xid: options[:xid] || 0,
|
|
packet_in_mask_master: options[:packet_in_mask_master] || [],
|
|
packet_in_mask_slave: options[:packet_in_mask_slave] || [],
|
|
port_status_mask_master: options[:port_status_mask_master] || [],
|
|
port_status_mask_slave: options[:port_status_mask_slave] || [],
|
|
flow_removed_mask_master: options[:flow_removed_mask_master] || [],
|
|
flow_removed_mask_slave: options[:flow_removed_mask_slave] || []
|
|
}
|
|
end
|
|
|
|
@spec read(<<_::192>>) :: t()
|
|
def read(<<
|
|
pin_mask_master::32,
|
|
pin_mask_slave::32,
|
|
ps_mask_master::32,
|
|
ps_mask_slave::32,
|
|
fr_mask_master::32,
|
|
fr_mask_slave::32
|
|
>>) do
|
|
%Reply{
|
|
packet_in_mask_master: Enums.int_to_flags(pin_mask_master, :packet_in_reason_mask),
|
|
packet_in_mask_slave: Enums.int_to_flags(pin_mask_slave, :packet_in_reason_mask),
|
|
port_status_mask_master: Enums.int_to_flags(ps_mask_master, :port_reason_mask),
|
|
port_status_mask_slave: Enums.int_to_flags(ps_mask_slave, :port_reason_mask),
|
|
flow_removed_mask_master: Enums.int_to_flags(fr_mask_master, :flow_removed_reason_mask),
|
|
flow_removed_mask_slave: Enums.int_to_flags(fr_mask_slave, :flow_removed_reason_mask)
|
|
}
|
|
end
|
|
|
|
@spec to_binary(t()) :: <<_::192>>
|
|
def to_binary(%Reply{
|
|
packet_in_mask_master: pin_mask_master,
|
|
packet_in_mask_slave: pin_mask_slave,
|
|
port_status_mask_master: ps_mask_master,
|
|
port_status_mask_slave: ps_mask_slave,
|
|
flow_removed_mask_master: fr_mask_master,
|
|
flow_removed_mask_slave: fr_mask_slave
|
|
}) do
|
|
<<
|
|
Enums.flags_to_int(pin_mask_master, :packet_in_reason_mask)::32,
|
|
Enums.flags_to_int(pin_mask_slave, :packet_in_reason_mask)::32,
|
|
Enums.flags_to_int(ps_mask_master, :port_reason_mask)::32,
|
|
Enums.flags_to_int(ps_mask_slave, :port_reason_mask)::32,
|
|
Enums.flags_to_int(fr_mask_master, :flow_removed_reason_mask)::32,
|
|
Enums.flags_to_int(fr_mask_slave, :flow_removed_reason_mask)::32
|
|
>>
|
|
end
|
|
end
|