avahi: handle SO_REUSEPORT not being available

Linux < 3.9 doesn't have the SO_REUSEPORT option so instead of failing to start
when built with >=3.9 kernel headers but booted on <3.9 kernels, continue as if
SO_REUSEPORT wasn't available.

(From OE-Core rev: 85e89da55f778ad3713460cb0df1435d82e94510)

(From OE-Core rev: 704361888958ec790aa2855e22df2d2d87a5d982)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Ross Burton 2014-03-11 12:57:04 +00:00 committed by Richard Purdie
parent 9e89b4eec4
commit ec578fa12d
2 changed files with 31 additions and 0 deletions

View File

@ -25,6 +25,7 @@ SRC_URI = "http://avahi.org/download/avahi-${PV}.tar.gz \
file://avahi_fix_install_issue.patch \
file://fix_for_automake_1.12.x.patch \
file://out-of-tree.patch \
file://reuseport-check.patch \
"
USERADD_PACKAGES = "avahi-daemon avahi-autoipd"

View File

@ -0,0 +1,30 @@
Fix avahi-daemon when running on kernel < 3.9 (patch taken from Ubuntu).
Upstream-Status: Pending (unmaintained upstream)
Signed-off-by: Ross Burton <ross.burton@intel.com>
Description: SO_REUSEPORT may not exist in running kernel
When userspace defines SO_REUSEPORT we will attempt to enable socket
port number reuse. However if the running kernel does not support
this call it will fail preventing daemon startup. If this call is
present but fails ENOPROTOOPT then we know that actually the kernel
does not support it and we should continue as if we did not have the
call at all. (LP: #1228204)
.
This patch could be removed from the debian package after jessie release.
Author: Andy Whitcroft <apw@canonical.com>
Index: avahi-0.6.31/avahi-core/socket.c
===================================================================
--- avahi-0.6.31.orig/avahi-core/socket.c 2013-09-20 16:36:50.000000000 +0100
+++ avahi-0.6.31/avahi-core/socket.c 2013-09-20 16:38:23.781863644 +0100
@@ -177,7 +177,8 @@
yes = 1;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &yes, sizeof(yes)) < 0) {
avahi_log_warn("SO_REUSEPORT failed: %s", strerror(errno));
- return -1;
+ if (errno != ENOPROTOOPT)
+ return -1;
}
#endif