quality: Add test cases for group_desc and group_features messages

This commit is contained in:
Eishun Kondoh 2019-05-05 22:56:16 +09:00
parent 87ff193b63
commit b5d0a5654a
9 changed files with 1073 additions and 463 deletions

View file

@ -3879,6 +3879,34 @@ defmodule Openflow.Enums do
throw(:bad_enum)
end
def to_int(:all, :group_type_flags) do
group_type_flags_to_int(:all)
catch
_class, _reason -> :all
end
def to_int(:select, :group_type_flags) do
group_type_flags_to_int(:select)
catch
_class, _reason -> :select
end
def to_int(:indirect, :group_type_flags) do
group_type_flags_to_int(:indirect)
catch
_class, _reason -> :indirect
end
def to_int(:fast_failover, :group_type_flags) do
group_type_flags_to_int(:fast_failover)
catch
_class, _reason -> :fast_failover
end
def to_int(_int, :group_type_flags) do
throw(:bad_enum)
end
def to_int(:max, :group_id) do
group_id_to_int(:max)
catch
@ -4225,6 +4253,136 @@ defmodule Openflow.Enums do
throw(:bad_enum)
end
def to_int(Openflow.Action.Output, :action_flags) do
action_flags_to_int(Openflow.Action.Output)
catch
_class, _reason -> Openflow.Action.Output
end
def to_int(Openflow.Action.CopyTtlOut, :action_flags) do
action_flags_to_int(Openflow.Action.CopyTtlOut)
catch
_class, _reason -> Openflow.Action.CopyTtlOut
end
def to_int(Openflow.Action.CopyTtlIn, :action_flags) do
action_flags_to_int(Openflow.Action.CopyTtlIn)
catch
_class, _reason -> Openflow.Action.CopyTtlIn
end
def to_int(Openflow.Action.SetMplsTtl, :action_flags) do
action_flags_to_int(Openflow.Action.SetMplsTtl)
catch
_class, _reason -> Openflow.Action.SetMplsTtl
end
def to_int(Openflow.Action.DecMplsTtl, :action_flags) do
action_flags_to_int(Openflow.Action.DecMplsTtl)
catch
_class, _reason -> Openflow.Action.DecMplsTtl
end
def to_int(Openflow.Action.PushVlan, :action_flags) do
action_flags_to_int(Openflow.Action.PushVlan)
catch
_class, _reason -> Openflow.Action.PushVlan
end
def to_int(Openflow.Action.PopVlan, :action_flags) do
action_flags_to_int(Openflow.Action.PopVlan)
catch
_class, _reason -> Openflow.Action.PopVlan
end
def to_int(Openflow.Action.PushMpls, :action_flags) do
action_flags_to_int(Openflow.Action.PushMpls)
catch
_class, _reason -> Openflow.Action.PushMpls
end
def to_int(Openflow.Action.PopMpls, :action_flags) do
action_flags_to_int(Openflow.Action.PopMpls)
catch
_class, _reason -> Openflow.Action.PopMpls
end
def to_int(Openflow.Action.SetQueue, :action_flags) do
action_flags_to_int(Openflow.Action.SetQueue)
catch
_class, _reason -> Openflow.Action.SetQueue
end
def to_int(Openflow.Action.Group, :action_flags) do
action_flags_to_int(Openflow.Action.Group)
catch
_class, _reason -> Openflow.Action.Group
end
def to_int(Openflow.Action.SetNwTtl, :action_flags) do
action_flags_to_int(Openflow.Action.SetNwTtl)
catch
_class, _reason -> Openflow.Action.SetNwTtl
end
def to_int(Openflow.Action.DecNwTtl, :action_flags) do
action_flags_to_int(Openflow.Action.DecNwTtl)
catch
_class, _reason -> Openflow.Action.DecNwTtl
end
def to_int(Openflow.Action.SetField, :action_flags) do
action_flags_to_int(Openflow.Action.SetField)
catch
_class, _reason -> Openflow.Action.SetField
end
def to_int(Openflow.Action.PushPbb, :action_flags) do
action_flags_to_int(Openflow.Action.PushPbb)
catch
_class, _reason -> Openflow.Action.PushPbb
end
def to_int(Openflow.Action.PopPbb, :action_flags) do
action_flags_to_int(Openflow.Action.PopPbb)
catch
_class, _reason -> Openflow.Action.PopPbb
end
def to_int(Openflow.Action.Encap, :action_flags) do
action_flags_to_int(Openflow.Action.Encap)
catch
_class, _reason -> Openflow.Action.Encap
end
def to_int(Openflow.Action.Decap, :action_flags) do
action_flags_to_int(Openflow.Action.Decap)
catch
_class, _reason -> Openflow.Action.Decap
end
def to_int(Openflow.Action.SetSequence, :action_flags) do
action_flags_to_int(Openflow.Action.SetSequence)
catch
_class, _reason -> Openflow.Action.SetSequence
end
def to_int(Openflow.Action.ValidateSequence, :action_flags) do
action_flags_to_int(Openflow.Action.ValidateSequence)
catch
_class, _reason -> Openflow.Action.ValidateSequence
end
def to_int(Openflow.Action.Experimenter, :action_flags) do
action_flags_to_int(Openflow.Action.Experimenter)
catch
_class, _reason -> Openflow.Action.Experimenter
end
def to_int(_int, :action_flags) do
throw(:bad_enum)
end
def to_int(:nicira_ext_action, :action_vendor) do
action_vendor_to_int(:nicira_ext_action)
catch
@ -9137,6 +9295,34 @@ defmodule Openflow.Enums do
throw(:bad_enum)
end
def to_atom(0x1, :group_type_flags) do
group_type_flags_to_atom(0x1)
catch
_class, _reason -> 1
end
def to_atom(0x2, :group_type_flags) do
group_type_flags_to_atom(0x2)
catch
_class, _reason -> 2
end
def to_atom(0x4, :group_type_flags) do
group_type_flags_to_atom(0x4)
catch
_class, _reason -> 4
end
def to_atom(0x8, :group_type_flags) do
group_type_flags_to_atom(0x8)
catch
_class, _reason -> 8
end
def to_atom(_, :group_type_flags) do
throw(:bad_enum)
end
def to_atom(0xFFFFFF00, :group_id) do
group_id_to_atom(0xFFFFFF00)
catch
@ -9483,6 +9669,136 @@ defmodule Openflow.Enums do
throw(:bad_enum)
end
def to_atom(0x1, :action_flags) do
action_flags_to_atom(0x1)
catch
_class, _reason -> 1
end
def to_atom(0x800, :action_flags) do
action_flags_to_atom(0x800)
catch
_class, _reason -> 2048
end
def to_atom(0x1000, :action_flags) do
action_flags_to_atom(0x1000)
catch
_class, _reason -> 4096
end
def to_atom(0x8000, :action_flags) do
action_flags_to_atom(0x8000)
catch
_class, _reason -> 32768
end
def to_atom(0x10000, :action_flags) do
action_flags_to_atom(0x10000)
catch
_class, _reason -> 65536
end
def to_atom(0x20000, :action_flags) do
action_flags_to_atom(0x20000)
catch
_class, _reason -> 131_072
end
def to_atom(0x40000, :action_flags) do
action_flags_to_atom(0x40000)
catch
_class, _reason -> 262_144
end
def to_atom(0x80000, :action_flags) do
action_flags_to_atom(0x80000)
catch
_class, _reason -> 524_288
end
def to_atom(0x100000, :action_flags) do
action_flags_to_atom(0x100000)
catch
_class, _reason -> 1_048_576
end
def to_atom(0x200000, :action_flags) do
action_flags_to_atom(0x200000)
catch
_class, _reason -> 2_097_152
end
def to_atom(0x400000, :action_flags) do
action_flags_to_atom(0x400000)
catch
_class, _reason -> 4_194_304
end
def to_atom(0x800000, :action_flags) do
action_flags_to_atom(0x800000)
catch
_class, _reason -> 8_388_608
end
def to_atom(0x1000000, :action_flags) do
action_flags_to_atom(0x1000000)
catch
_class, _reason -> 16_777_216
end
def to_atom(0x2000000, :action_flags) do
action_flags_to_atom(0x2000000)
catch
_class, _reason -> 33_554_432
end
def to_atom(0x4000000, :action_flags) do
action_flags_to_atom(0x4000000)
catch
_class, _reason -> 67_108_864
end
def to_atom(0x8000000, :action_flags) do
action_flags_to_atom(0x8000000)
catch
_class, _reason -> 134_217_728
end
def to_atom(0x10000000, :action_flags) do
action_flags_to_atom(0x10000000)
catch
_class, _reason -> 268_435_456
end
def to_atom(0x20000000, :action_flags) do
action_flags_to_atom(0x20000000)
catch
_class, _reason -> 536_870_912
end
def to_atom(0x40000000, :action_flags) do
action_flags_to_atom(0x40000000)
catch
_class, _reason -> 1_073_741_824
end
def to_atom(0x80000000, :action_flags) do
action_flags_to_atom(0x80000000)
catch
_class, _reason -> 2_147_483_648
end
def to_atom(0xFFFF, :action_flags) do
action_flags_to_atom(0xFFFF)
catch
_class, _reason -> 65535
end
def to_atom(_, :action_flags) do
throw(:bad_enum)
end
def to_atom(0x2320, :action_vendor) do
action_vendor_to_atom(0x2320)
catch
@ -11849,6 +12165,16 @@ defmodule Openflow.Enums do
def group_type_to_atom(0x2), do: :indirect
def group_type_to_atom(0x3), do: :fast_failover
def group_type_to_atom(_), do: throw(:bad_enum)
def group_type_flags_to_int(:all), do: 0x1
def group_type_flags_to_int(:select), do: 0x2
def group_type_flags_to_int(:indirect), do: 0x4
def group_type_flags_to_int(:fast_failover), do: 0x8
def group_type_flags_to_int(_), do: throw(:bad_enum)
def group_type_flags_to_atom(0x1), do: :all
def group_type_flags_to_atom(0x2), do: :select
def group_type_flags_to_atom(0x4), do: :indirect
def group_type_flags_to_atom(0x8), do: :fast_failover
def group_type_flags_to_atom(_), do: throw(:bad_enum)
def group_id_to_int(:max), do: 0xFFFFFF00
def group_id_to_int(:all), do: 0xFFFFFFFC
def group_id_to_int(:any), do: 0xFFFFFFFF
@ -11971,6 +12297,50 @@ defmodule Openflow.Enums do
def action_type_to_atom(0x1F), do: Openflow.Action.ValidateSequence
def action_type_to_atom(0xFFFF), do: Openflow.Action.Experimenter
def action_type_to_atom(_), do: throw(:bad_enum)
def action_flags_to_int(Openflow.Action.Output), do: 0x1
def action_flags_to_int(Openflow.Action.CopyTtlOut), do: 0x800
def action_flags_to_int(Openflow.Action.CopyTtlIn), do: 0x1000
def action_flags_to_int(Openflow.Action.SetMplsTtl), do: 0x8000
def action_flags_to_int(Openflow.Action.DecMplsTtl), do: 0x10000
def action_flags_to_int(Openflow.Action.PushVlan), do: 0x20000
def action_flags_to_int(Openflow.Action.PopVlan), do: 0x40000
def action_flags_to_int(Openflow.Action.PushMpls), do: 0x80000
def action_flags_to_int(Openflow.Action.PopMpls), do: 0x100000
def action_flags_to_int(Openflow.Action.SetQueue), do: 0x200000
def action_flags_to_int(Openflow.Action.Group), do: 0x400000
def action_flags_to_int(Openflow.Action.SetNwTtl), do: 0x800000
def action_flags_to_int(Openflow.Action.DecNwTtl), do: 0x1000000
def action_flags_to_int(Openflow.Action.SetField), do: 0x2000000
def action_flags_to_int(Openflow.Action.PushPbb), do: 0x4000000
def action_flags_to_int(Openflow.Action.PopPbb), do: 0x8000000
def action_flags_to_int(Openflow.Action.Encap), do: 0x10000000
def action_flags_to_int(Openflow.Action.Decap), do: 0x20000000
def action_flags_to_int(Openflow.Action.SetSequence), do: 0x40000000
def action_flags_to_int(Openflow.Action.ValidateSequence), do: 0x80000000
def action_flags_to_int(Openflow.Action.Experimenter), do: 0xFFFF
def action_flags_to_int(_), do: throw(:bad_enum)
def action_flags_to_atom(0x1), do: Openflow.Action.Output
def action_flags_to_atom(0x800), do: Openflow.Action.CopyTtlOut
def action_flags_to_atom(0x1000), do: Openflow.Action.CopyTtlIn
def action_flags_to_atom(0x8000), do: Openflow.Action.SetMplsTtl
def action_flags_to_atom(0x10000), do: Openflow.Action.DecMplsTtl
def action_flags_to_atom(0x20000), do: Openflow.Action.PushVlan
def action_flags_to_atom(0x40000), do: Openflow.Action.PopVlan
def action_flags_to_atom(0x80000), do: Openflow.Action.PushMpls
def action_flags_to_atom(0x100000), do: Openflow.Action.PopMpls
def action_flags_to_atom(0x200000), do: Openflow.Action.SetQueue
def action_flags_to_atom(0x400000), do: Openflow.Action.Group
def action_flags_to_atom(0x800000), do: Openflow.Action.SetNwTtl
def action_flags_to_atom(0x1000000), do: Openflow.Action.DecNwTtl
def action_flags_to_atom(0x2000000), do: Openflow.Action.SetField
def action_flags_to_atom(0x4000000), do: Openflow.Action.PushPbb
def action_flags_to_atom(0x8000000), do: Openflow.Action.PopPbb
def action_flags_to_atom(0x10000000), do: Openflow.Action.Encap
def action_flags_to_atom(0x20000000), do: Openflow.Action.Decap
def action_flags_to_atom(0x40000000), do: Openflow.Action.SetSequence
def action_flags_to_atom(0x80000000), do: Openflow.Action.ValidateSequence
def action_flags_to_atom(0xFFFF), do: Openflow.Action.Experimenter
def action_flags_to_atom(_), do: throw(:bad_enum)
def action_vendor_to_int(:nicira_ext_action), do: 0x2320
def action_vendor_to_int(:onf_ext_action), do: 0x4F4E4600
def action_vendor_to_int(_), do: throw(:bad_enum)
@ -12570,6 +12940,10 @@ defmodule Openflow.Enums do
Openflow.Utils.int_to_flags([], int, enum_of(:group_type))
end
def int_to_flags(int, :group_type_flags) do
Openflow.Utils.int_to_flags([], int, enum_of(:group_type_flags))
end
def int_to_flags(int, :group_id) do
Openflow.Utils.int_to_flags([], int, enum_of(:group_id))
end
@ -12610,6 +12984,10 @@ defmodule Openflow.Enums do
Openflow.Utils.int_to_flags([], int, enum_of(:action_type))
end
def int_to_flags(int, :action_flags) do
Openflow.Utils.int_to_flags([], int, enum_of(:action_flags))
end
def int_to_flags(int, :action_vendor) do
Openflow.Utils.int_to_flags([], int, enum_of(:action_vendor))
end
@ -12950,6 +13328,10 @@ defmodule Openflow.Enums do
Openflow.Utils.flags_to_int(0, flags, enum_of(:group_type))
end
def flags_to_int(flags, :group_type_flags) do
Openflow.Utils.flags_to_int(0, flags, enum_of(:group_type_flags))
end
def flags_to_int(flags, :group_id) do
Openflow.Utils.flags_to_int(0, flags, enum_of(:group_id))
end
@ -12990,6 +13372,10 @@ defmodule Openflow.Enums do
Openflow.Utils.flags_to_int(0, flags, enum_of(:action_type))
end
def flags_to_int(flags, :action_flags) do
Openflow.Utils.flags_to_int(0, flags, enum_of(:action_flags))
end
def flags_to_int(flags, :action_vendor) do
Openflow.Utils.flags_to_int(0, flags, enum_of(:action_vendor))
end
@ -13772,6 +14158,7 @@ defmodule Openflow.Enums do
defp enum_of(:port_reason_mask), do: [add: 1, delete: 2, modify: 4]
defp enum_of(:group_mod_command), do: [add: 0, modify: 1, delete: 2]
defp enum_of(:group_type), do: [all: 0, select: 1, indirect: 2, fast_failover: 3]
defp enum_of(:group_type_flags), do: [all: 1, select: 2, indirect: 4, fast_failover: 8]
defp enum_of(:group_id), do: [max: 4_294_967_040, all: 4_294_967_292, any: 4_294_967_295]
defp enum_of(:group_capabilities),
@ -13833,6 +14220,31 @@ defmodule Openflow.Enums do
{Openflow.Action.Experimenter, 65535}
]
defp enum_of(:action_flags),
do: [
{Openflow.Action.Output, 1},
{Openflow.Action.CopyTtlOut, 2048},
{Openflow.Action.CopyTtlIn, 4096},
{Openflow.Action.SetMplsTtl, 32768},
{Openflow.Action.DecMplsTtl, 65536},
{Openflow.Action.PushVlan, 131_072},
{Openflow.Action.PopVlan, 262_144},
{Openflow.Action.PushMpls, 524_288},
{Openflow.Action.PopMpls, 1_048_576},
{Openflow.Action.SetQueue, 2_097_152},
{Openflow.Action.Group, 4_194_304},
{Openflow.Action.SetNwTtl, 8_388_608},
{Openflow.Action.DecNwTtl, 16_777_216},
{Openflow.Action.SetField, 33_554_432},
{Openflow.Action.PushPbb, 67_108_864},
{Openflow.Action.PopPbb, 134_217_728},
{Openflow.Action.Encap, 268_435_456},
{Openflow.Action.Decap, 536_870_912},
{Openflow.Action.SetSequence, 1_073_741_824},
{Openflow.Action.ValidateSequence, 2_147_483_648},
{Openflow.Action.Experimenter, 65535}
]
defp enum_of(:action_vendor), do: [nicira_ext_action: 8992, onf_ext_action: 1_330_529_792]
defp enum_of(:onf_ext_action), do: [{Openflow.Action.OnfCopyField, 3200}]

View file

@ -4,6 +4,7 @@ defmodule Openflow.Multipart.GroupDesc.Reply do
xid: 0,
# virtual field
datapath_id: nil,
aux_id: nil,
flags: [],
groups: []
)

View file

@ -4,11 +4,20 @@ defmodule Openflow.Multipart.GroupDesc.Request do
xid: 0,
# virtual field
datapath_id: nil,
aux_id: nil,
flags: []
)
alias __MODULE__
@type t :: %Request{
version: 4,
datapath_id: String.t(),
aux_id: 0..0xFF | nil,
xid: 0..0xFFFFFFFF,
flags: [:more]
}
def ofp_type, do: 18
def new(xid \\ 0) do

View file

@ -19,29 +19,29 @@ defmodule Openflow.Multipart.GroupFeatures.Reply do
)
alias __MODULE__
alias Openflow.Enums
def ofp_type, do: 18
def read(
<<types_int::32, capabilities_int::32, max_groups_for_all_int::32,
max_groups_for_select_int::32, max_groups_for_indirect_int::32,
max_groups_for_fast_failover_int::32, actions_for_all_int::32,
<<types_int::32, capabilities_int::32, max_groups_for_all::32, max_groups_for_select::32,
max_groups_for_indirect::32, max_groups_for_fast_failover::32, actions_for_all_int::32,
actions_for_select_int::32, actions_for_indirect_int::32,
actions_for_fast_failover_int::32>>
) do
capabilities = Openflow.Enums.int_to_flags(capabilities_int, :group_capabilities)
%Reply{
types: types_int,
types: Enums.int_to_flags(types_int, :group_type_flags),
capabilities: capabilities,
max_groups_for_all: max_groups_for_all_int,
max_groups_for_select: max_groups_for_select_int,
max_groups_for_indirect: max_groups_for_indirect_int,
max_groups_for_fast_failover: max_groups_for_fast_failover_int,
actions_for_all: actions_for_all_int,
actions_for_select: actions_for_select_int,
actions_for_indirect: actions_for_indirect_int,
actions_for_fast_failover: actions_for_fast_failover_int
max_groups_for_all: max_groups_for_all,
max_groups_for_select: max_groups_for_select,
max_groups_for_indirect: max_groups_for_indirect,
max_groups_for_fast_failover: max_groups_for_fast_failover,
actions_for_all: Enums.int_to_flags(actions_for_all_int, :action_flags),
actions_for_select: Enums.int_to_flags(actions_for_select_int, :action_flags),
actions_for_indirect: Enums.int_to_flags(actions_for_indirect_int, :action_flags),
actions_for_fast_failover: Enums.int_to_flags(actions_for_fast_failover_int, :action_flags)
}
end
end

View file

@ -4,22 +4,28 @@ defmodule Openflow.Multipart.GroupFeatures.Request do
xid: 0,
# virtual field
datapath_id: nil,
aux_id: nil,
flags: []
)
alias __MODULE__
@type t :: %Request{
version: 4,
datapath_id: String.t(),
aux_id: 0..0xFF | nil,
xid: 0..0xFFFFFFFF
}
@spec ofp_type() :: 18
def ofp_type, do: 18
def new(xid \\ 0) do
%Request{xid: xid}
end
@spec new(xid :: 0..0xFFFFFFFF) :: t()
def new(xid \\ 0), do: %Request{xid: xid}
def read("") do
%Request{}
end
@spec read(<<>>) :: t()
def read(""), do: %Request{}
def to_binary(%Request{} = msg) do
Openflow.Multipart.Request.header(msg)
end
@spec to_binary(t()) :: binary()
def to_binary(%Request{} = msg), do: Openflow.Multipart.Request.header(msg)
end