diff options
author | Yi-Hung Wei <yihung.wei@gmail.com> | 2019-06-21 10:51:23 -0700 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2019-06-21 17:31:50 -0700 |
commit | 88d2ac50aa4e3383e185b698a1b3a44a6f7b4f80 (patch) | |
tree | 499488bfe3914920b93824534d55972e6835dc86 /include/openvswitch | |
parent | 13c952ca05210c98d3b9773120a1ab48b05e4dce (diff) | |
download | openvswitch-88d2ac50aa4e3383e185b698a1b3a44a6f7b4f80.tar.gz |
ofproto-dpif: Fix continuation with patch port
This patch fixes the ofp_port to odp_port translation issue on patch
port with nxt_resume. When OVS resumes processing a packet from
nxt_resume, OVS does not translate the ofp in_port to odp in_port
correctly if the packet is originally received from a patch port.
Currently,OVS sets the odp in_port for this resume pakcet as ODPP_NONE
and push the resume packet back to the datapath. Later on, if the packet
goes through a recirc, OVS will generate the following message since it
can not translate odp in_port (ODPP_NONE) back to ofp in_port during upcall,
and push down a datapath rule to drop the packet.
ofproto_dpif_upcall(handler16)|INFO|received packet on unassociated
datapath port 4294967295
When OVS revalidates the drop datapath flow with ODPP_NONE in_port, we
will see the following warning.
ofproto_dpif_upcall(revalidator18)|WARN|Failed to acquire udpif_key
corresponding to unexpected flow (Invalid argument): ufid:....
This patch resolves this issue by storing the odp in_port in the
continuation messages, and restores the odp in_port before push the
packet back to the datapath.
VMWare-BZ: 2364696
Signed-off-by: Yi-Hung Wei <yihung.wei@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'include/openvswitch')
-rw-r--r-- | include/openvswitch/ofp-packet.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/openvswitch/ofp-packet.h b/include/openvswitch/ofp-packet.h index 67001cb3f..77128d829 100644 --- a/include/openvswitch/ofp-packet.h +++ b/include/openvswitch/ofp-packet.h @@ -140,6 +140,9 @@ struct ofputil_packet_in_private { /* NXCPT_ACTION_SET. */ struct ofpact *action_set; size_t action_set_len; + + /* NXCPT_ODP_PORT. */ + odp_port_t odp_port; }; struct ofpbuf *ofputil_encode_packet_in_private( |