summaryrefslogtreecommitdiff
path: root/ovn
diff options
context:
space:
mode:
authorBen Pfaff <blp@ovn.org>2018-06-08 14:47:32 -0700
committerBen Pfaff <blp@ovn.org>2018-06-12 08:24:23 -0700
commit789ddafa8b91ebafef5cda1f1e4d54b75fe20f83 (patch)
tree25c8903c36522b03c5d57da41932723d50e1a74c /ovn
parentd14e007c1f7314fec9ac0df6c2d39e24753cb11e (diff)
downloadopenvswitch-789ddafa8b91ebafef5cda1f1e4d54b75fe20f83.tar.gz
chassis-index: Use OVSDB index mechanism.
It seems like a good idea to use the built-in indexing instead of doing it by hand. Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Han Zhou <hzhou8@ebay.com>
Diffstat (limited to 'ovn')
-rw-r--r--ovn/controller/bfd.c23
-rw-r--r--ovn/controller/bfd.h6
-rw-r--r--ovn/controller/binding.c13
-rw-r--r--ovn/controller/binding.h3
-rw-r--r--ovn/controller/gchassis.c6
-rw-r--r--ovn/controller/gchassis.h6
-rw-r--r--ovn/controller/lflow.c28
-rw-r--r--ovn/controller/lflow.h5
-rw-r--r--ovn/controller/ovn-controller.c30
-rw-r--r--ovn/controller/physical.c15
-rw-r--r--ovn/controller/physical.h7
-rw-r--r--ovn/controller/pinctrl.c43
-rw-r--r--ovn/controller/pinctrl.h3
-rw-r--r--ovn/lib/chassis-index.c66
-rw-r--r--ovn/lib/chassis-index.h22
-rw-r--r--ovn/northd/ovn-northd.c58
16 files changed, 143 insertions, 191 deletions
diff --git a/ovn/controller/bfd.c b/ovn/controller/bfd.c
index 1b78b6114..051781f38 100644
--- a/ovn/controller/bfd.c
+++ b/ovn/controller/bfd.c
@@ -186,8 +186,8 @@ bfd_travel_gw_related_chassis(
static struct ovs_list *
bfd_find_ha_gateway_chassis(
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
- const struct chassis_index *chassis_index,
const struct sbrec_datapath_binding *datapath)
{
struct sbrec_port_binding *target = sbrec_port_binding_index_init_row(
@@ -203,7 +203,7 @@ bfd_find_ha_gateway_chassis(
}
struct ovs_list *gateway_chassis = gateway_chassis_get_ordered(
- pb, chassis_index);
+ sbrec_chassis_by_name, pb);
if (!gateway_chassis || ovs_list_is_short(gateway_chassis)) {
/* We don't need BFD for non-HA chassisredirect. */
gateway_chassis_destroy(gateway_chassis);
@@ -219,10 +219,10 @@ bfd_find_ha_gateway_chassis(
static void
bfd_calculate_chassis(
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
const struct sbrec_chassis *our_chassis,
const struct hmap *local_datapaths,
- const struct chassis_index *chassis_index,
struct sset *bfd_chassis)
{
/* Identify all chassis nodes to which we need to enable bfd.
@@ -239,8 +239,9 @@ bfd_calculate_chassis(
bool our_chassis_is_gw_for_dp = false;
if (is_router) {
struct ovs_list *ha_gateway_chassis
- = bfd_find_ha_gateway_chassis(sbrec_port_binding_by_datapath,
- chassis_index, dp->datapath);
+ = bfd_find_ha_gateway_chassis(sbrec_chassis_by_name,
+ sbrec_port_binding_by_datapath,
+ dp->datapath);
if (ha_gateway_chassis) {
our_chassis_is_gw_for_dp = gateway_chassis_contains(
ha_gateway_chassis, our_chassis);
@@ -261,21 +262,21 @@ bfd_calculate_chassis(
}
void
-bfd_run(struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
+bfd_run(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
const struct ovsrec_interface_table *interface_table,
const struct ovsrec_bridge *br_int,
const struct sbrec_chassis *chassis_rec,
- const struct hmap *local_datapaths,
- const struct chassis_index *chassis_index)
+ const struct hmap *local_datapaths)
{
if (!chassis_rec) {
return;
}
struct sset bfd_chassis = SSET_INITIALIZER(&bfd_chassis);
- bfd_calculate_chassis(sbrec_port_binding_by_datapath,
- chassis_rec, local_datapaths, chassis_index,
- &bfd_chassis);
+ bfd_calculate_chassis(sbrec_chassis_by_name,
+ sbrec_port_binding_by_datapath,
+ chassis_rec, local_datapaths, &bfd_chassis);
/* Identify tunnels ports(connected to remote chassis id) to enable bfd */
struct sset tunnels = SSET_INITIALIZER(&tunnels);
struct sset bfd_ifaces = SSET_INITIALIZER(&bfd_ifaces);
diff --git a/ovn/controller/bfd.h b/ovn/controller/bfd.h
index a453976d5..bc7615d28 100644
--- a/ovn/controller/bfd.h
+++ b/ovn/controller/bfd.h
@@ -16,7 +16,6 @@
#ifndef OVN_BFD_H
#define OVN_BFD_H 1
-struct chassis_index;
struct controller_ctx;
struct hmap;
struct ovsdb_idl;
@@ -27,11 +26,12 @@ struct sbrec_chassis;
struct sset;
void bfd_register_ovs_idl(struct ovsdb_idl *);
-void bfd_run(struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
+void bfd_run(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
const struct ovsrec_interface_table *interface_table,
const struct ovsrec_bridge *br_int,
const struct sbrec_chassis *chassis_rec,
- const struct hmap *local_datapaths, const struct chassis_index *);
+ const struct hmap *local_datapaths);
void bfd_calculate_active_tunnels(const struct ovsrec_bridge *br_int,
struct sset *active_tunnels);
diff --git a/ovn/controller/binding.c b/ovn/controller/binding.c
index b5e8c8ed4..5a3896c1d 100644
--- a/ovn/controller/binding.c
+++ b/ovn/controller/binding.c
@@ -393,10 +393,10 @@ update_local_lport_ids(struct sset *local_lport_ids,
static void
consider_local_datapath(struct controller_ctx *ctx,
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_datapath_binding_by_key,
struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
- const struct chassis_index *chassis_index,
const struct sset *active_tunnels,
const struct sbrec_chassis *chassis_rec,
const struct sbrec_port_binding *binding_rec,
@@ -441,8 +441,8 @@ consider_local_datapath(struct controller_ctx *ctx,
binding_rec->datapath, false, local_datapaths);
}
} else if (!strcmp(binding_rec->type, "chassisredirect")) {
- gateway_chassis = gateway_chassis_get_ordered(binding_rec,
- chassis_index);
+ gateway_chassis = gateway_chassis_get_ordered(sbrec_chassis_by_name,
+ binding_rec);
if (gateway_chassis &&
gateway_chassis_contains(gateway_chassis, chassis_rec)) {
@@ -546,6 +546,7 @@ consider_localnet_port(const struct sbrec_port_binding *binding_rec,
void
binding_run(struct controller_ctx *ctx,
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_datapath_binding_by_key,
struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
@@ -554,7 +555,6 @@ binding_run(struct controller_ctx *ctx,
const struct sbrec_port_binding_table *port_binding_table,
const struct ovsrec_bridge *br_int,
const struct sbrec_chassis *chassis_rec,
- const struct chassis_index *chassis_index,
const struct sset *active_tunnels,
struct hmap *local_datapaths, struct sset *local_lports,
struct sset *local_lport_ids)
@@ -578,9 +578,10 @@ binding_run(struct controller_ctx *ctx,
* chassis and update the binding accordingly. This includes both
* directly connected logical ports and children of those ports. */
SBREC_PORT_BINDING_TABLE_FOR_EACH (binding_rec, port_binding_table) {
- consider_local_datapath(ctx, sbrec_datapath_binding_by_key,
+ consider_local_datapath(ctx, sbrec_chassis_by_name,
+ sbrec_datapath_binding_by_key,
sbrec_port_binding_by_datapath,
- sbrec_port_binding_by_name, chassis_index,
+ sbrec_port_binding_by_name,
active_tunnels, chassis_rec, binding_rec,
sset_is_empty(&egress_ifaces) ? NULL :
&qos_map, local_datapaths, &lport_to_iface,
diff --git a/ovn/controller/binding.h b/ovn/controller/binding.h
index 1759b70de..21d63f577 100644
--- a/ovn/controller/binding.h
+++ b/ovn/controller/binding.h
@@ -20,7 +20,6 @@
#include <stdbool.h>
struct controller_ctx;
-struct chassis_index;
struct hmap;
struct ovsdb_idl;
struct ovsdb_idl_index;
@@ -33,6 +32,7 @@ struct sset;
void binding_register_ovs_idl(struct ovsdb_idl *);
void binding_run(struct controller_ctx *,
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_datapath_binding_by_key,
struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
@@ -41,7 +41,6 @@ void binding_run(struct controller_ctx *,
const struct sbrec_port_binding_table *,
const struct ovsrec_bridge *br_int,
const struct sbrec_chassis *,
- const struct chassis_index *,
const struct sset *active_tunnels,
struct hmap *local_datapaths,
struct sset *local_lports, struct sset *local_lport_ids);
diff --git a/ovn/controller/gchassis.c b/ovn/controller/gchassis.c
index fedb4329c..34b78bcc0 100644
--- a/ovn/controller/gchassis.c
+++ b/ovn/controller/gchassis.c
@@ -39,8 +39,8 @@ compare_chassis_prio_(const void *a_, const void *b_)
}
struct ovs_list*
-gateway_chassis_get_ordered(const struct sbrec_port_binding *binding,
- const struct chassis_index *chassis_index)
+gateway_chassis_get_ordered(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ const struct sbrec_port_binding *binding)
{
const char *redir_chassis_str;
const struct sbrec_chassis *redirect_chassis = NULL;
@@ -52,7 +52,7 @@ gateway_chassis_get_ordered(const struct sbrec_port_binding *binding,
redir_chassis_str = smap_get(&binding->options, "redirect-chassis");
if (redir_chassis_str) {
- redirect_chassis = chassis_lookup_by_name(chassis_index,
+ redirect_chassis = chassis_lookup_by_name(sbrec_chassis_by_name,
redir_chassis_str);
if (!redirect_chassis) {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
diff --git a/ovn/controller/gchassis.h b/ovn/controller/gchassis.h
index c16529e74..901be4491 100644
--- a/ovn/controller/gchassis.h
+++ b/ovn/controller/gchassis.h
@@ -21,8 +21,8 @@
#include "openvswitch/hmap.h"
#include "openvswitch/list.h"
-struct chassis_index;
struct ovsdb_idl;
+struct ovsdb_idl_index;
struct sbrec_chassis;
struct sbrec_gateway_chassis;
struct sbrec_port_binding;
@@ -44,8 +44,8 @@ struct gateway_chassis {
/* Gets, and orders by priority/name the list of Gateway_Chassis */
struct ovs_list *gateway_chassis_get_ordered(
- const struct sbrec_port_binding *binding,
- const struct chassis_index *chassis_index);
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
+ const struct sbrec_port_binding *binding);
/* Checks if an specific chassis is contained in the gateway_chassis
* list */
diff --git a/ovn/controller/lflow.c b/ovn/controller/lflow.c
index e3aed0420..8db81927e 100644
--- a/ovn/controller/lflow.c
+++ b/ovn/controller/lflow.c
@@ -56,16 +56,16 @@ struct lookup_port_aux {
};
struct condition_aux {
+ struct ovsdb_idl_index *sbrec_chassis_by_name;
struct ovsdb_idl_index *sbrec_port_binding_by_name;
const struct sbrec_chassis *chassis;
const struct sset *active_tunnels;
- const struct chassis_index *chassis_index;
};
static void consider_logical_flow(
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_multicast_group_by_name_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
- const struct chassis_index *,
const struct sbrec_logical_flow *,
const struct hmap *local_datapaths,
const struct sbrec_chassis *,
@@ -118,8 +118,8 @@ is_chassis_resident_cb(const void *c_aux_, const char *port_name)
return pb->chassis && pb->chassis == c_aux->chassis;
} else {
struct ovs_list *gateway_chassis;
- gateway_chassis = gateway_chassis_get_ordered(pb,
- c_aux->chassis_index);
+ gateway_chassis = gateway_chassis_get_ordered(
+ c_aux->sbrec_chassis_by_name, pb);
if (gateway_chassis) {
bool active = gateway_chassis_is_active(gateway_chassis,
c_aux->chassis,
@@ -141,12 +141,12 @@ is_switch(const struct sbrec_datapath_binding *ldp)
/* Adds the logical flows from the Logical_Flow table to flow tables. */
static void
add_logical_flows(
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_multicast_group_by_name_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct sbrec_dhcp_options_table *dhcp_options_table,
const struct sbrec_dhcpv6_options_table *dhcpv6_options_table,
const struct sbrec_logical_flow_table *logical_flow_table,
- const struct chassis_index *chassis_index,
const struct hmap *local_datapaths,
const struct sbrec_chassis *chassis,
const struct shash *addr_sets,
@@ -180,9 +180,10 @@ add_logical_flows(
nd_ra_opts_init(&nd_ra_opts);
SBREC_LOGICAL_FLOW_TABLE_FOR_EACH (lflow, logical_flow_table) {
- consider_logical_flow(sbrec_multicast_group_by_name_datapath,
+ consider_logical_flow(sbrec_chassis_by_name,
+ sbrec_multicast_group_by_name_datapath,
sbrec_port_binding_by_name,
- chassis_index, lflow, local_datapaths,
+ lflow, local_datapaths,
chassis, &dhcp_opts, &dhcpv6_opts, &nd_ra_opts,
addr_sets, port_groups, active_tunnels,
local_lport_ids, &conj_id_ofs,
@@ -196,9 +197,9 @@ add_logical_flows(
static void
consider_logical_flow(
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_multicast_group_by_name_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
- const struct chassis_index *chassis_index,
const struct sbrec_logical_flow *lflow,
const struct hmap *local_datapaths,
const struct sbrec_chassis *chassis,
@@ -294,10 +295,10 @@ consider_logical_flow(
.dp = lflow->logical_datapath
};
struct condition_aux cond_aux = {
+ .sbrec_chassis_by_name = sbrec_chassis_by_name,
.sbrec_port_binding_by_name = sbrec_port_binding_by_name,
.chassis = chassis,
.active_tunnels = active_tunnels,
- .chassis_index = chassis_index
};
expr = expr_simplify(expr, is_chassis_resident_cb, &cond_aux);
expr = expr_normalize(expr);
@@ -459,14 +460,14 @@ add_neighbor_flows(struct ovsdb_idl_index *sbrec_port_binding_by_name,
/* Translates logical flows in the Logical_Flow table in the OVN_SB database
* into OpenFlow flows. See ovn-architecture(7) for more information. */
void
-lflow_run(struct ovsdb_idl_index *sbrec_multicast_group_by_name_datapath,
+lflow_run(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_multicast_group_by_name_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct sbrec_dhcp_options_table *dhcp_options_table,
const struct sbrec_dhcpv6_options_table *dhcpv6_options_table,
const struct sbrec_logical_flow_table *logical_flow_table,
const struct sbrec_mac_binding_table *mac_binding_table,
const struct sbrec_chassis *chassis,
- const struct chassis_index *chassis_index,
const struct hmap *local_datapaths,
const struct shash *addr_sets,
const struct shash *port_groups,
@@ -478,9 +479,10 @@ lflow_run(struct ovsdb_idl_index *sbrec_multicast_group_by_name_datapath,
{
COVERAGE_INC(lflow_run);
- add_logical_flows(sbrec_multicast_group_by_name_datapath,
+ add_logical_flows(sbrec_chassis_by_name,
+ sbrec_multicast_group_by_name_datapath,
sbrec_port_binding_by_name, dhcp_options_table,
- dhcpv6_options_table, logical_flow_table, chassis_index,
+ dhcpv6_options_table, logical_flow_table,
local_datapaths, chassis, addr_sets, port_groups,
active_tunnels, local_lport_ids, flow_table, group_table,
meter_table);
diff --git a/ovn/controller/lflow.h b/ovn/controller/lflow.h
index feb59ee09..d19338140 100644
--- a/ovn/controller/lflow.h
+++ b/ovn/controller/lflow.h
@@ -35,7 +35,6 @@
#include <stdint.h>
-struct chassis_index;
struct ovn_extend_table;
struct ovsdb_idl_index;
struct hmap;
@@ -66,14 +65,14 @@ struct uuid;
#define LOG_PIPELINE_LEN 24
void lflow_init(void);
-void lflow_run(struct ovsdb_idl_index *sbrec_multicast_group_by_name_datapath,
+void lflow_run(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_multicast_group_by_name_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct sbrec_dhcp_options_table *,
const struct sbrec_dhcpv6_options_table *,
const struct sbrec_logical_flow_table *,
const struct sbrec_mac_binding_table *,
const struct sbrec_chassis *chassis,
- const struct chassis_index *,
const struct hmap *local_datapaths,
const struct shash *addr_sets,
const struct shash *port_groups,
diff --git a/ovn/controller/ovn-controller.c b/ovn/controller/ovn-controller.c
index 6bf947180..cd4208556 100644
--- a/ovn/controller/ovn-controller.c
+++ b/ovn/controller/ovn-controller.c
@@ -603,6 +603,8 @@ main(int argc, char *argv[])
ovsdb_idl_create(ovnsb_remote, &sbrec_idl_class, true, true));
ovsdb_idl_set_leader_only(ovnsb_idl_loop.idl, false);
+ struct ovsdb_idl_index *sbrec_chassis_by_name
+ = chassis_index_create(ovnsb_idl_loop.idl);
struct ovsdb_idl_index *sbrec_multicast_group_by_name_datapath
= ovsdb_idl_index_create2(ovnsb_idl_loop.idl,
&sbrec_multicast_group_col_name,
@@ -687,10 +689,6 @@ main(int argc, char *argv[])
const char *chassis_id
= get_chassis_id(ovsrec_open_vswitch_table_get(ctx.ovs_idl));
- struct chassis_index chassis_index;
- chassis_index_init(sbrec_chassis_table_get(ctx.ovnsb_idl),
- &chassis_index);
-
const struct sbrec_chassis *chassis = NULL;
if (chassis_id) {
chassis = chassis_run(&ctx,
@@ -701,7 +699,7 @@ main(int argc, char *argv[])
ovsrec_bridge_table_get(ctx.ovs_idl), br_int,
sbrec_chassis_table_get(ctx.ovnsb_idl), chassis_id);
bfd_calculate_active_tunnels(br_int, &active_tunnels);
- binding_run(&ctx,
+ binding_run(&ctx, sbrec_chassis_by_name,
sbrec_datapath_binding_by_key,
sbrec_port_binding_by_datapath,
sbrec_port_binding_by_name,
@@ -709,7 +707,7 @@ main(int argc, char *argv[])
ovsrec_qos_table_get(ctx.ovs_idl),
sbrec_port_binding_table_get(ctx.ovnsb_idl),
br_int, chassis,
- &chassis_index, &active_tunnels, &local_datapaths,
+ &active_tunnels, &local_datapaths,
&local_lports, &local_lport_ids);
}
if (br_int && chassis) {
@@ -730,14 +728,14 @@ main(int argc, char *argv[])
enum mf_field_id mff_ovn_geneve = ofctrl_run(br_int,
&pending_ct_zones);
- pinctrl_run(&ctx,
+ pinctrl_run(&ctx, sbrec_chassis_by_name,
sbrec_datapath_binding_by_key,
sbrec_port_binding_by_datapath,
sbrec_port_binding_by_key,
sbrec_port_binding_by_name,
sbrec_dns_table_get(ctx.ovnsb_idl),
sbrec_mac_binding_table_get(ctx.ovnsb_idl),
- br_int, chassis, &chassis_index,
+ br_int, chassis,
&local_datapaths, &active_tunnels);
update_ct_zones(&local_lports, &local_datapaths, &ct_zones,
ct_zone_bitmap, &pending_ct_zones);
@@ -749,31 +747,33 @@ main(int argc, char *argv[])
commit_ct_zones(br_int, &pending_ct_zones);
struct hmap flow_table = HMAP_INITIALIZER(&flow_table);
- lflow_run(sbrec_multicast_group_by_name_datapath,
+ lflow_run(sbrec_chassis_by_name,
+ sbrec_multicast_group_by_name_datapath,
sbrec_port_binding_by_name,
sbrec_dhcp_options_table_get(ctx.ovnsb_idl),
sbrec_dhcpv6_options_table_get(ctx.ovnsb_idl),
sbrec_logical_flow_table_get(ctx.ovnsb_idl),
sbrec_mac_binding_table_get(ctx.ovnsb_idl),
chassis,
- &chassis_index, &local_datapaths, &addr_sets,
+ &local_datapaths, &addr_sets,
&port_groups, &active_tunnels, &local_lport_ids,
&flow_table, &group_table, &meter_table);
if (chassis_id) {
- bfd_run(sbrec_port_binding_by_datapath,
+ bfd_run(sbrec_chassis_by_name,
+ sbrec_port_binding_by_datapath,
ovsrec_interface_table_get(ctx.ovs_idl),
- br_int, chassis, &local_datapaths,
- &chassis_index);
+ br_int, chassis, &local_datapaths);
}
physical_run(
+ sbrec_chassis_by_name,
sbrec_port_binding_by_name,
sbrec_multicast_group_table_get(ctx.ovnsb_idl),
sbrec_port_binding_table_get(ctx.ovnsb_idl),
mff_ovn_geneve,
br_int, chassis, &ct_zones,
&local_datapaths, &local_lports,
- &chassis_index, &active_tunnels,
+ &active_tunnels,
&flow_table);
stopwatch_stop(CONTROLLER_LOOP_STOPWATCH_NAME,
@@ -824,8 +824,6 @@ main(int argc, char *argv[])
free(pending_pkt.flow_s);
}
- chassis_index_destroy(&chassis_index);
-
sset_destroy(&local_lports);
sset_destroy(&local_lport_ids);
sset_destroy(&active_tunnels);
diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c
index eb2e35daf..dcf218342 100644
--- a/ovn/controller/physical.c
+++ b/ovn/controller/physical.c
@@ -291,10 +291,10 @@ load_logical_ingress_metadata(const struct sbrec_port_binding *binding,
}
static void
-consider_port_binding(struct ovsdb_idl_index *sbrec_port_binding_by_name,
+consider_port_binding(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_port_binding_by_name,
enum mf_field_id mff_ovn_geneve,
const struct simap *ct_zones,
- const struct chassis_index *chassis_index,
const struct sset *active_tunnels,
const struct hmap *local_datapaths,
const struct sbrec_port_binding *binding,
@@ -361,7 +361,7 @@ consider_port_binding(struct ovsdb_idl_index *sbrec_port_binding_by_name,
}
struct ovs_list *gateway_chassis
- = gateway_chassis_get_ordered(binding, chassis_index);
+ = gateway_chassis_get_ordered(sbrec_chassis_by_name, binding);
if (!strcmp(binding->type, "chassisredirect")
&& (binding->chassis == chassis
@@ -868,7 +868,8 @@ update_ofports(struct simap *old, struct simap *new)
}
void
-physical_run(struct ovsdb_idl_index *sbrec_port_binding_by_name,
+physical_run(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct sbrec_multicast_group_table *multicast_group_table,
const struct sbrec_port_binding_table *port_binding_table,
enum mf_field_id mff_ovn_geneve,
@@ -877,7 +878,6 @@ physical_run(struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct simap *ct_zones,
const struct hmap *local_datapaths,
const struct sset *local_lports,
- const struct chassis_index *chassis_index,
const struct sset *active_tunnels,
struct hmap *flow_table)
{
@@ -999,9 +999,10 @@ physical_run(struct ovsdb_idl_index *sbrec_port_binding_by_name,
* 64 for logical-to-physical translation. */
const struct sbrec_port_binding *binding;
SBREC_PORT_BINDING_TABLE_FOR_EACH (binding, port_binding_table) {
- consider_port_binding(sbrec_port_binding_by_name,
+ consider_port_binding(sbrec_chassis_by_name,
+ sbrec_port_binding_by_name,
mff_ovn_geneve, ct_zones,
- chassis_index, active_tunnels,
+ active_tunnels,
local_datapaths, binding, chassis,
&ofpacts, flow_table);
}
diff --git a/ovn/controller/physical.h b/ovn/controller/physical.h
index 4a070a7d0..8b737d171 100644
--- a/ovn/controller/physical.h
+++ b/ovn/controller/physical.h
@@ -27,10 +27,9 @@
#include "openvswitch/meta-flow.h"
-struct chassis_index;
struct controller_ctx;
struct hmap;
-struct ovsdb_idl;
+struct ovsdb_idl_index;
struct ovsrec_bridge;
struct simap;
struct sbrec_multicast_group_table;
@@ -45,7 +44,8 @@ struct sset;
#define OVN_GENEVE_LEN 4
void physical_register_ovs_idl(struct ovsdb_idl *);
-void physical_run(struct ovsdb_idl_index *sbrec_port_binding_by_name,
+void physical_run(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct sbrec_multicast_group_table *,
const struct sbrec_port_binding_table *,
enum mf_field_id mff_ovn_geneve,
@@ -54,7 +54,6 @@ void physical_run(struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct simap *ct_zones,
const struct hmap *local_datapaths,
const struct sset *local_lports,
- const struct chassis_index *chassis_index,
const struct sset *active_tunnels,
struct hmap *flow_table);
diff --git a/ovn/controller/pinctrl.c b/ovn/controller/pinctrl.c
index dcb90a39c..fbb90252a 100644
--- a/ovn/controller/pinctrl.c
+++ b/ovn/controller/pinctrl.c
@@ -78,11 +78,11 @@ static void init_send_garps(void);
static void destroy_send_garps(void);
static void send_garp_wait(void);
static void send_garp_run(
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct ovsrec_bridge *,
const struct sbrec_chassis *,
- const struct chassis_index *chassis_index,
const struct hmap *local_datapaths,
const struct sset *active_tunnels);
static void pinctrl_handle_nd_na(const struct flow *ip_flow,
@@ -1246,6 +1246,7 @@ pinctrl_recv(const struct sbrec_dns_table *dns_table,
void
pinctrl_run(struct controller_ctx *ctx,
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_datapath_binding_by_key,
struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_key,
@@ -1254,7 +1255,6 @@ pinctrl_run(struct controller_ctx *ctx,
const struct sbrec_mac_binding_table *mac_binding_table,
const struct ovsrec_bridge *br_int,
const struct sbrec_chassis *chassis,
- const struct chassis_index *chassis_index,
const struct hmap *local_datapaths,
const struct sset *active_tunnels)
{
@@ -1294,8 +1294,8 @@ pinctrl_run(struct controller_ctx *ctx,
run_put_mac_bindings(ctx, sbrec_datapath_binding_by_key,
sbrec_port_binding_by_key, mac_binding_table);
- send_garp_run(sbrec_port_binding_by_datapath,
- sbrec_port_binding_by_name, br_int, chassis, chassis_index,
+ send_garp_run(sbrec_chassis_by_name, sbrec_port_binding_by_datapath,
+ sbrec_port_binding_by_name, br_int, chassis,
local_datapaths, active_tunnels);
send_ipv6_ras(sbrec_port_binding_by_datapath,
sbrec_port_binding_by_name, local_datapaths);
@@ -2054,9 +2054,9 @@ get_localnet_vifs_l3gwports(
}
static bool
-pinctrl_is_chassis_resident(struct ovsdb_idl_index *sbrec_port_binding_by_name,
+pinctrl_is_chassis_resident(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct sbrec_chassis *chassis,
- const struct chassis_index *chassis_index,
const struct sset *active_tunnels,
const char *port_name)
{
@@ -2069,7 +2069,7 @@ pinctrl_is_chassis_resident(struct ovsdb_idl_index *sbrec_port_binding_by_name,
return pb->chassis == chassis;
} else {
struct ovs_list *gateway_chassis =
- gateway_chassis_get_ordered(pb, chassis_index);
+ gateway_chassis_get_ordered(sbrec_chassis_by_name, pb);
bool active = gateway_chassis_is_active(gateway_chassis,
chassis,
active_tunnels);
@@ -2145,12 +2145,12 @@ extract_addresses_with_port(const char *addresses,
}
static void
-consider_nat_address(struct ovsdb_idl_index *sbrec_port_binding_by_name,
+consider_nat_address(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_port_binding_by_name,
const char *nat_address,
const struct sbrec_port_binding *pb,
struct sset *nat_address_keys,
const struct sbrec_chassis *chassis,
- const struct chassis_index *chassis_index,
const struct sset *active_tunnels,
struct shash *nat_addresses)
{
@@ -2159,7 +2159,7 @@ consider_nat_address(struct ovsdb_idl_index *sbrec_port_binding_by_name,
if (!extract_addresses_with_port(nat_address, laddrs, &lport)
|| (!lport && !strcmp(pb->type, "patch"))
|| (lport && !pinctrl_is_chassis_resident(
- sbrec_port_binding_by_name, chassis, chassis_index,
+ sbrec_chassis_by_name, sbrec_port_binding_by_name, chassis,
active_tunnels, lport))) {
destroy_lport_addresses(laddrs);
free(laddrs);
@@ -2179,11 +2179,11 @@ consider_nat_address(struct ovsdb_idl_index *sbrec_port_binding_by_name,
}
static void
-get_nat_addresses_and_keys(struct ovsdb_idl_index *sbrec_port_binding_by_name,
+get_nat_addresses_and_keys(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_port_binding_by_name,
struct sset *nat_address_keys,
struct sset *local_l3gw_ports,
const struct sbrec_chassis *chassis,
- const struct chassis_index *chassis_index,
const struct sset *active_tunnels,
struct shash *nat_addresses)
{
@@ -2198,10 +2198,11 @@ get_nat_addresses_and_keys(struct ovsdb_idl_index *sbrec_port_binding_by_name,
if (pb->n_nat_addresses) {
for (int i = 0; i < pb->n_nat_addresses; i++) {
- consider_nat_address(sbrec_port_binding_by_name,
+ consider_nat_address(sbrec_chassis_by_name,
+ sbrec_port_binding_by_name,
pb->nat_addresses[i], pb,
nat_address_keys, chassis,
- chassis_index, active_tunnels,
+ active_tunnels,
nat_addresses);
}
} else {
@@ -2210,10 +2211,11 @@ get_nat_addresses_and_keys(struct ovsdb_idl_index *sbrec_port_binding_by_name,
const char *nat_addresses_options = smap_get(&pb->options,
"nat-addresses");
if (nat_addresses_options) {
- consider_nat_address(sbrec_port_binding_by_name,
+ consider_nat_address(sbrec_chassis_by_name,
+ sbrec_port_binding_by_name,
nat_addresses_options, pb,
nat_address_keys, chassis,
- chassis_index, active_tunnels,
+ active_tunnels,
nat_addresses);
}
}
@@ -2227,11 +2229,11 @@ send_garp_wait(void)
}
static void
-send_garp_run(struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
+send_garp_run(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_name,
const struct ovsrec_bridge *br_int,
const struct sbrec_chassis *chassis,
- const struct chassis_index *chassis_index,
const struct hmap *local_datapaths,
const struct sset *active_tunnels)
{
@@ -2249,9 +2251,10 @@ send_garp_run(struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
&localnet_vifs, &localnet_ofports,
&local_l3gw_ports);
- get_nat_addresses_and_keys(sbrec_port_binding_by_name,
+ get_nat_addresses_and_keys(sbrec_chassis_by_name,
+ sbrec_port_binding_by_name,
&nat_ip_keys, &local_l3gw_ports,
- chassis, chassis_index, active_tunnels,
+ chassis, active_tunnels,
&nat_addresses);
/* For deleted ports and deleted nat ips, remove from send_garp_data. */
struct shash_node *iter, *next;
diff --git a/ovn/controller/pinctrl.h b/ovn/controller/pinctrl.h
index 27f51d7de..19bfa88c8 100644
--- a/ovn/controller/pinctrl.h
+++ b/ovn/controller/pinctrl.h
@@ -22,7 +22,6 @@
#include "lib/sset.h"
#include "openvswitch/meta-flow.h"
-struct chassis_index;
struct controller_ctx;
struct hmap;
struct lport_index;
@@ -34,6 +33,7 @@ struct sbrec_mac_binding_table;
void pinctrl_init(void);
void pinctrl_run(struct controller_ctx *,
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_index *sbrec_datapath_binding_by_key,
struct ovsdb_idl_index *sbrec_port_binding_by_datapath,
struct ovsdb_idl_index *sbrec_port_binding_by_key,
@@ -41,7 +41,6 @@ void pinctrl_run(struct controller_ctx *,
const struct sbrec_dns_table *,
const struct sbrec_mac_binding_table *,
const struct ovsrec_bridge *, const struct sbrec_chassis *,
- const struct chassis_index *,
const struct hmap *local_datapaths,
const struct sset *active_tunnels);
void pinctrl_wait(struct controller_ctx *);
diff --git a/ovn/lib/chassis-index.c b/ovn/lib/chassis-index.c
index 5ead32a4b..a5dbf4ace 100644
--- a/ovn/lib/chassis-index.c
+++ b/ovn/lib/chassis-index.c
@@ -13,65 +13,29 @@
*/
#include <config.h>
-
-#include "openvswitch/hmap.h"
-#include "openvswitch/vlog.h"
-#include "ovn/actions.h"
#include "ovn/lib/chassis-index.h"
#include "ovn/lib/ovn-sb-idl.h"
-VLOG_DEFINE_THIS_MODULE(chassis_index);
-
-struct chassis {
- struct hmap_node name_node;
- const struct sbrec_chassis *db;
-};
-
-const struct sbrec_chassis *
-chassis_lookup_by_name(const struct chassis_index *chassis_index,
- const char *name)
+struct ovsdb_idl_index *
+chassis_index_create(struct ovsdb_idl *idl)
{
- const struct chassis *chassis;
- HMAP_FOR_EACH_WITH_HASH (chassis, name_node, hash_string(name, 0),
- &chassis_index->by_name) {
- if (!strcmp(chassis->db->name, name)) {
- return chassis->db;
- }
- }
- return NULL;
+ return ovsdb_idl_index_create1(idl, &sbrec_chassis_col_name);
}
-void
-chassis_index_init(const struct sbrec_chassis_table *chassis_table,
- struct chassis_index *chassis_index)
+/* Finds and returns the chassis with the given 'name', or NULL if no such
+ * chassis exists. */
+const struct sbrec_chassis *
+chassis_lookup_by_name(struct ovsdb_idl_index *sbrec_chassis_by_name,
+ const char *name)
{
- hmap_init(&chassis_index->by_name);
+ struct sbrec_chassis *target = sbrec_chassis_index_init_row(
+ sbrec_chassis_by_name);
+ sbrec_chassis_set_name(target, name);
- const struct sbrec_chassis *chassis;
- SBREC_CHASSIS_TABLE_FOR_EACH (chassis, chassis_table) {
- if (!chassis->name) {
- continue;
- }
- struct chassis *c = xmalloc(sizeof *c);
- hmap_insert(&chassis_index->by_name, &c->name_node,
- hash_string(chassis->name, 0));
- c->db = chassis;
- }
-}
-
-void
-chassis_index_destroy(struct chassis_index *chassis_index)
-{
- if (!chassis_index) {
- return;
- }
+ struct sbrec_chassis *retval = sbrec_chassis_index_find(
+ sbrec_chassis_by_name, target);
- /* Destroy all of the "struct chassis"s. */
- struct chassis *chassis, *next;
- HMAP_FOR_EACH_SAFE (chassis, next, name_node, &chassis_index->by_name) {
- hmap_remove(&chassis_index->by_name, &chassis->name_node);
- free(chassis);
- }
+ sbrec_chassis_index_destroy_row(target);
- hmap_destroy(&chassis_index->by_name);
+ return retval;
}
diff --git a/ovn/lib/chassis-index.h b/ovn/lib/chassis-index.h
index 59b3de7d4..d5e5df926 100644
--- a/ovn/lib/chassis-index.h
+++ b/ovn/lib/chassis-index.h
@@ -16,25 +16,11 @@
#ifndef OVN_CHASSIS_INDEX_H
#define OVN_CHASSIS_INDEX_H 1
-#include "openvswitch/hmap.h"
+struct ovsdb_idl;
-struct chassis_index {
- struct hmap by_name;
-};
+struct ovsdb_idl_index *chassis_index_create(struct ovsdb_idl *);
-struct sbrec_chassis_table;
-
-/* Finds and returns the chassis with the given 'name', or NULL if no such
- * chassis exists. */
-const struct sbrec_chassis *
-chassis_lookup_by_name(const struct chassis_index *chassis_index,
- const char *name);
-
-/* Initializes the chassis index out of the ovsdb_idl to SBDB */
-void chassis_index_init(const struct sbrec_chassis_table *,
- struct chassis_index *chassis_index);
-
-/* Free a chassis index from memory */
-void chassis_index_destroy(struct chassis_index *chassis_index);
+const struct sbrec_chassis *chassis_lookup_by_name(
+ struct ovsdb_idl_index *sbrec_chassis_by_name, const char *name);
#endif /* ovn/lib/chassis-index.h */
diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
index 151e64873..aa6a18f16 100644
--- a/ovn/northd/ovn-northd.c
+++ b/ovn/northd/ovn-northd.c
@@ -1731,9 +1731,9 @@ gateway_chassis_equal(const struct nbrec_gateway_chassis *nb_gwc,
static bool
sbpb_gw_chassis_needs_update(
- const struct sbrec_port_binding *port_binding,
- const struct nbrec_logical_router_port *lrp,
- const struct chassis_index *chassis_index)
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
+ const struct sbrec_port_binding *port_binding,
+ const struct nbrec_logical_router_port *lrp)
{
if (!lrp || !port_binding) {
return false;
@@ -1758,7 +1758,7 @@ sbpb_gw_chassis_needs_update(
}
const struct sbrec_chassis *chassis =
- chassis_lookup_by_name(chassis_index,
+ chassis_lookup_by_name(sbrec_chassis_by_name,
lrp->gateway_chassis[n]->chassis_name);
lrp_gwc_c[lrp_n_gateway_chassis] = chassis;
@@ -1815,8 +1815,8 @@ sbpb_gw_chassis_needs_update(
static void
copy_gw_chassis_from_nbrp_to_sbpb(
struct northd_context *ctx,
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
const struct nbrec_logical_router_port *lrp,
- const struct chassis_index *chassis_index,
const struct sbrec_port_binding *port_binding) {
if (!lrp || !port_binding || !lrp->n_gateway_chassis) {
@@ -1840,7 +1840,8 @@ copy_gw_chassis_from_nbrp_to_sbpb(
}
const struct sbrec_chassis *chassis =
- chassis_lookup_by_name(chassis_index, lrp_gwc->chassis_name);
+ chassis_lookup_by_name(sbrec_chassis_by_name,
+ lrp_gwc->chassis_name);
gw_chassis = xrealloc(gw_chassis, (n_gwc + 1) * sizeof *gw_chassis);
@@ -1861,8 +1862,8 @@ copy_gw_chassis_from_nbrp_to_sbpb(
static void
ovn_port_update_sbrec(struct northd_context *ctx,
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
const struct ovn_port *op,
- const struct chassis_index *chassis_index,
struct hmap *chassis_qdisc_queues)
{
sbrec_port_binding_set_datapath(op->sb, op->od->sb);
@@ -1893,10 +1894,11 @@ ovn_port_update_sbrec(struct northd_context *ctx,
}
if (op->nbrp->n_gateway_chassis) {
- if (sbpb_gw_chassis_needs_update(op->sb, op->nbrp,
- chassis_index)) {
- copy_gw_chassis_from_nbrp_to_sbpb(ctx, op->nbrp,
- chassis_index, op->sb);
+ if (sbpb_gw_chassis_needs_update(sbrec_chassis_by_name,
+ op->sb, op->nbrp)) {
+ copy_gw_chassis_from_nbrp_to_sbpb(ctx,
+ sbrec_chassis_by_name,
+ op->nbrp, op->sb);
}
} else if (redirect_chassis) {
@@ -1904,7 +1906,8 @@ ovn_port_update_sbrec(struct northd_context *ctx,
* to them, and for backwards compatibility convert them
* to a single Gateway_Chassis entry */
const struct sbrec_chassis *chassis =
- chassis_lookup_by_name(chassis_index, redirect_chassis);
+ chassis_lookup_by_name(sbrec_chassis_by_name,
+ redirect_chassis);
if (chassis) {
/* If we found the chassis, and the gw chassis on record
* differs from what we expect go ahead and update */
@@ -2105,8 +2108,9 @@ cleanup_mac_bindings(struct northd_context *ctx, struct hmap *ports)
* using the "struct ovn_datapath"s in 'datapaths' to look up logical
* datapaths. */
static void
-build_ports(struct northd_context *ctx, struct hmap *datapaths,
- const struct chassis_index *chassis_index, struct hmap *ports)
+build_ports(struct northd_context *ctx,
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
+ struct hmap *datapaths, struct hmap *ports)
{
struct ovs_list sb_only, nb_only, both;
struct hmap tag_alloc_table = HMAP_INITIALIZER(&tag_alloc_table);
@@ -2124,7 +2128,8 @@ build_ports(struct northd_context *ctx, struct hmap *datapaths,
if (op->nbsp) {
tag_alloc_create_new_tag(&tag_alloc_table, op->nbsp);
}
- ovn_port_update_sbrec(ctx, op, chassis_index, &chassis_qdisc_queues);
+ ovn_port_update_sbrec(ctx, sbrec_chassis_by_name,
+ op, &chassis_qdisc_queues);
add_tnlid(&op->od->port_tnlids, op->sb->tunnel_key);
if (op->sb->tunnel_key > op->od->port_key_hint) {
@@ -2140,7 +2145,8 @@ build_ports(struct northd_context *ctx, struct hmap *datapaths,
}
op->sb = sbrec_port_binding_insert(ctx->ovnsb_txn);
- ovn_port_update_sbrec(ctx, op, chassis_index, &chassis_qdisc_queues);
+ ovn_port_update_sbrec(ctx, sbrec_chassis_by_name, op,
+ &chassis_qdisc_queues);
sbrec_port_binding_set_logical_port(op->sb, op->key);
sbrec_port_binding_set_tunnel_key(op->sb, tunnel_key);
@@ -6544,7 +6550,8 @@ sync_dns_entries(struct northd_context *ctx, struct hmap *datapaths)
static void
-ovnnb_db_run(struct northd_context *ctx, struct chassis_index *chassis_index,
+ovnnb_db_run(struct northd_context *ctx,
+ struct ovsdb_idl_index *sbrec_chassis_by_name,
struct ovsdb_idl_loop *sb_loop)
{
if (!ctx->ovnsb_txn || !ctx->ovnnb_txn) {
@@ -6552,7 +6559,7 @@ ovnnb_db_run(struct northd_context *ctx, struct chassis_index *chassis_index,
}
struct hmap datapaths, ports, port_groups;
build_datapaths(ctx, &datapaths);
- build_ports(ctx, &datapaths, chassis_index, &ports);
+ build_ports(ctx, sbrec_chassis_by_name, &datapaths, &ports);
build_ipam(&datapaths, &ports);
build_port_group_lswitches(ctx, &port_groups, &ports);
build_lflows(ctx, &datapaths, &ports, &port_groups);
@@ -7188,6 +7195,9 @@ main(int argc, char *argv[])
ovsdb_idl_add_column(ovnsb_idl_loop.idl, &sbrec_chassis_col_nb_cfg);
ovsdb_idl_add_column(ovnsb_idl_loop.idl, &sbrec_chassis_col_name);
+ struct ovsdb_idl_index *sbrec_chassis_by_name
+ = chassis_index_create(ovnsb_idl_loop.idl);
+
/* Ensure that only a single ovn-northd is active in the deployment by
* acquiring a lock called "ovn_northd" on the southbound database
* and then only performing DB transactions if the lock is held. */
@@ -7214,14 +7224,8 @@ main(int argc, char *argv[])
had_lock = false;
}
- struct chassis_index chassis_index;
- bool destroy_chassis_index = false;
if (ovsdb_idl_has_lock(ovnsb_idl_loop.idl)) {
- chassis_index_init(sbrec_chassis_table_get(ovnsb_idl_loop.idl),
- &chassis_index);
- destroy_chassis_index = true;
-
- ovnnb_db_run(&ctx, &chassis_index, &ovnsb_idl_loop);
+ ovnnb_db_run(&ctx, sbrec_chassis_by_name, &ovnsb_idl_loop);
ovnsb_db_run(&ctx, &ovnsb_idl_loop);
if (ctx.ovnsb_txn) {
check_and_add_supported_dhcp_opts_to_sb_db(&ctx);
@@ -7242,10 +7246,6 @@ main(int argc, char *argv[])
if (should_service_stop()) {
exiting = true;
}
-
- if (destroy_chassis_index) {
- chassis_index_destroy(&chassis_index);
- }
}
unixctl_server_destroy(unixctl);