lib: Add header #include for writev
[sliver-openvswitch.git] / lib / socket-util.c
1 /*
2  * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <config.h>
18 #include "socket-util.h"
19 #include <arpa/inet.h>
20 #include <assert.h>
21 #include <errno.h>
22 #include <fcntl.h>
23 #include <net/if.h>
24 #include <netdb.h>
25 #include <poll.h>
26 #include <stddef.h>
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <string.h>
30 #include <sys/resource.h>
31 #include <sys/socket.h>
32 #include <sys/stat.h>
33 #include <sys/uio.h>
34 #include <sys/un.h>
35 #include <unistd.h>
36 #include "dynamic-string.h"
37 #include "fatal-signal.h"
38 #include "packets.h"
39 #include "poll-loop.h"
40 #include "util.h"
41 #include "vlog.h"
42 #if AF_PACKET && __linux__
43 #include <linux/if_packet.h>
44 #endif
45 #ifdef HAVE_NETLINK
46 #include "netlink-protocol.h"
47 #include "netlink-socket.h"
48 #endif
49
50 VLOG_DEFINE_THIS_MODULE(socket_util);
51
52 /* #ifdefs make it a pain to maintain code: you have to try to build both ways.
53  * Thus, this file compiles all of the code regardless of the target, by
54  * writing "if (LINUX)" instead of "#ifdef __linux__". */
55 #ifdef __linux__
56 #define LINUX 1
57 #else
58 #define LINUX 0
59 #endif
60
61 #ifndef O_DIRECTORY
62 #define O_DIRECTORY 0
63 #endif
64
65 static int getsockopt_int(int fd, int level, int option, const char *optname,
66                           int *valuep);
67
68 /* Sets 'fd' to non-blocking mode.  Returns 0 if successful, otherwise a
69  * positive errno value. */
70 int
71 set_nonblocking(int fd)
72 {
73     int flags = fcntl(fd, F_GETFL, 0);
74     if (flags != -1) {
75         if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) != -1) {
76             return 0;
77         } else {
78             VLOG_ERR("fcntl(F_SETFL) failed: %s", strerror(errno));
79             return errno;
80         }
81     } else {
82         VLOG_ERR("fcntl(F_GETFL) failed: %s", strerror(errno));
83         return errno;
84     }
85 }
86
87 void
88 xset_nonblocking(int fd)
89 {
90     if (set_nonblocking(fd)) {
91         exit(EXIT_FAILURE);
92     }
93 }
94
95 static int
96 set_dscp(int fd, uint8_t dscp)
97 {
98     int val;
99
100     if (dscp > 63) {
101         return EINVAL;
102     }
103
104     val = dscp << 2;
105     if (setsockopt(fd, IPPROTO_IP, IP_TOS, &val, sizeof val)) {
106         return errno;
107     }
108
109     return 0;
110 }
111
112 static bool
113 rlim_is_finite(rlim_t limit)
114 {
115     if (limit == RLIM_INFINITY) {
116         return false;
117     }
118
119 #ifdef RLIM_SAVED_CUR           /* FreeBSD 8.0 lacks RLIM_SAVED_CUR. */
120     if (limit == RLIM_SAVED_CUR) {
121         return false;
122     }
123 #endif
124
125 #ifdef RLIM_SAVED_MAX           /* FreeBSD 8.0 lacks RLIM_SAVED_MAX. */
126     if (limit == RLIM_SAVED_MAX) {
127         return false;
128     }
129 #endif
130
131     return true;
132 }
133
134 /* Returns the maximum valid FD value, plus 1. */
135 int
136 get_max_fds(void)
137 {
138     static int max_fds = -1;
139     if (max_fds < 0) {
140         struct rlimit r;
141         if (!getrlimit(RLIMIT_NOFILE, &r) && rlim_is_finite(r.rlim_cur)) {
142             max_fds = r.rlim_cur;
143         } else {
144             VLOG_WARN("failed to obtain fd limit, defaulting to 1024");
145             max_fds = 1024;
146         }
147     }
148     return max_fds;
149 }
150
151 /* Translates 'host_name', which must be a string representation of an IP
152  * address, into a numeric IP address in '*addr'.  Returns 0 if successful,
153  * otherwise a positive errno value. */
154 int
155 lookup_ip(const char *host_name, struct in_addr *addr)
156 {
157     if (!inet_aton(host_name, addr)) {
158         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
159         VLOG_ERR_RL(&rl, "\"%s\" is not a valid IP address", host_name);
160         return ENOENT;
161     }
162     return 0;
163 }
164
165 /* Translates 'host_name', which must be a string representation of an IPv6
166  * address, into a numeric IPv6 address in '*addr'.  Returns 0 if successful,
167  * otherwise a positive errno value. */
168 int
169 lookup_ipv6(const char *host_name, struct in6_addr *addr)
170 {
171     if (inet_pton(AF_INET6, host_name, addr) != 1) {
172         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
173         VLOG_ERR_RL(&rl, "\"%s\" is not a valid IPv6 address", host_name);
174         return ENOENT;
175     }
176     return 0;
177 }
178
179 /* Translates 'host_name', which must be a host name or a string representation
180  * of an IP address, into a numeric IP address in '*addr'.  Returns 0 if
181  * successful, otherwise a positive errno value.
182  *
183  * Most Open vSwitch code should not use this because it causes deadlocks:
184  * gethostbyname() sends out a DNS request but that starts a new flow for which
185  * OVS must set up a flow, but it can't because it's waiting for a DNS reply.
186  * The synchronous lookup also delays other activity.  (Of course we can solve
187  * this but it doesn't seem worthwhile quite yet.)  */
188 int
189 lookup_hostname(const char *host_name, struct in_addr *addr)
190 {
191     struct hostent *h;
192
193     if (inet_aton(host_name, addr)) {
194         return 0;
195     }
196
197     h = gethostbyname(host_name);
198     if (h) {
199         *addr = *(struct in_addr *) h->h_addr;
200         return 0;
201     }
202
203     return (h_errno == HOST_NOT_FOUND ? ENOENT
204             : h_errno == TRY_AGAIN ? EAGAIN
205             : h_errno == NO_RECOVERY ? EIO
206             : h_errno == NO_ADDRESS ? ENXIO
207             : EINVAL);
208 }
209
210 /* Returns the error condition associated with socket 'fd' and resets the
211  * socket's error status. */
212 int
213 get_socket_error(int fd)
214 {
215     int error;
216
217     if (getsockopt_int(fd, SOL_SOCKET, SO_ERROR, "SO_ERROR", &error)) {
218         error = errno;
219     }
220     return error;
221 }
222
223 int
224 check_connection_completion(int fd)
225 {
226     struct pollfd pfd;
227     int retval;
228
229     pfd.fd = fd;
230     pfd.events = POLLOUT;
231     do {
232         retval = poll(&pfd, 1, 0);
233     } while (retval < 0 && errno == EINTR);
234     if (retval == 1) {
235         return get_socket_error(fd);
236     } else if (retval < 0) {
237         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 10);
238         VLOG_ERR_RL(&rl, "poll: %s", strerror(errno));
239         return errno;
240     } else {
241         return EAGAIN;
242     }
243 }
244
245 /* Drain all the data currently in the receive queue of a datagram socket (and
246  * possibly additional data).  There is no way to know how many packets are in
247  * the receive queue, but we do know that the total number of bytes queued does
248  * not exceed the receive buffer size, so we pull packets until none are left
249  * or we've read that many bytes. */
250 int
251 drain_rcvbuf(int fd)
252 {
253     int rcvbuf;
254
255     rcvbuf = get_socket_rcvbuf(fd);
256     if (rcvbuf < 0) {
257         return -rcvbuf;
258     }
259
260     while (rcvbuf > 0) {
261         /* In Linux, specifying MSG_TRUNC in the flags argument causes the
262          * datagram length to be returned, even if that is longer than the
263          * buffer provided.  Thus, we can use a 1-byte buffer to discard the
264          * incoming datagram and still be able to account how many bytes were
265          * removed from the receive buffer.
266          *
267          * On other Unix-like OSes, MSG_TRUNC has no effect in the flags
268          * argument. */
269         char buffer[LINUX ? 1 : 2048];
270         ssize_t n_bytes = recv(fd, buffer, sizeof buffer,
271                                MSG_TRUNC | MSG_DONTWAIT);
272         if (n_bytes <= 0 || n_bytes >= rcvbuf) {
273             break;
274         }
275         rcvbuf -= n_bytes;
276     }
277     return 0;
278 }
279
280 /* Returns the size of socket 'sock''s receive buffer (SO_RCVBUF), or a
281  * negative errno value if an error occurs. */
282 int
283 get_socket_rcvbuf(int sock)
284 {
285     int rcvbuf;
286     int error;
287
288     error = getsockopt_int(sock, SOL_SOCKET, SO_RCVBUF, "SO_RCVBUF", &rcvbuf);
289     return error ? -error : rcvbuf;
290 }
291
292 /* Reads and discards up to 'n' datagrams from 'fd', stopping as soon as no
293  * more data can be immediately read.  ('fd' should therefore be in
294  * non-blocking mode.)*/
295 void
296 drain_fd(int fd, size_t n_packets)
297 {
298     for (; n_packets > 0; n_packets--) {
299         /* 'buffer' only needs to be 1 byte long in most circumstances.  This
300          * size is defensive against the possibility that we someday want to
301          * use a Linux tap device without TUN_NO_PI, in which case a buffer
302          * smaller than sizeof(struct tun_pi) will give EINVAL on read. */
303         char buffer[128];
304         if (read(fd, buffer, sizeof buffer) <= 0) {
305             break;
306         }
307     }
308 }
309
310 /* Stores in '*un' a sockaddr_un that refers to file 'name'.  Stores in
311  * '*un_len' the size of the sockaddr_un. */
312 static void
313 make_sockaddr_un__(const char *name, struct sockaddr_un *un, socklen_t *un_len)
314 {
315     un->sun_family = AF_UNIX;
316     ovs_strzcpy(un->sun_path, name, sizeof un->sun_path);
317     *un_len = (offsetof(struct sockaddr_un, sun_path)
318                 + strlen (un->sun_path) + 1);
319 }
320
321 /* Stores in '*un' a sockaddr_un that refers to file 'name'.  Stores in
322  * '*un_len' the size of the sockaddr_un.
323  *
324  * Returns 0 on success, otherwise a positive errno value.  On success,
325  * '*dirfdp' is either -1 or a nonnegative file descriptor that the caller
326  * should close after using '*un' to bind or connect.  On failure, '*dirfdp' is
327  * -1. */
328 static int
329 make_sockaddr_un(const char *name, struct sockaddr_un *un, socklen_t *un_len,
330                  int *dirfdp)
331 {
332     enum { MAX_UN_LEN = sizeof un->sun_path - 1 };
333
334     *dirfdp = -1;
335     if (strlen(name) > MAX_UN_LEN) {
336         static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
337
338         if (LINUX) {
339             /* 'name' is too long to fit in a sockaddr_un, but we have a
340              * workaround for that on Linux: shorten it by opening a file
341              * descriptor for the directory part of the name and indirecting
342              * through /proc/self/fd/<dirfd>/<basename>. */
343             char *dir, *base;
344             char *short_name;
345             int dirfd;
346
347             dir = dir_name(name);
348             base = base_name(name);
349
350             dirfd = open(dir, O_DIRECTORY | O_RDONLY);
351             if (dirfd < 0) {
352                 free(base);
353                 free(dir);
354                 return errno;
355             }
356
357             short_name = xasprintf("/proc/self/fd/%d/%s", dirfd, base);
358             free(dir);
359             free(base);
360
361             if (strlen(short_name) <= MAX_UN_LEN) {
362                 make_sockaddr_un__(short_name, un, un_len);
363                 free(short_name);
364                 *dirfdp = dirfd;
365                 return 0;
366             }
367             free(short_name);
368             close(dirfd);
369
370             VLOG_WARN_RL(&rl, "Unix socket name %s is longer than maximum "
371                          "%d bytes (even shortened)", name, MAX_UN_LEN);
372         } else {
373             /* 'name' is too long and we have no workaround. */
374             VLOG_WARN_RL(&rl, "Unix socket name %s is longer than maximum "
375                          "%d bytes", name, MAX_UN_LEN);
376         }
377
378         return ENAMETOOLONG;
379     } else {
380         make_sockaddr_un__(name, un, un_len);
381         return 0;
382     }
383 }
384
385 /* Binds Unix domain socket 'fd' to a file with permissions 0700. */
386 static int
387 bind_unix_socket(int fd, struct sockaddr *sun, socklen_t sun_len)
388 {
389     /* According to _Unix Network Programming_, umask should affect bind(). */
390     mode_t old_umask = umask(0077);
391     int error = bind(fd, sun, sun_len) ? errno : 0;
392     umask(old_umask);
393     return error;
394 }
395
396 /* Creates a Unix domain socket in the given 'style' (either SOCK_DGRAM or
397  * SOCK_STREAM) that is bound to '*bind_path' (if 'bind_path' is non-null) and
398  * connected to '*connect_path' (if 'connect_path' is non-null).  If 'nonblock'
399  * is true, the socket is made non-blocking.
400  *
401  * Returns the socket's fd if successful, otherwise a negative errno value. */
402 int
403 make_unix_socket(int style, bool nonblock,
404                  const char *bind_path, const char *connect_path)
405 {
406     int error;
407     int fd;
408
409     fd = socket(PF_UNIX, style, 0);
410     if (fd < 0) {
411         return -errno;
412     }
413
414     /* Set nonblocking mode right away, if we want it.  This prevents blocking
415      * in connect(), if connect_path != NULL.  (In turn, that's a corner case:
416      * it will only happen if style is SOCK_STREAM or SOCK_SEQPACKET, and only
417      * if a backlog of un-accepted connections has built up in the kernel.)  */
418     if (nonblock) {
419         int flags = fcntl(fd, F_GETFL, 0);
420         if (flags == -1) {
421             error = errno;
422             goto error;
423         }
424         if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
425             error = errno;
426             goto error;
427         }
428     }
429
430     if (bind_path) {
431         struct sockaddr_un un;
432         socklen_t un_len;
433         int dirfd;
434
435         if (unlink(bind_path) && errno != ENOENT) {
436             VLOG_WARN("unlinking \"%s\": %s\n", bind_path, strerror(errno));
437         }
438         fatal_signal_add_file_to_unlink(bind_path);
439
440         error = make_sockaddr_un(bind_path, &un, &un_len, &dirfd);
441         if (!error) {
442             error = bind_unix_socket(fd, (struct sockaddr *) &un, un_len);
443         }
444         if (dirfd >= 0) {
445             close(dirfd);
446         }
447         if (error) {
448             goto error;
449         }
450     }
451
452     if (connect_path) {
453         struct sockaddr_un un;
454         socklen_t un_len;
455         int dirfd;
456
457         error = make_sockaddr_un(connect_path, &un, &un_len, &dirfd);
458         if (!error
459             && connect(fd, (struct sockaddr*) &un, un_len)
460             && errno != EINPROGRESS) {
461             error = errno;
462         }
463         if (dirfd >= 0) {
464             close(dirfd);
465         }
466         if (error) {
467             goto error;
468         }
469     }
470
471     return fd;
472
473 error:
474     if (error == EAGAIN) {
475         error = EPROTO;
476     }
477     if (bind_path) {
478         fatal_signal_unlink_file_now(bind_path);
479     }
480     close(fd);
481     return -error;
482 }
483
484 int
485 get_unix_name_len(socklen_t sun_len)
486 {
487     return (sun_len >= offsetof(struct sockaddr_un, sun_path)
488             ? sun_len - offsetof(struct sockaddr_un, sun_path)
489             : 0);
490 }
491
492 ovs_be32
493 guess_netmask(ovs_be32 ip_)
494 {
495     uint32_t ip = ntohl(ip_);
496     return ((ip >> 31) == 0 ? htonl(0xff000000)   /* Class A */
497             : (ip >> 30) == 2 ? htonl(0xffff0000) /* Class B */
498             : (ip >> 29) == 6 ? htonl(0xffffff00) /* Class C */
499             : htonl(0));                          /* ??? */
500 }
501
502 /* Parses 'target', which should be a string in the format "<host>[:<port>]".
503  * <host> is required.  If 'default_port' is nonzero then <port> is optional
504  * and defaults to 'default_port'.
505  *
506  * On success, returns true and stores the parsed remote address into '*sinp'.
507  * On failure, logs an error, stores zeros into '*sinp', and returns false. */
508 bool
509 inet_parse_active(const char *target_, uint16_t default_port,
510                   struct sockaddr_in *sinp)
511 {
512     char *target = xstrdup(target_);
513     char *save_ptr = NULL;
514     const char *host_name;
515     const char *port_string;
516     bool ok = false;
517
518     /* Defaults. */
519     sinp->sin_family = AF_INET;
520     sinp->sin_port = htons(default_port);
521
522     /* Tokenize. */
523     host_name = strtok_r(target, ":", &save_ptr);
524     port_string = strtok_r(NULL, ":", &save_ptr);
525     if (!host_name) {
526         VLOG_ERR("%s: bad peer name format", target_);
527         goto exit;
528     }
529
530     /* Look up IP, port. */
531     if (lookup_ip(host_name, &sinp->sin_addr)) {
532         goto exit;
533     }
534     if (port_string && atoi(port_string)) {
535         sinp->sin_port = htons(atoi(port_string));
536     } else if (!default_port) {
537         VLOG_ERR("%s: port number must be specified", target_);
538         goto exit;
539     }
540
541     ok = true;
542
543 exit:
544     if (!ok) {
545         memset(sinp, 0, sizeof *sinp);
546     }
547     free(target);
548     return ok;
549 }
550
551 /* Opens a non-blocking IPv4 socket of the specified 'style' and connects to
552  * 'target', which should be a string in the format "<host>[:<port>]".  <host>
553  * is required.  If 'default_port' is nonzero then <port> is optional and
554  * defaults to 'default_port'.
555  *
556  * 'style' should be SOCK_STREAM (for TCP) or SOCK_DGRAM (for UDP).
557  *
558  * On success, returns 0 (indicating connection complete) or EAGAIN (indicating
559  * connection in progress), in which case the new file descriptor is stored
560  * into '*fdp'.  On failure, returns a positive errno value other than EAGAIN
561  * and stores -1 into '*fdp'.
562  *
563  * If 'sinp' is non-null, then on success the target address is stored into
564  * '*sinp'.
565  *
566  * 'dscp' becomes the DSCP bits in the IP headers for the new connection.  It
567  * should be in the range [0, 63] and will automatically be shifted to the
568  * appropriately place in the IP tos field. */
569 int
570 inet_open_active(int style, const char *target, uint16_t default_port,
571                  struct sockaddr_in *sinp, int *fdp, uint8_t dscp)
572 {
573     struct sockaddr_in sin;
574     int fd = -1;
575     int error;
576
577     /* Parse. */
578     if (!inet_parse_active(target, default_port, &sin)) {
579         error = EAFNOSUPPORT;
580         goto exit;
581     }
582
583     /* Create non-blocking socket. */
584     fd = socket(AF_INET, style, 0);
585     if (fd < 0) {
586         VLOG_ERR("%s: socket: %s", target, strerror(errno));
587         error = errno;
588         goto exit;
589     }
590     error = set_nonblocking(fd);
591     if (error) {
592         goto exit;
593     }
594
595     /* The dscp bits must be configured before connect() to ensure that the TOS
596      * field is set during the connection establishment.  If set after
597      * connect(), the handshake SYN frames will be sent with a TOS of 0. */
598     error = set_dscp(fd, dscp);
599     if (error) {
600         VLOG_ERR("%s: socket: %s", target, strerror(error));
601         goto exit;
602     }
603
604     /* Connect. */
605     error = connect(fd, (struct sockaddr *) &sin, sizeof sin) == 0 ? 0 : errno;
606     if (error == EINPROGRESS) {
607         error = EAGAIN;
608     }
609
610 exit:
611     if (!error || error == EAGAIN) {
612         if (sinp) {
613             *sinp = sin;
614         }
615     } else if (fd >= 0) {
616         close(fd);
617     }
618     *fdp = fd;
619     return error;
620 }
621
622 /* Parses 'target', which should be a string in the format "[<port>][:<ip>]":
623  *
624  *      - If 'default_port' is -1, then <port> is required.  Otherwise, if
625  *        <port> is omitted, then 'default_port' is used instead.
626  *
627  *      - If <port> (or 'default_port', if used) is 0, then no port is bound
628  *        and the TCP/IP stack will select a port.
629  *
630  *      - If <ip> is omitted then the IP address is wildcarded.
631  *
632  * If successful, stores the address into '*sinp' and returns true; otherwise
633  * zeros '*sinp' and returns false. */
634 bool
635 inet_parse_passive(const char *target_, int default_port,
636                    struct sockaddr_in *sinp)
637 {
638     char *target = xstrdup(target_);
639     char *string_ptr = target;
640     const char *host_name;
641     const char *port_string;
642     bool ok = false;
643     int port;
644
645     /* Address defaults. */
646     memset(sinp, 0, sizeof *sinp);
647     sinp->sin_family = AF_INET;
648     sinp->sin_addr.s_addr = htonl(INADDR_ANY);
649     sinp->sin_port = htons(default_port);
650
651     /* Parse optional port number. */
652     port_string = strsep(&string_ptr, ":");
653     if (port_string && str_to_int(port_string, 10, &port)) {
654         sinp->sin_port = htons(port);
655     } else if (default_port < 0) {
656         VLOG_ERR("%s: port number must be specified", target_);
657         goto exit;
658     }
659
660     /* Parse optional bind IP. */
661     host_name = strsep(&string_ptr, ":");
662     if (host_name && host_name[0] && lookup_ip(host_name, &sinp->sin_addr)) {
663         goto exit;
664     }
665
666     ok = true;
667
668 exit:
669     if (!ok) {
670         memset(sinp, 0, sizeof *sinp);
671     }
672     free(target);
673     return ok;
674 }
675
676
677 /* Opens a non-blocking IPv4 socket of the specified 'style', binds to
678  * 'target', and listens for incoming connections.  Parses 'target' in the same
679  * way was inet_parse_passive().
680  *
681  * 'style' should be SOCK_STREAM (for TCP) or SOCK_DGRAM (for UDP).
682  *
683  * For TCP, the socket will have SO_REUSEADDR turned on.
684  *
685  * On success, returns a non-negative file descriptor.  On failure, returns a
686  * negative errno value.
687  *
688  * If 'sinp' is non-null, then on success the bound address is stored into
689  * '*sinp'.
690  *
691  * 'dscp' becomes the DSCP bits in the IP headers for the new connection.  It
692  * should be in the range [0, 63] and will automatically be shifted to the
693  * appropriately place in the IP tos field. */
694 int
695 inet_open_passive(int style, const char *target, int default_port,
696                   struct sockaddr_in *sinp, uint8_t dscp)
697 {
698     struct sockaddr_in sin;
699     int fd = 0, error;
700     unsigned int yes = 1;
701
702     if (!inet_parse_passive(target, default_port, &sin)) {
703         return -EAFNOSUPPORT;
704     }
705
706     /* Create non-blocking socket, set SO_REUSEADDR. */
707     fd = socket(AF_INET, style, 0);
708     if (fd < 0) {
709         error = errno;
710         VLOG_ERR("%s: socket: %s", target, strerror(error));
711         return -error;
712     }
713     error = set_nonblocking(fd);
714     if (error) {
715         goto error;
716     }
717     if (style == SOCK_STREAM
718         && setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes) < 0) {
719         error = errno;
720         VLOG_ERR("%s: setsockopt(SO_REUSEADDR): %s", target, strerror(error));
721         goto error;
722     }
723
724     /* Bind. */
725     if (bind(fd, (struct sockaddr *) &sin, sizeof sin) < 0) {
726         error = errno;
727         VLOG_ERR("%s: bind: %s", target, strerror(error));
728         goto error;
729     }
730
731     /* The dscp bits must be configured before connect() to ensure that the TOS
732      * field is set during the connection establishment.  If set after
733      * connect(), the handshake SYN frames will be sent with a TOS of 0. */
734     error = set_dscp(fd, dscp);
735     if (error) {
736         VLOG_ERR("%s: socket: %s", target, strerror(error));
737         goto error;
738     }
739
740     /* Listen. */
741     if (style == SOCK_STREAM && listen(fd, 10) < 0) {
742         error = errno;
743         VLOG_ERR("%s: listen: %s", target, strerror(error));
744         goto error;
745     }
746
747     if (sinp) {
748         socklen_t sin_len = sizeof sin;
749         if (getsockname(fd, (struct sockaddr *) &sin, &sin_len) < 0){
750             error = errno;
751             VLOG_ERR("%s: getsockname: %s", target, strerror(error));
752             goto error;
753         }
754         if (sin.sin_family != AF_INET || sin_len != sizeof sin) {
755             error = EAFNOSUPPORT;
756             VLOG_ERR("%s: getsockname: invalid socket name", target);
757             goto error;
758         }
759         *sinp = sin;
760     }
761
762     return fd;
763
764 error:
765     close(fd);
766     return -error;
767 }
768
769 /* Returns a readable and writable fd for /dev/null, if successful, otherwise
770  * a negative errno value.  The caller must not close the returned fd (because
771  * the same fd will be handed out to subsequent callers). */
772 int
773 get_null_fd(void)
774 {
775     static int null_fd = -1;
776     if (null_fd < 0) {
777         null_fd = open("/dev/null", O_RDWR);
778         if (null_fd < 0) {
779             int error = errno;
780             VLOG_ERR("could not open /dev/null: %s", strerror(error));
781             return -error;
782         }
783     }
784     return null_fd;
785 }
786
787 int
788 read_fully(int fd, void *p_, size_t size, size_t *bytes_read)
789 {
790     uint8_t *p = p_;
791
792     *bytes_read = 0;
793     while (size > 0) {
794         ssize_t retval = read(fd, p, size);
795         if (retval > 0) {
796             *bytes_read += retval;
797             size -= retval;
798             p += retval;
799         } else if (retval == 0) {
800             return EOF;
801         } else if (errno != EINTR) {
802             return errno;
803         }
804     }
805     return 0;
806 }
807
808 int
809 write_fully(int fd, const void *p_, size_t size, size_t *bytes_written)
810 {
811     const uint8_t *p = p_;
812
813     *bytes_written = 0;
814     while (size > 0) {
815         ssize_t retval = write(fd, p, size);
816         if (retval > 0) {
817             *bytes_written += retval;
818             size -= retval;
819             p += retval;
820         } else if (retval == 0) {
821             VLOG_WARN("write returned 0");
822             return EPROTO;
823         } else if (errno != EINTR) {
824             return errno;
825         }
826     }
827     return 0;
828 }
829
830 /* Given file name 'file_name', fsyncs the directory in which it is contained.
831  * Returns 0 if successful, otherwise a positive errno value. */
832 int
833 fsync_parent_dir(const char *file_name)
834 {
835     int error = 0;
836     char *dir;
837     int fd;
838
839     dir = dir_name(file_name);
840     fd = open(dir, O_RDONLY);
841     if (fd >= 0) {
842         if (fsync(fd)) {
843             if (errno == EINVAL || errno == EROFS) {
844                 /* This directory does not support synchronization.  Not
845                  * really an error. */
846             } else {
847                 error = errno;
848                 VLOG_ERR("%s: fsync failed (%s)", dir, strerror(error));
849             }
850         }
851         close(fd);
852     } else {
853         error = errno;
854         VLOG_ERR("%s: open failed (%s)", dir, strerror(error));
855     }
856     free(dir);
857
858     return error;
859 }
860
861 /* Obtains the modification time of the file named 'file_name' to the greatest
862  * supported precision.  If successful, stores the mtime in '*mtime' and
863  * returns 0.  On error, returns a positive errno value and stores zeros in
864  * '*mtime'. */
865 int
866 get_mtime(const char *file_name, struct timespec *mtime)
867 {
868     struct stat s;
869
870     if (!stat(file_name, &s)) {
871         mtime->tv_sec = s.st_mtime;
872
873 #if HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
874         mtime->tv_nsec = s.st_mtim.tv_nsec;
875 #elif HAVE_STRUCT_STAT_ST_MTIMENSEC
876         mtime->tv_nsec = s.st_mtimensec;
877 #else
878         mtime->tv_nsec = 0;
879 #endif
880
881         return 0;
882     } else {
883         mtime->tv_sec = mtime->tv_nsec = 0;
884         return errno;
885     }
886 }
887
888 void
889 xpipe(int fds[2])
890 {
891     if (pipe(fds)) {
892         VLOG_FATAL("failed to create pipe (%s)", strerror(errno));
893     }
894 }
895
896 void
897 xsocketpair(int domain, int type, int protocol, int fds[2])
898 {
899     if (socketpair(domain, type, protocol, fds)) {
900         VLOG_FATAL("failed to create socketpair (%s)", strerror(errno));
901     }
902 }
903
904 static int
905 getsockopt_int(int fd, int level, int option, const char *optname, int *valuep)
906 {
907     static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 10);
908     socklen_t len;
909     int value;
910     int error;
911
912     len = sizeof value;
913     if (getsockopt(fd, level, option, &value, &len)) {
914         error = errno;
915         VLOG_ERR_RL(&rl, "getsockopt(%s): %s", optname, strerror(error));
916     } else if (len != sizeof value) {
917         error = EINVAL;
918         VLOG_ERR_RL(&rl, "getsockopt(%s): value is %u bytes (expected %zu)",
919                     optname, (unsigned int) len, sizeof value);
920     } else {
921         error = 0;
922     }
923
924     *valuep = error ? 0 : value;
925     return error;
926 }
927
928 static void
929 describe_sockaddr(struct ds *string, int fd,
930                   int (*getaddr)(int, struct sockaddr *, socklen_t *))
931 {
932     struct sockaddr_storage ss;
933     socklen_t len = sizeof ss;
934
935     if (!getaddr(fd, (struct sockaddr *) &ss, &len)) {
936         if (ss.ss_family == AF_INET) {
937             struct sockaddr_in sin;
938
939             memcpy(&sin, &ss, sizeof sin);
940             ds_put_format(string, IP_FMT":%"PRIu16,
941                           IP_ARGS(&sin.sin_addr.s_addr), ntohs(sin.sin_port));
942         } else if (ss.ss_family == AF_UNIX) {
943             struct sockaddr_un sun;
944             const char *null;
945             size_t maxlen;
946
947             memcpy(&sun, &ss, sizeof sun);
948             maxlen = len - offsetof(struct sockaddr_un, sun_path);
949             null = memchr(sun.sun_path, '\0', maxlen);
950             ds_put_buffer(string, sun.sun_path,
951                           null ? null - sun.sun_path : maxlen);
952         }
953 #ifdef HAVE_NETLINK
954         else if (ss.ss_family == AF_NETLINK) {
955             int protocol;
956
957 /* SO_PROTOCOL was introduced in 2.6.32.  Support it regardless of the version
958  * of the Linux kernel headers in use at build time. */
959 #ifndef SO_PROTOCOL
960 #define SO_PROTOCOL 38
961 #endif
962
963             if (!getsockopt_int(fd, SOL_SOCKET, SO_PROTOCOL, "SO_PROTOCOL",
964                                 &protocol)) {
965                 switch (protocol) {
966                 case NETLINK_ROUTE:
967                     ds_put_cstr(string, "NETLINK_ROUTE");
968                     break;
969
970                 case NETLINK_GENERIC:
971                     ds_put_cstr(string, "NETLINK_GENERIC");
972                     break;
973
974                 default:
975                     ds_put_format(string, "AF_NETLINK family %d", protocol);
976                     break;
977                 }
978             } else {
979                 ds_put_cstr(string, "AF_NETLINK");
980             }
981         }
982 #endif
983 #if AF_PACKET && __linux__
984         else if (ss.ss_family == AF_PACKET) {
985             struct sockaddr_ll sll;
986
987             memcpy(&sll, &ss, sizeof sll);
988             ds_put_cstr(string, "AF_PACKET");
989             if (sll.sll_ifindex) {
990                 char name[IFNAMSIZ];
991
992                 if (if_indextoname(sll.sll_ifindex, name)) {
993                     ds_put_format(string, "(%s)", name);
994                 } else {
995                     ds_put_format(string, "(ifindex=%d)", sll.sll_ifindex);
996                 }
997             }
998             if (sll.sll_protocol) {
999                 ds_put_format(string, "(protocol=0x%"PRIu16")",
1000                               ntohs(sll.sll_protocol));
1001             }
1002         }
1003 #endif
1004         else if (ss.ss_family == AF_UNSPEC) {
1005             ds_put_cstr(string, "AF_UNSPEC");
1006         } else {
1007             ds_put_format(string, "AF_%d", (int) ss.ss_family);
1008         }
1009     }
1010 }
1011
1012
1013 #ifdef __linux__
1014 static void
1015 put_fd_filename(struct ds *string, int fd)
1016 {
1017     char buf[1024];
1018     char *linkname;
1019     int n;
1020
1021     linkname = xasprintf("/proc/self/fd/%d", fd);
1022     n = readlink(linkname, buf, sizeof buf);
1023     if (n > 0) {
1024         ds_put_char(string, ' ');
1025         ds_put_buffer(string, buf, n);
1026         if (n > sizeof buf) {
1027             ds_put_cstr(string, "...");
1028         }
1029     }
1030     free(linkname);
1031 }
1032 #endif
1033
1034 /* Returns a malloc()'d string describing 'fd', for use in logging. */
1035 char *
1036 describe_fd(int fd)
1037 {
1038     struct ds string;
1039     struct stat s;
1040
1041     ds_init(&string);
1042     if (fstat(fd, &s)) {
1043         ds_put_format(&string, "fstat failed (%s)", strerror(errno));
1044     } else if (S_ISSOCK(s.st_mode)) {
1045         describe_sockaddr(&string, fd, getsockname);
1046         ds_put_cstr(&string, "<->");
1047         describe_sockaddr(&string, fd, getpeername);
1048     } else {
1049         ds_put_cstr(&string, (isatty(fd) ? "tty"
1050                               : S_ISDIR(s.st_mode) ? "directory"
1051                               : S_ISCHR(s.st_mode) ? "character device"
1052                               : S_ISBLK(s.st_mode) ? "block device"
1053                               : S_ISREG(s.st_mode) ? "file"
1054                               : S_ISFIFO(s.st_mode) ? "FIFO"
1055                               : S_ISLNK(s.st_mode) ? "symbolic link"
1056                               : "unknown"));
1057 #ifdef __linux__
1058         put_fd_filename(&string, fd);
1059 #endif
1060     }
1061     return ds_steal_cstr(&string);
1062 }
1063
1064 /* Returns the total of the 'iov_len' members of the 'n_iovs' in 'iovs'.
1065  * The caller must ensure that the total does not exceed SIZE_MAX. */
1066 size_t
1067 iovec_len(const struct iovec iovs[], size_t n_iovs)
1068 {
1069     size_t len = 0;
1070     size_t i;
1071
1072     for (i = 0; i < n_iovs; i++) {
1073         len += iovs[i].iov_len;
1074     }
1075     return len;
1076 }
1077
1078 /* Returns true if all of the 'n_iovs' iovecs in 'iovs' have length zero. */
1079 bool
1080 iovec_is_empty(const struct iovec iovs[], size_t n_iovs)
1081 {
1082     size_t i;
1083
1084     for (i = 0; i < n_iovs; i++) {
1085         if (iovs[i].iov_len) {
1086             return false;
1087         }
1088     }
1089     return true;
1090 }
1091
1092 /* Sends the 'n_iovs' iovecs of data in 'iovs' and the 'n_fds' file descriptors
1093  * in 'fds' on Unix domain socket 'sock'.  Returns the number of bytes
1094  * successfully sent or -1 if an error occurred.  On error, sets errno
1095  * appropriately.  */
1096 int
1097 send_iovec_and_fds(int sock,
1098                    const struct iovec *iovs, size_t n_iovs,
1099                    const int fds[], size_t n_fds)
1100 {
1101     assert(sock >= 0);
1102     if (n_fds > 0) {
1103         union {
1104             struct cmsghdr cm;
1105             char control[CMSG_SPACE(SOUTIL_MAX_FDS * sizeof *fds)];
1106         } cmsg;
1107         struct msghdr msg;
1108
1109         assert(!iovec_is_empty(iovs, n_iovs));
1110         assert(n_fds <= SOUTIL_MAX_FDS);
1111
1112         memset(&cmsg, 0, sizeof cmsg);
1113         cmsg.cm.cmsg_len = CMSG_LEN(n_fds * sizeof *fds);
1114         cmsg.cm.cmsg_level = SOL_SOCKET;
1115         cmsg.cm.cmsg_type = SCM_RIGHTS;
1116         memcpy(CMSG_DATA(&cmsg.cm), fds, n_fds * sizeof *fds);
1117
1118         msg.msg_name = NULL;
1119         msg.msg_namelen = 0;
1120         msg.msg_iov = (struct iovec *) iovs;
1121         msg.msg_iovlen = n_iovs;
1122         msg.msg_control = &cmsg.cm;
1123         msg.msg_controllen = CMSG_SPACE(n_fds * sizeof *fds);
1124         msg.msg_flags = 0;
1125
1126         return sendmsg(sock, &msg, 0);
1127     } else {
1128         return writev(sock, iovs, n_iovs);
1129     }
1130 }
1131
1132 /* Sends the 'n_iovs' iovecs of data in 'iovs' and the 'n_fds' file descriptors
1133  * in 'fds' on Unix domain socket 'sock'.  If 'skip_bytes' is nonzero, then the
1134  * first 'skip_bytes' of data in the iovecs are not sent, and none of the file
1135  * descriptors are sent.  The function continues to retry sending until an
1136  * error (other than EINTR) occurs or all the data and fds are sent.
1137  *
1138  * Returns 0 if all the data and fds were successfully sent, otherwise a
1139  * positive errno value.  Regardless of success, stores the number of bytes
1140  * sent (always at least 'skip_bytes') in '*bytes_sent'.  (If at least one byte
1141  * is sent, then all the fds have been sent.)
1142  *
1143  * 'skip_bytes' must be less than or equal to iovec_len(iovs, n_iovs). */
1144 int
1145 send_iovec_and_fds_fully(int sock,
1146                          const struct iovec iovs[], size_t n_iovs,
1147                          const int fds[], size_t n_fds,
1148                          size_t skip_bytes, size_t *bytes_sent)
1149 {
1150     *bytes_sent = 0;
1151     while (n_iovs > 0) {
1152         int retval;
1153
1154         if (skip_bytes) {
1155             retval = skip_bytes;
1156             skip_bytes = 0;
1157         } else if (!*bytes_sent) {
1158             retval = send_iovec_and_fds(sock, iovs, n_iovs, fds, n_fds);
1159         } else {
1160             retval = writev(sock, iovs, n_iovs);
1161         }
1162
1163         if (retval > 0) {
1164             *bytes_sent += retval;
1165             while (retval > 0) {
1166                 const uint8_t *base = iovs->iov_base;
1167                 size_t len = iovs->iov_len;
1168
1169                 if (retval < len) {
1170                     size_t sent;
1171                     int error;
1172
1173                     error = write_fully(sock, base + retval, len - retval,
1174                                         &sent);
1175                     *bytes_sent += sent;
1176                     retval += sent;
1177                     if (error) {
1178                         return error;
1179                     }
1180                 }
1181                 retval -= len;
1182                 iovs++;
1183                 n_iovs--;
1184             }
1185         } else if (retval == 0) {
1186             if (iovec_is_empty(iovs, n_iovs)) {
1187                 break;
1188             }
1189             VLOG_WARN("send returned 0");
1190             return EPROTO;
1191         } else if (errno != EINTR) {
1192             return errno;
1193         }
1194     }
1195
1196     return 0;
1197 }
1198
1199 /* Sends the 'n_iovs' iovecs of data in 'iovs' and the 'n_fds' file descriptors
1200  * in 'fds' on Unix domain socket 'sock'.  The function continues to retry
1201  * sending until an error (other than EAGAIN or EINTR) occurs or all the data
1202  * and fds are sent.  Upon EAGAIN, the function blocks until the socket is
1203  * ready for more data.
1204  *
1205  * Returns 0 if all the data and fds were successfully sent, otherwise a
1206  * positive errno value. */
1207 int
1208 send_iovec_and_fds_fully_block(int sock,
1209                                const struct iovec iovs[], size_t n_iovs,
1210                                const int fds[], size_t n_fds)
1211 {
1212     size_t sent = 0;
1213
1214     for (;;) {
1215         int error;
1216
1217         error = send_iovec_and_fds_fully(sock, iovs, n_iovs,
1218                                          fds, n_fds, sent, &sent);
1219         if (error != EAGAIN) {
1220             return error;
1221         }
1222         poll_fd_wait(sock, POLLOUT);
1223         poll_block();
1224     }
1225 }
1226
1227 /* Attempts to receive from Unix domain socket 'sock' up to 'size' bytes of
1228  * data into 'data' and up to SOUTIL_MAX_FDS file descriptors into 'fds'.
1229  *
1230  *      - Upon success, returns the number of bytes of data copied into 'data'
1231  *        and stores the number of received file descriptors into '*n_fdsp'.
1232  *
1233  *      - On failure, returns a negative errno value and stores 0 in
1234  *        '*n_fdsp'.
1235  *
1236  *      - On EOF, returns 0 and stores 0 in '*n_fdsp'. */
1237 int
1238 recv_data_and_fds(int sock,
1239                   void *data, size_t size,
1240                   int fds[SOUTIL_MAX_FDS], size_t *n_fdsp)
1241 {
1242     union {
1243         struct cmsghdr cm;
1244         char control[CMSG_SPACE(SOUTIL_MAX_FDS * sizeof *fds)];
1245     } cmsg;
1246     struct msghdr msg;
1247     int retval;
1248     struct cmsghdr *p;
1249     size_t i;
1250
1251     *n_fdsp = 0;
1252
1253     do {
1254         struct iovec iov;
1255
1256         iov.iov_base = data;
1257         iov.iov_len = size;
1258
1259         msg.msg_name = NULL;
1260         msg.msg_namelen = 0;
1261         msg.msg_iov = &iov;
1262         msg.msg_iovlen = 1;
1263         msg.msg_control = &cmsg.cm;
1264         msg.msg_controllen = sizeof cmsg.control;
1265         msg.msg_flags = 0;
1266
1267         retval = recvmsg(sock, &msg, 0);
1268     } while (retval < 0 && errno == EINTR);
1269     if (retval <= 0) {
1270         return retval < 0 ? -errno : 0;
1271     }
1272
1273     for (p = CMSG_FIRSTHDR(&msg); p; p = CMSG_NXTHDR(&msg, p)) {
1274         if (p->cmsg_level != SOL_SOCKET || p->cmsg_type != SCM_RIGHTS) {
1275             VLOG_ERR("unexpected control message %d:%d",
1276                      p->cmsg_level, p->cmsg_type);
1277             goto error;
1278         } else if (*n_fdsp) {
1279             VLOG_ERR("multiple SCM_RIGHTS received");
1280             goto error;
1281         } else {
1282             size_t n_fds = (p->cmsg_len - CMSG_LEN(0)) / sizeof *fds;
1283             const int *fds_data = (const int *) CMSG_DATA(p);
1284
1285             assert(n_fds > 0);
1286             if (n_fds > SOUTIL_MAX_FDS) {
1287                 VLOG_ERR("%zu fds received but only %d supported",
1288                          n_fds, SOUTIL_MAX_FDS);
1289                 for (i = 0; i < n_fds; i++) {
1290                     close(fds_data[i]);
1291                 }
1292                 goto error;
1293             }
1294
1295             *n_fdsp = n_fds;
1296             memcpy(fds, fds_data, n_fds * sizeof *fds);
1297         }
1298     }
1299
1300     return retval;
1301
1302 error:
1303     for (i = 0; i < *n_fdsp; i++) {
1304         close(fds[i]);
1305     }
1306     *n_fdsp = 0;
1307     return EPROTO;
1308 }