defmodule Openflow.PacketOut do defstruct( version: 4, xid: 0, datapath_id: "", aux_id: 0, buffer_id: :no_buffer, in_port: :controller, actions: [], data: "" ) alias __MODULE__ def ofp_type, do: 13 def new(options) do buffer_id = Keyword.get(options, :buffer_id, :no_buffer) in_port = Keyword.get(options, :in_port, :controller) actions = Keyword.get(options, :actions, []) data = Keyword.get(options, :data, "") %PacketOut{buffer_id: buffer_id, in_port: in_port, actions: actions, data: data} end def read( <> ) do buffer_id = Openflow.Utils.get_enum(buffer_id_int, :buffer_id) in_port = Openflow.Utils.get_enum(in_port_int, :openflow13_port_no) actions = Openflow.Action.read(actions_bin) %PacketOut{buffer_id: buffer_id, in_port: in_port, actions: actions, data: data} end def to_binary(%PacketOut{} = packet_out) do %PacketOut{buffer_id: buffer_id, in_port: in_port, actions: actions, data: data} = packet_out buffer_id_int = Openflow.Utils.get_enum(buffer_id, :buffer_id) in_port_int = Openflow.Utils.get_enum(in_port, :openflow13_port_no) actions_bin = Openflow.Action.to_binary(actions) actions_len = byte_size(actions_bin) <> end end