From a4e3fac06bf174a9a29e2976c924a5cb59ea2d8a Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Wed, 15 Mar 2023 18:55:44 +0300 Subject: [PATCH] import mptcpd-0.8-3.el9 --- .gitignore | 1 + .mptcpd.metadata | 1 + ...e-MPTCP-usage-for-IPPROTO_IP-too-159.patch | 31 +++++ ...licit-file-copy-instead-of-rename-16.patch | 75 ++++++++++ SOURCES/0003-fix-multilib-install.patch | 24 ++++ SOURCES/workaround-build-issues-uapi.patch | 102 ++++++++++++++ SPECS/mptcpd.spec | 128 ++++++++++++++++++ 7 files changed, 362 insertions(+) create mode 100644 .gitignore create mode 100644 .mptcpd.metadata create mode 100644 SOURCES/0001-mptcpize-force-MPTCP-usage-for-IPPROTO_IP-too-159.patch create mode 100644 SOURCES/0001-mptcpize-use-explicit-file-copy-instead-of-rename-16.patch create mode 100644 SOURCES/0003-fix-multilib-install.patch create mode 100644 SOURCES/workaround-build-issues-uapi.patch create mode 100644 SPECS/mptcpd.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..64c227e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/mptcpd-0.8.tar.gz diff --git a/.mptcpd.metadata b/.mptcpd.metadata new file mode 100644 index 0000000..9a3e9db --- /dev/null +++ b/.mptcpd.metadata @@ -0,0 +1 @@ +a75235d98b7d2ab1ed71e0bd9d1683e6da462bfb SOURCES/mptcpd-0.8.tar.gz diff --git a/SOURCES/0001-mptcpize-force-MPTCP-usage-for-IPPROTO_IP-too-159.patch b/SOURCES/0001-mptcpize-force-MPTCP-usage-for-IPPROTO_IP-too-159.patch new file mode 100644 index 0000000..4db092b --- /dev/null +++ b/SOURCES/0001-mptcpize-force-MPTCP-usage-for-IPPROTO_IP-too-159.patch @@ -0,0 +1,31 @@ +From 5633f08e35552295b2f9414ff32ca4e8e081b2f2 Mon Sep 17 00:00:00 2001 +Message-Id: <5633f08e35552295b2f9414ff32ca4e8e081b2f2.1638196305.git.dcaratti@redhat.com> +From: Paolo Abeni +Date: Tue, 12 Oct 2021 19:24:33 +0200 +Subject: [PATCH] mptcpize: force MPTCP usage for IPPROTO_IP, too (#159) + +The current ignores calls alike: + + socket(AF_INET, SOCK_STREAM, IPPROTO_IP) + +We should hijack them, too. +--- + src/mptcpwrap.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/mptcpwrap.c b/src/mptcpwrap.c +index 37b0545..1aaf00f 100644 +--- a/src/mptcpwrap.c ++++ b/src/mptcpwrap.c +@@ -27,7 +27,7 @@ int __attribute__((visibility("default"))) socket(int family, int type, int prot + goto do_socket; + + // socket(AF_INET, SOCK_STREM, 0) maps to TCP, too +- if (protocol == 0 && protocol != IPPROTO_TCP) ++ if (protocol != 0 && protocol != IPPROTO_TCP) + goto do_socket; + + protocol = IPPROTO_TCP + 256; +-- +2.31.1 + diff --git a/SOURCES/0001-mptcpize-use-explicit-file-copy-instead-of-rename-16.patch b/SOURCES/0001-mptcpize-use-explicit-file-copy-instead-of-rename-16.patch new file mode 100644 index 0000000..f8a0347 --- /dev/null +++ b/SOURCES/0001-mptcpize-use-explicit-file-copy-instead-of-rename-16.patch @@ -0,0 +1,75 @@ +From 591b3b168d949c45d5b5994332a3007767845434 Mon Sep 17 00:00:00 2001 +Message-Id: <591b3b168d949c45d5b5994332a3007767845434.1638277575.git.dcaratti@redhat.com> +From: Paolo Abeni +Date: Thu, 14 Oct 2021 05:05:54 +0200 +Subject: [PATCH] mptcpize: use explicit file copy instead of rename() (#161) + +The mentioned syscall fails if the involved files belong to +different fs, which is pretty much expected in the relevant +scenario (tmp file, in tmpfs, and unit file usually under the +root partition) + +Instead use sendfile() to explicitly copy all the contents. Note +that we need to close and re-open the unit file, as sendfile() +expect a O_WRITE fd as the target. +--- + src/mptcpize.c | 24 ++++++++++++++++++++---- + 1 file changed, 20 insertions(+), 4 deletions(-) + +diff --git a/src/mptcpize.c b/src/mptcpize.c +index cb79e09..b502d75 100644 +--- a/src/mptcpize.c ++++ b/src/mptcpize.c +@@ -13,6 +13,7 @@ + + #include + #include ++#include + + #include + #include +@@ -163,10 +164,12 @@ static int unit_update(int argc, char *argv[], int enable) + char *unit, *line = NULL; + int append_env = enable; + char dst_path[PATH_MAX]; ++ off_t bytes_copied = 0; ++ struct stat fileinfo; ++ int dst, unit_fd; + size_t len = 0; + ssize_t read; + FILE *src; +- int dst; + + if (argc < 1) { + fprintf(stderr, "missing unit argument\n"); +@@ -210,11 +213,24 @@ static int unit_update(int argc, char *argv[], int enable) + error(1, errno, "can't read from %s", unit); + free(line); + fclose(src); +- close(dst); + +- if (rename(dst_path, unit) < 0) +- error(1, errno, "can't rename %s to %s", dst_path, unit); ++ // copy back the modified file into the original unit ++ // note: avoid using rename, as it fails across filesystems ++ if (fstat(dst, &fileinfo) < 0) ++ error(1, errno, "can't stat %s", dst_path); ++ ++ // re-open the unit file for writing ++ // mkstemp already opened the temporary file for R/W so we don't need ++ // to touch that file descriptor. ++ unit_fd = open(unit, O_TRUNC | O_RDWR); ++ if (unit_fd < 0) ++ error(1, errno, "can't open %s for writing", unit); + ++ while (bytes_copied < fileinfo.st_size) ++ if (sendfile(unit_fd, dst, &bytes_copied, fileinfo.st_size - bytes_copied) < 0) ++ error(1, errno, "can't copy from %s to %s", dst_path, unit); ++ ++ close(dst); + if (system("systemctl daemon-reload") != 0) + error(1, errno, "can't reload unit, manual 'systemctl daemon-reload' is required"); + +-- +2.31.1 + diff --git a/SOURCES/0003-fix-multilib-install.patch b/SOURCES/0003-fix-multilib-install.patch new file mode 100644 index 0000000..6915d9a --- /dev/null +++ b/SOURCES/0003-fix-multilib-install.patch @@ -0,0 +1,24 @@ +diff --git a/etc/mptcpd.conf.in b/etc/mptcpd.conf.in +index 615c63b..c6b31ac 100644 +--- a/etc/mptcpd.conf.in ++++ b/etc/mptcpd.conf.in +@@ -19,7 +19,6 @@ log=@mptcpd_logger@ + # ---------------- + # Plugin directory + # ---------------- +-plugin-dir=@pkglibdir@ + + # ------------------- + # Path manager plugin +diff --git a/src/mptcp.service.in b/src/mptcp.service.in +index 89dfe04..738f59f 100644 +--- a/src/mptcp.service.in ++++ b/src/mptcp.service.in +@@ -9,7 +9,6 @@ Documentation=man:mptcpd(8) + [Service] + Type=simple + DynamicUser=yes +-Environment=LD_LIBRARY_PATH=@libdir@ + ExecStart=@libexecdir@/mptcpd --log=journal + CapabilityBoundingSet=CAP_NET_ADMIN + AmbientCapabilities=CAP_NET_ADMIN diff --git a/SOURCES/workaround-build-issues-uapi.patch b/SOURCES/workaround-build-issues-uapi.patch new file mode 100644 index 0000000..0b391c1 --- /dev/null +++ b/SOURCES/workaround-build-issues-uapi.patch @@ -0,0 +1,102 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -207,8 +207,7 @@ AC_CHECK_HEADERS([linux/mptcp.h], + AX_CHECK_DEFINE( + [linux/mptcp.h], + [MPTCP_PM_NAME], +- [AC_DEFINE([HAVE_LINUX_MPTCP_H_UPSTREAM], [1]) +- AX_CHECK_DEFINE([linux/mptcp.h], ++ [AX_CHECK_DEFINE([linux/mptcp.h], + [MPTCP_PM_EV_GRP_NAME], + [AC_DEFINE([HAVE_LINUX_MPTCP_H_UPSTREAM_EVENTS], + [1]) +--- a/include/linux/mptcp_upstream.h ++++ b/include/linux/mptcp_upstream.h +@@ -2,8 +2,16 @@ + #ifndef _UAPI_MPTCP_H + #define _UAPI_MPTCP_H + ++#ifndef __KERNEL__ ++#include /* for sockaddr_in and sockaddr_in6 */ ++#include /* for struct sockaddr */ ++#endif ++ + #include + #include ++#include /* for sockaddr_in */ ++#include /* for sockaddr_in6 */ ++#include /* for sockaddr_storage and sa_family */ + + #define MPTCP_SUBFLOW_FLAG_MCAP_REM _BITUL(0) + #define MPTCP_SUBFLOW_FLAG_MCAP_LOC _BITUL(1) +@@ -48,6 +56,9 @@ enum { + MPTCP_PM_ATTR_ADDR, /* nested address */ + MPTCP_PM_ATTR_RCV_ADD_ADDRS, /* u32 */ + MPTCP_PM_ATTR_SUBFLOWS, /* u32 */ ++ MPTCP_PM_ATTR_TOKEN, /* u32 */ ++ MPTCP_PM_ATTR_LOC_ID, /* u8 */ ++ MPTCP_PM_ATTR_ADDR_REMOTE, /* nested address */ + + __MPTCP_PM_ATTR_MAX + }; +@@ -73,6 +84,8 @@ enum { + #define MPTCP_PM_ADDR_FLAG_SIGNAL (1 << 0) + #define MPTCP_PM_ADDR_FLAG_SUBFLOW (1 << 1) + #define MPTCP_PM_ADDR_FLAG_BACKUP (1 << 2) ++#define MPTCP_PM_ADDR_FLAG_FULLMESH (1 << 3) ++#define MPTCP_PM_ADDR_FLAG_IMPLICIT (1 << 4) + + enum { + MPTCP_PM_CMD_UNSPEC, +@@ -84,6 +97,10 @@ enum { + MPTCP_PM_CMD_SET_LIMITS, + MPTCP_PM_CMD_GET_LIMITS, + MPTCP_PM_CMD_SET_FLAGS, ++ MPTCP_PM_CMD_ANNOUNCE, ++ MPTCP_PM_CMD_REMOVE, ++ MPTCP_PM_CMD_SUBFLOW_CREATE, ++ MPTCP_PM_CMD_SUBFLOW_DESTROY, + + __MPTCP_PM_CMD_AFTER_LAST + }; +@@ -177,6 +194,7 @@ enum mptcp_event_attr { + MPTCP_ATTR_IF_IDX, /* s32 */ + MPTCP_ATTR_RESET_REASON,/* u32 */ + MPTCP_ATTR_RESET_FLAGS, /* u32 */ ++ MPTCP_ATTR_SERVER_SIDE, /* u8 */ + + __MPTCP_ATTR_AFTER_LAST + }; +@@ -192,4 +210,32 @@ enum mptcp_event_attr { + #define MPTCP_RST_EBADPERF 5 + #define MPTCP_RST_EMIDDLEBOX 6 + ++struct mptcp_subflow_data { ++ __u32 size_subflow_data; /* size of this structure in userspace */ ++ __u32 num_subflows; /* must be 0, set by kernel */ ++ __u32 size_kernel; /* must be 0, set by kernel */ ++ __u32 size_user; /* size of one element in data[] */ ++} __attribute__((aligned(8))); ++ ++struct mptcp_subflow_addrs { ++ union { ++ __kernel_sa_family_t sa_family; ++ struct sockaddr sa_local; ++ struct sockaddr_in sin_local; ++ struct sockaddr_in6 sin6_local; ++ struct __kernel_sockaddr_storage ss_local; ++ }; ++ union { ++ struct sockaddr sa_remote; ++ struct sockaddr_in sin_remote; ++ struct sockaddr_in6 sin6_remote; ++ struct __kernel_sockaddr_storage ss_remote; ++ }; ++}; ++ ++/* MPTCP socket options */ ++#define MPTCP_INFO 1 ++#define MPTCP_TCPINFO 2 ++#define MPTCP_SUBFLOW_ADDRS 3 ++ + #endif /* _UAPI_MPTCP_H */ diff --git a/SPECS/mptcpd.spec b/SPECS/mptcpd.spec new file mode 100644 index 0000000..f871815 --- /dev/null +++ b/SPECS/mptcpd.spec @@ -0,0 +1,128 @@ +Summary: Multipath TCP daemon +Name: mptcpd +Version: 0.8 +Release: 3%{?dist} +License: BSD +URL: https://multipath-tcp.org +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +BuildRequires: make +BuildRequires: gcc +BuildRequires: libtool +BuildRequires: automake +BuildRequires: autoconf +BuildRequires: autoconf-archive +BuildRequires: libell-devel +BuildRequires: systemd-units +BuildRequires: systemd-rpm-macros + +Source0: https://github.com/intel/mptcpd/archive/v%{version}/%{name}-%{version}.tar.gz + +Patch2: workaround-build-issues-uapi.patch +Patch3: 0003-fix-multilib-install.patch +Patch4: 0001-mptcpize-force-MPTCP-usage-for-IPPROTO_IP-too-159.patch +Patch5: 0001-mptcpize-use-explicit-file-copy-instead-of-rename-16.patch + +%description +The Multipath TCP Daemon is a daemon for Linux based operating systems that +performs multipath TCP path management related operations in user space. It +interacts with the Linux kernel through a generic netlink connection to track +per-connection information (e.g. available remote addresses), available network +interfaces, request new MPTCP subflows, handle requests for subflows, etc. + +%package devel +Summary: MPTCP path manager header files +Group: Development/Libraries +Requires: pkgconfig +Requires: %{name}%{?_isa} = %{version}-%{release} +License: BSD + +%description devel +Header files for adding MPTCP path manager support to applications + +%prep +%autosetup -p1 + +%build +autoreconf --install --symlink --force +%configure --enable-debug=info +%make_build V=1 + +%install +install -d %{buildroot}/%{_libexecdir} +install -d %{buildroot}/%{_mandir}/man8 +install -d %{buildroot}/%{_sysconfdir}/%{name} +install -d %{buildroot}/%{_unitdir} +install -d %{buildroot}/%{_libdir}/%{name} +install -d %{buildroot}/%{_includedir}/%{name} +%make_install +sed -i '/^# addr-flags=subflow/s/^# //g' %{buildroot}/%{_sysconfdir}/%{name}/%{name}.conf +sed -i '/^# notify-flags=existing,skip_link_local,skip_loopback/s/^# //g' %{buildroot}/%{_sysconfdir}/%{name}/%{name}.conf +find %{buildroot} -name '*.la' -exec rm -f {} ';' + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig +%systemd_postun mptcp.service + +%files +%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf +%dir %{_sysconfdir}/%{name} +%dir %{_libdir}/%{name} +%{_libdir}/libmptcpd.so.* +%{_libdir}/%{name}/*.so +%{_libdir}/%{name}/libmptcpwrap.so* +%{_libexecdir}/%{name} +%{_bindir}/mptcpize +%{_unitdir}/mptcp.service +%{_mandir}/man8/%{name}.8.gz +%{_mandir}/man8/mptcpize.8.gz +# todo add %doc +%license COPYING + +%files devel +%doc COPYING +%dir %{_includedir}/%{name} +%{_libdir}/*.so +%{_includedir}/mptcpd/*.h +%{_libdir}/pkgconfig/mptcpd.pc + +%changelog +* Wed Mar 15 2023 MSVSphere Packaging Team - 0.8-3 +- Rebuilt for MSVSphere 9.1. + +* Wed Jul 6 2022 Davide Caratti - 0.8-3 +- workaround for uAPI header build issue + +* Tue Nov 30 2021 Davide Caratti - 0.8-2 +- fix mptcpize to work also when protocol number is 0 (upstream issue #159) + and when command resides in another file system (upstream issue #161) + Related: rhbz#2015623 + +* Wed Sep 29 2021 Davide Caratti - 0.8-1 +- update to version 0.8 + +* Mon Aug 09 2021 Mohan Boddu - 0.7-3 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Wed Jun 23 2021 Davide Caratti - 0.7-2 +- add a simple sanity test and enable gating. Related: rhbz#1962741 +- don't overwrite global build options. Related: rhbz#1967697 +- fix 'check_conflicts' on multilib. Related: rhbz#1967697 + +* Wed Apr 28 2021 Davide Caratti - 0.7-1 +- update to version 0.7 + +* Fri Apr 16 2021 Mohan Boddu - 0.6-2 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Wed Mar 17 2021 Davide Caratti - 0.6-1 +- update to version 0.6 + +* Tue Jan 26 2021 Fedora Release Engineering - 0.5.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jan 20 2021 Davide Caratti - 0.5.1-1 +- initial build