Openflow parser
This commit is contained in:
parent
70b0d8919e
commit
fc02a678de
338 changed files with 9081 additions and 0 deletions
20
lib/openflow/instructions/apply_actions.ex
Normal file
20
lib/openflow/instructions/apply_actions.ex
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
defmodule Openflow.Instruction.ApplyActions do
|
||||
defstruct(actions: [])
|
||||
|
||||
alias __MODULE__
|
||||
|
||||
def new(actions) do
|
||||
%ApplyActions{actions: actions}
|
||||
end
|
||||
|
||||
def to_binary(%ApplyActions{actions: actions}) do
|
||||
actions_bin = Openflow.Action.to_binary(actions)
|
||||
length = 8 + byte_size(actions_bin)
|
||||
<<4::16, length::16, 0::size(4)-unit(8), actions_bin::bytes>>
|
||||
end
|
||||
|
||||
def read(<<4::16, _length::16, _::size(4)-unit(8), actions_bin::bytes>>) do
|
||||
actions = Openflow.Action.read(actions_bin)
|
||||
%ApplyActions{actions: actions}
|
||||
end
|
||||
end
|
||||
19
lib/openflow/instructions/clear_actions.ex
Normal file
19
lib/openflow/instructions/clear_actions.ex
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
defmodule Openflow.Instruction.ClearActions do
|
||||
defstruct([])
|
||||
|
||||
alias __MODULE__
|
||||
|
||||
def new do
|
||||
%ClearActions{}
|
||||
end
|
||||
|
||||
def to_binary(%ClearActions{}) do
|
||||
actions_bin = ""
|
||||
length = 8 + byte_size(actions_bin)
|
||||
<<5::16, length::16, 0::size(4)-unit(8), actions_bin::bytes>>
|
||||
end
|
||||
|
||||
def read(<<5::16, _length::16, _::size(4)-unit(8), _::bytes>>) do
|
||||
%ClearActions{}
|
||||
end
|
||||
end
|
||||
18
lib/openflow/instructions/experimenter.ex
Normal file
18
lib/openflow/instructions/experimenter.ex
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
defmodule Openflow.Instruction.Experimenter do
|
||||
defstruct(exp_id: 0, data: "")
|
||||
|
||||
alias __MODULE__
|
||||
|
||||
def new(exp_id, data) do
|
||||
%Experimenter{exp_id: exp_id, data: data}
|
||||
end
|
||||
|
||||
def to_binary(%Experimenter{exp_id: exp_id, data: data}) do
|
||||
length = 8 + byte_size(data)
|
||||
<<0xffff::16, length::16, exp_id::32, data::bytes>>
|
||||
end
|
||||
|
||||
def read(<<0xffff::16, _::16, exp_id::32, data::bytes>>) do
|
||||
%Experimenter{exp_id: exp_id, data: data}
|
||||
end
|
||||
end
|
||||
19
lib/openflow/instructions/goto_table.ex
Normal file
19
lib/openflow/instructions/goto_table.ex
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
defmodule Openflow.Instruction.GotoTable do
|
||||
defstruct(table_id: 0)
|
||||
|
||||
alias __MODULE__
|
||||
|
||||
def new(table_id) do
|
||||
%GotoTable{table_id: table_id}
|
||||
end
|
||||
|
||||
def to_binary(%GotoTable{table_id: table_id}) do
|
||||
table_id_int = Openflow.Utils.get_enum(table_id, :table_id)
|
||||
<<1::16, 8::16, table_id_int::8, 0::size(3)-unit(8)>>
|
||||
end
|
||||
|
||||
def read(<<1::16, 8::16, table_id_int::8, _::size(3)-unit(8)>>) do
|
||||
table_id = Openflow.Utils.get_enum(table_id_int, :table_id)
|
||||
%GotoTable{table_id: table_id}
|
||||
end
|
||||
end
|
||||
19
lib/openflow/instructions/meter.ex
Normal file
19
lib/openflow/instructions/meter.ex
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
defmodule Openflow.Instruction.Meter do
|
||||
defstruct(meter_id: 0)
|
||||
|
||||
alias __MODULE__
|
||||
|
||||
def new(meter_id) do
|
||||
%Meter{meter_id: meter_id}
|
||||
end
|
||||
|
||||
def to_binary(%Meter{meter_id: meter_id}) do
|
||||
meter_id_int = Openflow.Utils.get_enum(meter_id, :meter_id)
|
||||
<<6::16, 8::16, meter_id_int::32>>
|
||||
end
|
||||
|
||||
def read(<<6::16, _::16, meter_id_int::32>>) do
|
||||
meter_id = Openflow.Utils.get_enum(meter_id_int, :meter_id)
|
||||
%Meter{meter_id: meter_id}
|
||||
end
|
||||
end
|
||||
20
lib/openflow/instructions/write_actions.ex
Normal file
20
lib/openflow/instructions/write_actions.ex
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
defmodule Openflow.Instruction.WriteActions do
|
||||
defstruct(actions: [])
|
||||
|
||||
alias __MODULE__
|
||||
|
||||
def new(actions) do
|
||||
%WriteActions{actions: actions}
|
||||
end
|
||||
|
||||
def to_binary(%WriteActions{actions: actions}) do
|
||||
actions_bin = Openflow.Action.to_binary(actions)
|
||||
length = 8 + byte_size(actions_bin)
|
||||
<<3::16, length::16, 0::size(4)-unit(8), actions_bin::bytes>>
|
||||
end
|
||||
|
||||
def read(<<3::16, _length::16, _::size(4)-unit(8), actions_bin::bytes>>) do
|
||||
actions = Openflow.Action.read(actions_bin)
|
||||
%WriteActions{actions: actions}
|
||||
end
|
||||
end
|
||||
19
lib/openflow/instructions/write_metadata.ex
Normal file
19
lib/openflow/instructions/write_metadata.ex
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
defmodule Openflow.Instruction.WriteMetadata do
|
||||
defstruct(metadata: 0, metadata_mask: 0xffffffffffffffff)
|
||||
|
||||
alias __MODULE__
|
||||
|
||||
def new(options) do
|
||||
metadata = Keyword.get(options, :metadata, 0)
|
||||
metadata_mask = Keyword.get(options, :metadata_mask, 0xffffffffffffffff)
|
||||
%WriteMetadata{metadata: metadata, metadata_mask: metadata_mask}
|
||||
end
|
||||
|
||||
def to_binary(%WriteMetadata{metadata: metadata, metadata_mask: metadata_mask}) do
|
||||
<<2::16, 24::16, 0::size(4)-unit(8), metadata::64, metadata_mask::64>>
|
||||
end
|
||||
|
||||
def read(<<2::16, 24::16, _::size(4)-unit(8), metadata::64, metadata_mask::64>>) do
|
||||
%WriteMetadata{metadata: metadata, metadata_mask: metadata_mask}
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue