mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 22:35:15 +00:00
netdev-offload-tc: Flush rules on ingress block when init tc flow api
OVS can fail to attach ingress block on iface when init tc flow api,
if block already exist with rules on it and is shared with other iface.
Fix by flush all existing rules on the ingress block prior to deleting
it.
Fixes: 093c9458fb
("tc: allow offloading of block ids")
Signed-off-by: Dmytro Linkin <dmitrolin@mellanox.com>
Acked-by: Raed Salem <raeds@mellanox.com>
Acked-by: Roi Dayan <roid@mellanox.com>
Signed-off-by: Simon Horman <simon.horman@netronome.com>
This commit is contained in:
committed by
Simon Horman
parent
e99c53ee61
commit
edc2055a2b
@@ -1907,6 +1907,7 @@ netdev_tc_init_flow_api(struct netdev *netdev)
|
||||
static struct ovsthread_once block_once = OVSTHREAD_ONCE_INITIALIZER;
|
||||
enum tc_qdisc_hook hook = get_tc_qdisc_hook(netdev);
|
||||
uint32_t block_id = 0;
|
||||
struct tcf_id id;
|
||||
int ifindex;
|
||||
int error;
|
||||
|
||||
@@ -1917,6 +1918,14 @@ netdev_tc_init_flow_api(struct netdev *netdev)
|
||||
return -ifindex;
|
||||
}
|
||||
|
||||
block_id = get_block_id_from_netdev(netdev);
|
||||
|
||||
/* Flush rules explicitly needed when we work with ingress_block,
|
||||
* so we will not fail with reattaching block to bond iface, for ex.
|
||||
*/
|
||||
id = tc_make_tcf_id(ifindex, block_id, 0, hook);
|
||||
tc_del_filter(&id);
|
||||
|
||||
/* make sure there is no ingress/egress qdisc */
|
||||
tc_add_del_qdisc(ifindex, false, 0, hook);
|
||||
|
||||
@@ -1930,7 +1939,6 @@ netdev_tc_init_flow_api(struct netdev *netdev)
|
||||
ovsthread_once_done(&multi_mask_once);
|
||||
}
|
||||
|
||||
block_id = get_block_id_from_netdev(netdev);
|
||||
error = tc_add_del_qdisc(ifindex, true, block_id, hook);
|
||||
|
||||
if (error && error != EEXIST) {
|
||||
|
Reference in New Issue
Block a user