Mailing List Archive

[PATCH 11/18] xenstored: add NO_SOCKETS compilation option
From: Alex Zeffertt <alex.zeffertt@eu.citrix.com>

option for compiling xenstored without unix sockets to support running on mini-OS

Signed-off-by: Diego Ongaro <diego.ongaro@citrix.com>
Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
---
tools/xenstore/xenstored_core.c | 35 +++++++++++++++++++++++++++++++----
tools/xenstore/xs.c | 2 ++
tools/xenstore/xs_lib.c | 4 ++++
3 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
index 9e6c2c7..0623aac 100644
--- a/tools/xenstore/xenstored_core.c
+++ b/tools/xenstore/xenstored_core.c
@@ -19,9 +19,11 @@

#include <sys/types.h>
#include <sys/stat.h>
-#include <sys/socket.h>
#include <sys/select.h>
+#ifndef NO_SOCKETS
+#include <sys/socket.h>
#include <sys/un.h>
+#endif
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
@@ -308,7 +310,10 @@ static void set_fd(int fd, fd_set *set, int *max)
}


-static int initialize_set(fd_set *inset, fd_set *outset, int sock, int ro_sock,
+static int initialize_set(fd_set *inset, fd_set *outset,
+#ifndef NO_SOCKETS
+ int sock, int ro_sock,
+#endif
struct timeval **ptimeout)
{
static struct timeval zero_timeout = { 0 };
@@ -320,8 +325,10 @@ static int initialize_set(fd_set *inset, fd_set *outset, int sock, int ro_sock,
FD_ZERO(inset);
FD_ZERO(outset);

+#ifndef NO_SOCKETS
set_fd(sock, inset, &max);
set_fd(ro_sock, inset, &max);
+#endif
set_fd(reopen_log_pipe[0], inset, &max);

if (xce_handle != NULL)
@@ -343,12 +350,14 @@ static int initialize_set(fd_set *inset, fd_set *outset, int sock, int ro_sock,
return max;
}

+#ifndef NO_SOCKETS
static int destroy_fd(void *_fd)
{
int *fd = _fd;
close(*fd);
return 0;
}
+#endif

/* Is child a subnode of parent, or equal? */
bool is_child(const char *child, const char *parent)
@@ -1352,6 +1361,7 @@ struct connection *new_connection(connwritefn_t *write, connreadfn_t *read)
return new;
}

+#ifndef NO_SOCKETS
static int writefd(struct connection *conn, const void *data, unsigned int len)
{
int rc;
@@ -1406,6 +1416,7 @@ static void accept_connection(int sock, bool canwrite)
} else
close(fd);
}
+#endif

#define TDB_FLAGS 0

@@ -1752,8 +1763,11 @@ extern void dump_conn(struct connection *conn);

int main(int argc, char *argv[])
{
- int opt, *sock, *ro_sock, max;
+ int opt, max;
+#ifndef NO_SOCKETS
+ int *sock, *ro_sock;
struct sockaddr_un addr;
+#endif
fd_set inset, outset;
bool dofork = true;
bool outputpid = false;
@@ -1837,6 +1851,7 @@ int main(int argc, char *argv[])
if (!dofork)
talloc_enable_leak_report_full();

+#ifndef NO_SOCKETS
/* Create sockets for them to listen to. */
sock = talloc(talloc_autofree_context(), int);
*sock = socket(PF_UNIX, SOCK_STREAM, 0);
@@ -1848,10 +1863,12 @@ int main(int argc, char *argv[])
barf_perror("Could not create socket");
talloc_set_destructor(sock, destroy_fd);
talloc_set_destructor(ro_sock, destroy_fd);
+#endif

/* Don't kill us with SIGPIPE. */
signal(SIGPIPE, SIG_IGN);

+#ifndef NO_SOCKETS
/* FIXME: Be more sophisticated, don't mug running daemon. */
unlink(xs_daemon_socket());
unlink(xs_daemon_socket_ro());
@@ -1871,6 +1888,7 @@ int main(int argc, char *argv[])
if (listen(*sock, 1) != 0
|| listen(*ro_sock, 1) != 0)
barf_perror("Could not listen on sockets");
+#endif

if (pipe(reopen_log_pipe)) {
barf_perror("pipe");
@@ -1909,7 +1927,11 @@ int main(int argc, char *argv[])
evtchn_fd = xc_evtchn_fd(xce_handle);

/* Get ready to listen to the tools. */
+#ifndef NO_SOCKETS
max = initialize_set(&inset, &outset, *sock, *ro_sock, &timeout);
+#else
+ max = initialize_set(&inset, &outset, &timeout);
+#endif

/* Tell the kernel we're up and running. */
xenbus_notify_running();
@@ -1931,11 +1953,13 @@ int main(int argc, char *argv[])
reopen_log();
}

+#ifndef NO_SOCKETS
if (FD_ISSET(*sock, &inset))
accept_connection(*sock, true);

if (FD_ISSET(*ro_sock, &inset))
accept_connection(*ro_sock, false);
+#endif

if (evtchn_fd != -1 && FD_ISSET(evtchn_fd, &inset))
handle_event();
@@ -1977,7 +2001,10 @@ int main(int argc, char *argv[])
}
}

- max = initialize_set(&inset, &outset, *sock, *ro_sock,
+ max = initialize_set(&inset, &outset,
+#ifndef NO_SOCKETS
+ *sock, *ro_sock,
+#endif
&timeout);
}
}
diff --git a/tools/xenstore/xs.c b/tools/xenstore/xs.c
index 8e54fe0..119d945 100644
--- a/tools/xenstore/xs.c
+++ b/tools/xenstore/xs.c
@@ -271,10 +271,12 @@ struct xs_handle *xs_open(unsigned long flags)
{
struct xs_handle *xsh = NULL;

+#ifndef NO_SOCKETS
if (flags & XS_OPEN_READONLY)
xsh = get_handle(xs_daemon_socket_ro());
else
xsh = get_handle(xs_daemon_socket());
+#endif

if (!xsh && !(flags & XS_OPEN_SOCKETONLY))
xsh = get_handle(xs_domain_dev());
diff --git a/tools/xenstore/xs_lib.c b/tools/xenstore/xs_lib.c
index 03a9ee4..af3db6b 100644
--- a/tools/xenstore/xs_lib.c
+++ b/tools/xenstore/xs_lib.c
@@ -39,6 +39,7 @@ const char *xs_daemon_rundir(void)
return (s ? s : "/var/run/xenstored");
}

+#ifndef NO_SOCKETS
static const char *xs_daemon_path(void)
{
static char buf[PATH_MAX];
@@ -50,6 +51,7 @@ static const char *xs_daemon_path(void)
return NULL;
return buf;
}
+#endif

const char *xs_daemon_tdb(void)
{
@@ -58,6 +60,7 @@ const char *xs_daemon_tdb(void)
return buf;
}

+#ifndef NO_SOCKETS
const char *xs_daemon_socket(void)
{
return xs_daemon_path();
@@ -73,6 +76,7 @@ const char *xs_daemon_socket_ro(void)
return NULL;
return buf;
}
+#endif

const char *xs_domain_dev(void)
{
--
1.7.7.5


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH 11/18] xenstored: add NO_SOCKETS compilation option [ In reply to ]
On Wed, 2012-01-11 at 17:21 +0000, Daniel De Graaf wrote:
> @@ -308,7 +310,10 @@ static void set_fd(int fd, fd_set *set, int *max)
> }
>
>
> -static int initialize_set(fd_set *inset, fd_set *outset, int sock,
> int ro_sock,
> +static int initialize_set(fd_set *inset, fd_set *outset,
> +#ifndef NO_SOCKETS
> + int sock, int ro_sock,
> +#endif
> struct timeval **ptimeout)
> {
> static struct timeval zero_timeout = { 0 };

Rather than removing the argument why not simply accept -1 as a "no
sock" value and DTWT with that, this ought to reduce the amount of
ifdeffery substantially

Ian.



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
[PATCH 11/18] xenstored: add NO_SOCKETS compilation option [ In reply to ]
From: Alex Zeffertt <alex.zeffertt@eu.citrix.com>

option for compiling xenstored without unix sockets to support running on mini-OS

Signed-off-by: Diego Ongaro <diego.ongaro@citrix.com>
Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
---
tools/xenstore/xenstored_core.c | 22 +++++++++++++++++++++-
tools/xenstore/xs.c | 2 ++
tools/xenstore/xs_lib.c | 4 ++++
3 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
index 9e6c2c7..631bfe4 100644
--- a/tools/xenstore/xenstored_core.c
+++ b/tools/xenstore/xenstored_core.c
@@ -19,9 +19,11 @@

#include <sys/types.h>
#include <sys/stat.h>
-#include <sys/socket.h>
#include <sys/select.h>
+#ifndef NO_SOCKETS
+#include <sys/socket.h>
#include <sys/un.h>
+#endif
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
@@ -320,8 +322,10 @@ static int initialize_set(fd_set *inset, fd_set *outset, int sock, int ro_sock,
FD_ZERO(inset);
FD_ZERO(outset);

+#ifndef NO_SOCKETS
set_fd(sock, inset, &max);
set_fd(ro_sock, inset, &max);
+#endif
set_fd(reopen_log_pipe[0], inset, &max);

if (xce_handle != NULL)
@@ -343,12 +347,14 @@ static int initialize_set(fd_set *inset, fd_set *outset, int sock, int ro_sock,
return max;
}

+#ifndef NO_SOCKETS
static int destroy_fd(void *_fd)
{
int *fd = _fd;
close(*fd);
return 0;
}
+#endif

/* Is child a subnode of parent, or equal? */
bool is_child(const char *child, const char *parent)
@@ -1352,6 +1358,7 @@ struct connection *new_connection(connwritefn_t *write, connreadfn_t *read)
return new;
}

+#ifndef NO_SOCKETS
static int writefd(struct connection *conn, const void *data, unsigned int len)
{
int rc;
@@ -1406,6 +1413,7 @@ static void accept_connection(int sock, bool canwrite)
} else
close(fd);
}
+#endif

#define TDB_FLAGS 0

@@ -1753,7 +1761,11 @@ extern void dump_conn(struct connection *conn);
int main(int argc, char *argv[])
{
int opt, *sock, *ro_sock, max;
+#ifdef NO_SOCKETS
+ int minus_one = -1;
+#else
struct sockaddr_un addr;
+#endif
fd_set inset, outset;
bool dofork = true;
bool outputpid = false;
@@ -1837,6 +1849,9 @@ int main(int argc, char *argv[])
if (!dofork)
talloc_enable_leak_report_full();

+#ifdef NO_SOCKETS
+ sock = ro_sock = &minus_one;
+#else
/* Create sockets for them to listen to. */
sock = talloc(talloc_autofree_context(), int);
*sock = socket(PF_UNIX, SOCK_STREAM, 0);
@@ -1848,10 +1863,12 @@ int main(int argc, char *argv[])
barf_perror("Could not create socket");
talloc_set_destructor(sock, destroy_fd);
talloc_set_destructor(ro_sock, destroy_fd);
+#endif

/* Don't kill us with SIGPIPE. */
signal(SIGPIPE, SIG_IGN);

+#ifndef NO_SOCKETS
/* FIXME: Be more sophisticated, don't mug running daemon. */
unlink(xs_daemon_socket());
unlink(xs_daemon_socket_ro());
@@ -1871,6 +1888,7 @@ int main(int argc, char *argv[])
if (listen(*sock, 1) != 0
|| listen(*ro_sock, 1) != 0)
barf_perror("Could not listen on sockets");
+#endif

if (pipe(reopen_log_pipe)) {
barf_perror("pipe");
@@ -1931,11 +1949,13 @@ int main(int argc, char *argv[])
reopen_log();
}

+#ifndef NO_SOCKETS
if (FD_ISSET(*sock, &inset))
accept_connection(*sock, true);

if (FD_ISSET(*ro_sock, &inset))
accept_connection(*ro_sock, false);
+#endif

if (evtchn_fd != -1 && FD_ISSET(evtchn_fd, &inset))
handle_event();
diff --git a/tools/xenstore/xs.c b/tools/xenstore/xs.c
index 8e54fe0..119d945 100644
--- a/tools/xenstore/xs.c
+++ b/tools/xenstore/xs.c
@@ -271,10 +271,12 @@ struct xs_handle *xs_open(unsigned long flags)
{
struct xs_handle *xsh = NULL;

+#ifndef NO_SOCKETS
if (flags & XS_OPEN_READONLY)
xsh = get_handle(xs_daemon_socket_ro());
else
xsh = get_handle(xs_daemon_socket());
+#endif

if (!xsh && !(flags & XS_OPEN_SOCKETONLY))
xsh = get_handle(xs_domain_dev());
diff --git a/tools/xenstore/xs_lib.c b/tools/xenstore/xs_lib.c
index 03a9ee4..af3db6b 100644
--- a/tools/xenstore/xs_lib.c
+++ b/tools/xenstore/xs_lib.c
@@ -39,6 +39,7 @@ const char *xs_daemon_rundir(void)
return (s ? s : "/var/run/xenstored");
}

+#ifndef NO_SOCKETS
static const char *xs_daemon_path(void)
{
static char buf[PATH_MAX];
@@ -50,6 +51,7 @@ static const char *xs_daemon_path(void)
return NULL;
return buf;
}
+#endif

const char *xs_daemon_tdb(void)
{
@@ -58,6 +60,7 @@ const char *xs_daemon_tdb(void)
return buf;
}

+#ifndef NO_SOCKETS
const char *xs_daemon_socket(void)
{
return xs_daemon_path();
@@ -73,6 +76,7 @@ const char *xs_daemon_socket_ro(void)
return NULL;
return buf;
}
+#endif

const char *xs_domain_dev(void)
{
--
1.7.7.5


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH 11/18] xenstored: add NO_SOCKETS compilation option [ In reply to ]
On Thu, 2012-01-12 at 23:35 +0000, Daniel De Graaf wrote:
> From: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
>
> option for compiling xenstored without unix sockets to support running on mini-OS
>
> Signed-off-by: Diego Ongaro <diego.ongaro@citrix.com>
> Signed-off-by: Alex Zeffertt <alex.zeffertt@eu.citrix.com>
> Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>

I guess this about as good as it gets, you could avoid some of the
ifdef's with "if (*sock != -1)" type constructions but I don't know that
this is necessarily better.

Acked-by: Ian Campbell <ian.campbell@citrix.com>

> ---
> tools/xenstore/xenstored_core.c | 22 +++++++++++++++++++++-
> tools/xenstore/xs.c | 2 ++
> tools/xenstore/xs_lib.c | 4 ++++
> 3 files changed, 27 insertions(+), 1 deletions(-)
>
> diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
> index 9e6c2c7..631bfe4 100644
> --- a/tools/xenstore/xenstored_core.c
> +++ b/tools/xenstore/xenstored_core.c
> @@ -19,9 +19,11 @@
>
> #include <sys/types.h>
> #include <sys/stat.h>
> -#include <sys/socket.h>
> #include <sys/select.h>
> +#ifndef NO_SOCKETS
> +#include <sys/socket.h>
> #include <sys/un.h>
> +#endif
> #include <sys/time.h>
> #include <time.h>
> #include <unistd.h>
> @@ -320,8 +322,10 @@ static int initialize_set(fd_set *inset, fd_set *outset, int sock, int ro_sock,
> FD_ZERO(inset);
> FD_ZERO(outset);
>
> +#ifndef NO_SOCKETS
> set_fd(sock, inset, &max);
> set_fd(ro_sock, inset, &max);
> +#endif
> set_fd(reopen_log_pipe[0], inset, &max);
>
> if (xce_handle != NULL)
> @@ -343,12 +347,14 @@ static int initialize_set(fd_set *inset, fd_set *outset, int sock, int ro_sock,
> return max;
> }
>
> +#ifndef NO_SOCKETS
> static int destroy_fd(void *_fd)
> {
> int *fd = _fd;
> close(*fd);
> return 0;
> }
> +#endif
>
> /* Is child a subnode of parent, or equal? */
> bool is_child(const char *child, const char *parent)
> @@ -1352,6 +1358,7 @@ struct connection *new_connection(connwritefn_t *write, connreadfn_t *read)
> return new;
> }
>
> +#ifndef NO_SOCKETS
> static int writefd(struct connection *conn, const void *data, unsigned int len)
> {
> int rc;
> @@ -1406,6 +1413,7 @@ static void accept_connection(int sock, bool canwrite)
> } else
> close(fd);
> }
> +#endif
>
> #define TDB_FLAGS 0
>
> @@ -1753,7 +1761,11 @@ extern void dump_conn(struct connection *conn);
> int main(int argc, char *argv[])
> {
> int opt, *sock, *ro_sock, max;
> +#ifdef NO_SOCKETS
> + int minus_one = -1;
> +#else
> struct sockaddr_un addr;
> +#endif
> fd_set inset, outset;
> bool dofork = true;
> bool outputpid = false;
> @@ -1837,6 +1849,9 @@ int main(int argc, char *argv[])
> if (!dofork)
> talloc_enable_leak_report_full();
>
> +#ifdef NO_SOCKETS
> + sock = ro_sock = &minus_one;
> +#else
> /* Create sockets for them to listen to. */
> sock = talloc(talloc_autofree_context(), int);
> *sock = socket(PF_UNIX, SOCK_STREAM, 0);
> @@ -1848,10 +1863,12 @@ int main(int argc, char *argv[])
> barf_perror("Could not create socket");
> talloc_set_destructor(sock, destroy_fd);
> talloc_set_destructor(ro_sock, destroy_fd);
> +#endif
>
> /* Don't kill us with SIGPIPE. */
> signal(SIGPIPE, SIG_IGN);
>
> +#ifndef NO_SOCKETS
> /* FIXME: Be more sophisticated, don't mug running daemon. */
> unlink(xs_daemon_socket());
> unlink(xs_daemon_socket_ro());
> @@ -1871,6 +1888,7 @@ int main(int argc, char *argv[])
> if (listen(*sock, 1) != 0
> || listen(*ro_sock, 1) != 0)
> barf_perror("Could not listen on sockets");
> +#endif
>
> if (pipe(reopen_log_pipe)) {
> barf_perror("pipe");
> @@ -1931,11 +1949,13 @@ int main(int argc, char *argv[])
> reopen_log();
> }
>
> +#ifndef NO_SOCKETS
> if (FD_ISSET(*sock, &inset))
> accept_connection(*sock, true);
>
> if (FD_ISSET(*ro_sock, &inset))
> accept_connection(*ro_sock, false);
> +#endif
>
> if (evtchn_fd != -1 && FD_ISSET(evtchn_fd, &inset))
> handle_event();
> diff --git a/tools/xenstore/xs.c b/tools/xenstore/xs.c
> index 8e54fe0..119d945 100644
> --- a/tools/xenstore/xs.c
> +++ b/tools/xenstore/xs.c
> @@ -271,10 +271,12 @@ struct xs_handle *xs_open(unsigned long flags)
> {
> struct xs_handle *xsh = NULL;
>
> +#ifndef NO_SOCKETS
> if (flags & XS_OPEN_READONLY)
> xsh = get_handle(xs_daemon_socket_ro());
> else
> xsh = get_handle(xs_daemon_socket());
> +#endif
>
> if (!xsh && !(flags & XS_OPEN_SOCKETONLY))
> xsh = get_handle(xs_domain_dev());
> diff --git a/tools/xenstore/xs_lib.c b/tools/xenstore/xs_lib.c
> index 03a9ee4..af3db6b 100644
> --- a/tools/xenstore/xs_lib.c
> +++ b/tools/xenstore/xs_lib.c
> @@ -39,6 +39,7 @@ const char *xs_daemon_rundir(void)
> return (s ? s : "/var/run/xenstored");
> }
>
> +#ifndef NO_SOCKETS
> static const char *xs_daemon_path(void)
> {
> static char buf[PATH_MAX];
> @@ -50,6 +51,7 @@ static const char *xs_daemon_path(void)
> return NULL;
> return buf;
> }
> +#endif
>
> const char *xs_daemon_tdb(void)
> {
> @@ -58,6 +60,7 @@ const char *xs_daemon_tdb(void)
> return buf;
> }
>
> +#ifndef NO_SOCKETS
> const char *xs_daemon_socket(void)
> {
> return xs_daemon_path();
> @@ -73,6 +76,7 @@ const char *xs_daemon_socket_ro(void)
> return NULL;
> return buf;
> }
> +#endif
>
> const char *xs_domain_dev(void)
> {



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel