[ovs-dev] incorrect revalidated action for igmp
Huanle Han
hanxueluo at gmail.com
Wed Jun 21 17:04:48 UTC 2017
In "Normal" action, igmp report packet is expected to processed in slow
path.
However, the igmp_type(flow->tp_src) is not supported to be masked in
datapath.
Then ovs-vswitchd revalidate the flow with igmp_type(flow->tp_src) == 0. It
leads to a "multicast traffic, flooding" action and overwrites the
"userspace()" in datapath.
This is code segment from function "xlate_normal":
if (is_igmp(flow, wc)) {
memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
if (mcast_snooping_is_membership(flow->tp_src) ||
mcast_snooping_is_query(flow->tp_src)) { <<<<<<<<<
flow->tp_src is 0
if (ctx->xin->allow_side_effects && ctx->xin->packet) {
update_mcast_snooping_table(ctx, flow, vlan,
in_xbundle,
ctx->xin->packet);
}
/*
* IGMP packets need to take the slow path, in order to be
* processed for mdb updates. That will prevent expires
* firing off even after hosts have sent reports.
*/
ctx->xout->slow |= SLOW_ACTION;
}
.......
}
To reproduce this bug, you need to ovs-appctl upcall/disable-megaflows
Best wishes
More information about the dev
mailing list