import mptcpd-0.8-2.el9

This commit is contained in:
CentOS Sources 2022-05-17 04:46:25 -04:00 committed by Stepan Oksanichenko
commit 7b30014ebd
6 changed files with 253 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/mptcpd-0.8.tar.gz

1
.mptcpd.metadata Normal file
View File

@ -0,0 +1 @@
a75235d98b7d2ab1ed71e0bd9d1683e6da462bfb SOURCES/mptcpd-0.8.tar.gz

View File

@ -0,0 +1,31 @@
From 5633f08e35552295b2f9414ff32ca4e8e081b2f2 Mon Sep 17 00:00:00 2001
Message-Id: <5633f08e35552295b2f9414ff32ca4e8e081b2f2.1638196305.git.dcaratti@redhat.com>
From: Paolo Abeni <paolo.abeni@gmail.com>
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

View File

@ -0,0 +1,75 @@
From 591b3b168d949c45d5b5994332a3007767845434 Mon Sep 17 00:00:00 2001
Message-Id: <591b3b168d949c45d5b5994332a3007767845434.1638277575.git.dcaratti@redhat.com>
From: Paolo Abeni <paolo.abeni@gmail.com>
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 <sys/types.h>
#include <sys/stat.h>
+#include <sys/sendfile.h>
#include <argp.h>
#include <dlfcn.h>
@@ -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

View File

@ -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

121
SPECS/mptcpd.spec Normal file
View File

@ -0,0 +1,121 @@
Summary: Multipath TCP daemon
Name: mptcpd
Version: 0.8
Release: 2%{?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
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
* Tue Nov 30 2021 Davide Caratti <dcaratti@redhat.com> - 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 <dcaratti@redhat.com> - 0.8-1
- update to version 0.8
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 0.7-3
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Wed Jun 23 2021 Davide Caratti <dcaratti@redhat.com> - 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 <dcaratti@redhat.com> - 0.7-1
- update to version 0.7
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 0.6-2
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Wed Mar 17 2021 Davide Caratti <dcaratti@redhat.com> - 0.6-1
- update to version 0.6
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 0.5.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jan 20 2021 Davide Caratti <dcaratti@redhat.com> - 0.5.1-1
- initial build