summaryrefslogtreecommitdiff
path: root/ovn
diff options
context:
space:
mode:
authorJustin Pettit <jpettit@ovn.org>2018-07-01 23:33:48 -0700
committerJustin Pettit <jpettit@ovn.org>2018-07-30 17:57:13 -0700
commit441fef6bf89178735ac0c3eeddedd385ae812e94 (patch)
treeac27cbf7fa7fe5e21ba1ca72479cfbf97032b9e2 /ovn
parent1aa1d9889a968658ec44f532c195124cb6571ae9 (diff)
downloadopenvswitch-441fef6bf89178735ac0c3eeddedd385ae812e94.tar.gz
ovn-controller: Add "group-table-list" ovs-appctl command.
Signed-off-by: Justin Pettit <jpettit@ovn.org> Acked-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to 'ovn')
-rw-r--r--ovn/controller/ovn-controller.8.xml5
-rw-r--r--ovn/controller/ovn-controller.c30
2 files changed, 35 insertions, 0 deletions
diff --git a/ovn/controller/ovn-controller.8.xml b/ovn/controller/ovn-controller.8.xml
index 7d8fa66d7..2e4e53d6b 100644
--- a/ovn/controller/ovn-controller.8.xml
+++ b/ovn/controller/ovn-controller.8.xml
@@ -374,6 +374,11 @@
Lists each meter table entry and its local meter id.
</dd>
+ <dt><code>group-table-list</code></dt>
+ <dd>
+ Lists each group table entry and its local group id.
+ </dd>
+
<dt><code>inject-pkt</code> <var>microflow</var></dt>
<dd>
<p>
diff --git a/ovn/controller/ovn-controller.c b/ovn/controller/ovn-controller.c
index 62caace24..008f81d70 100644
--- a/ovn/controller/ovn-controller.c
+++ b/ovn/controller/ovn-controller.c
@@ -66,6 +66,7 @@ VLOG_DEFINE_THIS_MODULE(main);
static unixctl_cb_func ovn_controller_exit;
static unixctl_cb_func ct_zone_list;
static unixctl_cb_func meter_table_list;
+static unixctl_cb_func group_table_list;
static unixctl_cb_func inject_pkt;
#define DEFAULT_BRIDGE_NAME "br-int"
@@ -566,6 +567,8 @@ main(int argc, char *argv[])
/* Initialize group ids for loadbalancing. */
struct ovn_extend_table group_table;
ovn_extend_table_init(&group_table);
+ unixctl_command_register("group-table-list", "", 0, 0,
+ group_table_list, &group_table);
/* Initialize meter ids for QoS. */
struct ovn_extend_table meter_table;
@@ -1055,6 +1058,33 @@ meter_table_list(struct unixctl_conn *conn, int argc OVS_UNUSED,
}
static void
+group_table_list(struct unixctl_conn *conn, int argc OVS_UNUSED,
+ const char *argv[] OVS_UNUSED, void *group_table_)
+{
+ struct ovn_extend_table *group_table = group_table_;
+ struct ds ds = DS_EMPTY_INITIALIZER;
+ struct simap groups = SIMAP_INITIALIZER(&groups);
+
+ struct ovn_extend_table_info *m_installed, *next_group;
+ EXTEND_TABLE_FOR_EACH_INSTALLED (m_installed, next_group, group_table) {
+ simap_put(&groups, m_installed->name, m_installed->table_id);
+ }
+
+ const struct simap_node **nodes = simap_sort(&groups);
+ size_t n_nodes = simap_count(&groups);
+ for (size_t i = 0; i < n_nodes; i++) {
+ const struct simap_node *node = nodes[i];
+ ds_put_format(&ds, "%s: %d\n", node->name, node->data);
+ }
+
+ free(nodes);
+ simap_destroy(&groups);
+
+ unixctl_command_reply(conn, ds_cstr(&ds));
+ ds_destroy(&ds);
+}
+
+static void
inject_pkt(struct unixctl_conn *conn, int argc OVS_UNUSED,
const char *argv[], void *pending_pkt_)
{