ofproto-dpif: Fix VLAN and other field handling in OFPP_NORMAL.
authorBen Pfaff <blp@nicira.com>
Sat, 24 Sep 2011 00:11:49 +0000 (17:11 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 26 Sep 2011 20:14:38 +0000 (13:14 -0700)
commit823518f1f26c2320c35e762c9d1bd29e68f9c5b8
treecc1beb38846a9afa53aec0af64345c4a69182a4b
parent1b0fdca5faa8674a5e67f7435a43b361fca003cf
ofproto-dpif: Fix VLAN and other field handling in OFPP_NORMAL.

compose_actions(), which is part of the OFPP_NORMAL implementation, had
multiple flaws that this commit corrects.

First, it did not commit changes made to the flow by actions preceding
the output to OFPP_NORMAL.  This means that, for example, if an OpenFlow
action to modify an L2 or L3 header preceded the output to OFPP_NORMAL,
then OFPP_NORMAL would output its packets without those changes.

Second, it did not update the action_xlate_ctx's notion of the VLAN that
was currently set, in the cases where it modified the current VLAN.  This
means that actions following the output to OFPP_NORMAL could output to
unexpected VLANs.

Third, when it switched to VLAN 0, it unconditionally also stripped the
whole 802.1Q header, so that if the packet originally was priority tagged,
the output packet was not priority tagged.  This is reasonable behavior,
but it is a change in behavior from what previous releases of OVS did, so
this commit reverts it.

Based on a patch from and a conversation with Pravin Shelar
<pshelar@nicira.com>.
ofproto/ofproto-dpif.c