Thanks for looking at these patches.

When I rebased these onto current master, I found that there were new
test failures due to Python tests added on master in the meantime.
Avoiding these (which are genuine bugs) requires a couple of
preparatory commits.  I'll re-send this as a 4-patch series soon.

On Wed, Mar 07, 2012 at 01:58:29PM -0800, Ethan Jackson wrote:
> Looks good, thanks.
> 
> Ethan
> 
> On Mon, Feb 27, 2012 at 11:17, Ben Pfaff <b...@nicira.com> wrote:
> > There's no reason for a Unix domain client socket to bind a name.  I don't
> > know why we've always done that.  Stevens's "Unix Network Programming"
> > Unix domain socket client example doesn't do a bind.
> >
> > Removes the 'unlink_path' parameter from new_fd_stream() since it is now
> > always passed as NULL.
> >
> > Signed-off-by: Ben Pfaff <b...@nicira.com>
> > ---
> >  lib/stream-fd.c      |   10 ++--------
> >  lib/stream-fd.h      |    4 ++--
> >  lib/stream-tcp.c     |    4 ++--
> >  lib/stream-unix.c    |   19 +++++--------------
> >  python/ovs/stream.py |   18 +++++-------------
> >  5 files changed, 16 insertions(+), 39 deletions(-)
> >
> > diff --git a/lib/stream-fd.c b/lib/stream-fd.c
> > index 7bf5ebd..38dba7c 100644
> > --- a/lib/stream-fd.c
> > +++ b/lib/stream-fd.c
> > @@ -1,5 +1,5 @@
> >  /*
> > - * Copyright (c) 2008, 2009, 2010 Nicira Networks.
> > + * Copyright (c) 2008, 2009, 2010, 2012 Nicira Networks.
> >  *
> >  * Licensed under the Apache License, Version 2.0 (the "License");
> >  * you may not use this file except in compliance with the License.
> > @@ -42,7 +42,6 @@ struct stream_fd
> >  {
> >     struct stream stream;
> >     int fd;
> > -    char *unlink_path;
> >  };
> >
> >  static const struct stream_class stream_fd_class;
> > @@ -55,21 +54,17 @@ static void maybe_unlink_and_free(char *path);
> >  * and stores a pointer to the stream in '*streamp'.  Initial connection 
> > status
> >  * 'connect_status' is interpreted as described for stream_init().
> >  *
> > - * When '*streamp' is closed, then 'unlink_path' (if nonnull) will be 
> > passed to
> > - * fatal_signal_unlink_file_now() and then freed with free().
> > - *
> >  * Returns 0 if successful, otherwise a positive errno value.  (The current
> >  * implementation never fails.) */
> >  int
> >  new_fd_stream(const char *name, int fd, int connect_status,
> > -              char *unlink_path, struct stream **streamp)
> > +              struct stream **streamp)
> >  {
> >     struct stream_fd *s;
> >
> >     s = xmalloc(sizeof *s);
> >     stream_init(&s->stream, &stream_fd_class, connect_status, name);
> >     s->fd = fd;
> > -    s->unlink_path = unlink_path;
> >     *streamp = &s->stream;
> >     return 0;
> >  }
> > @@ -86,7 +81,6 @@ fd_close(struct stream *stream)
> >  {
> >     struct stream_fd *s = stream_fd_cast(stream);
> >     close(s->fd);
> > -    maybe_unlink_and_free(s->unlink_path);
> >     free(s);
> >  }
> >
> > diff --git a/lib/stream-fd.h b/lib/stream-fd.h
> > index d2a34eb..b42615f 100644
> > --- a/lib/stream-fd.h
> > +++ b/lib/stream-fd.h
> > @@ -1,5 +1,5 @@
> >  /*
> > - * Copyright (c) 2008, 2009 Nicira Networks.
> > + * Copyright (c) 2008, 2009, 2012 Nicira Networks.
> >  *
> >  * Licensed under the Apache License, Version 2.0 (the "License");
> >  * you may not use this file except in compliance with the License.
> > @@ -26,7 +26,7 @@ struct pstream;
> >  struct sockaddr;
> >
> >  int new_fd_stream(const char *name, int fd, int connect_status,
> > -                      char *unlink_path, struct stream **streamp);
> > +                  struct stream **streamp);
> >  int new_fd_pstream(const char *name, int fd,
> >                    int (*accept_cb)(int fd, const struct sockaddr *,
> >                                     size_t sa_len, struct stream **),
> > diff --git a/lib/stream-tcp.c b/lib/stream-tcp.c
> > index 9a7614d..052ad8c 100644
> > --- a/lib/stream-tcp.c
> > +++ b/lib/stream-tcp.c
> > @@ -1,5 +1,5 @@
> >  /*
> > - * Copyright (c) 2008, 2009, 2010 Nicira Networks.
> > + * Copyright (c) 2008, 2009, 2010, 2012 Nicira Networks.
> >  *
> >  * Licensed under the Apache License, Version 2.0 (the "License");
> >  * you may not use this file except in compliance with the License.
> > @@ -58,7 +58,7 @@ new_tcp_stream(const char *name, int fd, int 
> > connect_status,
> >         return errno;
> >     }
> >
> > -    retval = new_fd_stream(name, fd, connect_status, NULL, streamp);
> > +    retval = new_fd_stream(name, fd, connect_status, streamp);
> >     if (!retval) {
> >         struct stream *stream = *streamp;
> >         stream_set_remote_ip(stream, remote->sin_addr.s_addr);
> > diff --git a/lib/stream-unix.c b/lib/stream-unix.c
> > index d7dde8f..d2e8e82 100644
> > --- a/lib/stream-unix.c
> > +++ b/lib/stream-unix.c
> > @@ -1,5 +1,5 @@
> >  /*
> > - * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
> > + * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks.
> >  *
> >  * Licensed under the Apache License, Version 2.0 (the "License");
> >  * you may not use this file except in compliance with the License.
> > @@ -39,28 +39,19 @@ VLOG_DEFINE_THIS_MODULE(stream_unix);
> >
> >  /* Active UNIX socket. */
> >
> > -/* Number of unix sockets created so far, to ensure binding path 
> > uniqueness. */
> > -static int n_unix_sockets;
> > -
> >  static int
> >  unix_open(const char *name, char *suffix, struct stream **streamp)
> >  {
> >     const char *connect_path = suffix;
> > -    char *bind_path;
> >     int fd;
> >
> > -    bind_path = xasprintf("/tmp/stream-unix.%ld.%d",
> > -                          (long int) getpid(), n_unix_sockets++);
> > -    fd = make_unix_socket(SOCK_STREAM, true, false, bind_path, 
> > connect_path);
> > +    fd = make_unix_socket(SOCK_STREAM, true, false, NULL, connect_path);
> >     if (fd < 0) {
> > -        VLOG_ERR("%s: connection to %s failed: %s",
> > -                 bind_path, connect_path, strerror(-fd));
> > -        free(bind_path);
> > +        VLOG_ERR("%s: connection failed (%s)", connect_path, 
> > strerror(-fd));
> >         return -fd;
> >     }
> >
> > -    return new_fd_stream(name, fd, check_connection_completion(fd),
> > -                         bind_path, streamp);
> > +    return new_fd_stream(name, fd, check_connection_completion(fd), 
> > streamp);
> >  }
> >
> >  const struct stream_class unix_stream_class = {
> > @@ -116,7 +107,7 @@ punix_accept(int fd, const struct sockaddr *sa, size_t 
> > sa_len,
> >     } else {
> >         strcpy(name, "unix");
> >     }
> > -    return new_fd_stream(name, fd, 0, NULL, streamp);
> > +    return new_fd_stream(name, fd, 0, streamp);
> >  }
> >
> >  const struct pstream_class punix_pstream_class = {
> > diff --git a/python/ovs/stream.py b/python/ovs/stream.py
> > index 7ea9e46..08c6293 100644
> > --- a/python/ovs/stream.py
> > +++ b/python/ovs/stream.py
> > @@ -1,4 +1,4 @@
> > -# Copyright (c) 2010, 2011 Nicira Networks
> > +# Copyright (c) 2010, 2011, 2012 Nicira Networks
> >  #
> >  # Licensed under the Apache License, Version 2.0 (the "License");
> >  # you may not use this file except in compliance with the License.
> > @@ -27,7 +27,6 @@ vlog = ovs.vlog.Vlog("stream")
> >  class Stream(object):
> >     """Bidirectional byte stream.  Currently only Unix domain sockets
> >     are implemented."""
> > -    n_unix_sockets = 0
> >
> >     # States.
> >     __S_CONNECTING = 0
> > @@ -46,10 +45,9 @@ class Stream(object):
> >         False."""
> >         return name.startswith("unix:")
> >
> > -    def __init__(self, socket, name, bind_path, status):
> > +    def __init__(self, socket, name, status):
> >         self.socket = socket
> >         self.name = name
> > -        self.bind_path = bind_path
> >         if status == errno.EAGAIN:
> >             self.state = Stream.__S_CONNECTING
> >         elif status == 0:
> > @@ -76,18 +74,15 @@ class Stream(object):
> >         if not Stream.is_valid_name(name):
> >             return errno.EAFNOSUPPORT, None
> >
> > -        Stream.n_unix_sockets += 1
> > -        bind_path = "/tmp/stream-unix.%d.%d" % (os.getpid(),
> > -                                                Stream.n_unix_sockets)
> >         connect_path = name[5:]
> >         error, sock = ovs.socket_util.make_unix_socket(socket.SOCK_STREAM,
> > -                                                       True, bind_path,
> > +                                                       True, None,
> >                                                        connect_path)
> >         if error:
> >             return error, None
> >         else:
> >             status = ovs.socket_util.check_connection_completion(sock)
> > -            return 0, Stream(sock, name, bind_path, status)
> > +            return 0, Stream(sock, name, status)
> >
> >     @staticmethod
> >     def open_block((error, stream)):
> > @@ -117,9 +112,6 @@ class Stream(object):
> >
> >     def close(self):
> >         self.socket.close()
> > -        if self.bind_path is not None:
> > -            ovs.fatal_signal.unlink_file_now(self.bind_path)
> > -            self.bind_path = None
> >
> >     def __scs_connecting(self):
> >         retval = ovs.socket_util.check_connection_completion(self.socket)
> > @@ -288,7 +280,7 @@ class PassiveStream(object):
> >             try:
> >                 sock, addr = self.socket.accept()
> >                 ovs.socket_util.set_nonblocking(sock)
> > -                return 0, Stream(sock, "unix:%s" % addr, None, 0)
> > +                return 0, Stream(sock, "unix:%s" % addr, 0)
> >             except socket.error, e:
> >                 error = ovs.socket_util.get_exception_errno(e)
> >                 if error != errno.EAGAIN:
> > --
> > 1.7.2.5
> >
> > _______________________________________________
> > dev mailing list
> > dev@openvswitch.org
> > http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to