[ovs-dev] [PATCH] ovn-northd: Add appctl support.
Alex Wang
alexw at nicira.com
Thu May 21 22:20:48 UTC 2015
This commit adds appctl support to ovn-northd and the 'exit' command.
The 'exit' command can be used in autotest for stopping the ovn-northd.
Signed-off-by: Alex Wang <alexw at nicira.com>
---
ovn/northd/ovn-northd.c | 35 +++++++++++++++++++++++++++++++++--
1 file changed, 33 insertions(+), 2 deletions(-)
diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
index cfad6be..2676b0d 100644
--- a/ovn/northd/ovn-northd.c
+++ b/ovn/northd/ovn-northd.c
@@ -32,12 +32,15 @@
#include "poll-loop.h"
#include "stream.h"
#include "stream-ssl.h"
+#include "unixctl.h"
#include "util.h"
#include "uuid.h"
#include "openvswitch/vlog.h"
VLOG_DEFINE_THIS_MODULE(ovn_northd);
+static unixctl_cb_func ovn_northd_exit;
+
struct northd_context {
struct ovsdb_idl *ovnnb_idl;
struct ovsdb_idl *ovnsb_idl;
@@ -767,6 +770,9 @@ main(int argc, char *argv[])
};
bool ovnnb_changes_pending = false;
bool ovn_changes_pending = false;
+ struct unixctl_server *unixctl;
+ int retval;
+ bool exiting;
fatal_ignore_sigpipe();
set_program_name(argv[0]);
@@ -774,7 +780,15 @@ main(int argc, char *argv[])
vlog_set_levels(&VLM_reconnect, VLF_ANY_DESTINATION, VLL_WARN);
parse_options(argc, argv);
- daemonize();
+ daemonize_start();
+
+ retval = unixctl_server_create(NULL, &unixctl);
+ if (retval) {
+ exit(EXIT_FAILURE);
+ }
+ unixctl_command_register("exit", "", 0, 0, ovn_northd_exit, &exiting);
+
+ daemonize_complete();
nbrec_init();
sbrec_init();
@@ -820,9 +834,11 @@ main(int argc, char *argv[])
ovnnb_seqno = ovsdb_idl_get_seqno(ovnnb_idl);
ovn_seqno = ovsdb_idl_get_seqno(ovnsb_idl);
- for (;;) {
+ exiting = false;
+ while (!exiting) {
ovsdb_idl_run(ovnnb_idl);
ovsdb_idl_run(ovnsb_idl);
+ unixctl_server_run(unixctl);
if (!ovsdb_idl_is_alive(ovnnb_idl)) {
int retval = ovsdb_idl_get_last_error(ovnnb_idl);
@@ -935,12 +951,27 @@ main(int argc, char *argv[])
if (ctx.ovnsb_txn) {
ovsdb_idl_txn_wait(ctx.ovnsb_txn);
}
+ unixctl_server_wait(unixctl);
+ if (exiting) {
+ poll_immediate_wake();
+ }
poll_block();
}
}
+ unixctl_server_destroy(unixctl);
ovsdb_idl_destroy(ovnsb_idl);
ovsdb_idl_destroy(ovnnb_idl);
exit(res);
}
+
+static void
+ovn_northd_exit(struct unixctl_conn *conn, int argc OVS_UNUSED,
+ const char *argv[] OVS_UNUSED, void *exiting_)
+{
+ bool *exiting = exiting_;
+ *exiting = true;
+
+ unixctl_command_reply(conn, NULL);
+}
--
1.7.9.5
More information about the dev
mailing list