On Mon, Nov 13, 2017 at 8:50 AM, Mark Michelson 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
>
Acked-by: Numan Siddique
> ---
> 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(_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(, htonll(mc->datapath->tunnel_key));
> +match_set_reg(, MFF_LOG_OUTPORT - MFF_REG0, mc->tunnel_key);
> +match_set_reg_masked(, MFF_LOG_FLAGS - MFF_REG0,
> + MLF_KEEP_LOCAL, MLF_KEEP_LOCAL);
> +ofpbuf_clear();
> +put_resubmit(OFTABLE_LOCAL_OUTPUT, );
> +ofctrl_add_flow(flow_table, OFTABLE_REMOTE_OUTPUT, 150, 0, ,
> +);
> +
> consider_mc_group(mff_ovn_geneve, ct_zones, local_datapaths,
> chassis,
>mc, , _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.
>
>
> + 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.
> +
> +
>A fallback flow that resubmits to table 33 if there is no other
>match.
>
> --
> 2.13.5
>
> ___
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
___
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev