defmodule Openflow.PortMod do defstruct( version: 4, xid: 0, datapath_id: "", aux_id: 0, number: 0, hw_addr: "000000000000", config: [], mask: [], advertise: [] ) alias __MODULE__ def ofp_type, do: 16 def new(options \\ []) do port_no = Keyword.get(options, :number, :all) hw_addr = Keyword.get(options, :hw_adddr, "000000000000") config = Keyword.get(options, :config, []) mask = Keyword.get(options, :mask, []) advertise = Keyword.get(options, :advertise, []) %PortMod{number: port_no, hw_addr: hw_addr, config: config, mask: mask, advertise: advertise} end def read( <> ) do port_no = Openflow.Utils.get_enum(port_no_int, :openflow13_port_no) hw_addr = Openflow.Utils.to_hex_string(hw_addr_bin) config = Openflow.Enums.int_to_flags(config_int, :port_config) mask = Openflow.Enums.int_to_flags(mask_int, :port_config) adv = Openflow.Enums.int_to_flags(advertised_int, :port_features) %PortMod{number: port_no, hw_addr: hw_addr, config: config, mask: mask, advertise: adv} end def to_binary(%PortMod{ number: port_no, hw_addr: hw_addr, config: config, mask: mask, advertise: adv }) do port_no_int = Openflow.Utils.get_enum(port_no, :openflow13_port_no) hw_addr_bin = <> config_int = Openflow.Enums.flags_to_int(config, :port_config) mask_int = Openflow.Enums.flags_to_int(mask, :port_config) advertised_int = Openflow.Enums.flags_to_int(adv, :port_features) <> end end