[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.