Re: [ovs-dev] [PATCH v2 1/3] unixctl: Make path to unixctl_server socket available to the client.
On Wed, Aug 08, 2018 at 04:13:39PM -0400, Aaron Conole wrote: > Ben Pfaff writes: > > @@ -429,10 +426,17 @@ unixctl_server_destroy(struct unixctl_server *server) > > kill_connection(conn); > > } > > > > +free (server->path); > > Just a small nit, this looks like gnu style. Oops. I've written a lot of GNU code, sometimes it comes naturally. ___ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Re: [ovs-dev] [PATCH v2 1/3] unixctl: Make path to unixctl_server socket available to the client.
Ben Pfaff writes: > Acked-by: Alin Gabriel Serdean > Signed-off-by: Ben Pfaff > --- > lib/unixctl.c | 52 > lib/unixctl.h | 2 ++ > tests/daemon.at | 4 ++-- > 3 files changed, 32 insertions(+), 26 deletions(-) > > diff --git a/lib/unixctl.c b/lib/unixctl.c > index bd9c1caeedef..9b3b0671f33c 100644 > --- a/lib/unixctl.c > +++ b/lib/unixctl.c > @@ -56,6 +56,7 @@ struct unixctl_conn { > struct unixctl_server { > struct pstream *listener; > struct ovs_list conns; > +char *path; > }; > > static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); > @@ -216,48 +217,44 @@ unixctl_command_reply_error(struct unixctl_conn *conn, > const char *error) > int > unixctl_server_create(const char *path, struct unixctl_server **serverp) > { > -struct unixctl_server *server; > -struct pstream *listener; > -char *punix_path; > -int error; > - > *serverp = NULL; > if (path && !strcmp(path, "none")) { > return 0; > } > > -if (path) { > -char *abs_path; > -abs_path = abs_file_name(ovs_rundir(), path); > -punix_path = xasprintf("punix:%s", abs_path); > -free(abs_path); > -} else { > -#ifndef _WIN32 > -punix_path = xasprintf("punix:%s/%s.%ld.ctl", ovs_rundir(), > - program_name, (long int) getpid()); > +#ifdef _WIN32 > +enum { WINDOWS = 1 }; > #else > -punix_path = xasprintf("punix:%s/%s.ctl", ovs_rundir(), > program_name); > +enum { WINDOWS = 0 }; > #endif > -} > > -error = pstream_open(punix_path, &listener, 0); > +long int pid = getpid(); > +char *abs_path > += (path ? abs_file_name(ovs_rundir(), path) > + : WINDOWS ? xasprintf("%s/%s.ctl", ovs_rundir(), program_name) > + : xasprintf("%s/%s.%ld.ctl", ovs_rundir(), program_name, pid)); > + > +struct pstream *listener; > +char *punix_path = xasprintf("punix:%s", abs_path); > +int error = pstream_open(punix_path, &listener, 0); > +free(punix_path); > + > if (error) { > -ovs_error(error, "could not initialize control socket %s", > punix_path); > -goto exit; > +ovs_error(error, "%s: could not initialize control socket", > abs_path); > +free(abs_path); > +return error; > } > > unixctl_command_register("list-commands", "", 0, 0, > unixctl_list_commands, > NULL); > unixctl_command_register("version", "", 0, 0, unixctl_version, NULL); > > -server = xmalloc(sizeof *server); > +struct unixctl_server *server = xmalloc(sizeof *server); > server->listener = listener; > +server->path = abs_path; > ovs_list_init(&server->conns); > *serverp = server; > - > -exit: > -free(punix_path); > -return error; > +return 0; > } > > static void > @@ -429,10 +426,17 @@ unixctl_server_destroy(struct unixctl_server *server) > kill_connection(conn); > } > > +free (server->path); Just a small nit, this looks like gnu style. > pstream_close(server->listener); > free(server); > } > } > + > +const char * > +unixctl_server_get_path(const struct unixctl_server *server) > +{ > +return server ? server->path : NULL; > +} > > /* On POSIX based systems, connects to a unixctl server socket. 'path' > should > * be the name of a unixctl server socket. If it does not start with '/', it > diff --git a/lib/unixctl.h b/lib/unixctl.h > index ce43893c6a7d..4562dbc49113 100644 > --- a/lib/unixctl.h > +++ b/lib/unixctl.h > @@ -28,6 +28,8 @@ void unixctl_server_run(struct unixctl_server *); > void unixctl_server_wait(struct unixctl_server *); > void unixctl_server_destroy(struct unixctl_server *); > > +const char *unixctl_server_get_path(const struct unixctl_server *); > + > /* Client for Unix domain socket control connection. */ > struct jsonrpc; > int unixctl_client_create(const char *path, struct jsonrpc **client); > diff --git a/tests/daemon.at b/tests/daemon.at > index 952d5a7c7bbe..b379fa83f9aa 100644 > --- a/tests/daemon.at > +++ b/tests/daemon.at > @@ -149,7 +149,7 @@ AT_SETUP([daemon --detach startup errors]) > AT_CAPTURE_FILE([pid]) > OVSDB_INIT([db]) > AT_CHECK([ovsdb-server --detach --no-chdir --pidfile > --unixctl=nonexistent/unixctl db], [1], [], [stderr]) > -AT_CHECK([grep 'ovsdb-server: could not initialize control socket' stderr], > +AT_CHECK([grep 'could not initialize control socket' stderr], >[0], [ignore]) > AT_CHECK([test ! -s pid]) > AT_CLEANUP > @@ -159,7 +159,7 @@ AT_SKIP_IF([test "$IS_WIN32" = "yes"]) > AT_CAPTURE_FILE([pid]) > OVSDB_INIT([db]) > AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --monitor > --unixctl=nonexistent/unixctl db], [1], [], [stderr]) > -AT_CHECK([grep 'ovsdb-server: could not initialize control socket' stderr], > +AT_CHECK([grep 'could not initialize control socke
Re: [ovs-dev] [PATCH v2 1/3] unixctl: Make path to unixctl_server socket available to the client.
Acked-by: Mark Michelson On 08/03/2018 01:54 PM, Ben Pfaff wrote: Acked-by: Alin Gabriel Serdean Signed-off-by: Ben Pfaff --- lib/unixctl.c | 52 lib/unixctl.h | 2 ++ tests/daemon.at | 4 ++-- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/lib/unixctl.c b/lib/unixctl.c index bd9c1caeedef..9b3b0671f33c 100644 --- a/lib/unixctl.c +++ b/lib/unixctl.c @@ -56,6 +56,7 @@ struct unixctl_conn { struct unixctl_server { struct pstream *listener; struct ovs_list conns; +char *path; }; static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); @@ -216,48 +217,44 @@ unixctl_command_reply_error(struct unixctl_conn *conn, const char *error) int unixctl_server_create(const char *path, struct unixctl_server **serverp) { -struct unixctl_server *server; -struct pstream *listener; -char *punix_path; -int error; - *serverp = NULL; if (path && !strcmp(path, "none")) { return 0; } -if (path) { -char *abs_path; -abs_path = abs_file_name(ovs_rundir(), path); -punix_path = xasprintf("punix:%s", abs_path); -free(abs_path); -} else { -#ifndef _WIN32 -punix_path = xasprintf("punix:%s/%s.%ld.ctl", ovs_rundir(), - program_name, (long int) getpid()); +#ifdef _WIN32 +enum { WINDOWS = 1 }; #else -punix_path = xasprintf("punix:%s/%s.ctl", ovs_rundir(), program_name); +enum { WINDOWS = 0 }; #endif -} -error = pstream_open(punix_path, &listener, 0); +long int pid = getpid(); +char *abs_path += (path ? abs_file_name(ovs_rundir(), path) + : WINDOWS ? xasprintf("%s/%s.ctl", ovs_rundir(), program_name) + : xasprintf("%s/%s.%ld.ctl", ovs_rundir(), program_name, pid)); + +struct pstream *listener; +char *punix_path = xasprintf("punix:%s", abs_path); +int error = pstream_open(punix_path, &listener, 0); +free(punix_path); + if (error) { -ovs_error(error, "could not initialize control socket %s", punix_path); -goto exit; +ovs_error(error, "%s: could not initialize control socket", abs_path); +free(abs_path); +return error; } unixctl_command_register("list-commands", "", 0, 0, unixctl_list_commands, NULL); unixctl_command_register("version", "", 0, 0, unixctl_version, NULL); -server = xmalloc(sizeof *server); +struct unixctl_server *server = xmalloc(sizeof *server); server->listener = listener; +server->path = abs_path; ovs_list_init(&server->conns); *serverp = server; - -exit: -free(punix_path); -return error; +return 0; } static void @@ -429,10 +426,17 @@ unixctl_server_destroy(struct unixctl_server *server) kill_connection(conn); } +free (server->path); pstream_close(server->listener); free(server); } } + +const char * +unixctl_server_get_path(const struct unixctl_server *server) +{ +return server ? server->path : NULL; +} /* On POSIX based systems, connects to a unixctl server socket. 'path' should * be the name of a unixctl server socket. If it does not start with '/', it diff --git a/lib/unixctl.h b/lib/unixctl.h index ce43893c6a7d..4562dbc49113 100644 --- a/lib/unixctl.h +++ b/lib/unixctl.h @@ -28,6 +28,8 @@ void unixctl_server_run(struct unixctl_server *); void unixctl_server_wait(struct unixctl_server *); void unixctl_server_destroy(struct unixctl_server *); +const char *unixctl_server_get_path(const struct unixctl_server *); + /* Client for Unix domain socket control connection. */ struct jsonrpc; int unixctl_client_create(const char *path, struct jsonrpc **client); diff --git a/tests/daemon.at b/tests/daemon.at index 952d5a7c7bbe..b379fa83f9aa 100644 --- a/tests/daemon.at +++ b/tests/daemon.at @@ -149,7 +149,7 @@ AT_SETUP([daemon --detach startup errors]) AT_CAPTURE_FILE([pid]) OVSDB_INIT([db]) AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --unixctl=nonexistent/unixctl db], [1], [], [stderr]) -AT_CHECK([grep 'ovsdb-server: could not initialize control socket' stderr], +AT_CHECK([grep 'could not initialize control socket' stderr], [0], [ignore]) AT_CHECK([test ! -s pid]) AT_CLEANUP @@ -159,7 +159,7 @@ AT_SKIP_IF([test "$IS_WIN32" = "yes"]) AT_CAPTURE_FILE([pid]) OVSDB_INIT([db]) AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --monitor --unixctl=nonexistent/unixctl db], [1], [], [stderr]) -AT_CHECK([grep 'ovsdb-server: could not initialize control socket' stderr], +AT_CHECK([grep 'could not initialize control socket' stderr], [0], [ignore]) AT_CHECK([test ! -s pid]) AT_CLEANUP ___ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev
[ovs-dev] [PATCH v2 1/3] unixctl: Make path to unixctl_server socket available to the client.
Acked-by: Alin Gabriel Serdean Signed-off-by: Ben Pfaff --- lib/unixctl.c | 52 lib/unixctl.h | 2 ++ tests/daemon.at | 4 ++-- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/lib/unixctl.c b/lib/unixctl.c index bd9c1caeedef..9b3b0671f33c 100644 --- a/lib/unixctl.c +++ b/lib/unixctl.c @@ -56,6 +56,7 @@ struct unixctl_conn { struct unixctl_server { struct pstream *listener; struct ovs_list conns; +char *path; }; static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5); @@ -216,48 +217,44 @@ unixctl_command_reply_error(struct unixctl_conn *conn, const char *error) int unixctl_server_create(const char *path, struct unixctl_server **serverp) { -struct unixctl_server *server; -struct pstream *listener; -char *punix_path; -int error; - *serverp = NULL; if (path && !strcmp(path, "none")) { return 0; } -if (path) { -char *abs_path; -abs_path = abs_file_name(ovs_rundir(), path); -punix_path = xasprintf("punix:%s", abs_path); -free(abs_path); -} else { -#ifndef _WIN32 -punix_path = xasprintf("punix:%s/%s.%ld.ctl", ovs_rundir(), - program_name, (long int) getpid()); +#ifdef _WIN32 +enum { WINDOWS = 1 }; #else -punix_path = xasprintf("punix:%s/%s.ctl", ovs_rundir(), program_name); +enum { WINDOWS = 0 }; #endif -} -error = pstream_open(punix_path, &listener, 0); +long int pid = getpid(); +char *abs_path += (path ? abs_file_name(ovs_rundir(), path) + : WINDOWS ? xasprintf("%s/%s.ctl", ovs_rundir(), program_name) + : xasprintf("%s/%s.%ld.ctl", ovs_rundir(), program_name, pid)); + +struct pstream *listener; +char *punix_path = xasprintf("punix:%s", abs_path); +int error = pstream_open(punix_path, &listener, 0); +free(punix_path); + if (error) { -ovs_error(error, "could not initialize control socket %s", punix_path); -goto exit; +ovs_error(error, "%s: could not initialize control socket", abs_path); +free(abs_path); +return error; } unixctl_command_register("list-commands", "", 0, 0, unixctl_list_commands, NULL); unixctl_command_register("version", "", 0, 0, unixctl_version, NULL); -server = xmalloc(sizeof *server); +struct unixctl_server *server = xmalloc(sizeof *server); server->listener = listener; +server->path = abs_path; ovs_list_init(&server->conns); *serverp = server; - -exit: -free(punix_path); -return error; +return 0; } static void @@ -429,10 +426,17 @@ unixctl_server_destroy(struct unixctl_server *server) kill_connection(conn); } +free (server->path); pstream_close(server->listener); free(server); } } + +const char * +unixctl_server_get_path(const struct unixctl_server *server) +{ +return server ? server->path : NULL; +} /* On POSIX based systems, connects to a unixctl server socket. 'path' should * be the name of a unixctl server socket. If it does not start with '/', it diff --git a/lib/unixctl.h b/lib/unixctl.h index ce43893c6a7d..4562dbc49113 100644 --- a/lib/unixctl.h +++ b/lib/unixctl.h @@ -28,6 +28,8 @@ void unixctl_server_run(struct unixctl_server *); void unixctl_server_wait(struct unixctl_server *); void unixctl_server_destroy(struct unixctl_server *); +const char *unixctl_server_get_path(const struct unixctl_server *); + /* Client for Unix domain socket control connection. */ struct jsonrpc; int unixctl_client_create(const char *path, struct jsonrpc **client); diff --git a/tests/daemon.at b/tests/daemon.at index 952d5a7c7bbe..b379fa83f9aa 100644 --- a/tests/daemon.at +++ b/tests/daemon.at @@ -149,7 +149,7 @@ AT_SETUP([daemon --detach startup errors]) AT_CAPTURE_FILE([pid]) OVSDB_INIT([db]) AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --unixctl=nonexistent/unixctl db], [1], [], [stderr]) -AT_CHECK([grep 'ovsdb-server: could not initialize control socket' stderr], +AT_CHECK([grep 'could not initialize control socket' stderr], [0], [ignore]) AT_CHECK([test ! -s pid]) AT_CLEANUP @@ -159,7 +159,7 @@ AT_SKIP_IF([test "$IS_WIN32" = "yes"]) AT_CAPTURE_FILE([pid]) OVSDB_INIT([db]) AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --monitor --unixctl=nonexistent/unixctl db], [1], [], [stderr]) -AT_CHECK([grep 'ovsdb-server: could not initialize control socket' stderr], +AT_CHECK([grep 'could not initialize control socket' stderr], [0], [ignore]) AT_CHECK([test ! -s pid]) AT_CLEANUP -- 2.16.1 ___ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev