On 4/19/24 13:14, Ales Musil wrote:
> The local_ip should be present for chassis with single encap whenever
> we configure its interface in OvS. Not having the local_ip can lead to
> traffic being dropped on the other side of tunnel because the source
> IP might be different, this is more likely to happen in pure IPv6
> deployments.
>
> Remove the option as with the local_ip being enforced
> also for single encap it became "true" in all scenarios, and it's not
> needed anymore.
>
> Reported-at: https://issues.redhat.com/browse/FDP-570
> Signed-off-by: Ales Musil <[email protected]>
> ---
Hi Han,
When you have time would you mind double checking this in case we missed
some scenario?
Thanks,
Dumitru
> NEWS | 3 +++
> controller/encaps.c | 31 +++------------------------
> controller/ovn-controller.8.xml | 14 +-----------
> tests/ovn-controller.at | 38 +++++++++++++++++++++++++++------
> 4 files changed, 39 insertions(+), 47 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index 141f1831c..9adf6a31c 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -13,6 +13,9 @@ Post v24.03.0
> "lflow-stage-to-oftable STAGE_NAME" that converts stage name into
> OpenFlow
> table id.
> - Rename the ovs-sandbox script to ovn-sandbox.
> + - Remove "ovn-set-local-ip" config option from vswitchd
> + external-ids, the option is no longer needed as it became effectively
> + "true" for all scenarios.
>
> OVN v24.03.0 - 01 Mar 2024
> --------------------------
> diff --git a/controller/encaps.c b/controller/encaps.c
> index a9cb604b8..b5ef66371 100644
> --- a/controller/encaps.c
> +++ b/controller/encaps.c
> @@ -208,11 +208,12 @@ out:
> static void
> tunnel_add(struct tunnel_ctx *tc, const struct sbrec_sb_global *sbg,
> const char *new_chassis_id, const struct sbrec_encap *encap,
> - bool must_set_local_ip, const char *local_ip,
> + const char *local_ip,
> const struct ovsrec_open_vswitch_table *ovs_table)
> {
> struct smap options = SMAP_INITIALIZER(&options);
> smap_add(&options, "remote_ip", encap->ip);
> + smap_add(&options, "local_ip", local_ip);
> smap_add(&options, "key", "flow");
> const char *dst_port = smap_get(&encap->options, "dst_port");
> const char *csum = smap_get(&encap->options, "csum");
> @@ -239,7 +240,6 @@ tunnel_add(struct tunnel_ctx *tc, const struct
> sbrec_sb_global *sbg,
> const struct ovsrec_open_vswitch *cfg =
> ovsrec_open_vswitch_table_first(ovs_table);
>
> - bool set_local_ip = must_set_local_ip;
> if (cfg) {
> /* If the tos option is configured, get it */
> const char *encap_tos =
> @@ -259,19 +259,10 @@ tunnel_add(struct tunnel_ctx *tc, const struct
> sbrec_sb_global *sbg,
> if (encap_df) {
> smap_add(&options, "df_default", encap_df);
> }
> -
> - if (!set_local_ip) {
> - /* If ovn-set-local-ip option is configured, get it */
> - set_local_ip =
> - get_chassis_external_id_value_bool(
> - &cfg->external_ids, tc->this_chassis->name,
> - "ovn-set-local-ip", false);
> - }
> }
>
> /* Add auth info if ipsec is enabled. */
> if (sbg->ipsec) {
> - set_local_ip = true;
> smap_add(&options, "remote_name", new_chassis_id);
>
> /* Force NAT-T traversal via configuration */
> @@ -290,10 +281,6 @@ tunnel_add(struct tunnel_ctx *tc, const struct
> sbrec_sb_global *sbg,
> }
> }
>
> - if (set_local_ip) {
> - smap_add(&options, "local_ip", local_ip);
> - }
> -
> /* If there's an existing tunnel record that does not need any change,
> * keep it. Otherwise, create a new record (if there was an existing
> * record, the new record will supplant it and encaps_run() will delete
> @@ -412,18 +399,6 @@ chassis_tunnel_add(const struct sbrec_chassis
> *chassis_rec,
> continue;
> }
>
> - /* Check if need to pass the local ip. We always set local ip if
> there
> - * are multiple local IPs for the selected encap type. */
> - int count = 0;
> - bool set_local_ip = false;
> - for (int j = 0; j < this_chassis->n_encaps; j++) {
> - if (pref_type == get_tunnel_type(this_chassis->encaps[j]->type)
> &&
> - count++ > 0) {
> - set_local_ip = true;
> - break;
> - }
> - }
> -
> for (int j = 0; j < this_chassis->n_encaps; j++) {
> if (pref_type != get_tunnel_type(this_chassis->encaps[j]->type))
> {
> continue;
> @@ -431,7 +406,7 @@ chassis_tunnel_add(const struct sbrec_chassis
> *chassis_rec,
> VLOG_DBG("tunnel_add: '%s', local ip: %s", chassis_rec->name,
> this_chassis->encaps[j]->ip);
> tunnel_add(tc, sbg, chassis_rec->name, chassis_rec->encaps[i],
> - set_local_ip, this_chassis->encaps[j]->ip, ovs_table);
> + this_chassis->encaps[j]->ip, ovs_table);
> tuncnt++;
> }
> }
> diff --git a/controller/ovn-controller.8.xml b/controller/ovn-controller.8.xml
> index 5ebef048d..85e7966d7 100644
> --- a/controller/ovn-controller.8.xml
> +++ b/controller/ovn-controller.8.xml
> @@ -367,16 +367,6 @@
> of how many entries there are in the cache. By default this is set
> to
> 30000 (30 seconds).
> </dd>
> - <dt><code>external_ids:ovn-set-local-ip</code></dt>
> - <dd>
> - The boolean flag indicates if <code>ovn-controller</code> when create
> - tunnel ports should set <code>local_ip</code> parameter. Can be
> - heplful to pin source outer IP for the tunnel when multiple
> interfaces
> - are used on the host for overlay traffic. This is also useful when
> - running multiple <code>ovn-controller</code> instances on the same
> - chassis, in which case this setting will guarantee that their tunnel
> - ports have unique configuration and can exist in parallel.
> - </dd>
> <dt><code>external_ids:garp-max-timeout-sec</code></dt>
> <dd>
> When used, this configuration value specifies the maximum timeout
> @@ -410,9 +400,7 @@
> names on the same host using the same <code>vswitchd</code> instance.
> This may be useful when running a hybrid setup with more than one CMS
> managing ports on the host, or to use different datapath types on the
> - same host. Make sure you also set
> - <code>external_ids:ovn-set-local-ip</code> when using such
> - configuration. Also note that this ability is highly experimental and
> + same host. Also note that this ability is highly experimental and
> has known limitations (for example, stateful ACLs are not supported).
> Use at your own risk.
> </p>
> diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at
> index f2c792c9c..be198e00d 100644
> --- a/tests/ovn-controller.at
> +++ b/tests/ovn-controller.at
> @@ -318,11 +318,6 @@ OVS_WAIT_UNTIL([check_tunnel_property type geneve])
> ovs-vsctl del-port ovn-fakech-0
> OVS_WAIT_UNTIL([check_tunnel_property type geneve])
>
> -# set `ovn-set-local-ip` option to true and check if tunnel parameters
> -OVS_WAIT_WHILE([check_tunnel_property options:local_ip "\"192.168.0.1\""])
> -ovs-vsctl set open . external_ids:ovn-set-local-ip=true
> -OVS_WAIT_UNTIL([check_tunnel_property options:local_ip "\"192.168.0.1\""])
> -
> # Change the local_ip on the OVS side and check than OVN fixes it
> ovs-vsctl set interface ovn-fakech-0 options:local_ip="1.1.1.1"
> OVS_WAIT_UNTIL([check_tunnel_property options:local_ip "\"192.168.0.1\""])
> @@ -817,7 +812,7 @@ check_tunnel_property () {
> }
>
> # without any tos options
> -no_tos_options="{csum=\"true\", key=flow, remote_ip=\"192.168.0.2\"}"
> +no_tos_options="{csum=\"true\", key=flow, local_ip=\"192.168.0.1\",
> remote_ip=\"192.168.0.2\"}"
>
> #
> # Start off with a remote chassis supporting geneve
> @@ -2880,3 +2875,34 @@ AT_CHECK([test x"$port_uuid"=$(ovs-vsctl get port
> $fakech_tunnel _uuid)])
> OVN_CLEANUP([hv1])
> AT_CLEANUP
> ])
> +
> +OVN_FOR_EACH_NORTHD([
> +AT_SETUP([Encap enforce local_ip])
> +ovn_start
> +
> +net_add n1
> +
> +sim_add hv1
> +as hv1
> +check ovs-vsctl add-br br-phys
> +ovn_attach n1 br-phys 192.168.0.11
> +
> +sim_add hv2
> +as hv2
> +check ovs-vsctl add-br br-phys
> +ovn_attach n1 br-phys 192.168.0.12
> +
> +as hv1
> +OVS_WAIT_UNTIL([
> + test $(ovs-vsctl --bare --columns _uuid find interface
> options:local_ip="192.168.0.11" | wc -l) -eq 1
> +])
> +
> +as hv2
> +OVS_WAIT_UNTIL([
> + test $(ovs-vsctl --bare --columns _uuid find interface
> options:local_ip="192.168.0.12" | wc -l) -eq 1
> +])
> +
> +OVN_CLEANUP([hv1],[hv2])
> +
> +AT_CLEANUP
> +])
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev