@@ -17,6 +17,10 @@ Post v24.03.0
external-ids, the option is no longer needed as it became effectively
"true" for all scenarios.
- Added DHCPv4 relay support.
+ - Added new global config option NB_Global:options:disable_vxlan_mode to
+ extend available tunnel IDs space for datapaths from 4095 to 16711680
+ when running in "VXLAN mode". For more details see man ovn-nb(5) for
+ mentioned option.
OVN v24.03.0 - 01 Mar 2024
--------------------------
@@ -115,7 +115,7 @@ en_global_config_run(struct engine_node *node , void *data)
config_data->svc_monitor_mac);
}
- init_vxlan_mode(sbrec_chassis_table);
+ init_vxlan_mode(&nb->options, sbrec_chassis_table);
char *max_tunid = xasprintf("%d", get_ovn_max_dp_key_local());
smap_replace(options, "max_tunid", max_tunid);
free(max_tunid);
@@ -533,6 +533,11 @@ check_nb_options_out_of_sync(const struct nbrec_nb_global *nb,
return true;
}
+ if (config_out_of_sync(&nb->options, &config_data->nb_options,
+ "disable_vxlan_mode", false)) {
+ return true;
+ }
+
return false;
}
@@ -886,8 +886,14 @@ join_datapaths(const struct nbrec_logical_switch_table *nbrec_ls_table,
}
void
-init_vxlan_mode(const struct sbrec_chassis_table *sbrec_chassis_table)
+init_vxlan_mode(const struct smap *nb_options,
+ const struct sbrec_chassis_table *sbrec_chassis_table)
{
+ if (smap_get_bool(nb_options, "disable_vxlan_mode", false)) {
+ vxlan_mode = false;
+ return;
+ }
+
const struct sbrec_chassis *chassis;
SBREC_CHASSIS_TABLE_FOR_EACH (chassis, sbrec_chassis_table) {
for (int i = 0; i < chassis->n_encaps; i++) {
@@ -17596,7 +17602,7 @@ ovnnb_db_run(struct northd_input *input_data,
use_common_zone = smap_get_bool(input_data->nb_options, "use_common_zone",
false);
- init_vxlan_mode(input_data->sbrec_chassis_table);
+ init_vxlan_mode(input_data->nb_options, input_data->sbrec_chassis_table);
build_datapaths(ovnsb_txn,
input_data->nbrec_logical_switch_table,
@@ -792,7 +792,8 @@ lr_has_multiple_gw_ports(const struct ovn_datapath *od)
}
void
-init_vxlan_mode(const struct sbrec_chassis_table *sbrec_chassis_table);
+init_vxlan_mode(const struct smap *nb_options,
+ const struct sbrec_chassis_table *sbrec_chassis_table);
uint32_t get_ovn_max_dp_key_local(void);
@@ -2920,4 +2920,10 @@
the future, gateways that do not support encapsulations with large amounts
of metadata may continue to have a reduced feature set.
</p>
+ <p>
+ <code>VXLAN mode</code> is recommended to be disabled if VXLAN encap at
+ hypervisors is needed only to support HW VTEP L2 Gateway functionality.
+ See man ovn-nb(5) for table <code>NB_Global</code> column
+ <code>options</code> key <code>disable_vxlan_mode</code> for more details.
+ </p>
</manpage>
@@ -381,6 +381,16 @@
of SB changes would be very noticeable.
</column>
+ <column name="options" key="disable_vxlan_mode">
+ By default if at least one chassis in OVN cluster has VXLAN encap,
+ northd will run in a <code>VXLAN mode</code>. See man
+ ovn-architecture(7) <code>Tunnel Encapsulations</code> paragraph for
+ more details. In case VXLAN encaps are needed on chassis only to
+ support HW VTEP functionality and main encap type is GENEVE or STT, set
+ this option to <code>false</code> to use default
+ non-<code>VXLAN mode</code> tunnel IDs allocation logic.
+ </column>
+
<group title="Options for configuring interconnection route advertisement">
<p>
These options control how routes are advertised between OVN
@@ -2847,6 +2847,35 @@ AT_CHECK(
get_tunnel_keys
AT_CHECK([test $lsp02 = 3 && test $ls1 = 123])
+AT_CLEANUP
+])
+OVN_FOR_EACH_NORTHD_NO_HV([
+AT_SETUP([check VXLAN mode disabling])
+ovn_start
+
+# Create a fake chassis with vxlan encap to implicitly enable VXLAN mode.
+ovn-sbctl \
+ --id=@e create encap chassis_name=hv1 ip="192.168.0.1" type="vxlan" \
+ -- --id=@c create chassis name=hv1 encaps=@e
+
+cmd="ovn-nbctl --wait=sb"
+for i in {1..4097..1}; do
+ cmd="${cmd} -- ls-add lsw-${i}"
+done
+
+check $cmd
+
+check_row_count nb:Logical_Switch 4097
+wait_row_count sb:Datapath_Binding 4095
+
+OVS_WAIT_UNTIL([grep "all datapath tunnel ids exhausted" northd/ovn-northd.log])
+
+# Explicitly disable VXLAN mode and check that two remaining datapaths were created.
+check ovn-nbctl set NB_Global . options:disable_vxlan_mode=true
+
+check_row_count nb:Logical_Switch 4097
+wait_row_count sb:Datapath_Binding 4097
+
AT_CLEANUP
])