From 1cf99d2639e74af06c0914a0177b7a7ca99ee3f4 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mar 30 2015 11:53:40 +0000 Subject: Update to 3.2.26 release --- diff --git a/.gitignore b/.gitignore index 6542bbe..70063bc 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ /libnl-doc-3.2.25.tar.gz /libnl-3.2.26-rc1.tar.gz /libnl-doc-3.2.26-rc1.tar.gz +/libnl-3.2.26.tar.gz +/libnl-doc-3.2.26.tar.gz diff --git a/0001-nl-socket-set-fd.patch b/0001-nl-socket-set-fd.patch deleted file mode 100644 index 9e8e4a2..0000000 --- a/0001-nl-socket-set-fd.patch +++ /dev/null @@ -1,147 +0,0 @@ -From 3b0d92d7b0df034d0e98be852569a6dec771121e Mon Sep 17 00:00:00 2001 -From: Thomas Haller -Date: Fri, 6 Mar 2015 12:33:49 +0100 -Subject: [PATCH 1/1] lib/socket: detect protocol in nl_socket_set_fd() - -With support for socket option SO_PROTOCOL we don't need the protocol -argument to nl_socket_set_fd(). Maybe we should drop the protocol argument -and just not support nl_socket_set_fd() on older systems. But instead -keep the argument and allow passing -1 to autodetect it. - -If the user sets a protocol option, we check via getsockopt() that the -value is correct and error out otherwise. - -On older kernels, the user must set the value. Otherwise -nl_socket_set_fd() will fail. - -Signed-off-by: Thomas Haller -(cherry picked from commit 24d333075ab4efa1406d836b821e1484a124dbfc) ---- - lib/socket.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------- - 1 file changed, 63 insertions(+), 9 deletions(-) - -diff --git a/lib/socket.c b/lib/socket.c -index 049b8b9..b29d1da 100644 ---- a/lib/socket.c -+++ b/lib/socket.c -@@ -29,6 +29,8 @@ - - #include "defs.h" - -+#include "sys/socket.h" -+ - #include - #include - #include -@@ -577,7 +579,12 @@ int nl_socket_get_fd(const struct nl_sock *sk) - * socket similar to nl_connect(). - * - * @arg sk Netlink socket (required) -- * @arg protocol Netlink protocol to use (required) -+ * @arg protocol The socket protocol (optional). Linux 2.6.32 supports -+ * the socket option SO_PROTOCOL. In this case, you can set -+ * protocol to a negative value and let it autodetect. -+ * If you set it to a non-negative value, the detected protocol -+ * must match the one provided. -+ * To support older kernels, you must specify the protocol. - * @arg fd Socket file descriptor to use (required) - * - * Set the socket file descriptor. @fd must be valid and bind'ed. -@@ -592,7 +599,7 @@ int nl_socket_get_fd(const struct nl_sock *sk) - * possibly unusable. - * - * @retval -NLE_BAD_SOCK Netlink socket is already connected -- * @retval -NLE_INVAL Socket is not connected -+ * @retval -NLE_INVAL Socket is of unexpected type - */ - int nl_socket_set_fd(struct nl_sock *sk, int protocol, int fd) - { -@@ -600,6 +607,7 @@ int nl_socket_set_fd(struct nl_sock *sk, int protocol, int fd) - socklen_t addrlen; - char buf[64]; - struct sockaddr_nl local = { 0 }; -+ int so_type = -1, so_protocol = -1; - - if (sk->s_fd != -1) - return -NLE_BAD_SOCK; -@@ -610,16 +618,62 @@ int nl_socket_set_fd(struct nl_sock *sk, int protocol, int fd) - err = getsockname(fd, (struct sockaddr *) &local, - &addrlen); - if (err < 0) { -- NL_DBG(4, "nl_socket_set_fd(%p): getsockname() failed with %d (%s)\n", -- sk, errno, strerror_r(errno, buf, sizeof(buf))); -+ NL_DBG(4, "nl_socket_set_fd(%p,%d): getsockname() failed with %d (%s)\n", -+ sk, fd, errno, strerror_r(errno, buf, sizeof(buf))); - return -nl_syserr2nlerr(errno); - } -- - if (addrlen != sizeof(local)) -- return -NLE_NOADDR; -+ return -NLE_INVAL; -+ if (local.nl_family != AF_NETLINK) { -+ NL_DBG(4, "nl_socket_set_fd(%p,%d): getsockname() returned family %d instead of %d (AF_NETLINK)\n", -+ sk, fd, local.nl_family, AF_NETLINK); -+ return -NLE_INVAL; -+ } -+ -+ addrlen = sizeof(so_type); -+ err = getsockopt(fd, SOL_SOCKET, SO_TYPE, &so_type, &addrlen); -+ if (err < 0) { -+ NL_DBG(4, "nl_socket_set_fd(%p,%d): getsockopt() for SO_TYPE failed with %d (%s)\n", -+ sk, fd, errno, strerror_r(errno, buf, sizeof(buf))); -+ return -nl_syserr2nlerr(errno); -+ } -+ if (addrlen != sizeof(so_type)) -+ return -NLE_INVAL; -+ if (so_type != SOCK_RAW) { -+ NL_DBG(4, "nl_socket_set_fd(%p,%d): getsockopt() returned SO_TYPE %d instead of %d (SOCK_RAW)\n", -+ sk, fd, so_type, SOCK_RAW); -+ return -NLE_INVAL; -+ } - -- if (local.nl_family != AF_NETLINK) -- return -NLE_AF_NOSUPPORT; -+#if SO_PROTOCOL -+ addrlen = sizeof(so_protocol); -+ err = getsockopt(fd, SOL_SOCKET, SO_PROTOCOL, &so_protocol, &addrlen); -+ if (err < 0) { -+ if (errno == ENOPROTOOPT) -+ goto no_so_protocol; -+ NL_DBG(4, "nl_socket_set_fd(%p,%d): getsockopt() for SO_PROTOCOL failed with %d (%s)\n", -+ sk, fd, errno, strerror_r(errno, buf, sizeof(buf))); -+ return -nl_syserr2nlerr(errno); -+ } -+ if (addrlen != sizeof(so_protocol)) -+ return -NLE_INVAL; -+ if (protocol >= 0 && protocol != so_protocol) { -+ NL_DBG(4, "nl_socket_set_fd(%p,%d): getsockopt() for SO_PROTOCOL returned %d instead of %d\n", -+ sk, fd, so_protocol, protocol); -+ return -NLE_INVAL; -+ } -+ -+ if (0) -+#endif -+ { -+no_so_protocol: -+ if (protocol < 0) { -+ NL_DBG(4, "nl_socket_set_fd(%p,%d): unknown protocol and unable to detect it via SO_PROTOCOL socket option\n", -+ sk, fd); -+ return -NLE_INVAL; -+ } -+ so_protocol = protocol; -+ } - - if (sk->s_local.nl_pid != local.nl_pid) { - /* the port id differs. The socket is using a port id not managed by -@@ -629,7 +683,7 @@ int nl_socket_set_fd(struct nl_sock *sk, int protocol, int fd) - } - sk->s_local = local; - sk->s_fd = fd; -- sk->s_proto = protocol; -+ sk->s_proto = so_protocol; - - return 0; - } --- -1.9.3 - diff --git a/0002-fedora-symbols.patch b/0002-fedora-symbols.patch deleted file mode 100644 index bd4a3b1..0000000 --- a/0002-fedora-symbols.patch +++ /dev/null @@ -1,99 +0,0 @@ -From db6d08eb00fc84ecef0b14d79cc290470cfb4e98 Mon Sep 17 00:00:00 2001 -From: Thomas Haller -Date: Mon, 9 Mar 2015 17:16:56 +0100 -Subject: [PATCH 1/1] build: revert moving unstable symbols from libnl_3 linker - section - -In the past, libnl3 had only one section (libnl_3) in the -linker version script. Between 3.2.25 and 3.2.26 release, -this was cleaned up and new symbols were added to libnl_3_2_26 -section. Commit d2a30fb also moved new symbols since 3.2.25 -to that section. - -Fedora 21 and later already uses these symbols in the previous -version (@libnl_3). Updating there would break symbol lookup. - -As we have users of the unstable version from pre-3.2.26, move -those symbols back. Note that this now breaks unstable users since -d2a30fb (5 weeks ago) -- which probably are much fewer affected -users. - -Fixes: d2a30fbb36d668fe64f43bddfc9c53ee0362334f - -Signed-off-by: Thomas Haller -(cherry picked from commit cd4f66c321c91b10776af8749a60396185f462e1) ---- - libnl-3.sym | 8 ++++++-- - libnl-route-3.sym | 18 +++++++++++------- - 2 files changed, 17 insertions(+), 9 deletions(-) - -diff --git a/libnl-3.sym b/libnl-3.sym -index c8ef8a3..621bfe0 100644 ---- a/libnl-3.sym -+++ b/libnl-3.sym -@@ -320,13 +320,17 @@ global: - nlmsg_total_size; - nlmsg_valid_hdr; - nlmsg_validate; -+ -+ # The following symbols were added during the development of 3.2.26. -+ # Keep them in libnl_3 to avoid breaking users. -+ nl_cache_pickup_checkdup; -+ nl_pickup_keep_syserr; -+ - local: - *; - }; - - libnl_3_2_26 { - global: -- nl_cache_pickup_checkdup; -- nl_pickup_keep_syserr; - nl_socket_set_fd; - } libnl_3; -diff --git a/libnl-route-3.sym b/libnl-route-3.sym -index 139a499..03b7c4e 100644 ---- a/libnl-route-3.sym -+++ b/libnl-route-3.sym -@@ -832,12 +832,9 @@ global: - rtnl_u32_set_hashmask; - rtnl_u32_set_hashtable; - rtnl_u32_set_link; --local: -- *; --}; - --libnl_3_2_26 { --global: -+ # The following symbols were added during the development of 3.2.26. -+ # Keep them in libnl_3 to avoid breaking users. - rtnl_class_hfsc_get_fsc; - rtnl_class_hfsc_get_rsc; - rtnl_class_hfsc_get_usc; -@@ -852,6 +849,15 @@ global: - rtnl_link_inet6_str2addrgenmode; - rtnl_qdisc_hfsc_get_defcls; - rtnl_qdisc_hfsc_set_defcls; -+ rtnl_u32_add_mark; -+ rtnl_u32_del_mark; -+ -+local: -+ *; -+}; -+ -+libnl_3_2_26 { -+global: - rtnl_skbedit_get_action; - rtnl_skbedit_get_mark; - rtnl_skbedit_get_priority; -@@ -862,7 +868,5 @@ global: - rtnl_skbedit_set_queue_mapping; - rtnl_tc_stat2str; - rtnl_tc_str2stat; -- rtnl_u32_add_mark; -- rtnl_u32_del_mark; - rtnl_u32_get_classid; - } libnl_3; --- -1.9.3 - diff --git a/libnl3.spec b/libnl3.spec index 803f872..0938796 100644 --- a/libnl3.spec +++ b/libnl3.spec @@ -1,17 +1,15 @@ Name: libnl3 Version: 3.2.26 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Convenience library for kernel netlink sockets Group: Development/Libraries License: LGPLv2 URL: http://www.infradead.org/~tgr/libnl/ -%define fullversion %{version}-rc1 +%define fullversion %{version} Source: http://www.infradead.org/~tgr/libnl/files/libnl-%{fullversion}.tar.gz Source1: http://www.infradead.org/~tgr/libnl/files/libnl-doc-%{fullversion}.tar.gz -Patch1: 0001-nl-socket-set-fd.patch -Patch2: 0002-fedora-symbols.patch BuildRequires: flex bison BuildRequires: python @@ -70,8 +68,6 @@ Python 3 bindings for libnl3 %prep %setup -q -n libnl-%{fullversion} -%patch1 -p1 -b .0001-nl-socket-set-fd.orig -%patch2 -p1 -b .0002-fedora-symbols.orig tar -xzf %SOURCE1 @@ -128,7 +124,7 @@ popd %doc COPYING %{_libdir}/libnl-cli*.so.* %{_libdir}/libnl/ -%{_sbindir}/* +%{_bindir}/* %{_mandir}/man8/* %files doc @@ -152,6 +148,10 @@ popd %{python3_sitearch}/netlink-*.egg-info %changelog +* Mon Mar 30 2015 Thomas Haller - 3.2.26-4 +- Update to 3.2.26 +- cli package brings more commands and installs them to /bin + * Mon Mar 9 2015 Thomas Haller - 3.2.26-3 - Update to 3.2.26-rc1 - fix broken symbols from 3.2.26-1 diff --git a/sources b/sources index 3e80049..afa8d88 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -1d2bf6120ec2f479df9aa43d876f06b9 libnl-3.2.26-rc1.tar.gz -5af8721bedc132c9fb8bcc3f2c6ee2f9 libnl-doc-3.2.26-rc1.tar.gz +c8de31b74b1c15267b5ac2927b11125c libnl-3.2.26.tar.gz +a356d3d91891d392f83a2171b83edcb2 libnl-doc-3.2.26.tar.gz