[ovs-dev] [PATCH v4 1/2] OVN: Add multicast keep-local flag.

Numan Siddique nusiddiq at redhat.com
Tue Nov 14 08:15:02 UTC 2017


On Mon, Nov 13, 2017 at 8:50 AM, Mark Michelson <mmichels at redhat.com> wrote:

> When this flag is set, then a multicast packet that would normally be
> delivered to ports on multiple hypervisors is only delivered to ports
> on the local hypervisor.
>
> The primary known use case for this is when multicast packets originate
> from ovn-controller. Multiple ovn-controllers will be attempting to send
> out those multicast packets, and so each should only be responsible for
> delivering those packets to their local ports.
>
> Signed-off-by: Mark Michelson <mmichels at redhat.com>
>

Acked-by: Numan Siddique <nusiddiq at redhat.com>


> ---
>  ovn/controller/physical.c  | 15 +++++++++++++++
>  ovn/lib/logical-fields.h   |  6 ++++++
>  ovn/ovn-architecture.7.xml | 10 ++++++++++
>  3 files changed, 31 insertions(+)
>
> diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c
> index df71979f9..b2216457f 100644
> --- a/ovn/controller/physical.c
> +++ b/ovn/controller/physical.c
> @@ -995,6 +995,21 @@ physical_run(struct controller_ctx *ctx, enum
> mf_field_id mff_ovn_geneve,
>      struct ofpbuf remote_ofpacts;
>      ofpbuf_init(&remote_ofpacts, 0);
>      SBREC_MULTICAST_GROUP_FOR_EACH (mc, ctx->ovnsb_idl) {
> +        /* Table 32, priority 150.
> +         * =======================
> +         *
> +         * Multicast packets that should not be sent to other hypervisors.
> +         */
> +        struct match match = MATCH_CATCHALL_INITIALIZER;
> +        match_set_metadata(&match, htonll(mc->datapath->tunnel_key));
> +        match_set_reg(&match, MFF_LOG_OUTPORT - MFF_REG0, mc->tunnel_key);
> +        match_set_reg_masked(&match, MFF_LOG_FLAGS - MFF_REG0,
> +                             MLF_KEEP_LOCAL, MLF_KEEP_LOCAL);
> +        ofpbuf_clear(&ofpacts);
> +        put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts);
> +        ofctrl_add_flow(flow_table, OFTABLE_REMOTE_OUTPUT, 150, 0, &match,
> +                        &ofpacts);
> +
>          consider_mc_group(mff_ovn_geneve, ct_zones, local_datapaths,
> chassis,
>                            mc, &ofpacts, &remote_ofpacts, flow_table);
>      }
> diff --git a/ovn/lib/logical-fields.h b/ovn/lib/logical-fields.h
> index 696c529be..eb0b8f422 100644
> --- a/ovn/lib/logical-fields.h
> +++ b/ovn/lib/logical-fields.h
> @@ -49,6 +49,7 @@ enum mff_log_flags_bits {
>      MLF_RCV_FROM_VXLAN_BIT = 1,
>      MLF_FORCE_SNAT_FOR_DNAT_BIT = 2,
>      MLF_FORCE_SNAT_FOR_LB_BIT = 3,
> +    MLF_KEEP_LOCAL_BIT = 4,
>  };
>
>  /* MFF_LOG_FLAGS_REG flag assignments */
> @@ -69,6 +70,11 @@ enum mff_log_flags {
>      /* Indicate that a packet needs a force SNAT in the gateway router
> when
>       * load-balancing has taken place. */
>      MLF_FORCE_SNAT_FOR_LB = (1 << MLF_FORCE_SNAT_FOR_LB_BIT),
> +
> +    /* Indicate that a packet that should be distributed across multiple
> +     * hypervisors should instead only be output to local targets
> +     */
> +    MLF_KEEP_LOCAL = (1 << MLF_KEEP_LOCAL_BIT),
>  };
>
>  #endif /* ovn/lib/logical-fields.h */
> diff --git a/ovn/ovn-architecture.7.xml b/ovn/ovn-architecture.7.xml
> index b13b41177..9c7663e93 100644
> --- a/ovn/ovn-architecture.7.xml
> +++ b/ovn/ovn-architecture.7.xml
> @@ -1027,6 +1027,16 @@
>            their traffic should never go out through a tunnel.
>          </li>
>          <li>
> +          A higher-priority rule to match packets that have the
> MLF_KEEP_LOCAL
> +          logical flow flag set, and whose destination is a multicast
> address.
> +          This flag indicates that the packet should not be delivered to
> remote
> +          hypervisors, even if the multicast destination includes ports on
> +          remote hypervisors. This flag is used when ovn-controller is the
> +          originator of the multicast packet. Since each ovn-controller
> +          instance is originating these packets, the packets only need to
> be
> +          delivered to local ports.
> +        </li>
> +        <li>
>            A fallback flow that resubmits to table 33 if there is no other
>            match.
>          </li>
> --
> 2.13.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>


More information about the dev mailing list