quality: Add some test cases for openflow messages

This commit is contained in:
Eishun Kondoh 2019-04-28 11:47:05 +09:00
parent 578c0d1bdc
commit f3fc896408
13 changed files with 1403 additions and 1321 deletions

View file

@ -13,11 +13,15 @@ defmodule Openflow.Action.NxConjunction do
@spec new(Keyword.t()) :: %NxConjunction{}
def new(options) do
clause = (options[:clause] || 0) + 1
n_clauses = options[:n_clauses] || raise "n_clauses must be specified"
n_clauses >= 2 || raise "n_clauses must be greater than 1"
(1 <= clause and clause <= n_clauses and 2 <= n_clauses and n_clauses <= 64) ||
raise "conjunction(id, k/n) must satisfy 1 <= k <= n and 2 <= n <= 64"
%NxConjunction{
clause: (options[:clause] || 0) + 1,
clause: clause,
n_clauses: n_clauses,
id: options[:id] || 0
}

View file

@ -1,2 +0,0 @@
defmodule Openflow.Echo do
end

View file

@ -11,8 +11,18 @@ defmodule Openflow.Echo.Reply do
alias __MODULE__
@type t :: %Reply{
version: 4,
xid: 0..0xFFFFFFFF,
data: String.t(),
datapath_id: String.t() | nil,
aux_id: 0..0xFFFF | nil
}
@spec ofp_type :: 3
def ofp_type, do: 3
@spec new(xid: 0..0xFFFFFFFF, data: String.t()) :: t()
def new(options) when is_list(options) do
%Reply{
xid: options[:xid] || 0,
@ -20,15 +30,15 @@ defmodule Openflow.Echo.Reply do
}
end
def new(data) when is_binary(data) do
%Reply{data: data}
end
@spec new(String.t()) :: t()
def new(data) when is_binary(data), do: %Reply{data: data}
def read(data) do
%Reply{data: data}
end
@spec new() :: t()
def new, do: new([])
def to_binary(%Reply{data: data}) do
data
end
@spec read(String.t()) :: t()
def read(data), do: %Reply{data: data}
@spec to_binary(t()) :: String.t()
def to_binary(%Reply{data: data}), do: data
end

View file

@ -11,8 +11,18 @@ defmodule Openflow.Echo.Request do
alias __MODULE__
@type t :: %Request{
version: 4,
xid: 0..0xFFFFFFFF,
data: String.t(),
datapath_id: String.t() | nil,
aux_id: 0..0xFFFF | nil
}
@spec ofp_type :: 2
def ofp_type, do: 2
@spec new(xid: 0..0xFFFFFFFF, data: String.t()) :: t()
def new(options) when is_list(options) do
%Request{
xid: options[:xid] || 0,
@ -20,15 +30,15 @@ defmodule Openflow.Echo.Request do
}
end
def new(data) when is_binary(data) do
%Request{data: data}
end
@spec new(String.t()) :: t()
def new(data) when is_binary(data), do: %Request{data: data}
def read(data) do
%Request{data: data}
end
@spec new() :: t()
def new, do: new([])
def to_binary(%Request{data: data}) do
data
end
@spec read(String.t()) :: t()
def read(data), do: %Request{data: data}
@spec to_binary(t()) :: String.t()
def to_binary(%Request{data: data}), do: data
end

File diff suppressed because it is too large Load diff

View file

@ -727,6 +727,18 @@ defmodule Openflow.Enums do
_class, _reason -> :multipart_buffer_overflow
end
def to_int(:multipart_request_timeout, :bad_request) do
bad_request_to_int(:multipart_request_timeout)
catch
_class, _reason -> :multipart_request_timeout
end
def to_int(:multipart_reply_timeout, :bad_request) do
bad_request_to_int(:multipart_reply_timeout)
catch
_class, _reason -> :multipart_reply_timeout
end
def to_int(:nxm_invalid, :bad_request) do
bad_request_to_int(:nxm_invalid)
catch
@ -881,10 +893,10 @@ defmodule Openflow.Enums do
_class, _reason -> :must_be_zero
end
def to_int(:conntrack_not_supported, :bad_action) do
bad_action_to_int(:conntrack_not_supported)
def to_int(:conntrack_datapath_support, :bad_action) do
bad_action_to_int(:conntrack_datapath_support)
catch
_class, _reason -> :conntrack_not_supported
_class, _reason -> :conntrack_datapath_support
end
def to_int(:bad_conjunction, :bad_action) do
@ -951,6 +963,12 @@ defmodule Openflow.Enums do
_class, _reason -> :eperm
end
def to_int(:dup_inst, :bad_instruction) do
bad_instruction_to_int(:dup_inst)
catch
_class, _reason -> :dup_inst
end
def to_int(_int, :bad_instruction) do
throw(:bad_enum)
end
@ -1027,6 +1045,12 @@ defmodule Openflow.Enums do
_class, _reason -> :eperm
end
def to_int(:conntrack_datapath_support, :bad_match) do
bad_match_to_int(:conntrack_datapath_support)
catch
_class, _reason -> :conntrack_datapath_support
end
def to_int(_int, :bad_match) do
throw(:bad_enum)
end
@ -1173,6 +1197,18 @@ defmodule Openflow.Enums do
_class, _reason -> :eperm
end
def to_int(:unknown_bucket, :group_mod_failed) do
group_mod_failed_to_int(:unknown_bucket)
catch
_class, _reason -> :unknown_bucket
end
def to_int(:bucket_exists, :group_mod_failed) do
group_mod_failed_to_int(:bucket_exists)
catch
_class, _reason -> :bucket_exists
end
def to_int(_int, :group_mod_failed) do
throw(:bad_enum)
end
@ -4125,18 +4161,6 @@ defmodule Openflow.Enums do
_class, _reason -> Openflow.Action.NxSetTunnel
end
def to_int(Openflow.Action.NxSetQueue, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxSetQueue)
catch
_class, _reason -> Openflow.Action.NxSetQueue
end
def to_int(Openflow.Action.NxPopQueue, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxPopQueue)
catch
_class, _reason -> Openflow.Action.NxPopQueue
end
def to_int(Openflow.Action.NxRegMove, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxRegMove)
catch
@ -4233,30 +4257,6 @@ defmodule Openflow.Enums do
_class, _reason -> Openflow.Action.NxWriteMetadata
end
def to_int(Openflow.Action.NxPushMpls, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxPushMpls)
catch
_class, _reason -> Openflow.Action.NxPushMpls
end
def to_int(Openflow.Action.NxPopMpls, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxPopMpls)
catch
_class, _reason -> Openflow.Action.NxPopMpls
end
def to_int(Openflow.Action.NxSetMplsTtl, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxSetMplsTtl)
catch
_class, _reason -> Openflow.Action.NxSetMplsTtl
end
def to_int(Openflow.Action.NxDecMplsTtl, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxDecMplsTtl)
catch
_class, _reason -> Openflow.Action.NxDecMplsTtl
end
def to_int(Openflow.Action.NxStackPush, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxStackPush)
catch
@ -4275,18 +4275,6 @@ defmodule Openflow.Enums do
_class, _reason -> Openflow.Action.NxSample
end
def to_int(Openflow.Action.NxSetMplsLabel, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxSetMplsLabel)
catch
_class, _reason -> Openflow.Action.NxSetMplsLabel
end
def to_int(Openflow.Action.NxSetMplsTc, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxSetMplsTc)
catch
_class, _reason -> Openflow.Action.NxSetMplsTc
end
def to_int(Openflow.Action.NxOutputReg2, :nicira_ext_action) do
nicira_ext_action_to_int(Openflow.Action.NxOutputReg2)
catch
@ -5895,6 +5883,18 @@ defmodule Openflow.Enums do
_class, _reason -> 13
end
def to_atom(0xE, :bad_request) do
bad_request_to_atom(0xE)
catch
_class, _reason -> 14
end
def to_atom(0xF, :bad_request) do
bad_request_to_atom(0xF)
catch
_class, _reason -> 15
end
def to_atom(0x100, :bad_request) do
bad_request_to_atom(0x100)
catch
@ -6119,6 +6119,12 @@ defmodule Openflow.Enums do
_class, _reason -> 8
end
def to_atom(0x100, :bad_instruction) do
bad_instruction_to_atom(0x100)
catch
_class, _reason -> 256
end
def to_atom(_, :bad_instruction) do
throw(:bad_enum)
end
@ -6195,6 +6201,12 @@ defmodule Openflow.Enums do
_class, _reason -> 11
end
def to_atom(0x108, :bad_match) do
bad_match_to_atom(0x108)
catch
_class, _reason -> 264
end
def to_atom(_, :bad_match) do
throw(:bad_enum)
end
@ -6341,6 +6353,18 @@ defmodule Openflow.Enums do
_class, _reason -> 14
end
def to_atom(0xF, :group_mod_failed) do
group_mod_failed_to_atom(0xF)
catch
_class, _reason -> 15
end
def to_atom(0x10, :group_mod_failed) do
group_mod_failed_to_atom(0x10)
catch
_class, _reason -> 16
end
def to_atom(_, :group_mod_failed) do
throw(:bad_enum)
end
@ -9293,18 +9317,6 @@ defmodule Openflow.Enums do
_class, _reason -> 2
end
def to_atom(0x4, :nicira_ext_action) do
nicira_ext_action_to_atom(0x4)
catch
_class, _reason -> 4
end
def to_atom(0x5, :nicira_ext_action) do
nicira_ext_action_to_atom(0x5)
catch
_class, _reason -> 5
end
def to_atom(0x6, :nicira_ext_action) do
nicira_ext_action_to_atom(0x6)
catch
@ -9401,30 +9413,6 @@ defmodule Openflow.Enums do
_class, _reason -> 22
end
def to_atom(0x17, :nicira_ext_action) do
nicira_ext_action_to_atom(0x17)
catch
_class, _reason -> 23
end
def to_atom(0x18, :nicira_ext_action) do
nicira_ext_action_to_atom(0x18)
catch
_class, _reason -> 24
end
def to_atom(0x19, :nicira_ext_action) do
nicira_ext_action_to_atom(0x19)
catch
_class, _reason -> 25
end
def to_atom(0x1A, :nicira_ext_action) do
nicira_ext_action_to_atom(0x1A)
catch
_class, _reason -> 26
end
def to_atom(0x1B, :nicira_ext_action) do
nicira_ext_action_to_atom(0x1B)
catch
@ -9443,18 +9431,6 @@ defmodule Openflow.Enums do
_class, _reason -> 29
end
def to_atom(0x1E, :nicira_ext_action) do
nicira_ext_action_to_atom(0x1E)
catch
_class, _reason -> 30
end
def to_atom(0x1F, :nicira_ext_action) do
nicira_ext_action_to_atom(0x1F)
catch
_class, _reason -> 31
end
def to_atom(0x20, :nicira_ext_action) do
nicira_ext_action_to_atom(0x20)
catch
@ -10573,6 +10549,8 @@ defmodule Openflow.Enums do
def bad_request_to_int(:bad_port), do: 0xB
def bad_request_to_int(:bad_packet), do: 0xC
def bad_request_to_int(:multipart_buffer_overflow), do: 0xD
def bad_request_to_int(:multipart_request_timeout), do: 0xE
def bad_request_to_int(:multipart_reply_timeout), do: 0xF
def bad_request_to_int(:nxm_invalid), do: 0x100
def bad_request_to_int(:nxm_bad_type), do: 0x101
def bad_request_to_int(:must_be_zero), do: 0x203
@ -10596,6 +10574,8 @@ defmodule Openflow.Enums do
def bad_request_to_atom(0xB), do: :bad_port
def bad_request_to_atom(0xC), do: :bad_packet
def bad_request_to_atom(0xD), do: :multipart_buffer_overflow
def bad_request_to_atom(0xE), do: :multipart_request_timeout
def bad_request_to_atom(0xF), do: :multipart_reply_timeout
def bad_request_to_atom(0x100), do: :nxm_invalid
def bad_request_to_atom(0x101), do: :nxm_bad_type
def bad_request_to_atom(0x203), do: :must_be_zero
@ -10622,7 +10602,7 @@ defmodule Openflow.Enums do
def bad_action_to_int(:bad_set_len), do: 0xE
def bad_action_to_int(:bad_set_argument), do: 0xF
def bad_action_to_int(:must_be_zero), do: 0x100
def bad_action_to_int(:conntrack_not_supported), do: 0x109
def bad_action_to_int(:conntrack_datapath_support), do: 0x109
def bad_action_to_int(:bad_conjunction), do: 0x20E
def bad_action_to_int(_), do: throw(:bad_enum)
def bad_action_to_atom(0x0), do: :bad_type
@ -10642,7 +10622,7 @@ defmodule Openflow.Enums do
def bad_action_to_atom(0xE), do: :bad_set_len
def bad_action_to_atom(0xF), do: :bad_set_argument
def bad_action_to_atom(0x100), do: :must_be_zero
def bad_action_to_atom(0x109), do: :conntrack_not_supported
def bad_action_to_atom(0x109), do: :conntrack_datapath_support
def bad_action_to_atom(0x20E), do: :bad_conjunction
def bad_action_to_atom(_), do: throw(:bad_enum)
def bad_instruction_to_int(:unknown_instruction), do: 0x0
@ -10654,6 +10634,7 @@ defmodule Openflow.Enums do
def bad_instruction_to_int(:bad_exp_type), do: 0x6
def bad_instruction_to_int(:bad_len), do: 0x7
def bad_instruction_to_int(:eperm), do: 0x8
def bad_instruction_to_int(:dup_inst), do: 0x100
def bad_instruction_to_int(_), do: throw(:bad_enum)
def bad_instruction_to_atom(0x0), do: :unknown_instruction
def bad_instruction_to_atom(0x1), do: :unsupported_instruction
@ -10664,6 +10645,7 @@ defmodule Openflow.Enums do
def bad_instruction_to_atom(0x6), do: :bad_exp_type
def bad_instruction_to_atom(0x7), do: :bad_len
def bad_instruction_to_atom(0x8), do: :eperm
def bad_instruction_to_atom(0x100), do: :dup_inst
def bad_instruction_to_atom(_), do: throw(:bad_enum)
def bad_match_to_int(:bad_type), do: 0x0
def bad_match_to_int(:bad_len), do: 0x1
@ -10677,6 +10659,7 @@ defmodule Openflow.Enums do
def bad_match_to_int(:bad_prereq), do: 0x9
def bad_match_to_int(:dup_field), do: 0xA
def bad_match_to_int(:eperm), do: 0xB
def bad_match_to_int(:conntrack_datapath_support), do: 0x108
def bad_match_to_int(_), do: throw(:bad_enum)
def bad_match_to_atom(0x0), do: :bad_type
def bad_match_to_atom(0x1), do: :bad_len
@ -10690,6 +10673,7 @@ defmodule Openflow.Enums do
def bad_match_to_atom(0x9), do: :bad_prereq
def bad_match_to_atom(0xA), do: :dup_field
def bad_match_to_atom(0xB), do: :eperm
def bad_match_to_atom(0x108), do: :conntrack_datapath_support
def bad_match_to_atom(_), do: throw(:bad_enum)
def flow_mod_failed_to_int(:unknown), do: 0x0
def flow_mod_failed_to_int(:table_full), do: 0x1
@ -10724,6 +10708,8 @@ defmodule Openflow.Enums do
def group_mod_failed_to_int(:bad_bucket), do: 0xC
def group_mod_failed_to_int(:bad_watch), do: 0xD
def group_mod_failed_to_int(:eperm), do: 0xE
def group_mod_failed_to_int(:unknown_bucket), do: 0xF
def group_mod_failed_to_int(:bucket_exists), do: 0x10
def group_mod_failed_to_int(_), do: throw(:bad_enum)
def group_mod_failed_to_atom(0x0), do: :group_exists
def group_mod_failed_to_atom(0x1), do: :invalid_group
@ -10740,6 +10726,8 @@ defmodule Openflow.Enums do
def group_mod_failed_to_atom(0xC), do: :bad_bucket
def group_mod_failed_to_atom(0xD), do: :bad_watch
def group_mod_failed_to_atom(0xE), do: :eperm
def group_mod_failed_to_atom(0xF), do: :unknown_bucket
def group_mod_failed_to_atom(0x10), do: :bucket_exists
def group_mod_failed_to_atom(_), do: throw(:bad_enum)
def port_mod_failed_to_int(:bad_port), do: 0x0
def port_mod_failed_to_int(:bad_hw_addr), do: 0x1
@ -11755,8 +11743,6 @@ defmodule Openflow.Enums do
def onf_ext_action_to_atom(_), do: throw(:bad_enum)
def nicira_ext_action_to_int(Openflow.Action.NxResubmit), do: 0x1
def nicira_ext_action_to_int(Openflow.Action.NxSetTunnel), do: 0x2
def nicira_ext_action_to_int(Openflow.Action.NxSetQueue), do: 0x4
def nicira_ext_action_to_int(Openflow.Action.NxPopQueue), do: 0x5
def nicira_ext_action_to_int(Openflow.Action.NxRegMove), do: 0x6
def nicira_ext_action_to_int(Openflow.Action.NxRegLoad), do: 0x7
def nicira_ext_action_to_int(Openflow.Action.NxNote), do: 0x8
@ -11773,15 +11759,9 @@ defmodule Openflow.Enums do
def nicira_ext_action_to_int(Openflow.Action.NxController), do: 0x14
def nicira_ext_action_to_int(Openflow.Action.NxDecTtlCntIds), do: 0x15
def nicira_ext_action_to_int(Openflow.Action.NxWriteMetadata), do: 0x16
def nicira_ext_action_to_int(Openflow.Action.NxPushMpls), do: 0x17
def nicira_ext_action_to_int(Openflow.Action.NxPopMpls), do: 0x18
def nicira_ext_action_to_int(Openflow.Action.NxSetMplsTtl), do: 0x19
def nicira_ext_action_to_int(Openflow.Action.NxDecMplsTtl), do: 0x1A
def nicira_ext_action_to_int(Openflow.Action.NxStackPush), do: 0x1B
def nicira_ext_action_to_int(Openflow.Action.NxStackPop), do: 0x1C
def nicira_ext_action_to_int(Openflow.Action.NxSample), do: 0x1D
def nicira_ext_action_to_int(Openflow.Action.NxSetMplsLabel), do: 0x1E
def nicira_ext_action_to_int(Openflow.Action.NxSetMplsTc), do: 0x1F
def nicira_ext_action_to_int(Openflow.Action.NxOutputReg2), do: 0x20
def nicira_ext_action_to_int(Openflow.Action.NxRegLoad2), do: 0x21
def nicira_ext_action_to_int(Openflow.Action.NxConjunction), do: 0x22
@ -11802,8 +11782,6 @@ defmodule Openflow.Enums do
def nicira_ext_action_to_int(_), do: throw(:bad_enum)
def nicira_ext_action_to_atom(0x1), do: Openflow.Action.NxResubmit
def nicira_ext_action_to_atom(0x2), do: Openflow.Action.NxSetTunnel
def nicira_ext_action_to_atom(0x4), do: Openflow.Action.NxSetQueue
def nicira_ext_action_to_atom(0x5), do: Openflow.Action.NxPopQueue
def nicira_ext_action_to_atom(0x6), do: Openflow.Action.NxRegMove
def nicira_ext_action_to_atom(0x7), do: Openflow.Action.NxRegLoad
def nicira_ext_action_to_atom(0x8), do: Openflow.Action.NxNote
@ -11820,15 +11798,9 @@ defmodule Openflow.Enums do
def nicira_ext_action_to_atom(0x14), do: Openflow.Action.NxController
def nicira_ext_action_to_atom(0x15), do: Openflow.Action.NxDecTtlCntIds
def nicira_ext_action_to_atom(0x16), do: Openflow.Action.NxWriteMetadata
def nicira_ext_action_to_atom(0x17), do: Openflow.Action.NxPushMpls
def nicira_ext_action_to_atom(0x18), do: Openflow.Action.NxPopMpls
def nicira_ext_action_to_atom(0x19), do: Openflow.Action.NxSetMplsTtl
def nicira_ext_action_to_atom(0x1A), do: Openflow.Action.NxDecMplsTtl
def nicira_ext_action_to_atom(0x1B), do: Openflow.Action.NxStackPush
def nicira_ext_action_to_atom(0x1C), do: Openflow.Action.NxStackPop
def nicira_ext_action_to_atom(0x1D), do: Openflow.Action.NxSample
def nicira_ext_action_to_atom(0x1E), do: Openflow.Action.NxSetMplsLabel
def nicira_ext_action_to_atom(0x1F), do: Openflow.Action.NxSetMplsTc
def nicira_ext_action_to_atom(0x20), do: Openflow.Action.NxOutputReg2
def nicira_ext_action_to_atom(0x21), do: Openflow.Action.NxRegLoad2
def nicira_ext_action_to_atom(0x22), do: Openflow.Action.NxConjunction
@ -13000,6 +12972,8 @@ defmodule Openflow.Enums do
bad_port: 11,
bad_packet: 12,
multipart_buffer_overflow: 13,
multipart_request_timeout: 14,
multipart_reply_timeout: 15,
nxm_invalid: 256,
nxm_bad_type: 257,
must_be_zero: 515,
@ -13029,7 +13003,7 @@ defmodule Openflow.Enums do
bad_set_len: 14,
bad_set_argument: 15,
must_be_zero: 256,
conntrack_not_supported: 265,
conntrack_datapath_support: 265,
bad_conjunction: 526
]
@ -13043,7 +13017,8 @@ defmodule Openflow.Enums do
bad_experimeter: 5,
bad_exp_type: 6,
bad_len: 7,
eperm: 8
eperm: 8,
dup_inst: 256
]
defp enum_of(:bad_match),
@ -13059,7 +13034,8 @@ defmodule Openflow.Enums do
bad_mask: 8,
bad_prereq: 9,
dup_field: 10,
eperm: 11
eperm: 11,
conntrack_datapath_support: 264
]
defp enum_of(:flow_mod_failed),
@ -13090,7 +13066,9 @@ defmodule Openflow.Enums do
bad_command: 11,
bad_bucket: 12,
bad_watch: 13,
eperm: 14
eperm: 14,
unknown_bucket: 15,
bucket_exists: 16
]
defp enum_of(:port_mod_failed),
@ -13577,8 +13555,6 @@ defmodule Openflow.Enums do
do: [
{Openflow.Action.NxResubmit, 1},
{Openflow.Action.NxSetTunnel, 2},
{Openflow.Action.NxSetQueue, 4},
{Openflow.Action.NxPopQueue, 5},
{Openflow.Action.NxRegMove, 6},
{Openflow.Action.NxRegLoad, 7},
{Openflow.Action.NxNote, 8},
@ -13595,15 +13571,9 @@ defmodule Openflow.Enums do
{Openflow.Action.NxController, 20},
{Openflow.Action.NxDecTtlCntIds, 21},
{Openflow.Action.NxWriteMetadata, 22},
{Openflow.Action.NxPushMpls, 23},
{Openflow.Action.NxPopMpls, 24},
{Openflow.Action.NxSetMplsTtl, 25},
{Openflow.Action.NxDecMplsTtl, 26},
{Openflow.Action.NxStackPush, 27},
{Openflow.Action.NxStackPop, 28},
{Openflow.Action.NxSample, 29},
{Openflow.Action.NxSetMplsLabel, 30},
{Openflow.Action.NxSetMplsTc, 31},
{Openflow.Action.NxOutputReg2, 32},
{Openflow.Action.NxRegLoad2, 33},
{Openflow.Action.NxConjunction, 34},

View file

@ -1,2 +0,0 @@
defmodule Openflow.Features do
end

View file

@ -11,11 +11,38 @@ defmodule Openflow.Features.Reply do
alias __MODULE__
@type t :: %Reply{
version: 4,
xid: 0..0xFFFFFFFF,
datapath_id: String.t() | nil,
n_buffers: 0..0xFFFFFFFF,
n_tables: 0..0xFF,
aux_id: 0..0xFF,
capabilities: [
:flow_stats
| :table_stats
| :port_stats
| :group_stats
| :ip_reasm
| :queue_stats
| :arp_match_ip
| :port_blocked
]
}
@spec ofp_type :: 6
def ofp_type, do: 6
def read(
<<datapath_id::64-bits, n_buf::32, n_tab::8, aux_id::8, _pad::16, caps_int::32, _rsv::32>>
) do
@spec read(<<_::192>>) :: t()
def read(<<
datapath_id::64-bits,
n_buf::32,
n_tab::8,
aux_id::8,
_pad::16,
caps_int::32,
_rsv::32
>>) do
dpid = Openflow.Utils.to_hex_string(datapath_id)
flags = Openflow.Enums.int_to_flags(caps_int, :switch_capabilities)
@ -28,6 +55,7 @@ defmodule Openflow.Features.Reply do
}
end
@spec to_binary(t()) :: <<_::192>>
def to_binary(%Reply{
datapath_id: datapath_id,
n_buffers: n_buf,

View file

@ -10,17 +10,22 @@ defmodule Openflow.Features.Request do
alias __MODULE__
@type t :: %Request{
version: 4,
xid: 0..0xFFFFFFFF,
datapath_id: String.t() | nil,
aux_id: 0..0xFFFF | nil
}
@spec ofp_type :: 5
def ofp_type, do: 5
def new(xid \\ 0) do
%Request{xid: xid}
end
@spec new(0..0xFFFF) :: t()
def new(xid \\ 0), do: %Request{xid: xid}
def read(_) do
%Request{}
end
@spec read(any()) :: t()
def read(_), do: %Request{}
def to_binary(%Request{}) do
<<>>
end
@spec to_binary(t()) :: <<>>
def to_binary(%Request{}), do: <<>>
end

View file

@ -7,10 +7,12 @@ defmodule Tres.Mixfile do
version: "0.1.0",
elixir: "~> 1.8",
start_permanent: Mix.env() == :prod,
escript: [main_module: Openflow.EnumGen, name: :enum_gen, path: "bin/enum_gen"],
compilers: [:erlang] ++ Mix.compilers(),
deps: deps(),
aliases: [test: "test --no-start", compile: ["escript.build"]],
aliases: [
test: "test --no-start",
compile: ["run priv/openflow_enum_gen.exs"]
],
docs: docs(),
test_coverage: [tool: ExCoveralls],
preferred_cli_env: [

1150
priv/openflow_enum_gen.exs Normal file

File diff suppressed because it is too large Load diff

View file

@ -2,6 +2,54 @@ defmodule OfpEchoTest do
use ExUnit.Case
doctest Openflow
describe "Openflow.Echo.Request" do
test "with xid and data options" do
echo = Openflow.Echo.Request.new(xid: 1, data: "echo")
echo
|> Openflow.to_binary()
|> Openflow.read()
|> Kernel.elem(1)
|> Kernel.==(echo)
|> assert()
end
test "with data options" do
echo = Openflow.Echo.Request.new("echo")
echo
|> Openflow.to_binary()
|> Openflow.read()
|> Kernel.elem(1)
|> Kernel.==(echo)
|> assert()
end
end
describe "Openflow.Echo.Reply" do
test "with xid and data options" do
echo = Openflow.Echo.Reply.new(xid: 1, data: "echo")
echo
|> Openflow.to_binary()
|> Openflow.read()
|> Kernel.elem(1)
|> Kernel.==(echo)
|> assert()
end
test "with data options" do
echo = Openflow.Echo.Reply.new("echo")
echo
|> Openflow.to_binary()
|> Openflow.read()
|> Kernel.elem(1)
|> Kernel.==(echo)
|> assert()
end
end
describe "Openflow.read/1" do
test "with OFP_ECHO_REQUEST packet" do
{:ok, %Openflow.Echo.Request{} = echo, ""} =
@ -9,9 +57,11 @@ defmodule OfpEchoTest do
|> File.read!()
|> Openflow.read()
assert echo.version == 4
assert echo.xid == 0
assert echo.data == ""
expect = Openflow.Echo.Request.new()
assert echo.version == expect.version
assert echo.xid == expect.xid
assert echo.data == expect.data
end
test "with OFP_ECHO_REPLY packet" do
@ -20,9 +70,11 @@ defmodule OfpEchoTest do
|> File.read!()
|> Openflow.read()
assert echo.version == 4
assert echo.xid == 0
assert echo.data == ""
expect = Openflow.Echo.Reply.new()
assert echo.version == expect.version
assert echo.xid == expect.xid
assert echo.data == expect.data
end
end

View file

@ -9,8 +9,10 @@ defmodule OfpFeaturesTest do
|> File.read!()
|> Openflow.read()
assert features.version == 4
assert features.xid == 0
expect = Openflow.Features.Request.new(0)
assert features.version == expect.version
assert features.xid == expect.xid
end
test "with OFP_FEATURES_REPLY packet" do