diff --git a/configure.ac b/configure.ac index 174f892f2e..609f138efe 100644 --- a/configure.ac +++ b/configure.ac @@ -552,8 +552,8 @@ AC_CHECK_HEADERS([pthread_np.h], [], [], [#include ]) # libuv AC_MSG_CHECKING([for libuv]) -PKG_CHECK_MODULES([LIBUV], [libuv >= 1.0.0], [], - [AC_MSG_ERROR([libuv not found])]) +PKG_CHECK_MODULES([LIBUV], [libuv >= 1.34.0], [], + [AC_MSG_ERROR([libuv >= 1.34.0 not found])]) AX_SAVE_FLAGS([libuv]) CFLAGS="$CFLAGS $LIBUV_CFLAGS" diff --git a/doc/arm/build.inc.rst b/doc/arm/build.inc.rst index 29486cb48c..8971bc4c20 100644 --- a/doc/arm/build.inc.rst +++ b/doc/arm/build.inc.rst @@ -60,7 +60,7 @@ To build BIND 9, the following packages must be installed: - ``perl`` - ``pkg-config`` / ``pkgconfig`` / ``pkgconf`` -BIND 9.19 requires ``libuv`` 1.x or higher. On older systems, an updated +BIND 9.19 requires ``libuv`` 1.34.0 or higher. On older systems, an updated ``libuv`` package needs to be installed from sources such as EPEL, PPA, or other native sources. The other option is to build and install ``libuv`` from source. diff --git a/doc/arm/platforms.inc.rst b/doc/arm/platforms.inc.rst index 9b6b4cb5aa..4fa089d0d8 100644 --- a/doc/arm/platforms.inc.rst +++ b/doc/arm/platforms.inc.rst @@ -107,7 +107,7 @@ These are platforms on which current versions of BIND 9 are known *not* to build - Platforms that do not support atomic operations (via compiler or library) - Linux without NPTL (Native POSIX Thread Library) -- Platforms on which **libuv** cannot be compiled +- Platforms on which **libuv >= 1.34** cannot be compiled or is not available Installing BIND 9 ----------------- diff --git a/lib/isc/include/isc/uv.h b/lib/isc/include/isc/uv.h index 25602d5717..476d8010c7 100644 --- a/lib/isc/include/isc/uv.h +++ b/lib/isc/include/isc/uv.h @@ -19,11 +19,6 @@ #include #include -/* - * These functions were introduced in newer libuv, but we still - * want BIND9 compile on older ones so we emulate them. - */ - #define UV_VERSION(major, minor, patch) ((major << 16) | (minor << 8) | (patch)) /* @@ -47,58 +42,6 @@ #define UV__ERR(x) (-(x)) #endif -#if UV_VERSION_HEX < UV_VERSION(1, 12, 0) -int -uv_os_getenv(const char *name, char *buffer, size_t *size); - -#define uv_os_setenv(name, value) setenv(name, value, 0) -#endif /* UV_VERSION_HEX < UV_VERSION(1, 12, 0) */ - -#if UV_VERSION_HEX < UV_VERSION(1, 19, 0) -static inline void * -uv_handle_get_data(const uv_handle_t *handle) { - return (handle->data); -} - -static inline void -uv_handle_set_data(uv_handle_t *handle, void *data) { - handle->data = data; -} - -static inline void * -uv_req_get_data(const uv_req_t *req) { - return (req->data); -} - -static inline void -uv_req_set_data(uv_req_t *req, void *data) { - req->data = data; -} -#endif /* UV_VERSION_HEX < UV_VERSION(1, 19, 0) */ - -#if UV_VERSION_HEX < UV_VERSION(1, 32, 0) -int -uv_tcp_close_reset(uv_tcp_t *handle, uv_close_cb close_cb); -#endif - -#if UV_VERSION_HEX < UV_VERSION(1, 34, 0) -#define uv_sleep(msec) usleep(msec * 1000) -#endif /* UV_VERSION_HEX < UV_VERSION(1, 34, 0) */ - -#if UV_VERSION_HEX < UV_VERSION(1, 27, 0) -int -isc_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr); -/*%< - * Associate the UDP handle to a remote address and port, so every message sent - * by this handle is automatically sent to that destination. - * - * NOTE: This is just a limited shim for uv_udp_connect() as it requires the - * handle to be bound. - */ -#else /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */ -#define isc_uv_udp_connect uv_udp_connect -#endif /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */ - /* * These are used with all versions of libuv: */ diff --git a/lib/isc/netmgr/udp.c b/lib/isc/netmgr/udp.c index 4706c74a38..9b715d9b6c 100644 --- a/lib/isc/netmgr/udp.c +++ b/lib/isc/netmgr/udp.c @@ -725,17 +725,14 @@ isc__nm_udp_send(isc_nmhandle_t *handle, const isc_region_t *region, uvreq->cb.send = cb; uvreq->cbarg = cbarg; -#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0) /* - * If we used uv_udp_connect() (and not the shim version for - * older versions of libuv), then the peer address has to be + * We used uv_udp_connect(), so the peer address has to be * set to NULL or else uv_udp_send() could fail or assert, * depending on the libuv version. */ if (atomic_load(&sock->connected)) { sa = NULL; } -#endif r = uv_udp_send(&uvreq->uv_req.udp_send, &sock->uv_handle.udp, &uvreq->uvbuf, 1, sa, udp_send_cb); @@ -790,8 +787,7 @@ udp_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) { * giving up. */ do { - r = isc_uv_udp_connect(&sock->uv_handle.udp, - &req->peer.type.sa); + r = uv_udp_connect(&sock->uv_handle.udp, &req->peer.type.sa); } while (r == UV_EADDRINUSE && --req->connect_tries > 0); if (r != 0) { isc__nm_incstats(sock, STATID_CONNECTFAIL); diff --git a/lib/isc/uv.c b/lib/isc/uv.c index 5f4b12dde6..62c34415a5 100644 --- a/lib/isc/uv.c +++ b/lib/isc/uv.c @@ -16,75 +16,6 @@ #include #include -#if UV_VERSION_HEX < UV_VERSION(1, 12, 0) -#include -#include - -int -uv_os_getenv(const char *name, char *buffer, size_t *size) { - size_t len; - char *buf = getenv(name); - if (buf == NULL) { - return (UV_ENOENT); - } - len = strlen(buf) + 1; - if (len > *size) { - *size = len; - return (UV_ENOBUFS); - } - *size = len; - memmove(buffer, buf, len); - return (0); -} - -#endif - -#if UV_VERSION_HEX < UV_VERSION(1, 27, 0) -int -isc_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr) { - int err = 0; - - do { - int addrlen = (addr->sa_family == AF_INET) - ? sizeof(struct sockaddr_in) - : sizeof(struct sockaddr_in6); - err = connect(handle->io_watcher.fd, addr, addrlen); - } while (err == -1 && errno == EINTR); - - if (err) { -#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0) - return (uv_translate_sys_error(errno)); -#else - return (-errno); -#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */ - } - - return (0); -} -#endif /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */ - -#if UV_VERSION_HEX < UV_VERSION(1, 32, 0) -int -uv_tcp_close_reset(uv_tcp_t *handle, uv_close_cb close_cb) { - if (setsockopt(handle->io_watcher.fd, SOL_SOCKET, SO_LINGER, - &(struct linger){ 1, 0 }, sizeof(struct linger)) == -1) - { -#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0) - return (uv_translate_sys_error(errno)); -#else - return (-errno); -#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */ - } - - INSIST(!uv_is_closing((uv_handle_t *)handle)); - uv_close((uv_handle_t *)handle, close_cb); - return (0); -} -#endif /* UV_VERSION_HEX < UV_VERSION(1, 32, 0) */ - -#define setsockopt_on(socket, level, name) \ - setsockopt(socket, level, name, &(int){ 1 }, sizeof(int)) - /*% * Convert a libuv error value into an isc_result_t. The * list of supported error values is not complete; new users diff --git a/tests/isc/udp_test.c b/tests/isc/udp_test.c index 0cfd4e62a9..9644f7c0fa 100644 --- a/tests/isc/udp_test.c +++ b/tests/isc/udp_test.c @@ -228,7 +228,6 @@ ISC_LOOP_TEST_IMPL(mock_udpconnect_uv_udp_bind) { RESET_RETURN; } -#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0) ISC_LOOP_TEST_IMPL(mock_udpconnect_uv_udp_connect) { WILL_RETURN(uv_udp_connect, UV_ENOMEM); @@ -240,8 +239,6 @@ ISC_LOOP_TEST_IMPL(mock_udpconnect_uv_udp_connect) { RESET_RETURN; } -#endif - ISC_LOOP_TEST_IMPL(mock_udpconnect_uv_recv_buffer_size) { WILL_RETURN(uv_recv_buffer_size, UV_ENOMEM); @@ -1133,9 +1130,7 @@ ISC_TEST_ENTRY_CUSTOM(mock_listenudp_uv_udp_recv_start, setup_test, teardown_test) ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_udp_open, setup_test, teardown_test) ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_udp_bind, setup_test, teardown_test) -#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0) ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_udp_connect, setup_test, teardown_test) -#endif ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_recv_buffer_size, setup_test, teardown_test) ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_send_buffer_size, setup_test, diff --git a/tests/isc/uv_wrap.h b/tests/isc/uv_wrap.h index f81c0c01b5..8a6f7598ff 100644 --- a/tests/isc/uv_wrap.h +++ b/tests/isc/uv_wrap.h @@ -38,13 +38,11 @@ __wrap_uv_udp_open(uv_udp_t *handle, uv_os_sock_t sock); int __wrap_uv_udp_bind(uv_udp_t *handle, const struct sockaddr *addr, unsigned int flags); -#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0) int __wrap_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr); int __wrap_uv_udp_getpeername(const uv_udp_t *handle, struct sockaddr *name, int *namelen); -#endif /* UV_VERSION_HEX >= UV_VERSION(1, 27, 0) */ int __wrap_uv_udp_getsockname(const uv_udp_t *handle, struct sockaddr *name, int *namelen); @@ -118,7 +116,6 @@ __wrap_uv_udp_bind(uv_udp_t *handle, const struct sockaddr *addr, static atomic_int __state_uv_udp_connect __attribute__((unused)) = 0; -#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0) int __wrap_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr) { if (atomic_load(&__state_uv_udp_connect) == 0) { @@ -126,11 +123,9 @@ __wrap_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr) { } return (atomic_load(&__state_uv_udp_connect)); } -#endif /* UV_VERSION_HEX >= UV_VERSION(1, 27, 0) */ static atomic_int __state_uv_udp_getpeername __attribute__((unused)) = 0; -#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0) int __wrap_uv_udp_getpeername(const uv_udp_t *handle, struct sockaddr *name, int *namelen) { @@ -139,7 +134,6 @@ __wrap_uv_udp_getpeername(const uv_udp_t *handle, struct sockaddr *name, } return (atomic_load(&__state_uv_udp_getpeername)); } -#endif /* UV_VERSION_HEX >= UV_VERSION(1, 27, 0) */ static atomic_int __state_uv_udp_getsockname = 0; int @@ -275,12 +269,10 @@ __wrap_uv_fileno(const uv_handle_t *handle, uv_os_fd_t *fd) { return (atomic_load(&__state_uv_fileno)); } -#define uv_udp_open(...) __wrap_uv_udp_open(__VA_ARGS__) -#define uv_udp_bind(...) __wrap_uv_udp_bind(__VA_ARGS__) -#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0) +#define uv_udp_open(...) __wrap_uv_udp_open(__VA_ARGS__) +#define uv_udp_bind(...) __wrap_uv_udp_bind(__VA_ARGS__) #define uv_udp_connect(...) __wrap_uv_udp_connect(__VA_ARGS__) #define uv_udp_getpeername(...) __wrap_uv_udp_getpeername(__VA_ARGS__) -#endif /* UV_VERSION_HEX >= UV_VERSION(1, 27, 0) */ #define uv_udp_getsockname(...) __wrap_uv_udp_getsockname(__VA_ARGS__) #define uv_udp_send(...) __wrap_uv_udp_send(__VA_ARGS__) #define uv_udp_recv_start(...) __wrap_uv_udp_recv_start(__VA_ARGS__)