[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 11/18] xenstored: add NO_SOCKETS compilation option
From: Alex Zeffertt <alex.zeffertt@xxxxxxxxxxxxx> option for compiling xenstored without unix sockets to support running on mini-OS Signed-off-by: Diego Ongaro <diego.ongaro@xxxxxxxxxx> Signed-off-by: Alex Zeffertt <alex.zeffertt@xxxxxxxxxxxxx> Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx> --- 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@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |