mirror of
https://github.com/openvswitch/ovs
synced 2025-09-03 07:45:30 +00:00
netdev-offload-tc: Check for valid netdev ifindex in flow_put.
Verify that the returned ifindex by netdev_get_ifindex() is valid. This might not be the case in the ERSPAN port scenario, which can not be offloaded. Signed-off-by: Eelco Chaudron <echaudro@redhat.com> Acked-by: Roi Dayan <roid@nvidia.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
This commit is contained in:
committed by
Ilya Maximets
parent
b4868ee163
commit
db40eb79ec
@@ -1837,7 +1837,25 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match,
|
|||||||
VLOG_DBG_RL(&rl, "Can't find netdev for output port %d", port);
|
VLOG_DBG_RL(&rl, "Can't find netdev for output port %d", port);
|
||||||
return ENODEV;
|
return ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!netdev_flow_api_equals(netdev, outdev)) {
|
||||||
|
VLOG_DBG_RL(&rl,
|
||||||
|
"Flow API provider mismatch between ingress (%s) "
|
||||||
|
"and egress (%s) ports",
|
||||||
|
netdev_get_name(netdev), netdev_get_name(outdev));
|
||||||
|
netdev_close(outdev);
|
||||||
|
return EOPNOTSUPP;
|
||||||
|
}
|
||||||
|
|
||||||
action->out.ifindex_out = netdev_get_ifindex(outdev);
|
action->out.ifindex_out = netdev_get_ifindex(outdev);
|
||||||
|
if (action->out.ifindex_out < 0) {
|
||||||
|
VLOG_DBG_RL(&rl,
|
||||||
|
"Can't find ifindex for output port %s, error %d",
|
||||||
|
netdev_get_name(outdev), action->out.ifindex_out);
|
||||||
|
netdev_close(outdev);
|
||||||
|
return -action->out.ifindex_out;
|
||||||
|
}
|
||||||
|
|
||||||
action->out.ingress = is_internal_port(netdev_get_type(outdev));
|
action->out.ingress = is_internal_port(netdev_get_type(outdev));
|
||||||
action->type = TC_ACT_OUTPUT;
|
action->type = TC_ACT_OUTPUT;
|
||||||
flower.action_count++;
|
flower.action_count++;
|
||||||
|
Reference in New Issue
Block a user