Signed-off-by: Justin Pettit <jpet...@ovn.org> --- ovn/controller/ovn-controller.8.xml | 5 +++++ ovn/controller/ovn-controller.c | 30 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+)
diff --git a/ovn/controller/ovn-controller.8.xml b/ovn/controller/ovn-controller.8.xml index 7d8fa66d7313..2e4e53d6b1b1 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 62caace247a8..008f81d70eeb 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; @@ -1054,6 +1057,33 @@ meter_table_list(struct unixctl_conn *conn, int argc OVS_UNUSED, ds_destroy(&ds); } +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_) -- 2.17.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev