All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Ian Campbell <Ian.Campbell@citrix.com>,
	Xen-devel <xen-devel@lists.xen.org>
Subject: Re: [PATCH for-4.5 3/4] tools/misc: Delete more obsolete utilities
Date: Fri, 17 Oct 2014 12:13:17 -0400	[thread overview]
Message-ID: <20141017161317.GA10212@laptop.dumpdata.com> (raw)
In-Reply-To: <1413394437-11430-4-git-send-email-andrew.cooper3@citrix.com>

On Wed, Oct 15, 2014 at 06:33:56PM +0100, Andrew Cooper wrote:
> * nsplitd has been orphaned from the build since its introduction in c/s
>   dc44ed4764 (in 2004), and never been developed since.  While it does appear
>   to compile, it is full of pointer width mismatch, pointer sign mismatch, and
>   uninitialised variable warnings, which makes it unlikely to function
>   correctly when compiled for a 64bit environment.
> 
> * xen-python-path was declared obsolete in c/s 11e1149fe (in 2009) and can't
>   actually be used correctly by out-of-tree components.  5 years is long enough
>   for out-of-tree callers to catch up.
> 
> There are no subdirectories any more, so drop the notion from the Makefile.

Release-Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> CC: Ian Campbell <Ian.Campbell@citrix.com>
> CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
> CC: Wei Liu <wei.liu2@citrix.com>
> CC: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> ---
>  tools/misc/Makefile          |    7 +-
>  tools/misc/nsplitd/Makefile  |   25 --
>  tools/misc/nsplitd/nsplitd.c |  686 ------------------------------------------
>  tools/misc/xen-python-path   |   24 --
>  4 files changed, 1 insertion(+), 741 deletions(-)


I think I know what the release code-name is going to be: SlimDiet!

>  delete mode 100644 tools/misc/nsplitd/Makefile
>  delete mode 100644 tools/misc/nsplitd/nsplitd.c
>  delete mode 100644 tools/misc/xen-python-path
> 
> diff --git a/tools/misc/Makefile b/tools/misc/Makefile
> index 3237461..7a2bfd2 100644
> --- a/tools/misc/Makefile
> +++ b/tools/misc/Makefile
> @@ -16,13 +16,11 @@ TARGETS-$(CONFIG_X86) += xen-detect xen-hvmctx xen-hvmcrash xen-lowmemd xen-mfnd
>  TARGETS-$(CONFIG_MIGRATE) += xen-hptool
>  TARGETS := $(TARGETS-y)
>  
> -SUBDIRS := $(SUBDIRS-y)
> -
>  INSTALL_BIN-y := xencons xencov_split
>  INSTALL_BIN-$(CONFIG_X86) += xen-detect
>  INSTALL_BIN := $(INSTALL_BIN-y)
>  
> -INSTALL_SBIN-y := xen-bugtool xen-python-path xenperf xenpm xen-tmem-list-parse gtraceview \
> +INSTALL_SBIN-y := xen-bugtool xenperf xenpm xen-tmem-list-parse gtraceview \
>  	gtracestat xenlockprof xenwatchdogd xen-ringwatch xencov
>  INSTALL_SBIN-$(CONFIG_X86) += xen-hvmctx xen-hvmcrash xen-lowmemd xen-mfndump
>  INSTALL_SBIN-$(CONFIG_MIGRATE) += xen-hptool
> @@ -39,7 +37,6 @@ all: build
>  
>  .PHONY: build
>  build: $(TARGETS)
> -	set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d; done
>  
>  .PHONY: install
>  install: build
> @@ -49,12 +46,10 @@ install: build
>  	$(INSTALL_PYTHON_PROG) $(INSTALL_BIN) $(DESTDIR)$(BINDIR)
>  	$(INSTALL_PYTHON_PROG) $(INSTALL_SBIN) $(DESTDIR)$(SBINDIR)
>  	$(INSTALL_PYTHON_PROG) $(INSTALL_PRIVBIN) $(DESTDIR)$(LIBEXEC_BIN)
> -	set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d install-recurse; done
>  
>  .PHONY: clean
>  clean:
>  	$(RM) *.o $(TARGETS) *~ $(DEPS)
> -	set -e; for d in $(SUBDIRS); do $(MAKE) -C $$d clean; done
>  
>  xen-hvmctx: xen-hvmctx.o
>  	$(CC) $(LDFLAGS) -o $@ $< $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS)
> diff --git a/tools/misc/nsplitd/Makefile b/tools/misc/nsplitd/Makefile
> deleted file mode 100644
> index 91ccf4d..0000000
> --- a/tools/misc/nsplitd/Makefile
> +++ /dev/null
> @@ -1,25 +0,0 @@
> -XEN_ROOT := $(CURDIR)/../../..
> -include $(XEN_ROOT)/tools/Rules.mk
> -
> -CFILES = $(wildcard *.c)
> -
> -HDRS     = $(wildcard *.h)
> -OBJS     = $(patsubst %.c,%.o,$(wildcard *.c))
> -
> -TARGET   = nsplitd
> -
> -.PHONY: all
> -all: $(TARGET)
> -
> -.PHONY: install
> -install: all
> -
> -.PHONY: clean
> -clean:
> -	$(RM) *.o $(TARGET) *~
> -
> -$(TARGET): $(OBJS)
> -	$(HOSTCC) $(HOSTCFLAGS) -o $@ $^
> -
> -%.o: %.c $(HDRS) Makefile
> -	$(HOSTCC) $(HOSTCFLAGS) -c -o $@ $<
> diff --git a/tools/misc/nsplitd/nsplitd.c b/tools/misc/nsplitd/nsplitd.c
> deleted file mode 100644
> index 32f0b56..0000000
> --- a/tools/misc/nsplitd/nsplitd.c
> +++ /dev/null
> @@ -1,686 +0,0 @@
> -/*
> - *	nsplitd.c
> - *	---------
> - *
> - * $Id: nsplitd.c,v 2.6 1998/09/17 14:28:37 sde1000 Exp $
> - *
> - * Copyright (c) 1995, University of Cambridge Computer Laboratory,
> - * Copyright (c) 1995, Richard Black, All Rights Reserved.
> - *
> - *
> - * A complete re-implementation of DME's nsplitd for use from inetd
> - *
> - */
> -
> -/* The basic stream comes in (via inetd) and we then conenct to
> - * somewhere else providing a loop-through service, except we offer
> - * two other ports for connection - one of which gets a second channel
> - * using the top bit to distinguish, and the other is a master control
> - * port (normally used for gdb) which gets complete exclusive access
> - * for its duration.
> - *
> - * Originally designed for multiplexing a xwcons/telnet with a gdb
> - * post-mortem debugging session.
> - *
> - * Here is a picture:
> - *
> - * 					    port0 (from inetd)
> - *      8-bit connection     	       	   /
> - * 	   made by us	   <----> nsplitd <-----gdbport (default port0+2)
> - * 	to host:port/tcp		  |\
> - * 					  | port1 (default port0+1)
> - *                                         \
> - *                                          control (default port0+3)
> - *
> - * If port1 is explicitly disabled (through a command-line option) then
> - * port0 becomes 8-bit clean.
> - */
> -
> -/*
> - * N.B.: We do NOT support 8 bit stdin/stdout usage on a
> - * /dev/... because to do that right involves much messing with ioctl
> - * and TIOC... etc.  If you want to do that sort of thing then the
> - * right way to do it is to chain this onto wconsd (which does know
> - * about and understand all the ioctl and TIOC grief).
> - */
> -
> -#include <sys/types.h>
> -#include <stdarg.h>
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <assert.h>
> -#include <errno.h>
> -#include <unistd.h>
> -#include <ctype.h>
> -#include <netdb.h>
> -#include <string.h>
> -
> -#include <sys/time.h>
> -#include <sys/signal.h>
> -#include <sys/socket.h>
> -#include <netinet/in.h>
> -#include <netinet/tcp.h>
> -#include <arpa/inet.h>
> -#include <sys/ioctl.h>
> -#include <syslog.h>
> -
> -#ifndef FALSE
> -#define FALSE 0
> -#endif
> -#ifndef TRUE
> -#define TRUE 1
> -#endif
> -
> -#ifndef LOG_DAEMON
> -#define LOG_DAEMON 0
> -#endif
> -
> -#define DB(x)  /* ((x), fflush(stderr)) */
> -
> -extern char *optarg;
> -
> -extern int optind, opterr, optopt;
> -
> -static char *prog_name;
> -
> -static void usage(void)
> -{
> -    fprintf(stderr, "This program (%s) should be run via inetd (tcp)\n\n",
> -	    prog_name);
> -    fprintf(stderr, "usage: %s [-h<highport>][-g<gdbport>]"
> -	    "[-c<ctlport>][-8] host:service\n",
> -	    prog_name);
> -    exit(1);
> -}
> -
> -static void fault(char *format, ...)
> -{
> -    va_list		ap;
> -    char		logbuf[1024];
> -
> -    va_start(ap, format);
> -    fprintf(stderr, "%s: ", prog_name);
> -    vfprintf(stderr, format, ap);
> -    fflush(stderr);
> -    va_end(ap);
> -    
> -    /* XXX This is a bit dubious, but there is no vsyslog */
> -    va_start(ap, format);
> -    vsnprintf(logbuf, sizeof(logbuf), format, ap);
> -    syslog(LOG_ERR, logbuf);
> -    va_end(ap);
> -    exit(1);
> -}
> -
> -static int getservice(char *name, unsigned short *port)
> -{
> -    struct servent		*se;
> -
> -    if (!name) return -1;
> -
> -    if (isdigit(name[0]))
> -	*port = atoi(name);
> -    else
> -    {
> -	if (!(se = getservbyname(name, "tcp")))
> -	    return -1;
> -	*port = ntohs(se->s_port);
> -    }
> -    return 0;
> -}
> -
> -/* 
> - *  connect_host: connect to ("name", "port")
> - */
> -static int connect_host (char *name, unsigned int port)
> -{
> -    int			fd;
> -    struct hostent	*hostent;
> -    struct sockaddr_in	sin;
> -    int			on;
> -    
> -    if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0)
> -	fault("socket");
> -    
> -    if (!(hostent = gethostbyname(name)))
> -	fault("gethostbyname: %s: %s\n", name, strerror(errno));
> -    
> -    memset(&sin, 0, sizeof(sin));
> -    sin.sin_family = AF_INET;
> -    sin.sin_port   = htons (port);
> -    memcpy(&sin.sin_addr.s_addr, hostent->h_addr, sizeof(struct in_addr));
> -    
> -    if (connect(fd, (struct sockaddr *) &sin, sizeof (sin)) < 0)
> -	fault("connect: %s:%u: %s\n", name, port, strerror(errno));
> -    
> -    on = 1;
> -    if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof (on)) < 0)
> -	syslog(LOG_WARNING, "setsockopt (TCP_NODELAY): %m");
> -
> -    on = 1;
> -    if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof (on)) < 0)
> -	syslog(LOG_WARNING, "setsockopt (SO_KEEPALIVE): %m");
> -
> -    return fd;
> -}
> -
> -/*
> - * open a tcp socket and start listening for connections on it
> - */
> -static int startlistening(unsigned short port)
> -{
> -    int			fd, on;
> -    struct sockaddr_in	sin;
> -
> -    if ((fd = socket (AF_INET, SOCK_STREAM, 0)) < 0)
> -	fault("socket");
> -    
> -    on = 1;
> -    if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof (on)) < 0)
> -      syslog(LOG_WARNING, "setsockopt (SO_REUSEADDR): %m");
> -
> -    memset(&sin, 0, sizeof(sin));
> -    sin.sin_family      = AF_INET;
> -    sin.sin_port        = htons (port);
> -    sin.sin_addr.s_addr = INADDR_ANY;
> -    if (bind(fd, &sin, sizeof(sin)) < 0)
> -	fault("bind: %u: %s\n", port, strerror(errno));
> -    
> -    if (listen(fd, 1) < 0)
> -	fault("listen: %s\n", strerror(errno));
> -    
> -    return fd;
> -}
> -
> -static void noblock(int fd)
> -{
> -    int on=1;
> -    
> -    if (ioctl(fd, FIONBIO, &on) < 0)
> -	fault("ioctl: FIONBIO: %s\n", strerror(errno));
> -}
> -
> -
> -/* You might not believe this, but fd_sets don't have to be a 32-bit
> - * integer.  In particular, in glibc2 it is an array of unsigned
> - * longs.  Hence, this hacked up FD_SET_rjb() that works out if it
> - * would have been a nop. */
> -#define FD_SET_rjb(fd, setp) \
> -do {						\
> -    if ((fd) != 32)				\
> -	FD_SET((fd), (setp));			\
> -} while(0)
> -
> -#define FD_ISSET_rjb(fd, setp) (((fd) != 32)? FD_ISSET((fd), (setp)) : 0)
> -
> -#define MAXSIZE	256
> -
> -/* -----------------------------------------------------------------
> - * The main bit of the algorithm. Note we use 32 to mean not connected
> - * because this gives us 1<<32 == 0. We could have done this one
> - * character at a time, but that would have been very inefficient and
> - * not the unix way.  */
> -static int debug;
> -
> -static void doit(int actl, int acto, int lish, int lisg, int lisc)
> -{
> -    int		acth, actg, actc;
> -    int		gdbmode = FALSE;
> -    char	gibuf[MAXSIZE], oibuf[MAXSIZE];
> -    char	libuf[MAXSIZE], lobuf[MAXSIZE];
> -    char	hibuf[MAXSIZE], hobuf[MAXSIZE];
> -    char	ctlbuf[MAXSIZE];
> -    fd_set	rdfs, wrfs, exfs;
> -    int		gicc, oicc, licc, locc, hicc, hocc, ctlcc;
> -    char	*giptr, *oiptr, *liptr, *loptr, *hiptr, *hoptr;
> -    int		rc, fromlen;
> -    struct sockaddr_in		from;
> -    
> -    gicc = oicc = licc = locc = hicc = hocc = ctlcc = 0;
> -    acth = actg = actc = 32;			/* XXX yummy */
> -
> -    noblock(actl);
> -    noblock(acto);
> -
> -    for(;;)
> -    {
> -	FD_ZERO(&rdfs);
> -	FD_ZERO(&wrfs);
> -	FD_ZERO(&exfs);
> -
> -	/* always take input from the control port (if it's connected) */
> -	FD_SET_rjb(actc, &rdfs);
> -
> -	if (gdbmode)
> -	{
> -	    if (oicc)
> -		FD_SET_rjb(actg, &wrfs);
> -	    else
> -		FD_SET_rjb(acto, &rdfs);
> -	    
> -	    if (gicc)
> -		FD_SET_rjb(acto, &wrfs);
> -	    else
> -		FD_SET_rjb(actg, &rdfs);
> -	}
> -	else
> -	{
> -	    /* There is no such thing as oibuf because its been split into
> -	     * lobuf and hobuf
> -	     */
> -	    if (locc || hocc)
> -	    {
> -		if (locc)
> -		    FD_SET_rjb(actl, &wrfs);
> -		if (hocc)
> -		    FD_SET_rjb(acth, &wrfs);
> -	    }
> -	    else
> -		FD_SET_rjb(acto, &rdfs);
> -	    
> -	    if (licc)
> -		FD_SET_rjb(acto, &wrfs);
> -	    else
> -		FD_SET_rjb(actl, &rdfs);
> -	    
> -	    if (hicc)
> -		FD_SET_rjb(acto, &wrfs);
> -	    else
> -		FD_SET_rjb(acth, &rdfs);
> -	}
> -	
> -	if (acth == 32 && lish>=0)	FD_SET_rjb(lish, &rdfs);
> -	if (actg == 32)			FD_SET_rjb(lisg, &rdfs);
> -	if (actc == 32)			FD_SET_rjb(lisc, &rdfs);
> -
> -	/* now make exfs the union of the read and write fd sets, plus
> -	 * "actl" */
> -	{
> -	    int i;
> -	    exfs = rdfs;
> -	    for(i=0; i<32; i++)  /* XXX we only copy fd numbers up to 31 */
> -		if (FD_ISSET(i, &wrfs))
> -		    FD_SET_rjb(i, &exfs);
> -	    FD_SET_rjb(actl, &exfs);
> -	}
> -
> -	/* XXX AND: can't print something of type fd_set as %x - it
> -         * might be an array */
> -	DB(fprintf(stderr, "%s: before select: %08x %08x %08x\n",
> -		   prog_name, rdfs, wrfs, exfs));
> -	
> -	if (select(32, &rdfs, &wrfs, &exfs, NULL) < 0)
> -	    fault("select: %s\n", strerror(errno));
> -	
> -	DB(fprintf(stderr, "%s: after  select: %08x %08x %08x\n",
> -		   prog_name, rdfs, wrfs, exfs));
> -	
> -	/* XXX it appears that a non-blocking socket may not show up
> -	 * correctly in exfs but instead goes readable with no data in
> -	 * it. Thus we check for zero and goto the appropriate close
> -	 * method.  */
> -
> -	/* Deal with exceptions */
> -	if (FD_ISSET_rjb(actg, &exfs))
> -	{
> -	exfs_actg:
> -	    close(actg);
> -	    gdbmode = FALSE;
> -	    oicc = 0;
> -	    oiptr = oibuf;
> -	    actg = 32;
> -	    continue;		/* because assumptions changed */
> -	}
> -	if (FD_ISSET_rjb(acth, &exfs))
> -	{
> -	exfs_acth:
> -	    close(acth);
> -	    hicc = hocc = 0;
> -	    hiptr = hibuf;
> -	    hoptr = hibuf;
> -	    acth = 32;
> -	    continue;		/* because assumptions changed */
> -	}
> -	if (FD_ISSET_rjb(actl, &exfs) ||
> -	    FD_ISSET_rjb(acto, &exfs))
> -	{
> -	exfs_actl:
> -	exfs_acto:
> -	    /* Thats all folks ... */
> -	    break;
> -	}
> -	if (FD_ISSET_rjb(actc, &exfs))
> -	{
> -	exfs_ctl:
> -	    close(actc);
> -	    actc = 32;
> -	    ctlcc = 0;
> -	    continue;
> -	}
> -
> -	/* Deal with reading */
> -	if (FD_ISSET_rjb(acto, &rdfs))
> -	{
> -	    if ((oicc = read(acto, oiptr = oibuf, MAXSIZE)) < 0)
> -		fault("read acto: %d: %s\n", oicc, strerror(errno));
> -	    if (!oicc) goto exfs_acto;
> -	    
> -	    if (!gdbmode)
> -	    {
> -		int t;
> -
> -		assert((locc == 0) && (hocc == 0));
> -		loptr = lobuf;
> -		hoptr = hobuf;
> -		
> -		if (lish>=0) {
> -		    for(t=0; t<oicc; t++)
> -			if (oibuf[t] & 0x80)
> -			    hobuf[hocc++] = oibuf[t] & 0x7f;
> -			else
> -			    lobuf[locc++] = oibuf[t];
> -		} else {
> -		    for (t=0; t<oicc; t++)
> -			lobuf[locc++] = oibuf[t];
> -		}
> -		/* If no high connection scratch that */
> -		if (acth == 32)
> -		    hocc=0;
> -	    }
> -	}
> -	if (FD_ISSET_rjb(actl, &rdfs))
> -	{
> -	    if ((licc = read(actl, liptr = libuf, MAXSIZE)) < 0)
> -		fault("read actl: %d: %s\n", licc, strerror(errno));
> -	    if (!licc) goto exfs_actl;
> -	}
> -	if (FD_ISSET_rjb(acth, &rdfs))
> -	{
> -	    int t;
> -	    
> -	    if ((hicc = read(acth, hiptr = hibuf, MAXSIZE)) < 0)
> -		fault("read acth: %d: %s\n", hicc, strerror(errno));
> -	    if (!hicc) goto exfs_acth;
> -	    for(t=0; t<hicc; t++)
> -		hibuf[t] |= 0x80;
> -	}
> -	if (FD_ISSET_rjb(actg, &rdfs))
> -	{
> -	    if ((gicc = read(actg, giptr = gibuf, MAXSIZE)) < 0)
> -		fault("read actg: %d: %s\n", gicc, strerror(errno));
> -	    if (debug) write(1, giptr, gicc);		/* XXX */
> -	    if (!gicc) goto exfs_actg;
> -	}
> -	if (FD_ISSET_rjb(actc, &rdfs))
> -	{
> -	    if ((ctlcc = read(actc, ctlbuf, MAXSIZE)) < 0)
> -		fault("read actc: %d: %s\n", ctlcc, strerror(errno));
> -	    if (debug) write(1, ctlbuf, gicc);
> -	    if (!ctlcc) goto exfs_ctl;
> -	    if (ctlbuf[0] == 'r') /* reset command */
> -	    {
> -		syslog(LOG_INFO, "reset command read, exiting");
> -		if (debug) write(1, "reseting\n", sizeof("reseting\n"));
> -		break;
> -	    }
> -	}
> -	
> -	/* Deal with writing */
> -	if (FD_ISSET_rjb(actg, &wrfs))
> -	{
> -	    /* We must be in gdb mode so send oi buffer data */
> -	    assert(gdbmode);
> -	    if (debug) write(2, oiptr, oicc);		/* XXX */
> -	    if ((rc = write(actg, oiptr, oicc)) <= 0)
> -		fault("write actg: %d: %s\n", rc, strerror(errno));
> -	    oiptr += rc;
> -	    oicc  -= rc;
> -	}
> -	if (FD_ISSET_rjb(actl, &wrfs))
> -	{
> -	    if ((rc = write(actl, loptr, locc)) <= 0)
> -		fault("write actl: %d: %s\n", rc, strerror(errno));
> -	    loptr += rc;
> -	    locc  -= rc;
> -	}
> -	if (FD_ISSET_rjb(acth, &wrfs))
> -	{
> -	    if ((rc = write(acth, hoptr, hocc)) <= 0)
> -		fault("write acth: %d: %s\n", rc, strerror(errno));
> -	    hoptr += rc;
> -	    hocc  -= rc;
> -	}
> -	if (FD_ISSET_rjb(acto, &wrfs))
> -	{
> -	    /* If in gdb mode send gdb input, otherwise send low data
> -	       preferentially */
> -	    if (gdbmode)
> -	    {
> -		assert(gicc);
> -		if ((rc = write(acto, giptr, gicc)) <= 0)
> -		    fault("write acto: %d: %s\n", rc, strerror(errno));
> -		giptr += rc;
> -		gicc  -= rc;
> -	    }
> -	    else
> -	    {
> -		if (licc)
> -		{
> -		    if ((rc = write(acto, liptr, licc)) <= 0)
> -			fault("write acto: %d: %s\n", rc, strerror(errno));
> -		    liptr += rc;
> -		    licc  -= rc;
> -		}
> -		else
> -		{
> -		    assert(hicc);
> -		    if ((rc = write(acto, hiptr, hicc)) <= 0)
> -			fault("write acto: %d: %s\n", rc, strerror(errno));
> -		    hiptr += rc;
> -		    hicc  -= rc;
> -		}
> -	    }
> -	}
> -	
> -	/* Deals with new connections */
> -	if ((acth == 32) && lish>=0 && (FD_ISSET_rjb(lish, &rdfs)))
> -	{
> -	    fromlen = sizeof(from);
> -	    if ((acth = accept(lish, &from, &fromlen)) < 0)
> -	    {
> -		syslog(LOG_WARNING, "accept: %m");
> -		acth = 32;
> -	    }
> -	    else
> -	    {
> -		noblock(acth);
> -		hicc = hocc = 0;
> -		syslog(LOG_INFO, "highbit client peer is %s:%u\n",
> -		       inet_ntoa(from.sin_addr), ntohs(from.sin_port));
> -	    }
> -	}
> -	
> -	if ((actg == 32) && (FD_ISSET_rjb(lisg, &rdfs)))
> -	{
> -	    fromlen = sizeof(from);
> -	    if ((actg = accept(lisg, &from, &fromlen)) < 0)
> -	    {
> -		syslog(LOG_WARNING, "accept: %m");
> -		actg = 32;
> -	    }
> -	    else
> -	    {
> -		noblock(actg);
> -		gicc = 0;
> -		gdbmode = TRUE;
> -		syslog(LOG_INFO, "gdb client peer is %s:%u\n",
> -		       inet_ntoa(from.sin_addr), ntohs(from.sin_port));
> -	    }
> -	}
> -
> -	if ((actc == 32) && (FD_ISSET_rjb(lisc, &rdfs)))
> -	{
> -	    fromlen = sizeof(from);
> -	    if ((actc = accept(lisc, &from, &fromlen)) < 0)
> -	    {
> -		syslog(LOG_WARNING, "accept (ctl): %m");
> -		actc = 32;
> -	    }
> -	    else
> -	    {
> -		noblock(actc);
> -		syslog(LOG_INFO, "ctl client peer is %s:%u\n",
> -		       inet_ntoa(from.sin_addr), ntohs(from.sin_port));
> -	    }
> -	}
> -	    
> -	/* Back to top of loop */
> -    }
> -    
> -    /* We are bailing because one of the primary connections has gone
> -     * away. We close these all explicitly here because that way the
> -     * timeout on reusing the port numbers is smnaller. */
> -    
> -    close(acth);
> -    close(actg);
> -    /* XXX AND: why are we closing all these "character counts" ?? */
> -    close(gicc);
> -    close(oicc);
> -    close(licc);
> -    close(locc);
> -    close(hicc);
> -    close(hocc);
> -}
> -
> -/*
> - * ------------------------------------------------------------
> - */
> -int main(int argc, char **argv)
> -{
> -    /* In general, suffix "l" is low channel, "h" is high channel, "g"
> -     * is gdb channel, "c" is control channel and "o" is output channel.
> -     */
> -    struct sockaddr_in		from;
> -    int				infd = 0, outfd;
> -    unsigned short		portl, porth, portg, portc, porto;
> -    int				on = 1, c;
> -    char			*outname, *outservice;
> -    int				fromlen;
> -    int				lish, lisg, lisc;
> -#if 0
> -    FILE			*newerr;
> -#endif /* 0 */
> -    
> -    prog_name = argv[0];
> -
> -    if (isatty(infd))
> -	usage();
> -
> -    /* Here, then not just a simple idiot. */
> -
> -    signal(SIGPIPE, SIG_IGN);
> -
> -    openlog(prog_name, LOG_PID, LOG_DAEMON);
> -
> -    fromlen = sizeof(from);
> -    if (getsockname(infd, &from, &fromlen) < 0)
> -	fault("getsockname: %s", strerror(errno));
> -    if ((fromlen != sizeof(from)) || (from.sin_family != AF_INET))
> -	fault("not an inet socket (family=%d)\n", from.sin_family);
> -    
> -    portl = ntohs(from.sin_port);
> -    porth = portl+1;
> -    portg = porth+1;
> -    portc = portg+1;
> -
> -    fromlen = sizeof(from);
> -    if (getpeername(infd, &from, &fromlen) < 0)
> -	fault("getpeername: %s", strerror(errno));
> -    if ((fromlen != sizeof(from)) || (from.sin_family != AF_INET))
> -	fault("not an inet socket (family=%d)\n", from.sin_family);
> -
> -    syslog(LOG_INFO, "on port %u peer is %s:%u\n", portl,
> -	   inet_ntoa(from.sin_addr), ntohs(from.sin_port));
> -    
> -    if (setsockopt(infd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof (on)) < 0)
> -	syslog(LOG_WARNING, "setsockopt (SO_KEEPALIVE): %m");
> -
> -    /* from here on, we map stderr to output on the connection so we can
> -     * report errors to the remote user.
> -     */
> -#if 0
> -    if (!(newerr = fdopen(infd, "w")))
> -	syslog(LOG_WARNING, "fdopen: %m");
> -    else
> -	*stderr = *newerr;
> -#endif
> -	
> -    while((c = getopt(argc, argv, "d8h:g:c:")) != EOF)
> -    {
> -	switch(c)
> -	{
> -	case 'd':
> -	    debug++;
> -	    break;
> -	    
> -	case 'h':
> -	    /* high bit port */
> -	    if (getservice(optarg, &porth) < 0)
> -		fault("getservice failed (high port '%s')\n", optarg);
> -	    break;
> -	    
> -	case 'g':
> -	    /* gdb port */
> -	    if (getservice(optarg, &portg) < 0)
> -		fault("getservice failed (gdb port '%s')\n", optarg);
> -	    break;
> -
> -	case 'c':
> -	    /* control port */
> -	    if (getservice(optarg, &portc) < 0)
> -		fault("getservice failed (control port '%s')\n", optarg);
> -	    break;
> -
> -	case '8':
> -	    /* 8-bit clean; no high port */
> -	    porth=0;
> -	    break;
> -
> -	default:
> -	    fault("bad argument list!\n");
> -	}
> -    }
> -    
> -    if (argc != optind + 1)
> -	fault("unparsed arguments (%d!=%d)\n", argc, optind+1);
> -
> -    outname = argv[optind];
> -    if (!(outservice = strchr(outname, ':')))
> -	fault("output arg '%s' doesn't contain ':'\n", outname);
> -    *outservice++ = 0;
> -    if (getservice(outservice, &porto) < 0)
> -	fault("getservice failed (output port '%s')\n", outservice);
> -    
> -    /* Time to start the sockets */
> -
> -    if (porth) {
> -	lish  = startlistening(porth);
> -    } else {
> -	lish  = -1;
> -    }
> -    lisg  = startlistening(portg);
> -    lisc  = startlistening(portc);
> -    
> -    outfd = connect_host(outname, porto);
> -    
> -    doit(infd, outfd, lish, lisg, lisc);
> -
> -    syslog(LOG_INFO, "terminating normally\n");
> -
> -    fclose(stderr);
> -
> -    closelog();
> -    exit(0); 
> -}
> -
> -/* End $Id: nsplitd.c,v 2.6 1998/09/17 14:28:37 sde1000 Exp $ */
> diff --git a/tools/misc/xen-python-path b/tools/misc/xen-python-path
> deleted file mode 100644
> index 073abae..0000000
> --- a/tools/misc/xen-python-path
> +++ /dev/null
> @@ -1,24 +0,0 @@
> -#!/usr/bin/env python
> -#  -*- mode: python; -*-
> -#============================================================================
> -# This library is free software; you can redistribute it and/or
> -# modify it under the terms of version 2.1 of the GNU Lesser General Public
> -# License as published by the Free Software Foundation.
> -#
> -# This library 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
> -# Lesser General Public License for more details.
> -#
> -# You should have received a copy of the GNU Lesser General Public
> -# License along with this library; if not, write to the Free Software
> -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> -#============================================================================
> -# Copyright (C) 2007 XenSource Inc.
> -#============================================================================
> -
> -# Nowadays we install xen in the standard python site-packages
> -# directories.  This script is still provided for the benefit of old
> -# out-of-xen-tree callers.  It is deprecated and will be removed.
> -
> -print '/dev/enoent/xen/python-path'
> -- 
> 1.7.10.4
> 

  reply	other threads:[~2014-10-17 16:13 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-15 17:33 [PATCH for-4.5 0/4] Build systems fixes/improvements Andrew Cooper
2014-10-15 17:33 ` [PATCH for-4.5 1/4] tools/mceinject: Fix build after 31d2d1e08a Andrew Cooper
2014-10-15 17:33 ` [PATCH for-4.5 2/4] tools/build: Fix root build target Andrew Cooper
2014-10-15 17:33 ` [PATCH for-4.5 3/4] tools/misc: Delete more obsolete utilities Andrew Cooper
2014-10-17 16:13   ` Konrad Rzeszutek Wilk [this message]
2014-10-20 15:08     ` Ian Campbell
2014-10-20 17:04       ` Konrad Rzeszutek Wilk
2014-10-15 17:33 ` [PATCH for-4.5 4/4] tools/misc: Cleanup makefile Andrew Cooper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141017161317.GA10212@laptop.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.