mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
datapath: Get packet metadata from userspace in odp_packet_cmd_execute().
Until now, the tun_id and in_port have been lost when a packet is sent from the kernel to userspace and then back to the kernel. I didn't think that this was a problem, but recent behavior made me look closer and see that it makes a difference if sFlow is turned on or if an ODP_ATTR_ACTION_CONTROLLER action is present. We could possibly kluge around those, but for future-proofing it seems better to pass the packet metadata from userspace to the kernel. That is what this commit does. This commit introduces a user-kernel protocol break. We could avoid that, if it is desirable, by making ODP_PACKET_ATTR_KEY optional for ODP_PACKET_CMD_EXECUTE commands. Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Jesse Gross <jesse@nicira.com>
This commit is contained in:
@@ -944,6 +944,7 @@ dpif_netdev_flow_dump_done(const struct dpif *dpif OVS_UNUSED, void *state_)
|
||||
|
||||
static int
|
||||
dpif_netdev_execute(struct dpif *dpif,
|
||||
const struct nlattr *key_attrs, size_t key_len,
|
||||
const struct nlattr *actions, size_t actions_len,
|
||||
const struct ofpbuf *packet)
|
||||
{
|
||||
@@ -975,7 +976,10 @@ dpif_netdev_execute(struct dpif *dpif,
|
||||
* if we don't. */
|
||||
copy = *packet;
|
||||
}
|
||||
|
||||
flow_extract(©, 0, -1, &key);
|
||||
dpif_netdev_flow_from_nlattrs(key_attrs, key_len, &key);
|
||||
|
||||
error = dp_netdev_execute_actions(dp, ©, &key, actions, actions_len);
|
||||
if (mutates) {
|
||||
ofpbuf_uninit(©);
|
||||
|
Reference in New Issue
Block a user