ovn-controller will now bind the l2gateway logical ports. Signed-Off-by: Numan Siddique <nusid...@redhat.com> --- ovn/TODO | 9 --------- ovn/controller/binding.c | 33 +++++++++++++++++++++++---------- ovn/ovn-nb.xml | 7 +++++++ ovn/ovn-sb.xml | 6 ++++++ tests/ovn.at | 5 +---- 5 files changed, 37 insertions(+), 23 deletions(-)
diff --git a/ovn/TODO b/ovn/TODO index 3f358c2..5b9d829 100644 --- a/ovn/TODO +++ b/ovn/TODO @@ -249,12 +249,3 @@ large. ** Support log option. * Software L2 gateway - -** Support "chassis" option in Logical_Switch_Port with type of "l2gateway". - - Right now an "l2gateway" port is bound to a chassis by setting the "chassis" - column of the port binding in the southbound database directly. We should - support a "chassis" option in the "options" column of the - "Logical_Switch_Port" in the northbound database. This would bring - "l2gateway" into alignment with how chassis binding is done for L3 gateways - (a "chassis" option for Logical_Router). diff --git a/ovn/controller/binding.c b/ovn/controller/binding.c index 4e5c1df..d28cd80 100644 --- a/ovn/controller/binding.c +++ b/ovn/controller/binding.c @@ -222,16 +222,29 @@ consider_local_datapath(struct controller_ctx *ctx, struct shash *lports, } sbrec_port_binding_set_chassis(binding_rec, chassis_rec); } - } else if (!strcmp(binding_rec->type, "l2gateway") - && binding_rec->chassis == chassis_rec) { - /* A locally bound L2 gateway port. - * - * ovn-controller does not bind gateway ports itself. - * Choosing a chassis for a gateway port is left - * up to an entity external to OVN. */ - sset_add(&all_lports, binding_rec->logical_port); - add_local_datapath(local_datapaths, binding_rec, - &binding_rec->header_.uuid); + } else if (!strcmp(binding_rec->type, "l2gateway")) { + const char *chassis_id = smap_get(&binding_rec->options, "chassis"); + if (!chassis_id) { + if ((binding_rec->chassis == chassis_rec) && ctx->ovnsb_idl_txn) { + VLOG_INFO("Releasing l2gateway port %s from this chassis.", + binding_rec->logical_port); + sbrec_port_binding_set_chassis(binding_rec, NULL); + } + return; + } + + if (binding_rec->chassis == chassis_rec) { + return; + } + + if (!strcmp(chassis_id, chassis_rec->name) && ctx->ovnsb_idl_txn) { + VLOG_INFO("Claiming l2gateway port %s for this chassis.", + binding_rec->logical_port); + sbrec_port_binding_set_chassis(binding_rec, chassis_rec); + sset_add(&all_lports, binding_rec->logical_port); + add_local_datapath(local_datapaths, binding_rec, + &binding_rec->header_.uuid); + } } else if (chassis_rec && binding_rec->chassis == chassis_rec && strcmp(binding_rec->type, "gateway")) { if (ctx->ovnsb_idl_txn) { diff --git a/ovn/ovn-nb.xml b/ovn/ovn-nb.xml index ff2e695..db56e5d 100644 --- a/ovn/ovn-nb.xml +++ b/ovn/ovn-nb.xml @@ -197,6 +197,13 @@ uses its local configuration to determine exactly how to connect to this network. </column> + + <column name="options" key="chassis"> + Required. The chassis on which the <code>l2gateway</code> logical + port should be bound to. <code>ovn-controller</code> running on the + defined chassis will connect this logical port to the physical network. + </column> + </group> <group title="Options for vtep ports"> diff --git a/ovn/ovn-sb.xml b/ovn/ovn-sb.xml index 759513f..6bc7208 100644 --- a/ovn/ovn-sb.xml +++ b/ovn/ovn-sb.xml @@ -1657,6 +1657,12 @@ tcp.flags = RST; </p> </column> + <column name="options" key="chassis"> + Required. <code>ovn-controller</code> running on the defined chassis + will bind the <code>l2gateway</code> logical port and connect it to the + physical network. + </column> + <column name="tag"> If set, indicates that the gateway is connected to a specific VLAN on the physical network. The VLAN ID is used to match diff --git a/tests/ovn.at b/tests/ovn.at index feb68d3..78311ed 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -1325,7 +1325,7 @@ ovn-nbctl lsp-set-addresses lp2 f0:00:00:00:00:02 ovn-nbctl lsp-add lsw0 lp-gw ovn-nbctl lsp-set-type lp-gw l2gateway -ovn-nbctl lsp-set-options lp-gw network_name=physnet1 +ovn-nbctl lsp-set-options lp-gw network_name=physnet1 chassis=hv_gw ovn-nbctl lsp-set-addresses lp-gw unknown net_add n1 # Network to connect hv1, hv2, and gw @@ -1355,9 +1355,6 @@ ovs-vsctl add-br br-phys2 net_attach n2 br-phys2 ovs-vsctl set open . external_ids:ovn-bridge-mappings="physnet1:br-phys2" -# Bind our gateway port to the hv_gw chassis -ovn-sbctl lport-bind lp-gw hv_gw - # Add hv3 on the other side of the GW sim_add hv3 as hv3 -- 2.7.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev