WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] g/c unused xcs.

# HG changeset patch
# User cl349@xxxxxxxxxxxxxxxxxxxx
# Node ID 38c5199155fc111f3209438b4474775a1736120f
# Parent  4e4aac33809faf1344b897b517ae5cfc9f7883f7
g/c unused xcs.
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>

diff -r 4e4aac33809f -r 38c5199155fc .hgignore
--- a/.hgignore Wed Sep  7 18:37:55 2005
+++ b/.hgignore Wed Sep  7 19:01:05 2005
@@ -147,8 +147,6 @@
 ^tools/vtpm_manager/manager/vtpm_managerd
 ^tools/web-shutdown\.tap$
 ^tools/x2d2/minixend$
-^tools/xcs/xcs$
-^tools/xcs/xcsdump$
 ^tools/xcutils/xc_restore$
 ^tools/xcutils/xc_save$
 ^tools/xenstat/xentop/xentop$
@@ -166,7 +164,6 @@
 ^tools/xenstore/xs_test$
 ^tools/xenstore/xs_watch_stress$
 ^tools/xentrace/xentrace$
-^tools/xfrd/xfrd$
 ^xen/BLOG$
 ^xen/TAGS$
 ^xen/arch/x86/asm-offsets\.s$
diff -r 4e4aac33809f -r 38c5199155fc tools/Makefile
--- a/tools/Makefile    Wed Sep  7 18:37:55 2005
+++ b/tools/Makefile    Wed Sep  7 19:01:05 2005
@@ -7,7 +7,6 @@
 SUBDIRS += misc
 SUBDIRS += examples
 SUBDIRS += xentrace
-SUBDIRS += xcs
 SUBDIRS += xcutils
 SUBDIRS += firmware
 SUBDIRS += security
diff -r 4e4aac33809f -r 38c5199155fc tools/Rules.mk
--- a/tools/Rules.mk    Wed Sep  7 18:37:55 2005
+++ b/tools/Rules.mk    Wed Sep  7 19:01:05 2005
@@ -4,7 +4,6 @@
 
 XEN_XC             = $(XEN_ROOT)/tools/python/xen/lowlevel/xc
 XEN_LIBXC          = $(XEN_ROOT)/tools/libxc
-XEN_XCS            = $(XEN_ROOT)/tools/xcs
 XEN_XENSTORE       = $(XEN_ROOT)/tools/xenstore
 XEN_LIBXENSTAT     = $(XEN_ROOT)/tools/xenstat/libxenstat/src
 
diff -r 4e4aac33809f -r 38c5199155fc tools/examples/init.d/xend
--- a/tools/examples/init.d/xend        Wed Sep  7 18:37:55 2005
+++ b/tools/examples/init.d/xend        Wed Sep  7 19:01:05 2005
@@ -11,7 +11,7 @@
        exit 0
 fi
 
-# Wait for Xend and xcs to be up
+# Wait for Xend to be up
 function await_daemons_up
 {
        i=1
diff -r 4e4aac33809f -r 38c5199155fc tools/misc/xend
--- a/tools/misc/xend   Wed Sep  7 18:37:55 2005
+++ b/tools/misc/xend   Wed Sep  7 19:01:05 2005
@@ -25,11 +25,6 @@
 import signal
 import time
 import commands
-
-XCS_PATH    = "/var/lib/xen/xcs_socket"
-XCS_EXEC    = "/usr/sbin/xcs"
-XCS_PIDFILE = "/var/run/xcs.pid"
-XCS_ARGS    = (XCS_EXEC, "-p", XCS_PIDFILE)
 
 # add fallback path for non-native python path installs if needed
 sys.path.append('/usr/lib/python')
@@ -70,52 +65,6 @@
         hline()
         raise CheckError("invalid user")
 
-def xcs_running():
-    """ See if the control switch is running.
-    """        
-    s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-    try:
-        s.connect( (XCS_PATH) )
-        s.close()
-    except:
-        try:
-            os.remove(XCS_PIDFILE)
-        except:
-            pass
-       return 0
-    return 1
-    
-def start_xcs():
-    if (not xcs_running()):
-        if os.fork() == 0 :
-            if not os.path.isdir(os.path.dirname(XCS_PATH)):
-                os.makedirs(os.path.dirname(XCS_PATH))
-            try:
-                os.execvp(XCS_EXEC, XCS_ARGS)
-            except:
-                hline()
-                msg("Tried to start xcs, but failed. Is it installed?")
-                hline()
-                raise CheckError("couldn't start xcs")
-        for n in range(10) :
-            if (xcs_running()):
-                break
-            time.sleep(0.1)
-        else :
-                hline()
-                msg("Failed to start the control interface switch.")
-                hline()
-                raise CheckError("xcs not running")
-            
-def stop_xcs():
-    try:
-       xcs_pidfile = open(XCS_PIDFILE)
-        xcs_pid = int(xcs_pidfile.read().strip())
-        os.kill(xcs_pid, signal.SIGTERM)
-        xcs_pidfile.close()
-    except:
-       return    
-
 def start_xenstored():
     XENSTORED_TRACE = os.getenv("XENSTORED_TRACE")
     cmd = "/usr/sbin/xenstored --pid-file=/var/run/xenstore.pid"
@@ -141,19 +90,16 @@
         pid, status = os.wait()
         return status >> 8
     elif sys.argv[1] == 'start':
-        start_xcs()
         start_xenstored()
         start_consoled()
         return daemon.start()
     elif sys.argv[1] == 'trace_start':
-        start_xcs()
         start_xenstored()
         start_consoled()
         return daemon.start(trace=1)
     elif sys.argv[1] == 'stop':
         return daemon.stop()
     elif sys.argv[1] == 'restart':
-        start_xcs()
         start_xenstored()
         start_consoled()
         return daemon.stop() or daemon.start()
diff -r 4e4aac33809f -r 38c5199155fc tools/xenstore/Makefile
--- a/tools/xenstore/Makefile   Wed Sep  7 18:37:55 2005
+++ b/tools/xenstore/Makefile   Wed Sep  7 19:01:05 2005
@@ -15,7 +15,6 @@
 BASECFLAGS+= -O3 $(PROFILE)
 #BASECFLAGS+= -I$(XEN_ROOT)/tools
 BASECFLAGS+= -I$(XEN_ROOT)/tools/libxc
-BASECFLAGS+= -I$(XEN_ROOT)/tools/xcs
 BASECFLAGS+= -I$(XEN_ROOT)/xen/include/public
 BASECFLAGS+= -I.
 BASECFLAGS+= -I$(XEN_ROOT)/linux-2.6-xen-sparse/include/asm-xen/linux-public
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/Makefile
--- a/tools/xcs/Makefile        Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,48 +0,0 @@
-# Makefile for XCS
-# Andrew Warfield, 2004
-
-XEN_ROOT=../..
-include $(XEN_ROOT)/tools/Rules.mk
-
-XCS_INSTALL_DIR = /usr/sbin
-
-INSTALL         = install
-INSTALL_PROG    = $(INSTALL) -m0755
-INSTALL_DIR     = $(INSTALL) -d -m0755
-
-CFLAGS   += -Wall -Werror -g3 -D _XOPEN_SOURCE=600
-
-CFLAGS  += -I $(XEN_XC)
-CFLAGS  += -I $(XEN_LIBXC)
-
-SRCS    :=
-SRCS    += ctrl_interface.c
-SRCS    += bindings.c
-SRCS    += connection.c
-SRCS    += evtchn.c
-SRCS    += xcs.c
-
-HDRS     = $(wildcard *.h)
-OBJS     = $(patsubst %.c,%.o,$(SRCS))
-BIN      = xcs
-
-all: $(BIN) xcsdump
-
-clean:
-       $(RM) *.a *.so *.o *.rpm $(BIN) xcsdump
-
-xcsdump: xcsdump.c dump.c
-       $(CC) $(CFLAGS) -o xcsdump xcsdump.c -L$(XEN_LIBXC) \
-              ctrl_interface.c evtchn.c dump.c -lxenctrl
-
-$(BIN): $(OBJS)
-       $(CC) $(CFLAGS) $^ -o $@ -L$(XEN_LIBXC) -lxenctrl 
-
-$(OBJS): $(HDRS)
-
-install: xcs xcsdump
-       $(INSTALL_DIR) -p $(DESTDIR)/$(XCS_INSTALL_DIR)
-       $(INSTALL_DIR) -p $(DESTDIR)/usr/include
-       $(INSTALL_PROG) xcs $(DESTDIR)/$(XCS_INSTALL_DIR)
-       $(INSTALL_PROG) xcsdump $(DESTDIR)/$(XCS_INSTALL_DIR)
-       $(INSTALL_PROG) xcs_proto.h $(DESTDIR)/usr/include
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/bindings.c
--- a/tools/xcs/bindings.c      Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,179 +0,0 @@
-/* bindings.c
- *
- * Manage subscriptions for the control interface switch.
- *
- * (c) 2004, Andrew Warfield
- *
- */
-
-/* Interfaces:
- *
- * xcs_bind   (port, type, connection)
- *   - Register connection to receive messages of this type.
- * xcs_unbind (port, type, connection)
- *   - Remove an existing registration. (Must be an exact match)
- * xcs_lookup (port, type)
- *   - Return a list of connections matching a registration.
- * 
- * - All connections have a connection.bindings list of current bindings.
- * - (port, type) pairs may be wildcarded with -1.
- */
- 
-#include <stdio.h>
-#include <stdlib.h> 
-#include <errno.h>
-#include <string.h>
-#include "xcs.h"
-
-
-typedef struct binding_ent_st {
-    connection_t          *con;
-    struct binding_ent_st *next;
-} binding_ent_t;
-
-#define BINDING_TABLE_SIZE       1024
-
-static binding_ent_t *binding_table[BINDING_TABLE_SIZE];
-        
-#define PORT_WILD(_ent) ((_ent)->port == PORT_WILDCARD)
-#define TYPE_WILD(_ent) ((_ent)->type == TYPE_WILDCARD)
-#define FULLY_WILD(_ent) (PORT_WILD(_ent) && TYPE_WILD(_ent))
-
-#define BINDING_HASH(_key) \
-    ((((_key)->port * 11) ^ (_key)->type) % BINDING_TABLE_SIZE)
-    
-    
-void init_bindings(void)
-{
-    memset(binding_table, 0, sizeof(binding_table));
-}
-
-static int table_add(binding_ent_t *table[],
-                            connection_t *con, 
-                            binding_key_t *key)
-{
-    binding_ent_t **curs, *ent;
-        
-    curs = &table[BINDING_HASH(key)];
-    
-    while (*curs != NULL) {
-        if ((*curs)->con == con) {
-            DPRINTF("Tried to add an ent that already existed.\n");
-            goto done;
-        }
-        curs = &(*curs)->next;
-    }
-    
-    if (connection_add_binding(con, key) != 0)
-    {
-       DPRINTF("couldn't add binding on connection (%lu)\n", con->id);
-       goto fail;
-    }
-    ent = (binding_ent_t *)malloc(sizeof(binding_ent_t));
-    if (ent == 0) {
-       DPRINTF("couldn't alloc binding ent!\n");
-       goto fail;
-    }
-    ent->con = con;
-    ent->next = NULL;
-    *curs = ent;
-    
-done:
-    return 0;
-
-fail:
-    return -1;
-}
-
-
-static inline int binding_has_colliding_hashes(connection_t *con, 
-                                               binding_key_t *key)
-{
-    int hash, count = 0;
-    binding_key_ent_t *ent;
-    
-    ent = con->bindings; 
-    hash = BINDING_HASH(key);
-    
-    while (ent != NULL) {
-        if (BINDING_HASH(&ent->key) == hash) count ++;
-        ent = ent->next;
-    }
-    
-    return (count > 1);
-}
-static int table_remove(binding_ent_t *table[],
-                            connection_t *con, 
-                            binding_key_t *key)
-{
-    binding_ent_t **curs, *ent;
-    
-    if (!binding_has_colliding_hashes(con, key))
-    {
-    
-        curs = &table[BINDING_HASH(key)];
-
-        while ((*curs != NULL) && ((*curs)->con != con))
-           curs = &(*curs)->next;
-
-        if (*curs != NULL) {
-           ent = *curs;
-           *curs = (*curs)->next;
-           free(ent);
-        }
-    }
-    
-    connection_remove_binding(con, key);
-    
-    return 0;    
-}
-
-int xcs_bind(connection_t *con, int port, u16 type)
-{
-    binding_key_t  key;
-    
-    key.port = port;
-    key.type = type;
-    
-    return table_add(binding_table, con, &key);  
-}
-
-int xcs_unbind(connection_t *con, int port, u16 type)
-{
-    binding_key_t  key;
-    
-    key.port = port;
-    key.type = type;
-    
-    return table_remove(binding_table, con, &key); 
-}
-
-
-static void for_each_binding(binding_ent_t *list, binding_key_t *key, 
-                void (*f)(connection_t *, void *), void *arg)
-{
-    while (list != NULL) 
-    {
-        if (connection_has_binding(list->con, key))
-            f(list->con, arg);
-        list = list->next;
-    }  
-}
-
-void xcs_lookup(int port, u16 type, void (*f)(connection_t *, void *), 
-                void *arg)
-{
-    binding_key_t  key;
-            
-    key.port  = port; key.type = type;
-    for_each_binding(binding_table[BINDING_HASH(&key)], &key, f, arg);
-            
-    key.port  = port; key.type = TYPE_WILDCARD;
-    for_each_binding(binding_table[BINDING_HASH(&key)], &key, f, arg);
-            
-    key.port  = PORT_WILDCARD; key.type = type;
-    for_each_binding(binding_table[BINDING_HASH(&key)], &key, f, arg);
-            
-    key.port  = PORT_WILDCARD; key.type = TYPE_WILDCARD;
-    for_each_binding(binding_table[BINDING_HASH(&key)], &key, f, arg);
-}
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/connection.c
--- a/tools/xcs/connection.c    Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,157 +0,0 @@
-/*
- * connection.c
- *
- * State associated with a client connection to xcs.
- *
- * Copyright (c) 2004, Andrew Warfield
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "xcs.h"
-
-connection_t *connection_list = NULL;
-
-#define CONNECTED(_c) (((_c)->ctrl_fd != -1) || ((_c)->data_fd != -1))
-
-connection_t *get_con_by_session(unsigned long session_id)
-{
-    connection_t **c, *ent = NULL;
-    
-    c = &connection_list;
-    
-    DPRINTF("looking for id: %lu : %lu\n", session_id, (*c)->id);
-    
-    while (*c != NULL) 
-    {
-        if ((*c)->id == session_id) 
-            return (*c);
-        c = &(*c)->next;
-    }
-    
-    return ent;
-}
-
-connection_t *connection_new()
-{
-    connection_t *con;
-    
-    con = (connection_t *)malloc(sizeof(connection_t));
-    if (con == NULL)
-    {
-        DPRINTF("couldn't allocate a new connection\n");
-        return NULL;
-    }
-    
-    con->bindings = NULL;
-    con->data_fd = -1;
-    con->ctrl_fd = -1;
-    
-    /* connections need a unique session id. 
-     * - this approach probably gets fixed later, but for the moment
-     * is unique, and clearly identifies a connection.
-     */
-    con->id = (unsigned long)con;
-    
-    /* add it to the connection list */
-    con->next = connection_list;
-    connection_list = con;
-    
-    return (con);
-}
-
-void connection_free(connection_t *con)
-{
-    /* first free all subscribed bindings: */
-    
-    while (con->bindings != NULL)
-        xcs_unbind(con, con->bindings->key.port, con->bindings->key.type);
-    
-    /* now free the connection. */
-    free(con);
-}
-    
-int connection_add_binding(connection_t *con, binding_key_t *key)
-{
-    binding_key_ent_t *key_ent;
-    
-    key_ent = (binding_key_ent_t *)malloc(sizeof(binding_key_ent_t));
-    if (key_ent == NULL)
-    {
-        DPRINTF("couldn't alloc key in connection_add_binding\n");
-        return -1;    
-    }
-    
-    key_ent->key = *key;
-    key_ent->next = con->bindings;
-    con->bindings = key_ent;
-    
-    return 0;
-}
-
-int connection_remove_binding(connection_t *con, binding_key_t *key)
-{
-    binding_key_ent_t *key_ent;
-    binding_key_ent_t **curs = &con->bindings;
-    
-    while ((*curs != NULL) && (!BINDING_KEYS_EQUAL(&(*curs)->key, key)))
-        curs = &(*curs)->next;
-    
-    if (*curs != NULL) {
-        key_ent = *curs;
-        *curs = (*curs)->next;
-        free(key_ent);
-    }
-    
-    return 0;   
-}
-
-
-int connection_has_binding(connection_t *con, binding_key_t *key)
-{
-    binding_key_ent_t *ent;
-    int ret = 0;
-    
-    ent = con->bindings;
-    
-    while (ent != NULL) 
-    {
-        if (BINDING_KEYS_EQUAL(key, &ent->key))
-        {
-            ret = 1;
-            break;
-        }
-        ent = ent->next;
-    }
-    
-    return ret;
-}
-
-
-void gc_connection_list(void)
-{
-    connection_t **c, *ent = NULL;
-    struct timeval now, delta;
-
-    c = &connection_list;
-    gettimeofday(&now, NULL);
-
-    while ( *c != NULL )
-    {
-        if ( !CONNECTED(*c) )
-        {
-            timersub(&now, &(*c)->disconnect_time, &delta);
-            if ( delta.tv_sec >= XCS_SESSION_TIMEOUT )
-            {
-                DPRINTF("        : Freeing connection %lu after %lds\n", 
-                     (*c)->id, delta.tv_sec);
-                ent = *c;
-                *c = (*c)->next;
-                connection_free(ent);
-                continue;
-            }
-        }
-        c = &(*c)->next;
-    }
-}
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/ctrl_interface.c
--- a/tools/xcs/ctrl_interface.c        Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,258 +0,0 @@
-/* control_interface.c
- *
- * Interfaces to control message rings to VMs.
- *
- * Most of this is directly based on the original xu interface to python 
- * written by Keir Fraser.
- *
- * (c) 2004, Andrew Warfield
- *
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/mman.h>
-#include <errno.h>
-#include "xcs.h"
-
-static int xc_handle = -1;
-
-/* Called at start-of-day when using the control channel interface. */
-int ctrl_chan_init(void)
-{
-    if ( (xc_handle = xc_interface_open()) == -1 )
-    {
-        DPRINTF("Could not open Xen control interface");
-        return -1;
-    }
-    
-    return 0;
-}
-
-static control_if_t *map_control_interface(int fd, unsigned long pfn,
-                                          u32 dom)
-{
-    char *vaddr = xc_map_foreign_range( fd, dom, PAGE_SIZE,
-                                       PROT_READ|PROT_WRITE, pfn );
-    if ( vaddr == NULL )
-        return NULL;
-    return (control_if_t *)(vaddr + 2048);
-}
-
-static void unmap_control_interface(int fd, control_if_t *c)
-{
-    char *vaddr = (char *)c - 2048;
-    (void)munmap(vaddr, PAGE_SIZE);
-}
-
-int ctrl_chan_notify(control_channel_t *cc)
-{
-    return xc_evtchn_send(xc_handle, cc->local_port);
-}
-
-int ctrl_chan_read_request(control_channel_t *cc, xcs_control_msg_t *dmsg)
-{
-    control_msg_t     *smsg;
-    RING_IDX          c = cc->tx_ring.req_cons;
-
-    if ( !RING_HAS_UNCONSUMED_REQUESTS(&cc->tx_ring) )
-    {
-        DPRINTF("no request to read\n");
-        return -1;
-    }
-    
-    rmb(); /* make sure we see the data associated with the request */
-    smsg = RING_GET_REQUEST(&cc->tx_ring, c);
-    memcpy(&dmsg->msg, smsg, sizeof(*smsg));
-    if ( dmsg->msg.length > sizeof(dmsg->msg.msg) )
-        dmsg->msg.length = sizeof(dmsg->msg.msg);
-    cc->tx_ring.req_cons++;
-    return 0;
-}
-
-int ctrl_chan_write_request(control_channel_t *cc, 
-                            xcs_control_msg_t *smsg)
-{
-    control_msg_t *dmsg;
-    RING_IDX       p = cc->rx_ring.req_prod_pvt;
-    
-    if ( RING_FULL(&cc->rx_ring) )
-    {
-        DPRINTF("no space to write request");
-        return -ENOSPC;
-    }
-
-    dmsg = RING_GET_REQUEST(&cc->rx_ring, p);
-    memcpy(dmsg, &smsg->msg, sizeof(*dmsg));
-
-    wmb();
-    cc->rx_ring.req_prod_pvt++;
-    RING_PUSH_REQUESTS(&cc->rx_ring);
-    
-    return 0;
-}
-
-int ctrl_chan_read_response(control_channel_t *cc, xcs_control_msg_t *dmsg)
-{
-    control_msg_t     *smsg;
-    RING_IDX          c = cc->rx_ring.rsp_cons;
-    
-    if ( !RING_HAS_UNCONSUMED_RESPONSES(&cc->rx_ring) )
-    {
-        DPRINTF("no response to read");
-        return -1;
-    }
-
-    rmb(); /* make sure we see the data associated with the request */
-    smsg = RING_GET_RESPONSE(&cc->rx_ring, c);
-    memcpy(&dmsg->msg, smsg, sizeof(*smsg));
-    if ( dmsg->msg.length > sizeof(dmsg->msg.msg) )
-        dmsg->msg.length = sizeof(dmsg->msg.msg);
-    cc->rx_ring.rsp_cons++;
-    return 0;
-}
-
-int ctrl_chan_write_response(control_channel_t *cc, 
-                             xcs_control_msg_t *smsg)
-{
-    control_msg_t  *dmsg;
-    RING_IDX        p = cc->tx_ring.rsp_prod_pvt;
-
-    /* akw: if the ring is synchronous, you should never need this test! */
-    /* (but it was in the original code... )                             */
-    if ( cc->tx_ring.req_cons == cc->tx_ring.rsp_prod_pvt )
-    {
-        DPRINTF("no space to write response");
-        return -ENOSPC;
-    }
-
-    dmsg = RING_GET_RESPONSE(&cc->tx_ring, p);
-    memcpy(dmsg, &smsg->msg, sizeof(*dmsg));
-
-    wmb();
-    cc->tx_ring.rsp_prod_pvt++;
-    RING_PUSH_RESPONSES(&cc->tx_ring);
-    
-    return 0;
-}
-
-int ctrl_chan_request_to_read(control_channel_t *cc)
-{
-    return (RING_HAS_UNCONSUMED_REQUESTS(&cc->tx_ring));
-}
-
-int ctrl_chan_space_to_write_request(control_channel_t *cc)
-{
-    return (!(RING_FULL(&cc->rx_ring)));
-}
-
-int ctrl_chan_response_to_read(control_channel_t *cc)
-{
-    return (RING_HAS_UNCONSUMED_RESPONSES(&cc->rx_ring));
-}
-
-int ctrl_chan_space_to_write_response(control_channel_t *cc)
-{
-    /* again, there is something fishy here. */
-    return ( cc->tx_ring.req_cons != cc->tx_ring.rsp_prod_pvt );
-}
-
-int ctrl_chan_connect(control_channel_t *cc)
-{
-    xc_dominfo_t info;
-
-    if ( cc->connected )
-    {
-       return 0;
-    }
-
-    if ( (xc_domain_getinfo(xc_handle, cc->remote_dom, 1, &info) != 1) ||
-         (info.domid != cc->remote_dom) )
-    {
-        DPRINTF("Failed to obtain domain status");
-        return -1;
-    }
-
-    cc->interface = 
-        map_control_interface(xc_handle, info.shared_info_frame,
-                             cc->remote_dom);
-
-    if ( cc->interface == NULL )
-    {
-        DPRINTF("Failed to map domain control interface");
-        return -1;
-    }
-
-    /* Synchronise ring indexes. */
-    BACK_RING_ATTACH(&cc->tx_ring, &cc->interface->tx_ring, CONTROL_RING_MEM);
-    FRONT_RING_ATTACH(&cc->rx_ring, &cc->interface->rx_ring, CONTROL_RING_MEM);
-
-    cc->connected = 1;
-
-    return 0;
-}
-
-void ctrl_chan_disconnect(control_channel_t *cc)
-{
-    if ( cc->connected )
-       unmap_control_interface(xc_handle, cc->interface);
-    cc->connected = 0;
-}
-
-
-control_channel_t *ctrl_chan_new(u32 dom, int local_port, int remote_port)
-{
-    control_channel_t *cc;
-   
-    cc = (control_channel_t *)malloc(sizeof(control_channel_t));
-    if ( cc == NULL ) return NULL;
-    
-    cc->connected  = 0;
-    cc->remote_dom = dom;
-
-    if ( dom == 0 )
-    {
-       goto fail;
-    }
-    else if ( xc_evtchn_bind_interdomain(xc_handle, 
-                                         DOMID_SELF, dom, 
-                                         &local_port, &remote_port) != 0 )
-    {
-        DPRINTF("Could not open channel to domain");
-        goto fail;
-    }
-
-    cc->local_port  = local_port;
-    cc->remote_port = remote_port;
-
-    if ( ctrl_chan_connect(cc) != 0 )
-        goto fail;
-
-    return cc;
-    
- fail:
-    if ( dom != 0 )
-        (void)xc_evtchn_close(xc_handle, DOMID_SELF, local_port);
- 
-    free(cc);
-    
-    return NULL;        
-}
-
-void ctrl_chan_free(control_channel_t *cc)
-{
-    ctrl_chan_disconnect(cc);
-    if ( cc->remote_dom != 0 )
-        (void)xc_evtchn_close(xc_handle, DOMID_SELF, cc->local_port);
-    free(cc);
-}
-
-
-/* other libxc commands: */
-
-int ctrl_chan_bind_virq(int virq, int *port)
-{
-    return xc_evtchn_bind_virq(xc_handle, virq, port);
-}
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/dump.c
--- a/tools/xcs/dump.c  Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,506 +0,0 @@
-/*\
- *  Copyright (C) International Business Machines  Corp., 2005
- *  Author(s): Anthony Liguori <aliguori@xxxxxxxxxx>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 2 of the License.
- * 
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- * 
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-\*/
-
-#include <stdio.h>
-#include <stdarg.h>
-
-#include "dump.h"
-
-#define str(a) # a
-#define error(a, ...) do { \
- _error("%s:%s():L%d: " a, __FILE__, __FUNCTION__, __LINE__, ## __VA_ARGS__);\
-  exit(1); \
-} while (0)
-#define warn(a, ...) do { \
- _error("%s:%s():L%d: " a, __FILE__, __FUNCTION__, __LINE__, ## __VA_ARGS__);\
-} while (0)
-#define debug(a, ...) do { \
- _error(a, ## __VA_ARGS__);\
-} while (0)
-
-void _error(const char *fmt, ...);
-
-#define debug_begin(a, b) debug("CMSG_" a "_" b " {")
-#define debug_end(a, b) debug("}")
-#define debug_field(a, b, c) debug("\t." str(b) " = " c, a->b)
-#define debug_field_mac(a, b) \
-  debug("\t." str(b) " = %.2x:%.2x:%.2x:%.2x:%.2x:%.2x", \
-        a->b[0], a->b[1], a->b[2], a->b[3], a->b[4], a->b[5])
-
-#define debug_dump(a, b, c) debug_hex("\t." str(b) " = ", a->b, a->c)
-
-#include <stdint.h>
-#include <string.h>
-#include <stdio.h>
-#include <ctype.h>
-
-static int strcount(const char *str, char ch)
-{
-       int i;
-       int count = 0;
-
-       for (i = 0; str[i]; i++) {
-               if (str[i] == ch) {
-                       count++;
-               }
-       }
-
-       return count;
-}
-
-void debug_hex(const char *info, const uint8_t *data, size_t length)
-{
-       int indent = strlen(info) + (strcount(info, '\t') * 8 - 1);
-       int words_per_row = (2 * (80 - indent - 2) / 7) & ~1;
-       size_t i;
-
-       for (i = 0; i < length; i += words_per_row) {
-               size_t ind;
-
-               if (i == 0) {
-                       fprintf(stderr, "%s", info);
-               } else {
-                       int j;
-                       for (j = 0; j < indent; j++) {
-                               fprintf(stderr, " ");
-                       }
-               }
-
-               for (ind = 0; ind < words_per_row; ind++) {
-                       if (ind % 2 == 0) {
-                               fprintf(stderr, " ");
-                       }
-
-                       if (i + ind < length) {
-                               fprintf(stderr, "%.2X", data[i + ind]);
-                       } else {
-                               fprintf(stderr, "  ");
-                       }
-               }
-
-               fprintf(stderr, " ");
-
-               for (ind = 0; ind < words_per_row; ind++) {
-                       if (i + ind < length) {
-                               if (isprint(data[i + ind])) {
-                                       fprintf(stderr, "%c", data[i + ind]);
-                               } else {
-                                       fprintf(stderr, ".");
-                               }
-                       } else {
-                               fprintf(stderr, " ");
-                       }
-               }
-               fprintf(stderr, "\n");
-       }
-}
-
-void dump_msg(const control_msg_t *msg, uint64_t flags)
-{
-       if ((flags & (1 << msg->type)) == 0) {
-               return;
-       }
-
-       switch (msg->type) {
-       case CMSG_CONSOLE:
-               if (msg->subtype == CMSG_CONSOLE_DATA) {
-                       debug_begin("CONSOLE", "DATA");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("CONSOLE", "DATA");
-               } else {
-                       debug_begin("CONSOLE", "UNKNOWN");
-                       debug_field(msg, subtype, "%u");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("CONSOLE", "UNKNOWN");
-               }
-               break;
-       case CMSG_BLKIF_BE:
-               if (msg->subtype == CMSG_BLKIF_BE_CREATE) {
-                       blkif_be_create_t *load;
-                       load = (blkif_be_create_t *)msg->msg;
-                       debug_begin("BLKIF_BE", "CREATE");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, blkif_handle, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("BLKIF_BE", "CREATE");
-               } else if (msg->subtype == CMSG_BLKIF_BE_DESTROY) {
-                       blkif_be_destroy_t *load;
-                       load = (blkif_be_destroy_t *)msg->msg;
-                       debug_begin("BLKIF_BE", "DESTROY");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, blkif_handle, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("BLKIF_BE", "DESTROY");
-               } else if (msg->subtype == CMSG_BLKIF_BE_CONNECT) {
-                       blkif_be_connect_t *load;
-                       load = (blkif_be_connect_t *)msg->msg;
-                       debug_begin("BLKIF_BE", "CONNECT");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, blkif_handle, "%u");
-                       debug_field(load, shmem_frame, "%lu");
-                       debug_field(load, evtchn, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("BLKIF_BE", "CONNECT");
-               } else if (msg->subtype == CMSG_BLKIF_BE_DISCONNECT) {
-                       blkif_be_disconnect_t *load;
-                       load = (blkif_be_disconnect_t *)msg->msg;
-                       debug_begin("BLKIF_BE", "DISCONNECT");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, blkif_handle, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("BLKIF_BE", "DISCONNECT");
-               } else if (msg->subtype == CMSG_BLKIF_BE_VBD_CREATE) {
-                       blkif_be_vbd_create_t *load;
-                       load = (blkif_be_vbd_create_t *)msg->msg;
-                       debug_begin("BLKIF_BE", "VBD_CREATE");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, blkif_handle, "%u");
-                       debug_field(load, pdevice, "%u");
-                       debug_field(load, vdevice, "%u");
-                       debug_field(load, readonly, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("BLKIF_BE", "VBD_CREATE");
-               } else if (msg->subtype == CMSG_BLKIF_BE_VBD_DESTROY) {
-                       blkif_be_vbd_destroy_t *load;
-                       load = (blkif_be_vbd_destroy_t *)msg->msg;
-                       debug_begin("BLKIF_BE", "VBD_DESTROY");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, blkif_handle, "%u");
-                       debug_field(load, vdevice, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("BLKIF_BE", "VBD_DESTROY");
-               } else if (msg->subtype == CMSG_BLKIF_BE_DRIVER_STATUS) {
-                       blkif_be_driver_status_t *load;
-                       load = (blkif_be_driver_status_t *)msg->msg;
-                       debug_begin("BLKIF_BE", "DRIVER_STATUS");
-                       debug_field(load, status, "%u");
-                       debug_end("BLKIF_BE", "DRIVER_STATUS");
-               } else {
-                       debug_begin("BLKIF_BE", "UNKNOWN");
-                       debug_field(msg, subtype, "%u");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("BLKIF_BE", "UNKNOWN");
-               }
-               break;
-       case CMSG_BLKIF_FE:
-               if (msg->subtype == CMSG_BLKIF_FE_INTERFACE_STATUS) {
-                       blkif_fe_interface_status_t *load;
-                       load = (blkif_fe_interface_status_t *)msg->msg;
-                       debug_begin("BLKIF_FE", "INTERFACE_STATUS");
-                       debug_field(load, handle, "%u");
-                       debug_field(load, status, "%u");
-                       debug_field(load, evtchn, "%u");
-                       debug_field(load, domid, "%u");
-                       debug_end("BLKIF_FE", "INTERFACE_STATUS");
-               } else if (msg->subtype == CMSG_BLKIF_FE_DRIVER_STATUS) {
-                       blkif_fe_driver_status_t *load;
-                       load = (blkif_fe_driver_status_t *)msg->msg;
-                       debug_begin("BLKIF_FE", "DRIVER_STATUS");
-                       debug_field(load, status, "%u");
-                       debug_field(load, max_handle, "%u");
-                       debug_end("BLKIF_FE", "DRIVER_STATUS");
-               } else if (msg->subtype == CMSG_BLKIF_FE_INTERFACE_CONNECT) {
-                       blkif_fe_interface_connect_t *load;
-                       load = (blkif_fe_interface_connect_t *)msg->msg;
-                       debug_begin("BLKIF_FE", "INTERFACE_CONNECT");
-                       debug_field(load, handle, "%u");
-                       debug_field(load, shmem_frame, "%lu");
-                       debug_end("BLKIF_FE", "INTERFACE_CONNECT");
-               } else if (msg->subtype == CMSG_BLKIF_FE_INTERFACE_DISCONNECT) {
-                       blkif_fe_interface_disconnect_t *load;
-                       load = (blkif_fe_interface_disconnect_t *)msg->msg;
-                       debug_begin("BLKIF_FE", "INTERFACE_DISCONNECT");
-                       debug_field(load, handle, "%u");
-                       debug_end("BLKIF_FE", "INTERFACE_DISCONNECT");
-               } else if (msg->subtype == CMSG_BLKIF_FE_INTERFACE_QUERY) {
-                       blkif_fe_interface_query_t *load;
-                       load = (blkif_fe_interface_query_t *)msg->msg;
-                       debug_begin("BLKIF_FE", "INTERFACE_QUERY");
-                       debug_field(load, handle, "%u");
-                       debug_field(load, status, "%u");
-                       debug_field(load, evtchn, "%u");
-                       debug_field(load, domid, "%u");
-                       debug_end("BLKIF_FE", "INTERFACE_QUERY");
-               } else {
-                       debug_begin("BLKIF_FE", "UNKNOWN");
-                       debug_field(msg, subtype, "%u");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("BLKIF_FE", "UNKNOWN");
-               }
-               break;
-       case CMSG_NETIF_BE:
-               if (msg->subtype == CMSG_NETIF_BE_CREATE) {
-                       netif_be_create_t *load;
-                       load = (netif_be_create_t *)msg->msg;
-                       debug_begin("NETIF_BE", "CREATE");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, netif_handle, "%u");
-                       debug_field_mac(load, mac);
-                       debug_field_mac(load, be_mac);
-                       debug_field(load, status, "%u");
-                       debug_end("NETIF_BE", "CREATE");
-               } else if (msg->subtype == CMSG_NETIF_BE_DESTROY) {
-                       netif_be_destroy_t *load;
-                       load = (netif_be_destroy_t *)msg->msg;
-                       debug_begin("NETIF_BE", "DESTROY");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, netif_handle, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("NETIF_BE", "DESTROY");
-               } else if (msg->subtype == CMSG_NETIF_BE_CONNECT) {
-                       netif_be_connect_t *load;
-                       load = (netif_be_connect_t *)msg->msg;
-                       debug_begin("NETIF_BE", "CONNECT");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, netif_handle, "%u");
-                       debug_field(load, tx_shmem_frame, "%lu");
-                       debug_field(load, rx_shmem_frame, "%lu");
-                       debug_field(load, evtchn, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("NETIF_BE", "CONNECT");
-               } else if (msg->subtype == CMSG_NETIF_BE_DISCONNECT) {
-                       netif_be_disconnect_t *load;
-                       load = (netif_be_disconnect_t *)msg->msg;
-                       debug_begin("NETIF_BE", "DISCONNECT");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, netif_handle, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("NETIF_BE", "DISCONNECT");
-               } else if (msg->subtype == CMSG_NETIF_BE_DRIVER_STATUS) {
-                       netif_be_driver_status_t *load;
-                       load = (netif_be_driver_status_t *)msg->msg;
-                       debug_begin("NETIF_BE", "DRIVER_STATUS");
-                       debug_field(load, status, "%u");
-                       debug_end("NETIF_BE", "DRIVER_STATUS");
-               } else {
-                       debug_begin("NETIF_BE", "UNKNOWN");
-                       debug_field(msg, subtype, "%u");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("NETIF_BE", "UNKNOWN");
-               }
-               break;
-       case CMSG_NETIF_FE:
-               if (msg->subtype == CMSG_NETIF_FE_INTERFACE_STATUS) {
-                       netif_fe_interface_status_t *load;
-                       load = (netif_fe_interface_status_t *)msg->msg;
-                       debug_begin("NETIF_FE", "INTERFACE_STATUS");
-                       debug_field(load, handle, "%u");
-                       debug_field(load, status, "%u");
-                       debug_field(load, evtchn, "%u");
-                       debug_field_mac(load, mac);
-                       debug_field(load, domid, "%u");
-                       debug_end("NETIF_FE", "INTERFACE_STATUS");
-               } else if (msg->subtype == CMSG_NETIF_FE_DRIVER_STATUS) {
-                       netif_fe_driver_status_t *load;
-                       load = (netif_fe_driver_status_t *)msg->msg;
-                       debug_begin("NETIF_FE", "DRIVER_STATUS");
-                       debug_field(load, status, "%u");
-                       debug_field(load, max_handle, "%u");
-                       debug_end("NETIF_FE", "DRIVER_STATUS");
-               } else if (msg->subtype == CMSG_NETIF_FE_INTERFACE_CONNECT) {
-                       netif_fe_interface_connect_t *load;
-                       load = (netif_fe_interface_connect_t *)msg->msg;
-                       debug_begin("NETIF_FE", "INTERFACE_CONNECT");
-                       debug_field(load, handle, "%u");
-                       debug_field(load, tx_shmem_frame, "%lu");
-                       debug_field(load, rx_shmem_frame, "%lu");
-                       debug_end("NETIF_FE", "INTERFACE_CONNECT");
-               } else if (msg->subtype == CMSG_NETIF_FE_INTERFACE_DISCONNECT) {
-                       netif_fe_interface_disconnect_t *load;
-                       load = (netif_fe_interface_disconnect_t *)msg->msg;
-                       debug_begin("NETIF_FE", "INTERFACE_DISCONNECT");
-                       debug_field(load, handle, "%u");
-                       debug_end("NETIF_FE", "INTERFACE_DISCONNECT");
-               } else if (msg->subtype == CMSG_NETIF_FE_INTERFACE_QUERY) {
-                       netif_fe_interface_query_t *load;
-                       load = (netif_fe_interface_query_t *)msg->msg;
-                       debug_begin("NETIF_FE", "INTERFACE_QUERY");
-                       debug_field(load, handle, "%u");
-                       debug_field(load, status, "%u");
-                       debug_field(load, evtchn, "%u");
-                       debug_field_mac(load, mac);
-                       debug_field(load, domid, "%u");
-                       debug_end("NETIF_FE", "INTERFACE_QUERY");
-               } else {
-                       debug_begin("NETIF_FE", "UNKNOWN");
-                       debug_field(msg, subtype, "%u");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("NETIF_FE", "UNKNOWN");
-               }
-               break;
-       case CMSG_SHUTDOWN:
-               if (msg->subtype == CMSG_SHUTDOWN_POWEROFF) {
-                       debug_begin("SHUTDOWN", "POWEROFF");
-                       debug_end("SHUTDOWN", "POWEROFF");
-               } else if (msg->subtype == CMSG_SHUTDOWN_REBOOT) {
-                       debug_begin("SHUTDOWN", "REBOOT");
-                       debug_end("SHUTDOWN", "REBOOT");
-               } else if (msg->subtype == CMSG_SHUTDOWN_SUSPEND) {
-                       debug_begin("SHUTDOWN", "SUSPEND");
-                       debug_end("SHUTDOWN", "SUSPEND");
-               } else if (msg->subtype == CMSG_SHUTDOWN_SYSRQ) {
-                       debug_begin("SHUTDOWN", "SYSRQ");
-                       debug_end("SHUTDOWN", "SYSRQ");
-               } else {
-                       debug_begin("SHUTDOWN", "UNKNOWN");
-                       debug_field(msg, subtype, "%u");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("SHUTDOWN", "UNKNOWN");
-               }               
-               break;
-       case CMSG_MEM_REQUEST:
-               if (msg->subtype == CMSG_MEM_REQUEST_SET) {
-                       mem_request_t *load;
-                       load = (mem_request_t *)msg->msg;
-                       debug_begin("MEM_REQUEST", "SET");
-                       debug_field(load, target, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("MEM_REQUEST", "SET");
-               } else {
-                       debug_begin("MEM_REQUEST", "UNKNOWN");
-                       debug_field(msg, subtype, "%u");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("MEM_REQUEST", "UNKNOWN");
-               }               
-               break;
-       case CMSG_USBIF_BE:
-               if (msg->subtype == CMSG_USBIF_BE_CREATE) {
-                       usbif_be_create_t *load;
-                       load = (usbif_be_create_t *)msg->msg;
-                       debug_begin("USBIF_BE", "CREATE");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("USBIF_BE", "CREATE");
-               } else if (msg->subtype == CMSG_USBIF_BE_DESTROY) {
-                       usbif_be_destroy_t *load;
-                       load = (usbif_be_destroy_t *)msg->msg;
-                       debug_begin("USBIF_BE", "DESTROY");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("USBIF_BE", "DESTROY");
-               } else if (msg->subtype == CMSG_USBIF_BE_CONNECT) {
-                       usbif_be_connect_t *load;
-                       load = (usbif_be_connect_t *)msg->msg;
-                       debug_begin("USBIF_BE", "CONNECT");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, shmem_frame, "%lu");
-                       debug_field(load, evtchn, "%u");
-                       debug_field(load, bandwidth, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("USBIF_BE", "CONNECT");
-               } else if (msg->subtype == CMSG_USBIF_BE_DISCONNECT) {
-                       usbif_be_disconnect_t *load;
-                       load = (usbif_be_disconnect_t *)msg->msg;
-                       debug_begin("USBIF_BE", "DISCONNECT");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, status, "%u");
-                       debug_end("USBIF_BE", "DISCONNECT");
-               } else if (msg->subtype == CMSG_USBIF_BE_CLAIM_PORT) {
-                       usbif_be_claim_port_t *load;
-                       load = (usbif_be_claim_port_t *)msg->msg;
-                       debug_begin("USBIF_BE", "CLAIM_PORT");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, usbif_port, "%u");
-                       debug_field(load, status, "%u");
-                       debug_field(load, path, "%s");
-                       debug_end("USBIF_BE", "CLAIM_PORT");
-               } else if (msg->subtype == CMSG_USBIF_BE_RELEASE_PORT) {
-                       usbif_be_release_port_t *load;
-                       load = (usbif_be_release_port_t *)msg->msg;
-                       debug_begin("USBIF_BE", "RELEASE_PORT");
-                       debug_field(load, path, "%s");
-                       debug_end("USBIF_BE", "RELEASE_PORT");
-               } else if (msg->subtype == CMSG_USBIF_BE_DRIVER_STATUS_CHANGED) 
{
-                       usbif_be_driver_status_changed_t *load;
-                       load = (usbif_be_driver_status_changed_t *)msg->msg;
-                       debug_begin("USBIF_BE", "DRIVER_STATUS_CHANGED");
-                       debug_field(load, status, "%u");
-                       debug_end("USBIF_BE", "DRIVER_STATUS_CHANGED");
-               } else {
-                       debug_begin("USBIF_BE", "UNKNOWN");
-                       debug_field(msg, subtype, "%u");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("USBIF_BE", "UNKNOWN");
-               }
-               break;
-       case CMSG_USBIF_FE:
-               if (msg->subtype == CMSG_USBIF_FE_INTERFACE_STATUS_CHANGED) {
-                       usbif_fe_interface_status_changed_t *load;
-                       load = (usbif_fe_interface_status_changed_t *)msg->msg;
-                       debug_begin("USBIF_FE", "INTERFACE_STATUS_CHANGED");
-                       debug_field(load, status, "%u");
-                       debug_field(load, evtchn, "%u");
-                       debug_field(load, domid, "%u");
-                       debug_field(load, bandwidth, "%u");
-                       debug_field(load, num_ports, "%u");
-                       debug_end("USBIF_FE", "INTERFACE_STATUS_CHANGED");
-               } else if (msg->subtype == CMSG_USBIF_FE_DRIVER_STATUS_CHANGED) 
{
-                       usbif_fe_driver_status_changed_t *load;
-                       load = (usbif_fe_driver_status_changed_t *)msg->msg;
-                       debug_begin("USBIF_FE", "DRIVER_STATUS_CHANGED");
-                       debug_field(load, status, "%u");
-                       debug_end("USBIF_FE", "DRIVER_STATUS_CHANGED");
-               } else if (msg->subtype == CMSG_USBIF_FE_INTERFACE_CONNECT) {
-                       usbif_fe_interface_connect_t *load;
-                       load = (usbif_fe_interface_connect_t *)msg->msg;
-                       debug_begin("USBIF_FE", "INTERFACE_CONNECT");
-                       debug_field(load, shmem_frame, "%lu");
-                       debug_end("USBIF_FE", "INTERFACE_CONNECT");
-               } else if (msg->subtype == CMSG_USBIF_FE_INTERFACE_DISCONNECT) {
-                       debug_begin("USBIF_FE", "INTERFACE_DISCONNECT");
-                       debug_end("USBIF_FE", "INTERFACE_DISCONNECT");
-               } else {
-                       debug_begin("USBIF_FE", "UNKNOWN");
-                       debug_field(msg, subtype, "%u");
-                       debug_field(msg, length, "%u");
-                       debug_dump(msg, msg, length);
-                       debug_end("USBIF_FE", "UNKNOWN");
-               }
-               break;
-       default:
-               debug_begin("UNKNOWN", "UNKNOWN");
-               debug_field(msg, type, "%u");
-               debug_field(msg, subtype, "%u");
-               debug_field(msg, length, "%u");
-               debug_dump(msg, msg, length);
-               debug_end("UNKNOWN", "UNKNOWN");
-               break;
-       }
-}
-
-void _error(const char *fmt, ...)
-{
-       va_list ap;
-       char buffer[4096];
-
-       va_start(ap, fmt);
-       vsnprintf(buffer, sizeof(buffer), fmt, ap);
-       va_end(ap);
-
-       fprintf(stderr, "%s\n", buffer);
-}
-
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/dump.h
--- a/tools/xcs/dump.h  Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,28 +0,0 @@
-/*\
- *  Copyright (C) International Business Machines  Corp., 2005
- *  Author(s): Anthony Liguori <aliguori@xxxxxxxxxx>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 2 of the License.
- * 
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- * 
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-\*/
-
-#ifndef XENCTLD_ERROR_H
-#define XENCTLD_ERROR_H
-
-#include <stdint.h>
-#include <xenctrl.h>
-#include <xen/io/domain_controller.h>
-
-void dump_msg(const control_msg_t *msg, uint64_t flags);
-
-#endif
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/evtchn.c
--- a/tools/xcs/evtchn.c        Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,106 +0,0 @@
-/* evtchn.c
- *
- * Interfaces to event channel driver.
- *
- * Most of this is directly based on the original xu interface to python 
- * written by Keir Fraser.
- *
- * (c) 2004, Andrew Warfield
- *
- */
- 
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <sys/sysmacros.h> /* XOPEN drops makedev, this gets it back. */
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-#include "xcs.h"
-
-static int evtchn_fd = -1;
-
-/* NB. The following should be kept in sync with the kernel's evtchn driver. */
-#define EVTCHN_DEV_NAME  "/dev/xen/evtchn"
-#define EVTCHN_DEV_MAJOR 10
-#define EVTCHN_DEV_MINOR 201
-/* /dev/xen/evtchn ioctls: */
-/* EVTCHN_RESET: Clear and reinit the event buffer. Clear error condition. */
-#define EVTCHN_RESET  _IO('E', 1)
-/* EVTCHN_BIND: Bind to teh specified event-channel port. */
-#define EVTCHN_BIND   _IO('E', 2)
-/* EVTCHN_UNBIND: Unbind from the specified event-channel port. */
-#define EVTCHN_UNBIND _IO('E', 3)
-
-int evtchn_read()
-{
-    u16 v;
-    int bytes;
-
-    while ( (bytes = read(evtchn_fd, &v, sizeof(v))) == -1 )
-    {
-        if ( errno == EINTR )
-            continue;
-        /* EAGAIN was cased to return 'None' in the python version... */
-        return -errno;
-    }
-    
-    if ( bytes == sizeof(v) )
-        return v;
-    
-    /* bad return */
-    return -1;
-}
-
-void evtchn_unmask(u16 idx)
-{
-    (void)write(evtchn_fd, &idx, sizeof(idx));
-}
-
-int evtchn_bind(int idx)
-{
-    if ( ioctl(evtchn_fd, EVTCHN_BIND, idx) != 0 )
-        return -errno;
-    
-    return 0;
-}
-
-int evtchn_unbind(int idx)
-{
-    if ( ioctl(evtchn_fd, EVTCHN_UNBIND, idx) != 0 )
-        return -errno;
-
-    return 0;
-}
-
-int evtchn_open(void)
-{
-    struct stat st;
-    
-    /* Make sure any existing device file links to correct device. */
-    if ( (lstat(EVTCHN_DEV_NAME, &st) != 0) ||
-         !S_ISCHR(st.st_mode) ||
-         (st.st_rdev != makedev(EVTCHN_DEV_MAJOR, EVTCHN_DEV_MINOR)) )
-        (void)unlink(EVTCHN_DEV_NAME);
-
- reopen:
-    evtchn_fd = open(EVTCHN_DEV_NAME, O_NONBLOCK|O_RDWR); 
-    if ( evtchn_fd == -1 )
-    {
-        if ( (errno == ENOENT) &&
-             ((mkdir("/dev/xen", 0755) == 0) || (errno == EEXIST)) &&
-             (mknod(EVTCHN_DEV_NAME, S_IFCHR|0600, 
-                    makedev(EVTCHN_DEV_MAJOR,EVTCHN_DEV_MINOR)) == 0) )
-            goto reopen;
-        return -errno;
-    }
-    return evtchn_fd;
-}
-
-void evtchn_close()
-{
-    (void)close(evtchn_fd);
-    evtchn_fd = -1;
-}
-
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/xcs.c
--- a/tools/xcs/xcs.c   Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,973 +0,0 @@
-/* xcs.c 
- *
- * xcs - Xen Control Switch
- *
- * Copyright (c) 2004, Andrew Warfield
- */
- 
-/*
-
-  Things we need to select on in xcs:
-  
-  1. Events arriving on /dev/evtchn
-  
-    These will kick a function to read everything off the fd, and scan the
-    associated control message rings, resulting in notifications sent on
-    data channels to connected clients.
-    
-  2. New TCP connections on XCS_PORT.
-  
-    These will either be control (intially) or associated data connections.
-    
-    Control connections will instantiate or rebind to an existing connnection
-    struct.  The control channel is used to configure what events will be 
-    received on an associated data channel.  These two channels are split
-    out because the control channel is synchronous, all messages will return
-    a result from XCS.  The data channel is effectively asynchronous, events
-    may arrive in the middle of a control message exchange.  Additionally, 
-    Having two TCP connections allows the client side to have a blocking
-    listen loop for data messages, while independently interacting on the 
-    control channel at other places in the code.
-    
-    Data connections attach to an existing control struct, using a session
-    id that is passed during the control connect.  There is currently a 
-    one-to-one relationship between data and control channels, but there
-    could just as easily be many data channels, if there were a set of 
-    clients with identical interests, or if you wanted to trace an existing
-    client's data traffic.
-    
- 3. Messages arriving on open TCP connections.
-    There are three types of open connections:
-     
-    3a. Messages arriving on open control channel file descriptors.
- 
-        [description of the control protocol here]
- 
-    3b. Messages arriving on open data channel file descriptors.
- 
-        [description of the data protocol here]
-        
-    3c. Messages arriving on (new) unbound connections.
-    
-        A connection must issue a XCS_CONNECT message to specify what
-        it is, after which the connection is moved into one of the above 
-        two groups.
- 
- Additionally, we need a periodic timer to do housekeeping.
- 
- 4. Every XCS_GC_INTERVAL seconds, we need to clean up outstanding state. 
-    Specifically, we garbage collect any sessions (connection_t structs)
-    that have been unconnected for a period of time (XCS_SESSION_TIMEOUT), 
-    and close any connections that have been openned, but not connected
-    as a control or data connection (XCS_UFD_TIMEOUT).
-
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <string.h>
-#include <signal.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <errno.h>
-#include <malloc.h>
-#include <fcntl.h>
-#include <ctype.h>
-#include "xcs.h"
-
-#undef fd_max
-#define fd_max(x,y) ((x) > (y) ? (x) : (y))
-
-/* ------[ Control channel interfaces ]------------------------------------*/
-
-static control_channel_t *cc_list[NR_EVENT_CHANNELS];
-static int *dom_port_map = 0;
-static int dom_port_map_size = 0;
-
-static void map_dom_to_port(u32 dom, int port)
-{
-    if (dom >= dom_port_map_size) {
-        dom_port_map = (int *)realloc(dom_port_map,
-                                      (dom + 256) * sizeof(dom_port_map[0]));
-
-        if (dom_port_map == NULL) {
-            perror("realloc(dom_port_map)");
-            exit(1);
-        }
-
-        for (; dom_port_map_size < dom + 256; dom_port_map_size++) {
-            dom_port_map[dom_port_map_size] = -1;
-        }
-    }
-
-    dom_port_map[dom] = port;
-}
-
-static int dom_to_port(u32 dom) 
-{
-    if (dom >= dom_port_map_size) return -1;
-
-    return dom_port_map[dom];
-}
-
-static void init_interfaces(void)
-{
-    memset(cc_list, 0, sizeof cc_list);
-}
-
-static control_channel_t *add_interface(u32 dom, int local_port, 
-                                        int remote_port)
-{
-    control_channel_t *cc=NULL, *oldcc;
-    int ret;
-    
-    if ((dom_to_port(dom) >= 0) && (cc_list[dom_to_port(dom)] != NULL))
-    {
-        return(cc_list[dom_to_port(dom)]);
-    }
-    
-    if (cc_list[local_port] == NULL) 
-    {
-        cc = ctrl_chan_new(dom, local_port, remote_port);
-    }
-    
-    if (cc == NULL)
-        return NULL;
-    
-    DPRINTF("added a new interface: dom: %u (l:%d,r:%d): %p\n",
-            dom, local_port, remote_port, cc);
-    DPRINTF("added a new interface: dom: %u (l:%d,r:%d): %p\n",
-            dom, cc->local_port, cc->remote_port, cc);
-    
-    if ((ret = evtchn_bind(cc->local_port)) != 0)
-    {
-        DPRINTF("Got control interface, but couldn't bind evtchan!(%d)\n", 
ret);
-        ctrl_chan_free(cc);
-        return NULL;
-    }
-    
-    if ( cc_list[cc->local_port] != NULL )
-    {
-        oldcc = cc_list[cc->local_port];
-        
-        if ((oldcc->remote_dom != cc->remote_dom) ||
-            (oldcc->remote_port != cc->remote_port))
-        {
-            DPRINTF("CC conflict! (port: %d, old dom: %u, new dom: %u, "
-                    "old ref_count: %d)\n",
-                    cc->local_port, oldcc->remote_dom, cc->remote_dom, 
-                    oldcc->ref_count);
-            map_dom_to_port(oldcc->remote_dom, -1);
-            ctrl_chan_free(cc_list[cc->local_port]);
-            cc_list[cc->local_port] = NULL;
-        }
-    }
-     
-    cc_list[cc->local_port] = cc;
-    map_dom_to_port(cc->remote_dom, cc->local_port);
-    cc->type = CC_TYPE_INTERDOMAIN;
-    cc->ref_count = 0;
-    return cc;
-}
-
-control_channel_t *add_virq(int virq)
-{
-    control_channel_t *cc;
-    int virq_port;
-    
-    if (ctrl_chan_bind_virq(virq, &virq_port) == -1)
-        return NULL;
-    
-    if ((cc_list[virq_port]       != NULL) && 
-        (cc_list[virq_port]->type != CC_TYPE_VIRQ))
-        return NULL; 
-    
-    if ((cc_list[virq_port]       != NULL) && 
-        (cc_list[virq_port]->type == CC_TYPE_VIRQ))
-        return cc_list[virq_port]; 
-    
-    cc = (control_channel_t *)malloc(sizeof(control_channel_t));
-    if ( cc == NULL ) return NULL;
-
-    memset(cc, 0, sizeof(control_channel_t));
-    cc->type       = CC_TYPE_VIRQ;
-    cc->local_port = virq_port;
-    cc->virq       = virq;
-    cc->ref_count  = 1;
-    
-    if (evtchn_bind(cc->local_port) != 0)
-    {
-        DPRINTF("Got control interface, but couldn't bind evtchan!\n");
-        free(cc);
-        return NULL;
-    }
-
-    cc_list[cc->local_port] = cc;
-
-    return cc;
-}
-
-void get_interface(control_channel_t *cc)
-{
-    if (cc != NULL)
-        cc->ref_count++;
-}
-    
-void put_interface(control_channel_t *cc)
-{
-    if (cc != NULL)
-    {
-        cc->ref_count--;
-        if (cc->ref_count <= 0)
-        {
-            DPRINTF("Freeing cc on port %d.\n", cc->local_port);
-            (void)evtchn_unbind(cc->local_port);
-            cc_list[cc->local_port] = NULL;
-            map_dom_to_port(cc->remote_dom, -1);
-            ctrl_chan_free(cc);
-        }
-    }
-}
-
-/* ------[ Simple helpers ]------------------------------------------------*/
-
-/* listen_socket() is straight from paul sheer's useful select_tut manpage. */
-static int listen_socket (char *listen_path) 
-{
-    struct sockaddr_un a;
-    int s;
-    int yes;
-
-    if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) 
-    {
-        perror ("socket");
-        return -1;
-    }
-    
-    yes = 1;
-
-    memset (&a, 0, sizeof (a));
-    a.sun_family = AF_UNIX;
-    strcpy(a.sun_path, listen_path);
-
-    /* remove an old socket if it exists. */
-    unlink(listen_path);
-
-    if (bind(s, (struct sockaddr *) &a, sizeof (a)) < 0) 
-    {
-        fprintf (stderr, "bind('%s'): %s\n", listen_path, strerror(errno));
-        close (s);
-        return -1;
-    }
-    DPRINTF ("accepting connections on path %s\n", listen_path);
-    listen (s, 10);
-    return s;
-}
-
-/* ------[ Message handlers ]----------------------------------------------*/
-
-#define NO_CHANGE     0
-#define CONNECTED     1
-#define DISCONNECTED  2
-int handle_connect_msg( xcs_msg_t *msg, int fd )
-{
-    xcs_connect_msg_t *cmsg = &msg->u.connect;
-    connection_t *con;
-    int ret = NO_CHANGE;
-    
-    switch (msg->type)
-    {
-        case XCS_CONNECT_CTRL:
-        {
-            if ( cmsg->session_id == 0 )
-            {
-                con = connection_new();
-                if ( con == NULL)
-                {
-                    msg->result = XCS_RSLT_FAILED;
-                    break;
-                }
-                msg->result      = XCS_RSLT_OK;
-                cmsg->session_id = con->id;
-                con->ctrl_fd     = fd;
-                ret = CONNECTED;
-                DPRINTF("New control connection\n");
-                break;
-            }
-
-            con = get_con_by_session(cmsg->session_id);
-            if ( con == NULL )
-            {
-                msg->result = XCS_RSLT_BADSESSION;
-                break;
-            }
-            if ( con->ctrl_fd != -1 )
-            {
-                msg->result = XCS_RSLT_CONINUSE;
-                break;
-            }
-            con->ctrl_fd   = fd;
-            msg->result   = XCS_RSLT_OK;
-            ret = CONNECTED;
-            DPRINTF("Rebound to control connection\n");
-            break;
-        }
-        case XCS_CONNECT_DATA:
-        {
-            con = get_con_by_session(cmsg->session_id);
-            if ( con == NULL )
-            {
-                msg->result = XCS_RSLT_BADSESSION;
-                break;
-            }
-            if ( con->data_fd != -1 )
-            {
-                msg->result = XCS_RSLT_CONINUSE;
-                break;
-            }
-            con->data_fd   = fd;
-            msg->result   = XCS_RSLT_OK;
-            ret = CONNECTED;
-            DPRINTF("Attached data connection\n");
-            break;
-
-        }
-        case XCS_CONNECT_BYE:
-        {
-            close ( fd );
-            ret = DISCONNECTED;
-            break;
-        }
-    }   
-    
-    return ret;
-}
-
-int handle_control_message( connection_t *con, xcs_msg_t *msg )
-{
-    int ret;
-    int reply_needed = 1;
-            
-    DPRINTF("Got message, type %u.\n", msg->type);
-
-    switch (msg->type)
-    {
-        case XCS_MSG_BIND:
-        {
-            xcs_bind_msg_t *bmsg = &msg->u.bind;
-
-            if ( ! BIND_MSG_VALID(bmsg) )
-            {
-                msg->result = XCS_RSLT_BADREQUEST;
-                break;
-            }
-            
-            ret = xcs_bind(con, bmsg->port, bmsg->type);
-            if (ret == 0) {
-                msg->result = XCS_RSLT_OK;
-            } else {
-                msg->result = XCS_RSLT_FAILED;
-            }
-            break;
-        }
-        case XCS_MSG_UNBIND:
-        {
-            xcs_bind_msg_t *bmsg = &msg->u.bind;
-
-            if ( ! BIND_MSG_VALID(bmsg) )
-            {
-                msg->result = XCS_RSLT_BADREQUEST;
-                break;
-            }
-            
-            ret = xcs_unbind(con, bmsg->port, bmsg->type);
-            if (ret == 0) {
-                msg->result = XCS_RSLT_OK;
-            } else {
-                msg->result = XCS_RSLT_FAILED;
-            }
-            break;
-        }    
-        case XCS_VIRQ_BIND:
-        {
-            control_channel_t *cc;
-            xcs_virq_msg_t *vmsg = &msg->u.virq;
-            if ( ! VIRQ_MSG_VALID(vmsg) )
-            {
-                msg->result = XCS_RSLT_BADREQUEST;
-                break;
-            }
-
-            cc = add_virq(vmsg->virq);
-            if (cc == NULL)
-            {
-                msg->result = XCS_RSLT_FAILED;
-                break;
-            }
-            ret = xcs_bind(con, cc->local_port, TYPE_VIRQ);
-            if (ret == 0) {
-                vmsg->port   = cc->local_port;
-                msg->result  = XCS_RSLT_OK;
-            } else {
-                msg->result = XCS_RSLT_FAILED;
-            }
-            break;
-        }
-
-        case XCS_CIF_NEW_CC:
-        {
-            control_channel_t *cc;
-            xcs_interface_msg_t *imsg = &msg->u.interface;
-
-            if ( ! INTERFACE_MSG_VALID(imsg) )
-            {
-                msg->result = XCS_RSLT_BADREQUEST;
-                break;
-            }
-
-            cc = add_interface(imsg->dom, imsg->local_port, imsg->remote_port);
-            if (cc != NULL) {
-                get_interface(cc);
-                msg->result       = XCS_RSLT_OK;
-                imsg->local_port  = cc->local_port;
-                imsg->remote_port = cc->remote_port;
-            } else {
-                msg->result = XCS_RSLT_FAILED;
-            }
-            break;
-        }
-
-        case XCS_CIF_FREE_CC:
-        {
-            control_channel_t *cc;
-            xcs_interface_msg_t *imsg = &msg->u.interface;
-
-            if ( ! INTERFACE_MSG_VALID(imsg) )
-            {
-                msg->result = XCS_RSLT_BADREQUEST;
-                break;
-            }
-
-            cc = add_interface(imsg->dom, imsg->local_port, imsg->remote_port);
-            if (cc != NULL) {
-                put_interface(cc);
-            } 
-            msg->result       = XCS_RSLT_OK;
-            break;
-        }
-    }
-    return reply_needed;
-}
-
-void handle_data_message( connection_t *con, xcs_msg_t *msg )
-{
-    control_channel_t *cc;
-    xcs_control_msg_t *cmsg = &msg->u.control;
-    int port;
-    
-    switch (msg->type)
-    {
-    case XCS_REQUEST:
-        if ( cmsg->remote_dom > MAX_DOMS )
-            break;
-        
-        port = dom_to_port(cmsg->remote_dom);
-        if (port == -1) break;
-        cc = cc_list[port];
-        if ((cc != NULL) && ( cc->type == CC_TYPE_INTERDOMAIN ))
-        {
-            DPRINTF("DN:REQ: dom:%d port: %d type: %d\n", 
-                    cc->remote_dom, cc->local_port, 
-                    cmsg->msg.type);
-            ctrl_chan_write_request(cc, cmsg);
-            ctrl_chan_notify(cc);
-        } else {
-            DPRINTF("tried to send a REQ to a null cc\n.");
-        }
-        break;
-
-    case XCS_RESPONSE:
-        if ( cmsg->remote_dom > MAX_DOMS )
-            break;
-        
-        port = dom_to_port(cmsg->remote_dom);
-        if (port == -1) break;
-        cc = cc_list[port];
-        if ((cc != NULL) && ( cc->type == CC_TYPE_INTERDOMAIN ))
-        {
-            DPRINTF("DN:RSP: dom:%d port: %d type: %d\n", 
-                    cc->remote_dom, cc->local_port, 
-                    cmsg->msg.type);
-            ctrl_chan_write_response(cc, cmsg);
-            ctrl_chan_notify(cc);
-        }
-        break;
-
-    case XCS_VIRQ:
-        if ( !(PORT_VALID(cmsg->local_port)) )
-            break;
-            
-        cc = cc_list[cmsg->local_port];
-        
-        if ((cc != NULL) && ( cc->type == CC_TYPE_VIRQ ))
-        {
-            DPRINTF("DN:VIRQ:  virq: %d port: %d\n", 
-                    cc->virq, cc->local_port);
-            ctrl_chan_notify(cc);
-        }
-        break;
-    }
-}
-    
-/* ------[ Control interface handler ]-------------------------------------*/
-
-/* passed as a function pointer to the lookup. */
-void send_kmsg(connection_t *c, void *arg)
-{
-    xcs_msg_t *msg = (xcs_msg_t *)arg;
-
-    DPRINTF("       -> CONNECTION %d\n", c->data_fd);
-    if (c->data_fd > 0)
-    {
-      send(c->data_fd, msg, sizeof(xcs_msg_t), 0);
-    }
-}
-
-int handle_ctrl_if(void)
-{
-    control_channel_t *cc;
-    control_msg_t     *msg;
-    xcs_msg_t          kmsg;
-    int                chan, ret;
-    
-    DPRINTF("Event thread kicked!\n");
-again:
-    while ((chan = evtchn_read()) > 0)
-    {
-        evtchn_unmask(chan);
-        cc = cc_list[chan];
-        if (cc_list[chan] == NULL) {
-            DPRINTF("event from unknown channel (%d)\n", chan);
-            continue;
-        }
-
-        if ( cc_list[chan]->type == CC_TYPE_VIRQ )
-        {
-            DPRINTF("UP:VIRQ: virq:%d port: %d\n",
-                    cc->virq, cc->local_port);
-            kmsg.type = XCS_VIRQ;
-            kmsg.u.control.local_port = cc->local_port;
-            xcs_lookup(cc->local_port, TYPE_VIRQ, send_kmsg, &kmsg);
-            continue;
-        }
-
-        while (ctrl_chan_request_to_read(cc))
-        {
-            msg = &kmsg.u.control.msg;
-            kmsg.type = XCS_REQUEST;
-            kmsg.u.control.remote_dom = cc->remote_dom;
-            kmsg.u.control.local_port = cc->local_port;
-            ret = ctrl_chan_read_request(cc, &kmsg.u.control);
-            DPRINTF("UP:REQ: dom:%d port: %d type: %d len: %d\n", 
-                    cc->remote_dom, cc->local_port, 
-                    msg->type, msg->length);
-            if (ret == 0)
-                xcs_lookup(cc->local_port, msg->type, send_kmsg, &kmsg);
-        }
-
-        while (ctrl_chan_response_to_read(cc))
-        {
-            msg = &kmsg.u.control.msg;
-            kmsg.type = XCS_RESPONSE;
-            kmsg.u.control.remote_dom = cc->remote_dom;
-            kmsg.u.control.local_port = cc->local_port;
-            ret = ctrl_chan_read_response(cc, &kmsg.u.control);
-            DPRINTF("UP:RSP: dom:%d port: %d type: %d len: %d\n", 
-                    cc->remote_dom, cc->local_port, 
-                    msg->type, msg->length);
-            if (ret == 0)
-                xcs_lookup(cc->local_port, msg->type, send_kmsg, &kmsg);
-        }
-    }
-    
-    if (chan == -EINTR)
-        goto again;
-    
-    return chan;
-}
-
-  
-/* ------[ Main xcs code / big select loop ]-------------------------------*/
-
-                
-typedef struct unbound_fd_st {
-    int                   fd;
-    struct timeval        born;
-    struct unbound_fd_st *next;
-} unbound_fd_t;
-
-/* This makes ufd point to the next entry in the list, so need to   *
- * break/continue if called while iterating.                        */
-void delete_ufd(unbound_fd_t **ufd)
-{
-    unbound_fd_t *del_ufd;
-    
-    del_ufd = *ufd;
-    *ufd    = (*ufd)->next;
-    free( del_ufd );
-}
-
-void gc_ufd_list( unbound_fd_t **ufd )
-{
-    struct timeval now, delta;
-    
-    gettimeofday(&now, NULL);
-    
-    while ( *ufd != NULL )
-    {
-        timersub(&now, &(*ufd)->born, &delta);
-        if (delta.tv_sec > XCS_UFD_TIMEOUT)
-        {
-            DPRINTF("GC-UFD: closing fd: %d\n", (*ufd)->fd);
-            close((*ufd)->fd);
-            delete_ufd(ufd);
-            continue;
-        }
-        ufd = &(*ufd)->next;
-    }
-}
-
-void daemonize_xcs(void)
-{
-    
-    /* detach from our controlling tty so that a shell does hang waiting for
-       stopped jobs. */
-    
-    pid_t pid = fork();
-    int fd;
-
-    if (pid == -1) {
-           perror("fork()");
-    } else if (pid) {
-           exit(0);
-    }
-
-    fd = open("/var/log/xcs.log", O_WRONLY | O_APPEND | O_CREAT);
-    if ( fd == -1 ) {
-        fprintf(stderr, "xcs couldn't open logfile.  Directing all output to "
-                "/dev/null instead.\n");
-        fd = open("/dev/null", O_WRONLY);
-    }
-    
-    setsid();
-    close(2);
-    close(1);
-    close(0);
-    dup(fd);
-    dup(fd);
-}
-
-
-static char *pidfilename = NULL;
-void cleanup(int sig)
-{
-    /* throw away our pidfile if we created one. */
-    if ( pidfilename != NULL ) 
-        unlink(pidfilename);
-    exit(0);
-}
-
-int main (int argc, char *argv[])
-{
-    int listen_fd, evtchn_fd;
-    unbound_fd_t *unbound_fd_list = NULL, **ufd;
-    struct timeval timeout = { XCS_GC_INTERVAL, 0 };
-    connection_t **con;
-    int c, daemonize;
-    FILE *pidfile;
-    struct stat s;
-    
-    daemonize = 1;
-    pidfile = NULL;
-
-    signal(SIGHUP, cleanup);
-    signal(SIGTERM, cleanup);
-    signal(SIGINT, cleanup);
-    
-    /* Do a bunch of stuff before potentially daemonizing so we can 
-     * print error messages sanely before redirecting output. */
-    
-    /* Initialize xc and event connections. */
-    if (ctrl_chan_init() != 0)
-    {
-        printf("Couldn't open conneciton to libxc.\n");
-        exit(-1);
-    }
-    
-    if ((evtchn_fd = evtchn_open()) < 0)
-    {
-        printf("Couldn't open event channel driver interface.\n");
-        exit(-1);
-    }
-   
-    /* Bind listen_fd to the client socket. */
-    listen_fd = listen_socket(XCS_SUN_PATH);
-     
-    while ((c = getopt (argc, argv, "ip:")) != -1)
-    {
-        switch (c)
-        {
-        case 'i': /* interactive */
-            daemonize = 0;
-            break;
-        case 'p': /* pid file */
-            pidfilename = optarg;
-            break;          
-        case '?':
-            if (isprint (optopt))
-                fprintf (stderr, "Unknown option `-%c'.\n", optopt);
-            else
-                fprintf (stderr,
-                    "Bad option character `\\x%x'.\n", optopt);
-            break;
-        }    
-    }
-    
-    if ( pidfilename != NULL )
-    {
-        if ( stat(pidfilename, &s) == 0 )
-        {
-            fprintf(stderr, "Thre specified pid file (%s) already exists.\n"
-                    "Is another instance of xcs running?\n", pidfilename);
-            exit(-1);
-        }
-
-        pidfile = fopen(pidfilename, "w");
-        if (pidfile == NULL)
-        {
-            fprintf(stderr, "Error openning pidfile (%s).\n", pidfilename);
-            exit(-1);
-        }
-    }
-        
-    if (daemonize == 1) 
-        daemonize_xcs();
-    
-    if (pidfile != NULL)
-    {
-        fprintf(pidfile, "%d", getpid());
-        fclose(pidfile); 
-    }
-    
-    
-    /* Initialize control interfaces, bindings. */
-    init_interfaces();
-    init_bindings();
-    
-   
-    for (;;)
-    {
-        int n = 0, ret;
-        fd_set rd, wr, er;
-        FD_ZERO ( &rd );
-        FD_ZERO ( &wr );
-        FD_ZERO ( &er );
-        
-        /* TCP listen fd: */
-        FD_SET ( listen_fd, &rd );
-        n = fd_max ( n, listen_fd );
-        
-        /* Evtchn fd: */
-        FD_SET ( evtchn_fd, &rd );
-        n = fd_max ( n, evtchn_fd );
-        
-        /* unbound connection fds: */
-        ufd = &unbound_fd_list;
-        while ((*ufd) != NULL) 
-        {
-            FD_SET ( (*ufd)->fd, &rd );
-            n = fd_max ( n, (*ufd)->fd );
-            ufd = &(*ufd)->next;
-        }
-        
-        /* control and data fds: */
-        con = &connection_list;
-        while ((*con) != NULL)
-        {
-            if ((*con)->ctrl_fd > 0)
-            {
-                FD_SET ( (*con)->ctrl_fd, &rd );
-                n = fd_max ( n, (*con)->ctrl_fd );
-            }
-            if ((*con)->data_fd > 0)
-            {
-                FD_SET ( (*con)->data_fd, &rd );
-                n = fd_max ( n, (*con)->data_fd );
-            }
-            con = &(*con)->next;
-        }
-        
-        ret = select ( n + 1, &rd, &wr, &er, &timeout );
-        
-        if ( (timeout.tv_sec == 0) && (timeout.tv_usec == 0) )
-        {
-            gc_ufd_list(&unbound_fd_list);
-            gc_connection_list();
-            timeout.tv_sec = XCS_GC_INTERVAL;
-        }
-        
-        if ( (ret == -1) && (errno == EINTR) )
-            continue;
-        if ( ret < 0 )
-        {
-            perror ("select()");
-            exit(-1);
-        }
-        
-        /* CASE 1: Events arriving on /dev/evtchn. */
-        
-        if ( FD_ISSET (evtchn_fd, &rd ))
-            handle_ctrl_if();
-        
-        /* CASE 2: New connection on the listen port. */
-        if ( FD_ISSET ( listen_fd, &rd ))
-        {
-            struct sockaddr_un remote_addr;
-            int size;
-            memset (&remote_addr, 0, sizeof (remote_addr));
-            size = sizeof remote_addr;
-            ret = accept(listen_fd, (struct sockaddr *)&remote_addr, 
(socklen_t *)&size);
-            if ( ret < 0 )
-            {
-                perror("accept()");
-            } else {
-                unbound_fd_t *new_ufd;
-                
-                new_ufd = (unbound_fd_t *)malloc(sizeof(*new_ufd));
-                
-                if (new_ufd != NULL)
-                {
-                    gettimeofday(&new_ufd->born, NULL);
-                    new_ufd->fd     = ret;
-                    new_ufd->next   = unbound_fd_list;
-                    unbound_fd_list = new_ufd; 
-                } else {
-                    perror("malloc unbound connection");
-                    close(ret);
-                }
-            }
-        }
-        
-        /* CASE 3a: Handle messages on control connections. */
-        
-        con = &connection_list;
-        while ( *con != NULL )
-        {
-            if ( ((*con)->ctrl_fd > 0) && (FD_ISSET((*con)->ctrl_fd, &rd)) )
-            {
-                xcs_msg_t msg;
-                memset (&msg, 0, sizeof(msg));
-                ret = read( (*con)->ctrl_fd, &msg, sizeof(msg) );
-                
-                if ( ret < 0 )
-                {
-                    perror("reading ctrl fd.");
-                } else if ( ret == 0 )
-                {
-                    DPRINTF("Control connection dropped.\n");
-                    close ( (*con)->ctrl_fd );
-                    (*con)->ctrl_fd = -1;
-                    gettimeofday(&(*con)->disconnect_time, NULL);
-                } else 
-                {
-                    if ( ret != sizeof(msg) )
-                    {
-                        DPRINTF("Unexpected frame size!\n");
-                        continue;
-                    }
-                    
-                    ret = handle_control_message( *con, &msg );
-                    
-                    if ( ret == 1 )
-                        send( (*con)->ctrl_fd, &msg, sizeof(msg), 0 );
-                }
-            }
-            con = &(*con)->next;
-        }
-        
-        /* CASE 3b: Handle messages on data connections. */
-        
-        con = &connection_list;
-        while ( *con != NULL )
-        {
-            if ( ((*con)->data_fd > 0) && (FD_ISSET((*con)->data_fd, &rd)) )
-            {
-                xcs_msg_t msg;
-                memset (&msg, 0, sizeof(msg));
-                ret = read( (*con)->data_fd, &msg, sizeof(msg) );
-                
-                if ( ret < 0 )
-                {
-                    perror("reading data fd.");
-                } else if ( ret == 0 )
-                {
-                    DPRINTF("Data connection dropped.\n");
-                    close ( (*con)->data_fd );
-                    (*con)->data_fd = -1;
-                    gettimeofday(&(*con)->disconnect_time, NULL);
-                } else 
-                {
-                    if ( ret != sizeof(msg) )
-                    {
-                        DPRINTF("Unexpected frame size!\n");
-                        continue;
-                    }
-                    
-                    handle_data_message( *con, &msg );
-                }
-            }
-            con = &(*con)->next;
-        }
-        
-        /* CASE 3c: Handle messages arriving on unbound connections. */
-        ufd = &unbound_fd_list;
-        while ((*ufd) != NULL)
-        {
-            if ( FD_ISSET( (*ufd)->fd, &rd ) )
-            {
-                xcs_msg_t msg;
-                memset (&msg, 0, sizeof(msg));
-                ret = read( (*ufd)->fd, &msg, sizeof(msg) );
-                
-                if ( ret == 0 )
-                {
-                    close ( (*ufd)->fd );
-                    delete_ufd(ufd);
-                    continue; /* we just advanced ufd */
-                } else {
-                    if ( ret != sizeof(msg) )
-                    {
-                        DPRINTF("Unexpected frame size!\n");
-                        continue;
-                    }
-                    
-                    ret = handle_connect_msg( &msg, (*ufd)->fd );
-                    
-                    if ( (ret == CONNECTED) || (ret == NO_CHANGE) )
-                        send( (*ufd)->fd, &msg, sizeof(msg), 0 );
-                    
-                    if ( (ret = CONNECTED) || (ret = DISCONNECTED) )
-                    {
-                        delete_ufd( ufd );
-                        continue;
-                    }
-                }
-            }
-            ufd = &(*ufd)->next;
-        }
-    }
-}
-
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/xcs.h
--- a/tools/xcs/xcs.h   Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,148 +0,0 @@
-/* xcs.h
- *
- * public interfaces for the control interface switch (xcs).
- *
- * (c) 2004, Andrew Warfield
- *
- */
-
-
-#ifndef __XCS_H__
-#define __XCS_H__
-
-#include <pthread.h>
-#include <xenctrl.h>
-#include <xen/xen.h>
-#include <xen/io/domain_controller.h>
-#include <xen/linux/privcmd.h>
-#include <sys/time.h>
-#include "xcs_proto.h"
-
-/* ------[ Debug macros ]--------------------------------------------------*/
-
-#if 0
-#define DPRINTF(_f, _a...) printf ( _f , ## _a )
-#else
-#define DPRINTF(_f, _a...) ((void)0)
-#endif
-
-/* ------[ XCS-specific defines and types ]--------------------------------*/
-
-#define MAX_DOMS            1024
-#define XCS_SESSION_TIMEOUT   10 /* (secs) disconnected session gc timeout */
-#define XCS_UFD_TIMEOUT        5 /* how long can connections be unbound?   */
-#define XCS_GC_INTERVAL        5 /* How often to run gc handlers.          */
-
-
-/* ------[ Other required defines ]----------------------------------------*/
-
-/* Size of a machine page frame. */
-#define PAGE_SIZE XC_PAGE_SIZE
-
-#ifndef timersub /* XOPEN and __BSD don't cooperate well... */
-#define timersub(a, b, result)                                                \
-  do {                                                                        \
-    (result)->tv_sec = (a)->tv_sec - (b)->tv_sec;                             \
-    (result)->tv_usec = (a)->tv_usec - (b)->tv_usec;                          \
-    if ((result)->tv_usec < 0) {                                              \
-      --(result)->tv_sec;                                                     \
-      (result)->tv_usec += 1000000;                                           \
-    }                                                                         \
-  } while (0)
-#endif /*timersub*/
-
-/* ------[ Bindings Interface ]--------------------------------------------*/
-
-/*forward declare connection_t */
-typedef struct connection_st connection_t;
-
-typedef struct {
-    int    port;
-    u16    type;
-} binding_key_t;
-
-typedef struct binding_key_ent_st {
-    binding_key_t              key;
-    struct binding_key_ent_st *next;
-} binding_key_ent_t;
-
-#define BINDING_KEYS_EQUAL(_k1, _k2) \
-    (((_k1)->port == (_k2)->port) && ((_k1)->type == (_k2)->type))
-
-int  xcs_bind(connection_t *con, int port, u16 type);
-int  xcs_unbind(connection_t *con, int port, u16 type);
-void xcs_lookup(int port, u16 type, void (*f)(connection_t *, void *), 
-        void *arg);
-void init_bindings(void);
-
-/* ------[ Connection Interface ]------------------------------------------*/
-
-struct connection_st {
-    unsigned long      id;              /* Unique session id             */
-    int                ctrl_fd;         /* TCP descriptors               */
-    int                data_fd;         /*                               */
-    binding_key_ent_t *bindings;        /* List of bindings              */
-    connection_t      *next;            /* Linked list of connections    */
-    struct timeval     disconnect_time; /*  "            "               */
-}; /* previously typedefed as connection_t */
-
-
-extern connection_t *connection_list;
-
-connection_t *get_con_by_session(unsigned long session_id);
-connection_t *connection_new();
-void connection_free(connection_t *con);
-int  connection_add_binding(connection_t *con, binding_key_t *key);
-int  connection_remove_binding(connection_t *con, binding_key_t *key);
-int  connection_has_binding(connection_t *con, binding_key_t *key);
-void gc_connection_list(void);
-
-/* ------[ Control Channel Interfaces ]------------------------------------*/
- 
-typedef struct {
-    int               connected;
-    int               ref_count;
-    int               type;
-    u32               remote_dom;
-    int               local_port;
-    int               remote_port;
-    control_if_t     *interface;
-    ctrl_back_ring_t  tx_ring;
-    ctrl_front_ring_t rx_ring;
-    int               virq;
-} control_channel_t;
-
-/* cc types that we care about */
-#define CC_TYPE_INTERDOMAIN  0
-#define CC_TYPE_VIRQ         1
-
-control_channel_t 
-     *ctrl_chan_new(u32 dom, int local_port, int remote_port);
-void  ctrl_chan_free(control_channel_t *cc);
-int   ctrl_chan_init(void);
-int   ctrl_chan_notify(control_channel_t *cc);
-int   ctrl_chan_read_request(control_channel_t *cc, xcs_control_msg_t *);
-int   ctrl_chan_write_request(control_channel_t *cc, 
-                            xcs_control_msg_t *smsg);
-int   ctrl_chan_read_response(control_channel_t *cc, xcs_control_msg_t *);
-int   ctrl_chan_write_response(control_channel_t *cc, 
-                             xcs_control_msg_t *smsg);
-int   ctrl_chan_request_to_read(control_channel_t *cc);
-int   ctrl_chan_space_to_write_request(control_channel_t *cc);
-int   ctrl_chan_response_to_read(control_channel_t *cc);
-int   ctrl_chan_space_to_write_response(control_channel_t *cc);
-int   ctrl_chan_connect(control_channel_t *cc);
-void  ctrl_chan_disconnect(control_channel_t *cc);
-int   ctrl_chan_bind_virq(int virq, int *port);
-
-/* ------[ Event notification interfaces ]---------------------------------*/
-
-
-int   evtchn_open(void);
-void  evtchn_close();
-int   evtchn_bind(int idx);
-int   evtchn_unbind(int idx);
-void  evtchn_unmask(u16 idx);
-int   evtchn_read();
-
-#endif /* __XCS_H__ */
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/xcs_proto.h
--- a/tools/xcs/xcs_proto.h     Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,101 +0,0 @@
-/* xcs_proto.h
- *
- * protocol interfaces for the control interface switch (xcs).
- *
- * (c) 2004, Andrew Warfield
- *
- */
-
-#ifndef  __XCS_PROTO_H__
-#define  __XCS_PROTO_H__
-
-#define XCS_SUN_PATH     "/var/lib/xen/xcs_socket"
-
-/* xcs message types: */
-#define XCS_CONNECT_CTRL       0 /* This is a control connection.     */
-#define XCS_CONNECT_DATA       1 /* This is a data connection.        */
-#define XCS_CONNECT_BYE        2 /* Terminate a session.              */
-#define XCS_MSG_BIND           3 /* Register for a message type.      */
-#define XCS_MSG_UNBIND         4 /* Unregister for a message type.    */
-#define XCS_VIRQ_BIND          5 /* Register for a virq.              */
-#define XCS_MSG_WRITELOCK      6 /* Writelock a (dom,type) pair.      */
-#define XCS_CIF_NEW_CC         7 /* Create a new control channel.     */
-#define XCS_CIF_FREE_CC        8 /* Create a new control channel.     */
-#define XCS_REQUEST            9 /* This is a request message.        */
-#define XCS_RESPONSE          10 /* this is a response Message.       */
-#define XCS_VIRQ              11 /* this is a virq notification.      */
-
-/* xcs result values: */
-#define XCS_RSLT_OK            0
-#define XCS_RSLT_FAILED        1 /* something bad happened.           */
-#define XCS_RSLT_ARECONNECTED  2 /* attempt to over connect.          */
-#define XCS_RSLT_BADSESSION    3 /* request for unknown session id.   */
-#define XCS_RSLT_NOSESSION     4 /* tried to do something before NEW. */
-#define XCS_RSLT_CONINUSE      5 /* Requested connection is taken.    */
-#define XCS_RSLT_BADREQUEST    6 /* Request message didn't validate.  */
-
-/* Binding wildcards */
-#define PORT_WILDCARD  0xefffffff
-#define TYPE_WILDCARD  0xffff
-#define TYPE_VIRQ      0xfffe
-
-typedef struct {
-    unsigned long  session_id;
-} xcs_connect_msg_t;
-
-typedef struct {
-    int port;
-    u16 type;  
-} xcs_bind_msg_t;
-
-typedef struct {
-    int port;
-    u16 virq;  
-} xcs_virq_msg_t;
-
-typedef struct {
-    u32 dom;
-    int local_port;
-    int remote_port;
-} xcs_interface_msg_t;
-
-typedef struct {
-    u32           remote_dom;
-    int           local_port;
-    control_msg_t msg;
-} xcs_control_msg_t;
-
-typedef struct {
-    u32 type;
-    u32 result;
-    union {
-        xcs_connect_msg_t   connect;   /* These are xcs ctrl message types */
-        xcs_bind_msg_t      bind;
-        xcs_virq_msg_t      virq;
-        xcs_interface_msg_t interface;
-        
-        xcs_control_msg_t   control;   /* These are xcs data message types */
-    } u;
-} xcs_msg_t;
-
-/* message validation macros. */
-#define PORT_VALID(_p)                                                 \
-    ( (((_p) >= 0) && ((_p) < NR_EVENT_CHANNELS))                      \
-    || ((_p) == PORT_WILDCARD) )
-
-#define TYPE_VALID(_t)                                                 \
-    (  ((_t) < 256)                                                    \
-    || ((_t) == TYPE_VIRQ)                                             \
-    || ((_t) == TYPE_WILDCARD) )
-
-#define BIND_MSG_VALID(_b)                                             \
-    ( PORT_VALID((_b)->port) && TYPE_VALID((_b)->type) )
-    
-/* Port is overwritten, and we don't currently validate the requested virq. */
-#define VIRQ_MSG_VALID(_v) ( 1 )
-    
-/* Interfaces may return with ports of -1, but may not be requested as such */
-#define INTERFACE_MSG_VALID(_i)                                        \
-    ( PORT_VALID((_i)->local_port) && PORT_VALID((_i)->remote_port) )
-
-#endif /* __XCS_PROTO_H__ */
diff -r 4e4aac33809f -r 38c5199155fc tools/xcs/xcsdump.c
--- a/tools/xcs/xcsdump.c       Wed Sep  7 18:37:55 2005
+++ /dev/null   Wed Sep  7 19:01:05 2005
@@ -1,206 +0,0 @@
-/* xcsdump.c
- *
- * little tool to sniff control messages.
- *
- * Copyright (c) 2004, Andrew Warfield
- *
- * Modifications by Anthony Liguori <aliguori@xxxxxxxxxx> are:
- *   Copyright (C) 2005, International Business Machines, Corp.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <ctype.h>
-#include <xenctrl.h>
-#include <xen/xen.h>
-#include <xen/io/domain_controller.h>
-#include <getopt.h>
-#include "xcs_proto.h"
-#include "xcs.h"
-
-#include "dump.h"
-
-static int xcs_ctrl_fd = -1; /* connection to the xcs server. */
-static int xcs_data_fd = -1; /* connection to the xcs server. */
-
-int sock_connect(char *path)
-{
-    struct sockaddr_un addr;
-    int ret, len, fd;
-
-    fd = socket(AF_UNIX, SOCK_STREAM, 0);
-    if (fd < 0)
-    {
-        printf("error creating xcs socket!\n");
-        return -1;
-    }
-
-    addr.sun_family = AF_UNIX;
-    strcpy(addr.sun_path, path);
-    len = sizeof(addr.sun_family) + strlen(addr.sun_path) + 1;
-
-    ret = connect(fd, (struct sockaddr *)&addr, len);
-    if (ret < 0) 
-    {
-        printf("error connecting to xcs!\n");
-        return -1;
-    }
-    
-    return fd;
-}
-
-void sock_disconnect(int *fd)
-{
-    close(*fd);
-    *fd = -1;
-}
-
-void xcs_read(int fd, xcs_msg_t *msg)
-{
-    int ret;
-    
-    ret = read(fd, msg, sizeof(xcs_msg_t));
-    if (ret != sizeof(xcs_msg_t)) {
-        printf("read error\n");
-        exit(-1);
-    }
-}
-
-void xcs_send(int fd, xcs_msg_t *msg)
-{
-    int ret;
-    
-    ret = send(fd, msg, sizeof(xcs_msg_t), 0);
-    if (ret != sizeof(xcs_msg_t) )
-    {
-        printf("send error\n");
-        exit(-1);
-    }
-}
-              
-
-int main(int argc, char* argv[])
-{
-    int ret;
-    xcs_msg_t msg;
-    control_msg_t *cmsg;
-    int verbose = 0;
-    int ch;
-
-    while ((ch = getopt(argc, argv, "hv:")) != -1)
-    {
-        switch (ch)
-        {
-        case 'v':
-            verbose = atoi(optarg);
-            break;
-        case 'h':
-           printf("Usage: %s [-v FLAGS]\n"
-"Displays XCS control message traffic.\n"
-"\n"
-"FLAGS is a bitmask where each bit (numbering starts from LSB) represents\n"
-"whether to display a particular message type.\n"
-"\n"
-"For example, -v 1022 will display all messages except for console messages.\n"
-                  , argv[0]);
-           exit(0);
-           break;
-        }
-    }
-    
-    ret = sock_connect(XCS_SUN_PATH);
-    if (ret < 0) 
-    {
-        printf("connect failed!\n"); 
-        exit(-1);
-    }
-    xcs_ctrl_fd = ret;
-    
-    memset(&msg, 0, sizeof(msg));
-    msg.type = XCS_CONNECT_CTRL;
-    xcs_send(xcs_ctrl_fd, &msg);
-    xcs_read(xcs_ctrl_fd, &msg);
-    if (msg.result != XCS_RSLT_OK)
-    {
-        printf("Error connecting control channel\n");
-        exit(-1);
-    }
-    
-    ret = sock_connect(XCS_SUN_PATH);
-    if (ret < 0) 
-    {
-        printf("connect failed!\n"); 
-        exit(-1);
-    }
-    xcs_data_fd = ret;
-    
-    msg.type = XCS_CONNECT_DATA;
-    /* session id is set from before... */
-    xcs_send(xcs_data_fd, &msg);
-    xcs_read(xcs_data_fd, &msg);
-    if (msg.result != XCS_RSLT_OK)
-    {
-        printf("Error connecting data channel\n");
-        exit(-1);
-    }
-    
-    msg.type = XCS_MSG_BIND;
-    msg.u.bind.port = PORT_WILDCARD;
-    msg.u.bind.type = TYPE_WILDCARD;
-    xcs_send(xcs_ctrl_fd, &msg);
-    xcs_read(xcs_ctrl_fd, &msg);
-    if (msg.result != XCS_RSLT_OK)
-    {
-        printf("Error binding.\n");
-        exit(-1);
-    }
-    
-    
-    while (1)
-    {
-        xcs_read(xcs_data_fd, &msg);
-        cmsg = &msg.u.control.msg;
-        
-        switch (msg.type)
-        {
-        case XCS_REQUEST:
-           if (!verbose || verbose & (1 << msg.u.control.msg.type))
-            {
-               printf("[REQUEST ] : (dom:%u port:%d) (type:(%d,%d) len %d)\n",
-                      msg.u.control.remote_dom,
-                      msg.u.control.local_port,
-                      msg.u.control.msg.type, 
-                      msg.u.control.msg.subtype, 
-                      msg.u.control.msg.length);
-
-               dump_msg(cmsg, verbose);
-           }
-           break; 
-        case XCS_RESPONSE:
-           if (!verbose || verbose & (1 << msg.u.control.msg.type))
-            {
-               printf("[RESPONSE] : (dom:%u port:%d) (type:(%d,%d) len %d)\n",
-                      msg.u.control.remote_dom,
-                      msg.u.control.local_port,
-                      msg.u.control.msg.type, 
-                      msg.u.control.msg.subtype, 
-                      msg.u.control.msg.length);
-
-               dump_msg(cmsg, verbose);
-           }
-           break;
-        case XCS_VIRQ:
-            printf("[VIRQ    ] : %d\n", msg.u.control.local_port);
-           break;
-        default:
-            printf("[UNKNOWN ] : %d\n", msg.type);
-        }
-    }
-    
-    return(0);
-}

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] g/c unused xcs., Xen patchbot -unstable <=