Flow actions were reordered.


Tai, Hideyuki <hideyuki.tai@...>
 

Hi committers of Controller project,

Could you review and approve the following patch?
https://git.opendaylight.org/gerrit/8842

This is a patch for Bug 1338.
Due to this bug, flow actions in a flow entry is unexpectedly reordered when using the MD-SAL OF plugin (OF13 plugin),
so that an OF switch does not correctly handle packets as intended.

Regards,
Hideyuki Tai

-----Original Message-----
From: openflowjava-dev-bounces@... [mailto:openflowjava-dev-bounces@...] On Behalf Of Shigeru Yasuda
Sent: Wednesday, July 09, 2014 00:46
To: colin@...
Cc: openflowjava-dev@...; controller-dev@...; kkoushik@...; openflowplugin-dev@...; vtn-dev@...
Subject: Re: [openflowjava-dev] [openflowplugin-dev] [controller-dev] Flow actions were reordered.

Thanks Colin,

But action list I mentioned is in MD-SAL flow, not OF flow.
So I pushed a patch that adds "ordered-by user" to MD-SAL action list.

https://git.opendaylight.org/gerrit/8842

I verified that above patch preserves the order of actions in MD-SAL flow.

I think Colin's patch should also be merged because the order of OF action list should be preserved.

Regards,

--
Shigeru Yasuda

On [Tue, 8 Jul 2014 17:58:24 -0500],
Colin Dixon <colin@...> wrote:

My guess is that this is a bug in openflowjava's (adding
openflowjava-dev) openflow-action.yang where they should specify that
the list of actions in actions-grouping is ordered-by-user.

Right now it is not:
grouping actions-grouping {
list action {
config false;
leaf type {
type identityref {
base oft:action-base;
}
}
}
}

It should be a simple fix.

I've opened a bug here:
https://bugs.opendaylight.org/show_bug.cgi?id=1338

I've proposed a simple fix here:
https://git.opendaylight.org/gerrit/8830

You can try pulling that and building to see if it fixes your problem.

Cheers,
--Colin


On Tue, Jul 8, 2014 at 5:16 PM, Kiran Agrahara Sreenivasa <
kkoushik@...> wrote:

If you have the YANG data model, have you tried specifying
"ordered-by-user" in the list?
Thanks
Kiran


-----Original Message-----
From: controller-dev-bounces@... [mailto:
controller-dev-bounces@...] On Behalf Of Shigeru
Yasuda
Sent: Tuesday, July 08, 2014 11:18 AM
To: controller-dev@...;
openflowplugin-dev@...;
vtn-dev@...
Subject: [controller-dev] Flow actions were reordered.

Hi folks,

I observed that flow actions in a flow entry were reordered
unexpectedly when I tested VTN with OF13 plugin.

I configured 3 actions in a flow entry (via sal-compatibility):

action[0]: PUSH_VLAN
action[1]: SET_FIELD (VLAN_VID)
action[2]: OUTPUT

But above actions were encoded into an OF13 FLOW_MOD as follows:

action[0]: OUTPUT
action[1]: PUSH_VLAN
action[2]: SET_FIELD (VLAN_VID)

I embedded some trace logs into the controller source, then I
observed that flow actions in MD-SAL flow were already reordered
when
FlowChangeListener.add() was called.

_applyActions=ApplyActions [
_action=[
Action [
_order=2, _key=ActionKey [_order=2],
_action=OutputActionCase [
_outputAction=OutputAction [
_outputNodeConnector=Uri [_value=openflow:4:1],
augmentation=[]
],
augmentation=[]
],
augmentation=[]
],
Action [
_order=0, _key=ActionKey [_order=0],
_action=PushVlanActionCase [
_pushVlanAction=PushVlanAction [
_ethernetType=33024,
augmentation=[]
],
augmentation=[]
],
augmentation=[]
],
Action [
_order=1, _key=ActionKey [_order=1],
_action=SetVlanIdActionCase [
_setVlanIdAction=SetVlanIdAction [
_vlanId=VlanId [_value=10],
augmentation=[]
],
augmentation=[]
],
augmentation=[]
]
],
augmentation=[]
], ...


And I enabled trace logging for BindingToNormalizedNodeCodec class
in sal-binding-broker, then I observed that MD-SAL actions were
deserialized out of order.

2014-07-09 00:37:40.849 GMT+09:00 [pool-17-thread-1] TRACE \
o.o.c.m.s.b.i.BindingToNormalizedNodeCodec - \
InstanceIdentifier Path Deserialization: [... snipped ..] \

action/(urn:opendaylight:flow:inventory?revision=2013-08-19)output-
action

2014-07-09 00:37:40.851 GMT+09:00 [pool-17-thread-1] TRACE \
o.o.c.m.s.b.i.BindingToNormalizedNodeCodec - \
InstanceIdentifier Path Deserialization: [... snipped ..] \

action/(urn:opendaylight:flow:inventory?revision=2013-08-19)set-vla
n-id-action

2014-07-09 00:37:40.851 GMT+09:00 [pool-17-thread-1] TRACE \
o.o.c.m.s.b.i.BindingToNormalizedNodeCodec - \
InstanceIdentifier Path Deserialization: [... snipped ..] \

action/(urn:opendaylight:flow:inventory?revision=2013-08-19)push-vl
an-action

The order of elements in a YANG data list seems to be unspecified
because it may be randomized by deserialization. My understanding is correct?
If so, I think openflowplugin should sort MD-SAL actions according
to action order (Action.getOrder()) when it converts MD-SAL actions
into OF actions.

Regards,

--
Shigeru Yasuda
_______________________________________________
controller-dev mailing list
controller-dev@...
https://lists.opendaylight.org/mailman/listinfo/controller-dev
_______________________________________________
openflowplugin-dev mailing list
openflowplugin-dev@...
https://lists.opendaylight.org/mailman/listinfo/openflowplugin-dev
_______________________________________________
openflowjava-dev mailing list
openflowjava-dev@...
https://lists.opendaylight.org/mailman/listinfo/openflowjava-dev