X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=lib%2Fstream-unix.c;h=cadd1801973b046d36208b6250c1906697003e93;hb=968eec593cc61690c9e0ed97450c4889258381af;hp=99a996238ee405eccbe4481ac7fcf8e9b85b2817;hpb=e0edde6fee279cdbbf3c179f5f50adaf0c7c7f1e;p=cascardo%2Fovs.git diff --git a/lib/stream-unix.c b/lib/stream-unix.c index 99a996238..cadd18019 100644 --- a/lib/stream-unix.c +++ b/lib/stream-unix.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ #include #include "stream.h" -#include #include #include #include @@ -30,10 +29,11 @@ #include "packets.h" #include "poll-loop.h" #include "socket-util.h" +#include "dirs.h" #include "util.h" #include "stream-provider.h" #include "stream-fd.h" -#include "vlog.h" +#include "openvswitch/vlog.h" VLOG_DEFINE_THIS_MODULE(stream_unix); @@ -43,16 +43,22 @@ static int unix_open(const char *name, char *suffix, struct stream **streamp, uint8_t dscp OVS_UNUSED) { - const char *connect_path = suffix; + char *connect_path; int fd; - fd = make_unix_socket(SOCK_STREAM, true, false, NULL, connect_path); + connect_path = abs_file_name(ovs_rundir(), suffix); + fd = make_unix_socket(SOCK_STREAM, true, NULL, connect_path); + if (fd < 0) { - VLOG_ERR("%s: connection failed (%s)", connect_path, strerror(-fd)); + VLOG_DBG("%s: connection failed (%s)", + connect_path, ovs_strerror(-fd)); + free(connect_path); return -fd; } - return new_fd_stream(name, fd, check_connection_completion(fd), streamp); + free(connect_path); + return new_fd_stream(name, fd, check_connection_completion(fd), + AF_UNIX, streamp); } const struct stream_class unix_stream_class = { @@ -70,38 +76,41 @@ const struct stream_class unix_stream_class = { /* Passive UNIX socket. */ -static int punix_accept(int fd, const struct sockaddr *sa, size_t sa_len, - struct stream **streamp); +static int punix_accept(int fd, const struct sockaddr_storage *ss, + size_t ss_len, struct stream **streamp); static int punix_open(const char *name OVS_UNUSED, char *suffix, struct pstream **pstreamp, uint8_t dscp OVS_UNUSED) { + char *bind_path; int fd, error; - fd = make_unix_socket(SOCK_STREAM, true, true, suffix, NULL); + bind_path = abs_file_name(ovs_rundir(), suffix); + fd = make_unix_socket(SOCK_STREAM, true, bind_path, NULL); if (fd < 0) { - VLOG_ERR("%s: binding failed: %s", suffix, strerror(errno)); + VLOG_ERR("%s: binding failed: %s", bind_path, ovs_strerror(errno)); + free(bind_path); return errno; } - if (listen(fd, 10) < 0) { + if (listen(fd, 64) < 0) { error = errno; - VLOG_ERR("%s: listen: %s", name, strerror(error)); + VLOG_ERR("%s: listen: %s", name, ovs_strerror(error)); close(fd); + free(bind_path); return error; } - return new_fd_pstream(name, fd, punix_accept, - xstrdup(suffix), pstreamp); + return new_fd_pstream(name, fd, punix_accept, bind_path, pstreamp); } static int -punix_accept(int fd, const struct sockaddr *sa, size_t sa_len, +punix_accept(int fd, const struct sockaddr_storage *ss, size_t ss_len, struct stream **streamp) { - const struct sockaddr_un *sun = (const struct sockaddr_un *) sa; - int name_len = get_unix_name_len(sa_len); + const struct sockaddr_un *sun = (const struct sockaddr_un *) ss; + int name_len = get_unix_name_len(ss_len); char name[128]; if (name_len > 0) { @@ -109,7 +118,7 @@ punix_accept(int fd, const struct sockaddr *sa, size_t sa_len, } else { strcpy(name, "unix"); } - return new_fd_stream(name, fd, 0, streamp); + return new_fd_stream(name, fd, 0, AF_UNIX, streamp); } const struct pstream_class punix_pstream_class = { @@ -118,6 +127,6 @@ const struct pstream_class punix_pstream_class = { punix_open, NULL, NULL, - NULL + NULL, };