[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