diff --git a/.fmf/version b/.fmf/version deleted file mode 100644 index d00491f..0000000 --- a/.fmf/version +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/.gitignore b/.gitignore index be468d1..4c48ceb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,54 +1 @@ -corosync-1.2.6.tar.gz -corosync-1.2.7.tar.gz -/corosync-1.2.8.tar.gz -/corosync-1.3.0.tar.gz -/corosync-1.3.1.tar.gz -/corosync-1.3.2.tar.gz -/corosync-1.4.0.tar.gz -/corosync-1.4.1.tar.gz -/corosync-1.4.2.tar.gz -/corosync-1.99.1.tar.gz -/corosync-1.99.2.tar.gz -/corosync-1.99.3.tar.gz -/corosync-1.99.4.tar.gz -/corosync-1.99.5.tar.gz -/corosync-1.99.6.tar.gz -/corosync-1.99.7.tar.gz -/corosync-1.99.8.tar.gz -/corosync-1.99.9.tar.gz -/corosync-2.0.0.tar.gz -/corosync-2.0.1.tar.gz -/corosync-2.1.0.tar.gz -/corosync-2.2.0.tar.gz -/corosync-2.3.0.tar.gz -/corosync-2.3.1.tar.gz -/corosync-2.3.2.tar.gz -/corosync-2.3.3.tar.gz -/corosync-2.3.4.tar.gz -/corosync-2.3.5.tar.gz -/corosync-2.3.6.tar.gz -/corosync-2.4.0.tar.gz -/corosync-2.4.1.tar.gz -/corosync-2.4.2.tar.gz -/corosync-2.4.3.tar.gz -/corosync-2.99.1.tar.gz -/corosync-2.99.2.tar.gz -/corosync-2.99.3.tar.gz -/corosync-2.99.4.tar.gz -/corosync-2.99.5.tar.gz -/corosync-3.0.0.tar.gz -/corosync-3.0.1.tar.gz -/corosync-3.0.2.tar.gz -/corosync-3.0.3.tar.gz -/corosync-3.0.4.tar.gz -/corosync-3.1.0.tar.gz -/corosync-3.1.1.tar.gz -/corosync-3.1.2.tar.gz -/corosync-3.1.3.tar.gz -/corosync-3.1.4.tar.gz -/corosync-3.1.5.tar.gz -/corosync-3.1.6.tar.gz -/corosync-3.1.7.tar.gz -/corosync-3.1.8.tar.gz -/corosync-3.1.9.tar.gz -/corosync-3.1.10.tar.gz +corosync-1.2.3.tar.gz diff --git a/corosync.rpmlintrc b/corosync.rpmlintrc deleted file mode 100644 index 39e1f00..0000000 --- a/corosync.rpmlintrc +++ /dev/null @@ -1,29 +0,0 @@ -# Empty %postun -addFilter(r'W: empty-%postun') - -# Spelling error init -addFilter(r'W: spelling-error %description -l en_US init') - -# Spelling error corosync -addFilter(r'W: spelling-error .* (C|c)orosync') - -# Spelling error votequorum and subprocesses -addFilter(r'corosync-vqsim\.[^:]+: W: spelling-error .* votequorum') -addFilter(r'corosync-vqsim\.[^:]+: W: spelling-error .* subprocesses') - -# Repeated Corosync -addFilter(r'W: name-repeated-in-summary C Corosync') - -# Explicit lib dependency - knet nss has been requested by QA, -# libxslt may be replaced with xsltproc binary -addFilter(r'corosync\.[^:]+: (E|W): explicit-lib-dependency libknet1-crypto-nss-plugin') -addFilter(r'corosync\.[^:]+: (E|W): explicit-lib-dependency libxslt') - -# Dbus is not config file -addFilter(r'corosync\.[^:]+: (E|W): non-conffile-in-etc /etc/dbus-1/system\.d/corosync-signals\.conf') - -# Logrotate is not requirement -addFilter(r'corosync\.[^:]+: (E|W): missing-dependency-to-logrotate') - -# libcorosync_common.so has no libc call -addFilter(r'corosynclib\.[^:]+: (E|W): library-not-linked-against-libc /usr/lib(64)?/libcorosync_common\.so') diff --git a/corosync.spec b/corosync.spec index 6e04bf1..8ff4113 100644 --- a/corosync.spec +++ b/corosync.spec @@ -1,648 +1,219 @@ -# Conditionals -# Invoke "rpmbuild --without " or "rpmbuild --with " -# to disable or enable specific features -%bcond_with watchdog -%bcond_with monitoring -%bcond_without snmp -%bcond_without dbus -%bcond_without systemd -%bcond_without xmlconf -%bcond_without nozzle -%bcond_without vqsim -%bcond_without runautogen -%bcond_without userflags +# global alphatag svn1211 Name: corosync Summary: The Corosync Cluster Engine and Application Programming Interfaces -Version: 3.1.10 -Release: 1%{?dist} -License: BSD-3-Clause -URL: http://corosync.github.io/corosync/ -Source0: https://github.com/%{name}/%{name}/releases/download/v%{version}/%{name}-%{version}.tar.gz +Version: 1.2.3 +Release: 1%{?alphatag:.%{alphatag}}%{?dist} +License: BSD +Group: System Environment/Base +URL: http://ftp.corosync.org +Source0: ftp://ftp:user@ftp.corosync.org/downloads/%{name}-%{version}/%{name}-%{version}.tar.gz +Patch0: revision-2770.patch # Runtime bits -# The automatic dependency overridden in favor of explicit version lock -Requires: corosynclib%{?_isa} = %{version}-%{release} - -# Support crypto reload -Requires: libknet1 >= 1.18 -# NSS crypto plugin should be always installed -Requires: libknet1-crypto-nss-plugin >= 1.18 - -# Build bits -BuildRequires: gcc -BuildRequires: groff -BuildRequires: libqb-devel -BuildRequires: libknet1-devel >= 1.18 -BuildRequires: zlib-devel -%if %{with runautogen} -BuildRequires: autoconf automake libtool -%endif -%if %{with monitoring} -BuildRequires: libstatgrab-devel -%endif -%if %{with snmp} -BuildRequires: net-snmp-devel -%endif -%if %{with dbus} -BuildRequires: dbus-devel -%endif -%if %{with nozzle} -BuildRequires: libnozzle1-devel -%endif -%if %{with systemd} -%{?systemd_requires} -BuildRequires: systemd -BuildRequires: systemd-devel -%else +Requires: corosynclib = %{version}-%{release} +Requires(pre): /usr/sbin/useradd Requires(post): /sbin/chkconfig Requires(preun): /sbin/chkconfig +Conflicts: openais <= 0.89, openais-devel <= 0.89 + +# Build bits + +%define buildtrunk 0 +%{?_with_buildtrunk: %define buildtrunk 1} + +%if %{buildtrunk} +BuildRequires: autoconf automake %endif -%if %{with xmlconf} -Requires: libxslt -%endif -%if %{with vqsim} -BuildRequires: readline-devel -%endif -BuildRequires: make -BuildRequires: git + +BuildRequires: nss-devel +BuildRequires: libibverbs-devel librdmacm-devel + +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) %prep -%autosetup -S git_am +%setup -q -n %{name}-%{version} +%patch0 -%build -%if %{with runautogen} +%if %{buildtrunk} ./autogen.sh %endif +export ibverbs_CFLAGS=-I/usr/include/infiniband \ +export ibverbs_LIBS=-libverbs \ +export rdmacm_CFLAGS=-I/usr/include/rdma \ +export rdmacm_LIBS=-lrdmacm \ %{configure} \ -%if %{with watchdog} - --enable-watchdog \ -%endif -%if %{with monitoring} - --enable-monitoring \ -%endif -%if %{with snmp} - --enable-snmp \ -%endif -%if %{with dbus} - --enable-dbus \ -%endif -%if %{with systemd} - --enable-systemd \ -%endif -%if %{with xmlconf} - --enable-xmlconf \ -%endif -%if %{with nozzle} - --enable-nozzle \ -%endif -%if %{with vqsim} - --enable-vqsim \ -%endif -%if %{with userflags} - --enable-user-flags \ -%endif - --with-initddir=%{_initrddir} \ - --with-systemddir=%{_unitdir} \ - --docdir=%{_docdir} + --enable-nss \ + --enable-rdma \ + --with-initddir=%{_initddir} -%make_build +%build +make %{_smp_mflags} %install -%make_install +rm -rf %{buildroot} -%if %{with dbus} -mkdir -p -m 0700 %{buildroot}/%{_sysconfdir}/dbus-1/system.d -install -m 644 %{_builddir}/%{name}-%{version}/conf/corosync-signals.conf %{buildroot}/%{_datadir}/dbus-1/system.d/corosync-signals.conf -%endif +make install DESTDIR=%{buildroot} ## tree fixup # drop static libs rm -f %{buildroot}%{_libdir}/*.a -rm -f %{buildroot}%{_libdir}/*.la # drop docs and html docs for now rm -rf %{buildroot}%{_docdir}/* -# /etc/sysconfig/corosync-notifyd -mkdir -p %{buildroot}%{_sysconfdir}/sysconfig -install -m 644 tools/corosync-notifyd.sysconfig.example \ - %{buildroot}%{_sysconfdir}/sysconfig/corosync-notifyd -# /etc/sysconfig/corosync -install -m 644 init/corosync.sysconfig.example \ - %{buildroot}%{_sysconfdir}/sysconfig/corosync + +%clean +rm -rf %{buildroot} %description This package contains the Corosync Cluster Engine Executive, several default APIs and libraries, default configuration files, and an init script. %post -%if %{with systemd} && 0%{?systemd_post:1} -%systemd_post corosync.service -%else -if [ $1 -eq 1 ]; then - /sbin/chkconfig --add corosync || : -fi -%endif +/sbin/chkconfig --add corosync || : %preun -%if %{with systemd} && 0%{?systemd_preun:1} -%systemd_preun corosync.service -%else if [ $1 -eq 0 ]; then /sbin/service corosync stop &>/dev/null || : /sbin/chkconfig --del corosync || : fi -%endif - -%postun -%if %{with systemd} && 0%{?systemd_postun:1} -%systemd_postun corosync.service -%endif %files -%doc LICENSE +%defattr(-,root,root,-) +%doc LICENSE SECURITY %{_sbindir}/corosync %{_sbindir}/corosync-keygen -%{_sbindir}/corosync-cmapctl +%{_sbindir}/corosync-objctl %{_sbindir}/corosync-cfgtool +%{_sbindir}/corosync-fplay +%{_sbindir}/corosync-pload %{_sbindir}/corosync-cpgtool %{_sbindir}/corosync-quorumtool -%{_sbindir}/corosync-notifyd -%{_bindir}/corosync-blackbox -%if %{with xmlconf} -%{_bindir}/corosync-xmlproc -%dir %{_datadir}/corosync -%{_datadir}/corosync/xml2conf.xsl -%{_mandir}/man8/corosync-xmlproc.8* -%{_mandir}/man5/corosync.xml.5* -%endif %dir %{_sysconfdir}/corosync +%dir %{_sysconfdir}/corosync/service.d %dir %{_sysconfdir}/corosync/uidgid.d %config(noreplace) %{_sysconfdir}/corosync/corosync.conf.example -%config(noreplace) %{_sysconfdir}/sysconfig/corosync-notifyd -%config(noreplace) %{_sysconfdir}/sysconfig/corosync -%config(noreplace) %{_sysconfdir}/logrotate.d/corosync -%if %{with dbus} -%{_datadir}/dbus-1/system.d/corosync-signals.conf -%endif -%if %{with snmp} -%{_datadir}/snmp/mibs/COROSYNC-MIB.txt -%endif -%if %{with systemd} -%{_unitdir}/corosync.service -%{_unitdir}/corosync-notifyd.service -%else -%{_initrddir}/corosync -%{_initrddir}/corosync-notifyd -%endif -%if %{without systemd} +%{_initddir}/corosync +%dir %{_libexecdir}/lcrso +%{_libexecdir}/lcrso/coroparse.lcrso +%{_libexecdir}/lcrso/objdb.lcrso +%{_libexecdir}/lcrso/service_cfg.lcrso +%{_libexecdir}/lcrso/service_cpg.lcrso +%{_libexecdir}/lcrso/service_evs.lcrso +%{_libexecdir}/lcrso/service_confdb.lcrso +%{_libexecdir}/lcrso/service_pload.lcrso +%{_libexecdir}/lcrso/quorum_votequorum.lcrso +%{_libexecdir}/lcrso/quorum_testquorum.lcrso +%{_libexecdir}/lcrso/vsf_quorum.lcrso +%{_libexecdir}/lcrso/vsf_ykd.lcrso %dir %{_localstatedir}/lib/corosync -%dir %{_localstatedir}/log/cluster -%endif -%{_mandir}/man7/corosync_overview.7* -%{_mandir}/man8/corosync.8* -%{_mandir}/man8/corosync-blackbox.8* -%{_mandir}/man8/corosync-cmapctl.8* -%{_mandir}/man8/corosync-keygen.8* -%{_mandir}/man8/corosync-cfgtool.8* -%{_mandir}/man8/corosync-cpgtool.8* -%{_mandir}/man8/corosync-notifyd.8* -%{_mandir}/man8/corosync-quorumtool.8* +%{_mandir}/man8/corosync_overview.8* +%{_mandir}/man8/corosync-objctl.8* %{_mandir}/man5/corosync.conf.5* -%{_mandir}/man5/votequorum.5* -%{_mandir}/man7/cmap_keys.7* -# library -# %package -n corosynclib Summary: The Corosync Cluster Engine Libraries +Group: System Environment/Libraries +Requires: %{name} = %{version}-%{release} %description -n corosynclib This package contains corosync libraries. %files -n corosynclib +%defattr(-,root,root,-) %doc LICENSE %{_libdir}/libcfg.so.* %{_libdir}/libcpg.so.* -%{_libdir}/libcmap.so.* +%{_libdir}/libconfdb.so.* +%{_libdir}/libevs.so.* +%{_libdir}/libtotem_pg.so.* +%{_libdir}/liblogsys.so.* +%{_libdir}/libcoroipcc.so.* +%{_libdir}/libcoroipcs.so.* %{_libdir}/libquorum.so.* %{_libdir}/libvotequorum.so.* +%{_libdir}/libpload.so.* %{_libdir}/libsam.so.* -%{_libdir}/libcorosync_common.so.* -%ldconfig_scriptlets -n corosynclib +%post -n corosynclib -p /sbin/ldconfig + +%postun -n corosynclib -p /sbin/ldconfig %package -n corosynclib-devel Summary: The Corosync Cluster Engine Development Kit -Requires: corosynclib%{?_isa} = %{version}-%{release} +Group: Development/Libraries +Requires: corosynclib = %{version}-%{release} Requires: pkgconfig -Provides: corosync-devel = %{version}-%{release} -Provides: corosync-devel%{?_isa} = %{version}-%{release} +Provides: corosync-devel = %{version} +Obsoletes: corosync-devel < 0.92-7 %description -n corosynclib-devel This package contains include files and man pages used to develop using The Corosync Cluster Engine APIs. %files -n corosynclib-devel -%doc LICENSE +%defattr(-,root,root,-) +%doc LICENSE README.devmap %dir %{_includedir}/corosync/ +%{_includedir}/corosync/cs_config.h %{_includedir}/corosync/corodefs.h +%{_includedir}/corosync/coroipc_types.h +%{_includedir}/corosync/coroipcs.h +%{_includedir}/corosync/coroipcc.h %{_includedir}/corosync/cfg.h -%{_includedir}/corosync/cmap.h +%{_includedir}/corosync/confdb.h %{_includedir}/corosync/corotypes.h %{_includedir}/corosync/cpg.h +%{_includedir}/corosync/evs.h %{_includedir}/corosync/hdb.h +%{_includedir}/corosync/list.h +%{_includedir}/corosync/mar_gen.h %{_includedir}/corosync/sam.h +%{_includedir}/corosync/swab.h %{_includedir}/corosync/quorum.h %{_includedir}/corosync/votequorum.h +%dir %{_includedir}/corosync/totem/ +%{_includedir}/corosync/totem/coropoll.h +%{_includedir}/corosync/totem/totem.h +%{_includedir}/corosync/totem/totemip.h +%{_includedir}/corosync/totem/totempg.h +%dir %{_includedir}/corosync/lcr/ +%{_includedir}/corosync/lcr/lcr_ckpt.h +%{_includedir}/corosync/lcr/lcr_comp.h +%{_includedir}/corosync/lcr/lcr_ifact.h +%dir %{_includedir}/corosync/engine +%{_includedir}/corosync/engine/config.h +%{_includedir}/corosync/engine/coroapi.h +%{_includedir}/corosync/engine/logsys.h +%{_includedir}/corosync/engine/objdb.h +%{_includedir}/corosync/engine/quorum.h %{_libdir}/libcfg.so %{_libdir}/libcpg.so -%{_libdir}/libcmap.so +%{_libdir}/libconfdb.so +%{_libdir}/libevs.so +%{_libdir}/libtotem_pg.so +%{_libdir}/liblogsys.so +%{_libdir}/libcoroipcc.so +%{_libdir}/libcoroipcs.so %{_libdir}/libquorum.so %{_libdir}/libvotequorum.so +%{_libdir}/libpload.so %{_libdir}/libsam.so -%{_libdir}/libcorosync_common.so %{_libdir}/pkgconfig/*.pc %{_mandir}/man3/cpg_*3* -%{_mandir}/man3/quorum_*3* +%{_mandir}/man3/evs_*3* +%{_mandir}/man3/confdb_*3* %{_mandir}/man3/votequorum_*3* %{_mandir}/man3/sam_*3* -%{_mandir}/man3/cmap_*3* - -%if %{with vqsim} -%package -n corosync-vqsim -Summary: The Corosync Cluster Engine - Votequorum Simulator -Requires: corosynclib%{?_isa} = %{version}-%{release} -Requires: pkgconfig - -%description -n corosync-vqsim -A command-line simulator for the corosync votequorum subsystem. -It uses the same code as the corosync quorum system but forks -them into subprocesses to simulate nodes. -Nodes can be added and removed as well as partitioned (to simulate -network splits) - -%files -n corosync-vqsim -%doc LICENSE -%{_bindir}/corosync-vqsim -%{_mandir}/man8/corosync-vqsim.8* -%endif +%{_mandir}/man8/cpg_overview.8* +%{_mandir}/man8/evs_overview.8* +%{_mandir}/man8/confdb_overview.8* +%{_mandir}/man8/logsys_overview.8* +%{_mandir}/man8/votequorum_overview.8* +%{_mandir}/man8/coroipc_overview.8* +%{_mandir}/man8/sam_overview.8* %changelog -* Sat Nov 15 2025 Jan Friesse - 3.1.10-1 -- New upstream release - -* Wed Jul 23 2025 Fedora Release Engineering - 3.1.9-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Mon Jun 16 2025 Jan Friesse - 3.1.9-4 -- exec: Add support for env STATE_DIRECTORY -- init: Use LogsDirectory in systemd unit file - -* Wed Mar 26 2025 Jan Friesse - 3.1.9-3 -- totemsrp: Check size of orf_token msg - (fixes CVE-2025-30472) - -* Thu Jan 16 2025 Fedora Release Engineering - 3.1.9-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Fri Nov 15 2024 Jan Friesse - 3.1.9-1 -- New upstream release - -* Wed Jul 17 2024 Fedora Release Engineering - 3.1.8-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jan 24 2024 Fedora Release Engineering - 3.1.8-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jan 19 2024 Fedora Release Engineering - 3.1.8-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Wed Nov 15 2023 Jan Friesse - 3.1.8-1 -- New upstream release - -* Wed Jul 19 2023 Fedora Release Engineering - 3.1.7-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Tue Jun 06 2023 Jan Friesse - 3.1.7-3 -- migrated to SPDX license - -* Thu Jan 19 2023 Fedora Release Engineering - 3.1.7-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Tue Nov 15 2022 Jan Friesse - 3.1.7-1 -- New upstream release - -* Wed Jul 20 2022 Fedora Release Engineering - 3.1.6-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Wed Mar 30 2022 Jan Friesse - 3.1.6-3 -- Use copytruncate method for logrotate - -* Wed Jan 19 2022 Fedora Release Engineering - 3.1.6-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Mon Nov 15 2021 Jan Friesse - 3.1.6-1 -- New upstream release - -* Wed Aug 04 2021 Jan Friesse - 3.1.5-1 -- New upstream release - -* Wed Jul 21 2021 Fedora Release Engineering - 3.1.4-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Thu Jun 03 2021 Jan Friesse - 3.1.4-1 -- New upstream release - -* Fri May 21 2021 Jan Friesse - 3.1.3-1 -- New upstream release - -* Tue Apr 06 2021 Jan Friesse - 3.1.2-1 -- New upstream release - -* Wed Mar 31 2021 Jan Friesse - 3.1.1-1 -- New upstream release - -* Tue Jan 26 2021 Fedora Release Engineering - 3.1.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Mon Nov 02 2020 Jan Friesse - 3.1.0-2 -- Add isa version of corosync-devel -- Add release to corosync-devel version to match autogenerated - corosynclib-devel provides - -* Tue Oct 20 2020 Jan Friesse - 3.1.0-1 -- New upstream release - -* Thu Aug 27 2020 Josef Řídký - 3.0.4-6 -- Rebuilt for new net-snmp release - -* Mon Jul 27 2020 Fedora Release Engineering - 3.0.4-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Mon Jul 13 2020 Tom Stellard - 3.0.4-4 -- Use make macros -- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro - -* Wed May 13 2020 Jan Friesse - 3.0.4-3 -- Fix typo in the changelog - -* Wed May 13 2020 Jan Friesse - 3.0.4-2 -- Rebuild for new libqb - -* Thu Apr 23 2020 Jan Friesse - 3.0.4-1 -- New upstream release - -* Fri Mar 27 2020 Jan Friesse - 3.0.3-3 -- Add CI tests -- Enable gating - -* Tue Jan 28 2020 Fedora Release Engineering - 3.0.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Mon Nov 25 2019 Jan Friesse - 3.0.3-1 -- New upstream release - -* Wed Jul 24 2019 Fedora Release Engineering - 3.0.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Wed Jun 12 2019 Jan Friesse - 3.0.2-1 -- New upstream release - -* Thu Jan 31 2019 Fedora Release Engineering - 3.0.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Tue Jan 15 2019 Jan Friesse - 3.0.1-1 -- New upstream release - -* Fri Dec 14 2018 Jan Friesse - 3.0.0-1 -- New upstream release - -* Fri Dec 7 2018 Jan Friesse - 2.99.5-1 -- New upstream release - -* Tue Dec 4 2018 Jan Friesse - 2.99.4-2 -- Add libknet1-crypto-nss-plugin dependency - -* Tue Nov 20 2018 Jan Friesse - 2.99.4-1 -- New upstream release - -* Thu Aug 16 2018 Jan Pokorný - 2.99.3-3 -- Rebuild again, since the previous one was so unfortunate it got affected - with binutils (2.31.1-3.fc29) producing non-monotonically increasing - section offsets causing unprepared eu-strip to damage the binary - (related: rhbz#1609577) -- Apply patch to prevent redundancy in systemd journal - -* Tue Jul 24 2018 Adam Williamson - 2.99.3-2 -- Rebuild for new net-snmp - -* Fri Jul 13 2018 Jan Friesse - 2.99.3-1 -- New upstream release - -* Thu Jul 12 2018 Fedora Release Engineering - 2.99.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Mon Apr 30 2018 Jan Friesse - 2.99.2-1 -- New upstream release - -* Fri Mar 16 2018 Jan Friesse - 2.99.1-1 -- New upstream release - -* Wed Feb 07 2018 Fedora Release Engineering - 2.4.3-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Fri Jan 19 2018 Igor Gnatenko - 2.4.3-2 -- Rebuild to fix upgradepath - -* Fri Oct 20 2017 Jan Friesse - 2.4.3-1 -- New upstream release - -* Mon Oct 09 2017 Troy Dawson - 2.4.2-7 -- Cleanup spec file conditionals - -* Mon Oct 02 2017 Troy Dawson - 2.4.2-6 -- Bump to rebuild on newer binutils - -* Wed Aug 23 2017 Adam Williamson - 2.4.2-5 -- Disable RDMA on 32-bit ARM (#1484155) - -* Wed Aug 02 2017 Fedora Release Engineering - 2.4.2-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 2.4.2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Fri Feb 10 2017 Fedora Release Engineering - 2.4.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Mon Nov 7 2016 Jan Friesse - 2.4.2-1 -- New upstream release - -* Thu Aug 4 2016 Jan Friesse - 2.4.1-1 -- New upstream release - -* Thu Jun 30 2016 Jan Friesse - 2.4.0-1 -- New upstream release - -* Thu Jun 16 2016 Jan Friesse - 2.3.6-1 -- New upstream release - -* Wed Feb 03 2016 Fedora Release Engineering - 2.3.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Wed Jul 01 2015 Jan Friesse - 2.3.5-1 -- New upstream release - -* Wed Jun 17 2015 Fedora Release Engineering - 2.3.4-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Tue Aug 26 2014 Jan Friesse - 2.3.4-1 -- New upstream release - -* Sat Aug 16 2014 Fedora Release Engineering - 2.3.3-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Sat Jun 07 2014 Fedora Release Engineering - 2.3.3-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Tue Jan 14 2014 Jan Friesse - 2.3.3-1 -- New upstream release - -* Mon Sep 16 2013 Jan Friesse - 2.3.2-1 -- New upstream release - -* Mon Aug 19 2013 Jan Friesse 2.3.1-3 -- Resolves: rhbz#998362 - -- Fix scheduler pause-detection timeout (rhbz#998362) -- merge upstream commit 2740cfd1eac60714601c74df2137fe588b607866 (rhbz#998362) - -* Sat Aug 03 2013 Fedora Release Engineering - 2.3.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Wed Jul 10 2013 Jan Friesse - 2.3.1-1 -- New upstream release -- Fix incorrect dates in specfile changelog section - -* Mon Mar 25 2013 Jan Friesse - 2.3.0-3 -- Resolves: rhbz#925185 - -- Run autogen by default - -* Wed Feb 13 2013 Fedora Release Engineering - 2.3.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Fri Jan 18 2013 Jan Friesse - 2.3.0-1 -- New upstream release - -* Wed Dec 12 2012 Jan Friesse - 2.2.0-1 -- New upstream release - -* Thu Oct 11 2012 Jan Friesse - 2.1.0-1 -- New upstream release - -* Fri Aug 3 2012 Steven Dake - 2.0.1-3 -- add groff as a BuildRequires as it is no longer installed in the buildroot - -* Wed Jul 18 2012 Fedora Release Engineering - 2.0.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Tue May 22 2012 Jan Friesse - 2.0.1-1 -- New upstream release - -* Tue Apr 17 2012 Fabio M. Di Nitto - 2.0.0-2 -- Backport IPCS fix from master (ack by Steven) - -* Tue Apr 10 2012 Jan Friesse - 2.0.0-1 -- New upstream release - -* Thu Apr 05 2012 Karsten Hopp 1.99.9-1.1 -- bump release and rebuild on PPC - -* Tue Mar 27 2012 Jan Friesse - 1.99.9-1 -- New upstream release - -* Fri Mar 16 2012 Jan Friesse - 1.99.8-1 -- New upstream release - -* Tue Mar 6 2012 Jan Friesse - 1.99.7-1 -- New upstream release - -* Tue Feb 28 2012 Jan Friesse - 1.99.6-1 -- New upstream release - -* Wed Feb 22 2012 Jan Friesse - 1.99.5-1 -- New upstream release - -* Tue Feb 14 2012 Jan Friesse - 1.99.4-1 -- New upstream release - -* Tue Feb 14 2012 Jan Friesse - 1.99.3-1 -- New upstream release - -* Tue Feb 7 2012 Fabio M. Di Nitto - 1.99.2-1 -- New upstream release -- Re-enable xmlconfig bits -- Ship cmap man pages -- Add workaround to usrmove breakage!! - -* Thu Feb 2 2012 Fabio M. Di Nitto - 1.99.1-2 -- Add proper Obsoltes on openais/cman/clusterlib - -* Wed Feb 1 2012 Fabio M. Di Nitto - 1.99.1-1 -- New upstream release -- Temporary disable xml config (broken upstream tarball) - -* Tue Jan 24 2012 Jan Friesse - 1.99.0-1 -- New upstream release - -* Thu Jan 12 2012 Fedora Release Engineering - 1.4.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Thu Oct 06 2011 Jan Friesse - 1.4.2-1 -- New upstream release - -* Thu Sep 08 2011 Jan Friesse - 1.4.1-2 -- Add upstream fixes - -* Tue Jul 26 2011 Jan Friesse - 1.4.1-1 -- New upstream release - -* Wed Jul 20 2011 Jan Friesse - 1.4.0-2 -- Change attributes of cluster log directory - -* Tue Jul 19 2011 Jan Friesse - 1.4.0-1 -- New upstream release -- Resync spec file with upstream changes - -* Fri Jul 08 2011 Jan Friesse - 1.3.2-1 -- New upstream release - -* Tue May 10 2011 Fabio M. Di Nitto - 1.3.1-1 -- New upstream release - -* Tue Feb 08 2011 Fedora Release Engineering - 1.3.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Thu Dec 2 2010 Fabio M. Di Nitto - 1.3.0-1 -- New upstream release -- drop upstream patch revision-2770.patch now included in release -- update spec file to ship corosync-blackbox - -* Thu Sep 2 2010 Fabio M. Di Nitto - 1.2.8-1 -- New upstream release - -* Thu Jul 29 2010 Fabio M. Di Nitto - 1.2.7-1 -- New upstream release - -* Fri Jul 9 2010 Dan Horák - 1.2.6-2 -- no InfiniBand stack on s390(x) - -* Mon Jul 5 2010 Fabio M. Di Nitto - 1.2.6-1 -- New upstream release -- Resync spec file with upstream changes - * Tue May 25 2010 Fabio M. Di Nitto - 1.2.3-1 - New upstream release - Rediff revision 2770 patch @@ -660,7 +231,7 @@ network splits) - New upstream release - Use global instead of define - Update Source0 url -- Use more name macro around +- Use more %name macro around - Cleanup install section. Init script is now installed by upstream - Cleanup whitespace - Don't deadlock between package upgrade and corosync condrestart @@ -811,7 +382,7 @@ network splits) * Mon Oct 13 2008 Dennis Gilmore - 0.92-3 - remove ExclusiveArch line -* Wed Sep 24 2008 Steven Dake - 0.92-2 +* Fri Sep 24 2008 Steven Dake - 0.92-2 - Add conflicts for openais and openais-devel packages older then 0.90. * Wed Sep 24 2008 Steven Dake - 0.92-1 diff --git a/gating.yaml b/gating.yaml deleted file mode 100644 index f075ad7..0000000 --- a/gating.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- !Policy -product_versions: - - fedora-* -decision_context: bodhi_update_push_testing -subject_type: koji_build -rules: - - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} - ---- !Policy -product_versions: - - fedora-* -decision_context: bodhi_update_push_stable -subject_type: koji_build -rules: - - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} diff --git a/revision-2770.patch b/revision-2770.patch new file mode 100644 index 0000000..766c980 --- /dev/null +++ b/revision-2770.patch @@ -0,0 +1,811 @@ +Index: include/corosync/ipc_cpg.h +=================================================================== +--- include/corosync/ipc_cpg.h (revision 2769) ++++ include/corosync/ipc_cpg.h (revision 2770) +@@ -65,6 +65,7 @@ + MESSAGE_RES_CPG_ITERATIONNEXT = 10, + MESSAGE_RES_CPG_ITERATIONFINALIZE = 11, + MESSAGE_RES_CPG_FINALIZE = 12, ++ MESSAGE_RES_CPG_TOTEM_CONFCHG_CALLBACK = 13, + }; + + enum lib_cpg_confchg_reason { +@@ -149,10 +150,24 @@ + marshall_from_mar_cpg_name_t (&dest->group, &src->group); + }; + ++typedef struct { ++ mar_uint32_t nodeid __attribute__((aligned(8))); ++ mar_uint64_t seq __attribute__((aligned(8))); ++} mar_cpg_ring_id_t; ++ ++static inline void marshall_from_mar_cpg_ring_id_t ( ++ struct cpg_ring_id *dest, ++ const mar_cpg_ring_id_t *src) ++{ ++ dest->nodeid = src->nodeid; ++ dest->seq = src->seq; ++} ++ + struct req_lib_cpg_join { + coroipc_request_header_t header __attribute__((aligned(8))); + mar_cpg_name_t group_name __attribute__((aligned(8))); + mar_uint32_t pid __attribute__((aligned(8))); ++ mar_uint32_t flags __attribute__((aligned(8))); + }; + + struct res_lib_cpg_join { +@@ -238,6 +253,13 @@ + // struct cpg_address joined_list[]; + }; + ++struct res_lib_cpg_totem_confchg_callback { ++ coroipc_response_header_t header __attribute__((aligned(8))); ++ mar_cpg_ring_id_t ring_id __attribute__((aligned(8))); ++ mar_uint32_t member_list_entries __attribute__((aligned(8))); ++ mar_uint32_t member_list[]; ++}; ++ + struct req_lib_cpg_leave { + coroipc_request_header_t header __attribute__((aligned(8))); + mar_cpg_name_t group_name __attribute__((aligned(8))); +Index: include/corosync/cpg.h +=================================================================== +--- include/corosync/cpg.h (revision 2769) ++++ include/corosync/cpg.h (revision 2770) +@@ -78,6 +78,10 @@ + CPG_ITERATION_ALL = 3, + } cpg_iteration_type_t; + ++typedef enum { ++ CPG_MODEL_V1 = 1, ++} cpg_model_t; ++ + struct cpg_address { + uint32_t nodeid; + uint32_t pid; +@@ -98,6 +102,11 @@ + uint32_t pid; + }; + ++struct cpg_ring_id { ++ uint32_t nodeid; ++ uint64_t seq; ++}; ++ + typedef void (*cpg_deliver_fn_t) ( + cpg_handle_t handle, + const struct cpg_name *group_name, +@@ -117,11 +126,32 @@ + const struct cpg_address *left_list, size_t left_list_entries, + const struct cpg_address *joined_list, size_t joined_list_entries); + ++typedef void (*cpg_totem_confchg_fn_t) ( ++ cpg_handle_t handle, ++ struct cpg_ring_id ring_id, ++ uint32_t member_list_entries, ++ const uint32_t *member_list); ++ + typedef struct { + cpg_deliver_fn_t cpg_deliver_fn; + cpg_confchg_fn_t cpg_confchg_fn; + } cpg_callbacks_t; + ++typedef struct { ++ cpg_model_t model; ++} cpg_model_data_t; ++ ++#define CPG_MODEL_V1_DELIVER_INITIAL_TOTEM_CONF 0x01 ++ ++typedef struct { ++ cpg_model_t model; ++ cpg_deliver_fn_t cpg_deliver_fn; ++ cpg_confchg_fn_t cpg_confchg_fn; ++ cpg_totem_confchg_fn_t cpg_totem_confchg_fn; ++ unsigned int flags; ++} cpg_model_v1_data_t; ++ ++ + /** @} */ + + /* +@@ -132,6 +162,15 @@ + cpg_callbacks_t *callbacks); + + /* ++ * Create a new cpg connection, initialize with model ++ */ ++cs_error_t cpg_model_initialize ( ++ cpg_handle_t *handle, ++ cpg_model_t model, ++ cpg_model_data_t *model_data, ++ void *context); ++ ++/* + * Close the cpg handle + */ + cs_error_t cpg_finalize ( +Index: services/cpg.c +=================================================================== +--- services/cpg.c (revision 2769) ++++ services/cpg.c (revision 2770) +@@ -133,6 +133,8 @@ + mar_cpg_name_t group_name; + uint32_t pid; + enum cpd_state cpd_state; ++ unsigned int flags; ++ int initial_totem_conf_sent; + struct list_head list; + struct list_head iteration_instance_list_head; + }; +@@ -160,6 +162,8 @@ + + static enum cpg_sync_state my_sync_state = CPGSYNC_DOWNLIST; + ++static mar_cpg_ring_id_t last_sync_ring_id; ++ + struct process_info { + unsigned int nodeid; + uint32_t pid; +@@ -255,6 +259,11 @@ + + static void cpg_sync_abort (void); + ++static int notify_lib_totem_membership ( ++ void *conn, ++ int member_list_entries, ++ const unsigned int *member_list); ++ + /* + * Library Handler Definition + */ +@@ -432,6 +441,9 @@ + sizeof (unsigned int)); + my_member_list_entries = member_list_entries; + ++ last_sync_ring_id.nodeid = ring_id->rep.nodeid; ++ last_sync_ring_id.seq = ring_id->seq; ++ + for (i = 0; i < my_member_list_entries; i++) { + if (my_member_list[i] < lowest_nodeid) { + lowest_nodeid = my_member_list[i]; +@@ -482,14 +494,51 @@ + memcpy (my_old_member_list, my_member_list, + my_member_list_entries * sizeof (unsigned int)); + my_old_member_list_entries = my_member_list_entries; ++ ++ notify_lib_totem_membership (NULL, my_member_list_entries, my_member_list); + } + + static void cpg_sync_abort (void) + { + } + ++static int notify_lib_totem_membership ( ++ void *conn, ++ int member_list_entries, ++ const unsigned int *member_list) ++{ ++ struct list_head *iter; ++ char *buf; ++ int size; ++ struct res_lib_cpg_totem_confchg_callback *res; + ++ size = sizeof(struct res_lib_cpg_totem_confchg_callback) + ++ sizeof(mar_uint32_t) * (member_list_entries); ++ buf = alloca(size); ++ if (!buf) ++ return CPG_ERR_LIBRARY; + ++ res = (struct res_lib_cpg_totem_confchg_callback *)buf; ++ res->member_list_entries = member_list_entries; ++ res->header.size = size; ++ res->header.id = MESSAGE_RES_CPG_TOTEM_CONFCHG_CALLBACK; ++ res->header.error = CS_OK; ++ ++ memcpy (&res->ring_id, &last_sync_ring_id, sizeof (mar_cpg_ring_id_t)); ++ memcpy (res->member_list, member_list, res->member_list_entries * sizeof (mar_uint32_t)); ++ ++ if (conn == NULL) { ++ for (iter = cpg_pd_list_head.next; iter != &cpg_pd_list_head; iter = iter->next) { ++ struct cpg_pd *cpg_pd = list_entry (iter, struct cpg_pd, list); ++ api->ipc_dispatch_send (cpg_pd->conn, buf, size); ++ } ++ } else { ++ api->ipc_dispatch_send (conn, buf, size); ++ } ++ ++ return CPG_OK; ++} ++ + static int notify_lib_joinlist( + const mar_cpg_name_t *group_name, + void *conn, +@@ -604,6 +653,20 @@ + } + } + ++ ++ /* ++ * Traverse thru cpds and send totem membership for cpd, where it is not send yet ++ */ ++ for (iter = cpg_pd_list_head.next; iter != &cpg_pd_list_head; iter = iter->next) { ++ struct cpg_pd *cpd = list_entry (iter, struct cpg_pd, list); ++ ++ if ((cpd->flags & CPG_MODEL_V1_DELIVER_INITIAL_TOTEM_CONF) && (cpd->initial_totem_conf_sent == 0)) { ++ cpd->initial_totem_conf_sent = 1; ++ ++ notify_lib_totem_membership (cpd->conn, my_old_member_list_entries, my_old_member_list); ++ } ++ } ++ + return CPG_OK; + } + +@@ -1093,6 +1156,7 @@ + error = CPG_OK; + cpd->cpd_state = CPD_STATE_JOIN_STARTED; + cpd->pid = req_lib_cpg_join->pid; ++ cpd->flags = req_lib_cpg_join->flags; + memcpy (&cpd->group_name, &req_lib_cpg_join->group_name, + sizeof (cpd->group_name)); + +Index: lib/cpg.c +=================================================================== +--- lib/cpg.c (revision 2769) ++++ lib/cpg.c (revision 2770) +@@ -62,8 +62,11 @@ + struct cpg_inst { + hdb_handle_t handle; + int finalize; +- cpg_callbacks_t callbacks; + void *context; ++ union { ++ cpg_model_data_t model_data; ++ cpg_model_v1_data_t model_v1_data; ++ }; + struct list_head iteration_list_head; + }; + +@@ -118,9 +121,32 @@ + cpg_handle_t *handle, + cpg_callbacks_t *callbacks) + { ++ cpg_model_v1_data_t model_v1_data; ++ ++ memset (&model_v1_data, 0, sizeof (cpg_model_v1_data_t)); ++ ++ if (callbacks) { ++ model_v1_data.cpg_deliver_fn = callbacks->cpg_deliver_fn; ++ model_v1_data.cpg_confchg_fn = callbacks->cpg_confchg_fn; ++ } ++ ++ return (cpg_model_initialize (handle, CPG_MODEL_V1, (cpg_model_data_t *)&model_v1_data, NULL)); ++} ++ ++cs_error_t cpg_model_initialize ( ++ cpg_handle_t *handle, ++ cpg_model_t model, ++ cpg_model_data_t *model_data, ++ void *context) ++{ + cs_error_t error; + struct cpg_inst *cpg_inst; + ++ if (model != CPG_MODEL_V1) { ++ error = CPG_ERR_INVALID_PARAM; ++ goto error_no_destroy; ++ } ++ + error = hdb_error_to_cs (hdb_handle_create (&cpg_handle_t_db, sizeof (struct cpg_inst), handle)); + if (error != CS_OK) { + goto error_no_destroy; +@@ -142,10 +168,26 @@ + goto error_put_destroy; + } + +- if (callbacks) { +- memcpy (&cpg_inst->callbacks, callbacks, sizeof (cpg_callbacks_t)); ++ if (model_data != NULL) { ++ switch (model) { ++ case CPG_MODEL_V1: ++ memcpy (&cpg_inst->model_v1_data, model_data, sizeof (cpg_model_v1_data_t)); ++ if ((cpg_inst->model_v1_data.flags & ~(CPG_MODEL_V1_DELIVER_INITIAL_TOTEM_CONF)) != 0) { ++ error = CS_ERR_INVALID_PARAM; ++ ++ goto error_destroy; ++ } ++ break; ++ default: ++ error = CS_ERR_LIBRARY; ++ goto error_destroy; ++ break; ++ } + } + ++ cpg_inst->model_data.model = model; ++ cpg_inst->context = context; ++ + list_init(&cpg_inst->iteration_list_head); + + hdb_handle_put (&cpg_handle_t_db, *handle); +@@ -283,7 +325,8 @@ + struct cpg_inst *cpg_inst; + struct res_lib_cpg_confchg_callback *res_cpg_confchg_callback; + struct res_lib_cpg_deliver_callback *res_cpg_deliver_callback; +- cpg_callbacks_t callbacks; ++ struct res_lib_cpg_totem_confchg_callback *res_cpg_totem_confchg_callback; ++ struct cpg_inst cpg_inst_copy; + coroipc_response_header_t *dispatch_data; + struct cpg_address member_list[CPG_MEMBERS_MAX]; + struct cpg_address left_list[CPG_MEMBERS_MAX]; +@@ -292,6 +335,8 @@ + mar_cpg_address_t *left_list_start; + mar_cpg_address_t *joined_list_start; + unsigned int i; ++ struct cpg_ring_id ring_id; ++ uint32_t totem_member_list[CPG_MEMBERS_MAX]; + + error = hdb_error_to_cs (hdb_handle_get (&cpg_handle_t_db, handle, (void *)&cpg_inst)); + if (error != CS_OK) { +@@ -332,74 +377,96 @@ + * A risk of this dispatch method is that the callback routines may + * operate at the same time that cpgFinalize has been called. + */ +- memcpy (&callbacks, &cpg_inst->callbacks, sizeof (cpg_callbacks_t)); +- /* +- * Dispatch incoming message +- */ +- switch (dispatch_data->id) { +- case MESSAGE_RES_CPG_DELIVER_CALLBACK: +- if (callbacks.cpg_deliver_fn == NULL) { ++ memcpy (&cpg_inst_copy, cpg_inst, sizeof (struct cpg_inst)); ++ ++ switch (cpg_inst_copy.model_data.model) { ++ case CPG_MODEL_V1: ++ /* ++ * Dispatch incoming message ++ */ ++ switch (dispatch_data->id) { ++ case MESSAGE_RES_CPG_DELIVER_CALLBACK: ++ if (cpg_inst_copy.model_v1_data.cpg_deliver_fn == NULL) { ++ break; ++ } ++ ++ res_cpg_deliver_callback = (struct res_lib_cpg_deliver_callback *)dispatch_data; ++ ++ marshall_from_mar_cpg_name_t ( ++ &group_name, ++ &res_cpg_deliver_callback->group_name); ++ ++ cpg_inst_copy.model_v1_data.cpg_deliver_fn (handle, ++ &group_name, ++ res_cpg_deliver_callback->nodeid, ++ res_cpg_deliver_callback->pid, ++ &res_cpg_deliver_callback->message, ++ res_cpg_deliver_callback->msglen); + break; +- } + +- res_cpg_deliver_callback = (struct res_lib_cpg_deliver_callback *)dispatch_data; ++ case MESSAGE_RES_CPG_CONFCHG_CALLBACK: ++ if (cpg_inst_copy.model_v1_data.cpg_confchg_fn == NULL) { ++ break; ++ } + +- marshall_from_mar_cpg_name_t ( +- &group_name, +- &res_cpg_deliver_callback->group_name); ++ res_cpg_confchg_callback = (struct res_lib_cpg_confchg_callback *)dispatch_data; + +- callbacks.cpg_deliver_fn (handle, +- &group_name, +- res_cpg_deliver_callback->nodeid, +- res_cpg_deliver_callback->pid, +- &res_cpg_deliver_callback->message, +- res_cpg_deliver_callback->msglen); +- break; ++ for (i = 0; i < res_cpg_confchg_callback->member_list_entries; i++) { ++ marshall_from_mar_cpg_address_t (&member_list[i], ++ &res_cpg_confchg_callback->member_list[i]); ++ } ++ left_list_start = res_cpg_confchg_callback->member_list + ++ res_cpg_confchg_callback->member_list_entries; ++ for (i = 0; i < res_cpg_confchg_callback->left_list_entries; i++) { ++ marshall_from_mar_cpg_address_t (&left_list[i], ++ &left_list_start[i]); ++ } ++ joined_list_start = res_cpg_confchg_callback->member_list + ++ res_cpg_confchg_callback->member_list_entries + ++ res_cpg_confchg_callback->left_list_entries; ++ for (i = 0; i < res_cpg_confchg_callback->joined_list_entries; i++) { ++ marshall_from_mar_cpg_address_t (&joined_list[i], ++ &joined_list_start[i]); ++ } ++ marshall_from_mar_cpg_name_t ( ++ &group_name, ++ &res_cpg_confchg_callback->group_name); + +- case MESSAGE_RES_CPG_CONFCHG_CALLBACK: +- if (callbacks.cpg_confchg_fn == NULL) { ++ cpg_inst_copy.model_v1_data.cpg_confchg_fn (handle, ++ &group_name, ++ member_list, ++ res_cpg_confchg_callback->member_list_entries, ++ left_list, ++ res_cpg_confchg_callback->left_list_entries, ++ joined_list, ++ res_cpg_confchg_callback->joined_list_entries); ++ + break; +- } ++ case MESSAGE_RES_CPG_TOTEM_CONFCHG_CALLBACK: ++ if (cpg_inst_copy.model_v1_data.cpg_totem_confchg_fn == NULL) { ++ break; ++ } + +- res_cpg_confchg_callback = (struct res_lib_cpg_confchg_callback *)dispatch_data; ++ res_cpg_totem_confchg_callback = (struct res_lib_cpg_totem_confchg_callback *)dispatch_data; + +- for (i = 0; i < res_cpg_confchg_callback->member_list_entries; i++) { +- marshall_from_mar_cpg_address_t (&member_list[i], +- &res_cpg_confchg_callback->member_list[i]); +- } +- left_list_start = res_cpg_confchg_callback->member_list + +- res_cpg_confchg_callback->member_list_entries; +- for (i = 0; i < res_cpg_confchg_callback->left_list_entries; i++) { +- marshall_from_mar_cpg_address_t (&left_list[i], +- &left_list_start[i]); +- } +- joined_list_start = res_cpg_confchg_callback->member_list + +- res_cpg_confchg_callback->member_list_entries + +- res_cpg_confchg_callback->left_list_entries; +- for (i = 0; i < res_cpg_confchg_callback->joined_list_entries; i++) { +- marshall_from_mar_cpg_address_t (&joined_list[i], +- &joined_list_start[i]); +- } +- marshall_from_mar_cpg_name_t ( +- &group_name, +- &res_cpg_confchg_callback->group_name); ++ marshall_from_mar_cpg_ring_id_t (&ring_id, &res_cpg_totem_confchg_callback->ring_id); ++ for (i = 0; i < res_cpg_totem_confchg_callback->member_list_entries; i++) { ++ totem_member_list[i] = res_cpg_totem_confchg_callback->member_list[i]; ++ } + +- callbacks.cpg_confchg_fn (handle, +- &group_name, +- member_list, +- res_cpg_confchg_callback->member_list_entries, +- left_list, +- res_cpg_confchg_callback->left_list_entries, +- joined_list, +- res_cpg_confchg_callback->joined_list_entries); +- break; +- +- default: +- coroipcc_dispatch_put (cpg_inst->handle); +- error = CS_ERR_LIBRARY; +- goto error_put; +- break; +- } ++ cpg_inst_copy.model_v1_data.cpg_totem_confchg_fn (handle, ++ ring_id, ++ res_cpg_totem_confchg_callback->member_list_entries, ++ totem_member_list); ++ break; ++ default: ++ coroipcc_dispatch_put (cpg_inst->handle); ++ error = CS_ERR_LIBRARY; ++ goto error_put; ++ break; ++ } /* - switch (dispatch_data->id) */ ++ break; /* case CPG_MODEL_V1 */ ++ } /* - switch (cpg_inst_copy.model_data.model) */ + coroipcc_dispatch_put (cpg_inst->handle); + + /* +@@ -434,6 +501,14 @@ + req_lib_cpg_join.header.size = sizeof (struct req_lib_cpg_join); + req_lib_cpg_join.header.id = MESSAGE_REQ_CPG_JOIN; + req_lib_cpg_join.pid = getpid(); ++ req_lib_cpg_join.flags = 0; ++ ++ switch (cpg_inst->model_data.model) { ++ case CPG_MODEL_V1: ++ req_lib_cpg_join.flags = cpg_inst->model_v1_data.flags; ++ break; ++ } ++ + marshall_to_mar_cpg_name_t (&req_lib_cpg_join.group_name, + group); + +Index: lib/libcpg.verso +=================================================================== +--- lib/libcpg.verso (revision 2769) ++++ lib/libcpg.verso (revision 2770) +@@ -1 +1 @@ +-4.0.1 ++4.1.0 +Index: man/cpg_initialize.3 +=================================================================== +--- man/cpg_initialize.3 (revision 2769) ++++ man/cpg_initialize.3 (revision 2770) +@@ -41,7 +41,10 @@ + .SH DESCRIPTION + The + .B cpg_initialize +-function is used to initialize a connection to the closed process groups API. ++function is used to initialize a connection to the closed process groups API. This function is deprecated ++and ++.B cpg_model_initialize ++should be used in newly written code. + .PP + Each application may have several connections to the CPG API. Each application + uses the +@@ -167,5 +170,6 @@ + .BR cpg_context_get (3) + .BR cpg_context_set (3) + .BR cpg_local_get (3) ++.BR cpg_model_initialize (3) + + .PP +Index: man/cpg_overview.8 +=================================================================== +--- man/cpg_overview.8 (revision 2769) ++++ man/cpg_overview.8 (revision 2770) +@@ -61,6 +61,7 @@ + .BR cpg_join (3), + .BR cpg_leave (3), + .BR cpg_mcast_joined (3), ++.BR cpg_model_initialize (3), + .BR cpg_membership_get (3) + .BR cpg_zcb_alloc (3) + .BR cpg_zcb_free (3) +Index: man/cpg_model_initialize.3 +=================================================================== +--- man/cpg_model_initialize.3 (revision 0) ++++ man/cpg_model_initialize.3 (revision 2770) +@@ -0,0 +1,231 @@ ++.\"/* ++.\" * Copyright (c) 2010 Red Hat, Inc. ++.\" * ++.\" * All rights reserved. ++.\" * ++.\" * Author: Jan Friesse ++.\" * Author: Christine Caulfield ++.\" * ++.\" * This software licensed under BSD license, the text of which follows: ++.\" * ++.\" * Redistribution and use in source and binary forms, with or without ++.\" * modification, are permitted provided that the following conditions are met: ++.\" * ++.\" * - Redistributions of source code must retain the above copyright notice, ++.\" * this list of conditions and the following disclaimer. ++.\" * - Redistributions in binary form must reproduce the above copyright notice, ++.\" * this list of conditions and the following disclaimer in the documentation ++.\" * and/or other materials provided with the distribution. ++.\" * - Neither the name of the MontaVista Software, Inc. nor the names of its ++.\" * contributors may be used to endorse or promote products derived from this ++.\" * software without specific prior written permission. ++.\" * ++.\" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ++.\" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++.\" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ++.\" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE ++.\" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ++.\" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ++.\" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ++.\" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ++.\" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ++.\" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF ++.\" * THE POSSIBILITY OF SUCH DAMAGE. ++.\" */ ++.TH CPG_MODEL_INITIALIZE 3 2010-04-07 "corosync Man Page" "Corosync Cluster Engine Programmer's Manual" ++.SH NAME ++cpg_model_initialize \- Create a new connection to the CPG service ++.SH SYNOPSIS ++.B #include ++.sp ++.BI "cs_error_t cpg_model_initialize(cpg_handle_t *" handle ", cpg_model_t " model ", cpg_model_data_t *" model_data ", void *" context "); ++ ++.SH DESCRIPTION ++The ++.B cpg_model_initialize ++function is used to initialize a connection to the closed process groups API. ++.PP ++Each application may have several connections to the CPG API. Each application ++uses the ++.I handle ++argument to uniquely identify the connection. The ++.I handle ++argument is then used in other function calls to identify the connection to be used ++for communication with the CPG service. ++.PP ++Argument ++.I model ++is used to explicitly choose set of callbacks and internal parameters. Currently only model ++.I CPG_MODEL_V1 ++is defined. ++.PP ++Callbacks and internal parameters are passed by ++.I model_data ++argument. This is casted pointer (idea is similar as in sockaddr function) to one of structures ++corresponding to chosen model. Currently only ++.I cpg_model_v1_data_t ++is needed. ++.SH MODEL_V1 ++The ++.I MODEL_V1 ++is backwards compatible with original callbacks initialized by ++.I cpg_initialize ++but new callback ++.I cpg_totem_confchg_fn ++is defined. ++.PP ++Every time an CPG event occurs within the joined group, one of the callbacks specified by the argument ++.I callbacks ++is called. The callback functions are described by the following type definitions: ++.PP ++.PP ++.IP ++.RS ++.ne 18 ++.nf ++.ta 4n 20n 32n ++ ++typedef void (*cpg_deliver_fn_t) ( ++ cpg_handle_t handle, ++ const struct cpg_name *group_name, ++ uint32_t nodeid, ++ uint32_t pid, ++ const void *msg, ++ size_t msg_len); ++ ++ ++typedef void (*cpg_confchg_fn_t) ( ++ cpg_handle_t handle, ++ const struct cpg_name *group_name, ++ const struct cpg_address *member_list, size_t member_list_entries, ++ const struct cpg_address *left_list, size_t left_list_entries, ++ const struct cpg_address *joined_list, size_t joined_list_entries); ++ ++ ++typedef void (*cpg_totem_confchg_fn_t) ( ++ cpg_handle_t handle, ++ struct cpg_ring_id ring_id, ++ uint32_t member_list_entries, ++ const uint32_t *member_list); ++.ta ++.fi ++.RE ++.IP ++.PP ++.PP ++The ++.I cpg_model_v1_data_t ++structure is defined as: ++.IP ++.RS ++.ne 18 ++.nf ++.PP ++typedef struct { ++ cpg_model_t model; ++ cpg_deliver_fn_t cpg_deliver_fn; ++ cpg_confchg_fn_t cpg_confchg_fn; ++ cpg_totem_confchg_fn_t cpg_totem_confchg_fn; ++ unsigned int flags; ++} cpg_model_v1_data_t; ++.ta ++.fi ++.RE ++.IP ++.PP ++When a configuration change occurs or a message is to be delivered one of the callbacks ++is called from the ++.B cpg_dispatch() ++function. If a configuration change occurs, ++.I cpg_confchg_fn ++is called. If a delivery of a message occurs, ++.I cpg_deliver_fn ++is called. ++When totem membership change occurs, ++.I cpg_totem_confchg_fn ++is called. You can OR ++.I CPG_MODEL_V1_DELIVER_INITIAL_TOTEM_CONF ++constant to flags to get callback after first confchg event. ++ ++The ++.I cpg_address ++structure is defined ++.IP ++.RS ++.ne 18 ++.nf ++.PP ++struct cpg_address { ++ unsigned int nodeid; ++ unsigned int pid; ++ unsigned int reason; ++}; ++.ta ++.fi ++.RE ++.IP ++.PP ++where nodeid is a 32 bit unique node identifier, pid is the process ID of the process that has joined/left the group ++or sent the message, and reason is an integer code indicating why the node joined/left the group. ++.PP ++.IP ++.RS ++.ne 18 ++.nf ++.PP ++CPG_REASON_JOIN - the process joined a group using cpg_join(). ++CPG_REASON_LEAVE - the process left a group using cpg_leave() ++CPG_REASON_NODEDOWN - the process left a group because the node left the cluster. ++CPG_REASON_NODEUP - the process joined a group because it was already a member of a group on a node that has just joined the cluster ++CPG_REASON_PROCDOWN - the process left a group without calling cpg_leave() ++.ta ++.fi ++.RE ++.IP ++.PP ++The ++.I cpg_ring_id ++structure is defined ++.IP ++.RS ++.ne 18 ++.nf ++.PP ++struct cpg_ring_id { ++ uint32_t nodeid; ++ uint64_t seq; ++}; ++.ta ++.fi ++.RE ++.IP ++.PP ++where ++.I nodeid ++is if of node of current Totem leader and seq is increasing number. ++ ++.PP ++.SH RETURN VALUE ++This call returns the CPG_OK value if successful, otherwise an error is returned. ++.PP ++.SH ERRORS ++The errors are undocumented. ++.SH "SEE ALSO" ++.BR cpg_overview (8), ++.BR cpg_initialize (3), ++.BR cpg_finalize (3), ++.BR cpg_fd_get (3), ++.BR cpg_dispatch (3), ++.BR cpg_join (3), ++.BR cpg_leave (3), ++.BR cpg_mcast_joined (3), ++.BR cpg_membership_get (3) ++.BR cpg_zcb_alloc (3) ++.BR cpg_zcb_free (3) ++.BR cpg_zcb_mcast_joined (3) ++.BR cpg_context_get (3) ++.BR cpg_context_set (3) ++.BR cpg_local_get (3) ++.BR cpg_model_initialize (3) ++ ++.PP +Index: man/Makefile.am +=================================================================== +--- man/Makefile.am (revision 2769) ++++ man/Makefile.am (revision 2770) +@@ -71,6 +71,7 @@ + cpg_leave.3 \ + cpg_local_get.3 \ + cpg_mcast_joined.3 \ ++ cpg_model_initialize.3 \ + cpg_zcb_mcast_joined.3 \ + cpg_zcb_alloc.3 \ + cpg_zcb_free.3 \ diff --git a/sources b/sources index 9c626fd..e99be3c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (corosync-3.1.10.tar.gz) = cf2014d15fdbd3495cfe64629255f7855a79651a595938dac7bc7ec67338d843079ae40cf1c15de23b50d85cb39b2c2e3e3448a9cc33759ad8988b8c85ce59d3 +03b8cc311619c07ae1a84a5d59f13d0b corosync-1.2.3.tar.gz diff --git a/tests/plan.fmf b/tests/plan.fmf deleted file mode 100644 index 1c97683..0000000 --- a/tests/plan.fmf +++ /dev/null @@ -1,12 +0,0 @@ -summary: Run all smoke tests -discover: - how: fmf -execute: - how: tmt -prepare: - how: install - package: - - gcc - - iproute - - corosync - - corosync-devel diff --git a/tests/smoke/main.fmf b/tests/smoke/main.fmf deleted file mode 100644 index c431594..0000000 --- a/tests/smoke/main.fmf +++ /dev/null @@ -1,2 +0,0 @@ -summary: Basic smoke test -test: ./runtest.sh diff --git a/tests/smoke/runtest.sh b/tests/smoke/runtest.sh deleted file mode 100755 index 9fd5e68..0000000 --- a/tests/smoke/runtest.sh +++ /dev/null @@ -1,623 +0,0 @@ -#!/bin/bash - -# This file was autogenerated at 2019-05-13T13:43:38+02:00 from 90bd97ada89befa1a63133335a419ad7311c3d75 - -# Copyright (c) 2019, Red Hat, Inc. -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND RED HAT, INC. DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL RED HAT, INC. BE LIABLE -# FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -# Author: Jan Friesse - - -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -# !!! Script overwrites corosync.conf, authkey and qdevice/qnetd certificates !!! -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -# Home https://github.com/jfriesse/csts/tree/master/smoke - -# -e is really important -set -xe -set -o pipefail - -# Variables changing test behavior -PREFIX="/" - -COROSYNC_SYSCONFD="${PREFIX}etc/corosync" -COROSYNC_CONF="${COROSYNC_SYSCONFD}/corosync.conf" -COROSYNC_AUTHKEY="${COROSYNC_SYSCONFD}/authkey" -COROSYNC_CLUSTER_NAME="smoketestcluster" - -TOKEN_TIMEOUT=1000 -MAX_REPEATS=60 - -#################### -# Helper functions # -#################### -get_ip() { - ip_res=$(ip route get 8.8.8.8) - # Format is "8.8.8.8 via ROUTE_IPADDR dev DEV src IPADDR uid NUMBER" - # Remove everything up to "src " and then everything after " " - addr=${ip_res##*src } - addr=${addr%% *} - - echo "$addr" -} - -# generate_corosync_conf crypto [token] [qdevice] -# crypto can be on or off -# when token is defined it is used for token timeout -# when qdevice is set to on qdevice section is created and second node is added -generate_corosync_conf() { - case "$1" in - "on") - cipher="aes256" - hash="sha256" - ;; - "off") - cipher="none" - hash="none" - ;; - *) - # Unknown crypto - exit 1 - esac - - token=$TOKEN_TIMEOUT - if [ ! -z "$2" ];then - token="$2" - fi - qdevice="$3" - true_command=`which true` - -cat << _EOF_ - totem { - version: 2 - cluster_name: $COROSYNC_CLUSTER_NAME - transport: knet - crypto_cipher: $cipher - crypto_hash: $hash - token: $token - } - - logging { - to_logfile: yes - logfile: /var/log/cluster/corosync.log - to_syslog: yes - } - - quorum { - provider: corosync_votequorum -_EOF_ - - if [ "$qdevice" == "on" ];then -cat << _EOF_ - device { - votes: 1 - model: net - net { - host: $LOCAL_IP - algorithm: ffsplit - } - heuristics { - mode: sync - exec_true: $true_command - } - } -_EOF_ - fi - -cat << _EOF_ - } - - nodelist { - node { - nodeid: 1 - ring0_addr: $LOCAL_IP - } -_EOF_ - - if [ "$qdevice" == "on" ];then -cat << _EOF_ - node { - nodeid: 2 - ring0_addr: 192.0.2.2 - } -_EOF_ - fi - -cat << _EOF_ - } -_EOF_ -} - -# service_start service -service_start() { - # service service must be inactive - systemctl is-active "$1" && exit 1 || true - - systemctl start "$1" - - systemctl is-active "$1" -} - -# service_stop service -service_stop() { - systemctl is-active "$1" || exit 1 - - systemctl stop "$1" - - systemctl is-active "$1" && exit 1 || true -} - -###################### -# Computed variables # -###################### -LOCAL_IP=$(get_ip) - -################## -# C test sources # -################## - -# Test sources are encoded as a base64 string and piped to base64 to store them in /tmp -# corosync-api-test.c -echo "LyoKICogQ29weXJpZ2h0IChjKSAyMDE5LCBSZWQgSGF0LCBJbmMuCiAqCiAqIFBlcm1pc3Npb24g -dG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9y -IGFueQogKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHBy -b3ZpZGVkIHRoYXQgdGhlIGFib3ZlCiAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz -c2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQ -Uk9WSURFRCAiQVMgSVMiIEFORCBSRUQgSEFULCBJTkMuIERJU0NMQUlNUyBBTEwgV0FSUkFOVElF -UwogKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBX -QVJSQU5USUVTCiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQg -U0hBTEwgUkVEIEhBVCwgSU5DLiBCRSBMSUFCTEUKICogRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1Qs -IElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKICogV0hB -VFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVU -SEVSIElOIEFOIEFDVElPTgogKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JU -SU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCiAqIENPTk5FQ1RJT04gV0lUSCBUSEUg -VVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAqCiAqIEF1dGhvcjogSmFuIEZy -aWVzc2UgPGpmcmllc3NlQHJlZGhhdC5jb20+CiAqLwoKLyoKICogU2ltcGxlIHRlc3Qgb2YgQ1BH -IGNhbGxiYWNrcy4gUHJvZ3JhbSBpbml0aWFsbHkgam9pbnMgQ1BHIGdyb3VwLCB3YWl0cyBmb3IK -ICogY3BnX2NvbmZjaGcgYW5kIGNwZ190b3RlbV9jb25mY2hnIGNhbGxiYWNrcyBhbmQgdGhlbiBz -dGFydHMgbG9vcCBvZiBzZW5kaW5nCiAqIGFuZCB3YWl0aW5nIGZvciB0aGUgbWVzc2FnZS4gTWVz -c2FnZSBoYXMgcmFuZG9tIGxlbmd0aCAodXAtdG8gTUFYX01TR19MRU4pCiAqIGFuZCByYW5kb20g -Y29udGVudC4gcmFuZF9yIGlzIHVzZWQgZm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGluZy4gTWVz -c2FnZQogKiBpcyBjaGVja2VkIG9uIGRlbGl2ZXJ5IGJ5IGlzc3Vpbmcgc2FtZSByYW5kX3IuIFNl -ZWQgZm9yIHJhbmRfciBhcmUKICogc3RvcmVkIGluIHNlbnRfcmFuZF9zZWVkIGFuZCByZWNlaXZl -ZF9yYW5kX3NlZWQgdmFyaWFibGVzLgogKgogKiBUaGlzIHRlc3QgY2hlY2tzIGZvbGxvd2luZyBD -UEcgcHJvcGVydGllczoKICogLSBQcm9jZXNzIGNhbiBqb2luIENQRyBncm91cAogKiAtIEJvdGgg -Y3BnX2NvbmZjaGcgYW5kIGNwZ190b3RlbV9jb25mY2hnIGNhbGxiYWNrcyBhcmUgcmVjZWl2ZWQg -d2l0aAogKiAgIG9ubHkgb25lIG5vZGUgYW5kIG9ubHkgb25lIHByb2Nlc3MgaW4gdGhlcmUKICog -LSBNZXNzYWdlcyBhcmUgc2VudCBhbmQgcmVjZWl2ZWQgd2l0aG91dCBhbnkgY29ycnVwdGlvbgog -Ki8KCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KCiNpbmNs -dWRlIDxhc3NlcnQuaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxpbnR0eXBlcy5oPgoj -aW5jbHVkZSA8cG9sbC5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoj -aW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4KCiNpbmNsdWRlIDxjb3Jvc3lu -Yy9jb3JvdHlwZXMuaD4KI2luY2x1ZGUgPGNvcm9zeW5jL2NwZy5oPgoKLyoKICogUHJlZGVmaW5l -ZCB0ZXN0IGNvbnN0YW50cwogKi8KI2RlZmluZSBURVNUX05PREVJRAkJMQojZGVmaW5lIFRFU1Rf -R1JPVVBfTkFNRQkJInNtb2tlLWFwaS10ZXN0LWNwZy1ncm91cCIKI2RlZmluZSBNQVhfUkVUUklF -UwkJMzAKI2RlZmluZSBNQVhfTVNHX0xFTgkJKDEwMjQgKiAxMjgpCiNkZWZpbmUgTUVTU0FHRVNf -VE9fU0VOVAkxMjgKCi8qCiAqIFVzZWZ1bCBtYWNyb3MKICovCiNkZWZpbmUgY3NfcmVwZWF0KGNv -ZGUpIGRvIHsJCQkJXAoJaW50IGNzX3JlcGVhdF9jb3VudGVyID0gMDsJCQlcCglkbyB7CQkJCQkJ -XAoJCWlmICgoY29kZSkgPT0gQ1NfRVJSX1RSWV9BR0FJTikgewlcCgkJCWNzX3JlcGVhdF9jb3Vu -dGVyKys7CQlcCgkJCXBvbGwoTlVMTCwgMCwgMTAwMCk7CQlcCgkJfSBlbHNlIHsJCQkJXAoJCQli -cmVhazsJCQkJXAoJCX0JCQkJCVwKCX0gd2hpbGUgKGNzX3JlcGVhdF9jb3VudGVyIDwgTUFYX1JF -VFJJRVMpOwlcCn0gd2hpbGUgKDApCgojaWZuZGVmIElORlRJTQojZGVmaW5lIElORlRJTQkJCS0x -CiNlbmRpZgoKI2RlZmluZSBFTlRFUigpIHByaW50ZigiKyAlczoldSAlc1xuIiwgX19GSUxFX18s -IF9fTElORV9fLCBfX2Z1bmNfXykKI2RlZmluZSBMRUFWRSgpIHByaW50ZigiLSAlczoldSAlc1xu -IiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXykKCnN0YXRpYyBpbnQgY3BnX2NvbmZjaGdf -cmVjZWl2ZWQgPSAwOwpzdGF0aWMgaW50IGNwZ190b3RlbV9jb25mY2hnX3JlY2VpdmVkID0gMDsK -Ci8qCiAqIGJvdGggcmFuZCBzZWVkcyBtdXN0IGJlIGluIHN5bmMKICovCnN0YXRpYyB1bnNpZ25l -ZCBpbnQgc2VudF9yYW5kX3NlZWQgPSAwOwpzdGF0aWMgdW5zaWduZWQgaW50IHJlY2VpdmVkX3Jh -bmRfc2VlZCA9IDA7CnN0YXRpYyB1aW50MzJfdCBzZW50X21zZ19zZXFfbm8gPSAwOwpzdGF0aWMg -dWludDMyX3QgcmVjZWl2ZWRfbXNnX3NlcV9ubyA9IDA7CgpzdHJ1Y3QgdGVzdF9tc2cgewoJdWlu -dDMyX3Qgc2VxX25vIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOwoJdWludDMyX3QgZGF0 -YV9sZW4gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSk7Cgl1bnNpZ25lZCBjaGFyIGRhdGFb -MF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSk7Cn07CgpzdGF0aWMgdm9pZApEZWxpdmVy -Q2FsbGJhY2soY3BnX2hhbmRsZV90IGhhbmRsZSwKICAgIGNvbnN0IHN0cnVjdCBjcGdfbmFtZSAq -Z3JvdXBOYW1lLAogICAgdWludDMyX3Qgbm9kZWlkLAogICAgdWludDMyX3QgcGlkLAogICAgdm9p -ZCAqY3BnX21zZywKICAgIHNpemVfdCBjcGdfbXNnX2xlbikKewoJc3RydWN0IHRlc3RfbXNnICpt -c2c7Cgl1aW50MzJfdCB1MzI7CgoJRU5URVIoKTsKCglhc3NlcnQobm9kZWlkID09IFRFU1RfTk9E -RUlEKTsKCWFzc2VydChwaWQgPT0gZ2V0cGlkKCkpOwoKCWFzc2VydChjcGdfbXNnX2xlbiA+PSBz -aXplb2Yoc3RydWN0IHRlc3RfbXNnKSk7CgoJbXNnID0gKHN0cnVjdCB0ZXN0X21zZyAqKWNwZ19t -c2c7Cglhc3NlcnQobXNnLT5zZXFfbm8gPT0gcmVjZWl2ZWRfbXNnX3NlcV9ubyk7CglyZWNlaXZl -ZF9tc2dfc2VxX25vKys7CgoJYXNzZXJ0KGNwZ19tc2dfbGVuID09IG1zZy0+ZGF0YV9sZW4gKyBz -aXplb2Yoc3RydWN0IHRlc3RfbXNnKSk7CgoJLyoKCSAqIE1lc3NhZ2UgaGFzIGV4cGVjdGVkIGxl -bmd0aCBhbmQgY29udGVudAoJICovCglhc3NlcnQobXNnLT5kYXRhX2xlbiA9PSAodWludDMyX3Qp -KHJhbmRfcigmcmVjZWl2ZWRfcmFuZF9zZWVkKSAlIE1BWF9NU0dfTEVOKSk7CgoJZm9yICh1MzIg -PSAwOyB1MzIgPCBtc2ctPmRhdGFfbGVuOyB1MzIrKykgewoJCWFzc2VydChtc2ctPmRhdGFbdTMy -XSA9PSAodW5zaWduZWQgY2hhcilyYW5kX3IoJnJlY2VpdmVkX3JhbmRfc2VlZCkpOwoJfQoKCUxF -QVZFKCk7Cn0KCnN0YXRpYyB2b2lkClRvdGVtQ29uZmNoZ0NhbGxiYWNrKGNwZ19oYW5kbGVfdCBo -YW5kbGUsCiAgICBzdHJ1Y3QgY3BnX3JpbmdfaWQgcmluZ19pZCwKICAgIHVpbnQzMl90IG1lbWJl -cl9saXN0X2VudHJpZXMsCiAgICBjb25zdCB1aW50MzJfdCAqbWVtYmVyX2xpc3QpCnsKCglFTlRF -UigpOwoKCWFzc2VydChtZW1iZXJfbGlzdF9lbnRyaWVzID09IDEpOwoJYXNzZXJ0KG1lbWJlcl9s -aXN0WzBdID09IFRFU1RfTk9ERUlEKTsKCgljcGdfdG90ZW1fY29uZmNoZ19yZWNlaXZlZCA9IDE7 -CgoJTEVBVkUoKTsKfQoKc3RhdGljIHZvaWQKQ29uZmNoZ0NhbGxiYWNrKGNwZ19oYW5kbGVfdCBo -YW5kbGUsCiAgICBjb25zdCBzdHJ1Y3QgY3BnX25hbWUgKmdyb3VwX25hbWUsCiAgICBjb25zdCBz -dHJ1Y3QgY3BnX2FkZHJlc3MgKm1lbWJlcl9saXN0LCBzaXplX3QgbWVtYmVyX2xpc3RfZW50cmll -cywKICAgIGNvbnN0IHN0cnVjdCBjcGdfYWRkcmVzcyAqbGVmdF9saXN0LCBzaXplX3QgbGVmdF9s -aXN0X2VudHJpZXMsCiAgICBjb25zdCBzdHJ1Y3QgY3BnX2FkZHJlc3MgKmpvaW5lZF9saXN0LCBz -aXplX3Qgam9pbmVkX2xpc3RfZW50cmllcykKewoKCUVOVEVSKCk7CgoJYXNzZXJ0KGdyb3VwX25h -bWUtPmxlbmd0aCA9PSBzdHJsZW4oVEVTVF9HUk9VUF9OQU1FKSk7Cglhc3NlcnQobWVtY21wKGdy -b3VwX25hbWUtPnZhbHVlLCBURVNUX0dST1VQX05BTUUsIHN0cmxlbihURVNUX0dST1VQX05BTUUp -KSA9PSAwKTsKCWFzc2VydChtZW1iZXJfbGlzdF9lbnRyaWVzID09IDEpOwoJYXNzZXJ0KG1lbWJl -cl9saXN0WzBdLm5vZGVpZCA9PSBURVNUX05PREVJRCk7Cglhc3NlcnQobWVtYmVyX2xpc3RbMF0u -cGlkID09IGdldHBpZCgpKTsKCgljcGdfY29uZmNoZ19yZWNlaXZlZCA9IDE7CgoJTEVBVkUoKTsK -fQoKc3RhdGljIGNwZ19tb2RlbF92MV9kYXRhX3QgbW9kZWxfZGF0YSA9IHsKCS5jcGdfZGVsaXZl -cl9mbiA9CURlbGl2ZXJDYWxsYmFjaywKCS5jcGdfY29uZmNoZ19mbiA9CUNvbmZjaGdDYWxsYmFj -aywKCS5jcGdfdG90ZW1fY29uZmNoZ19mbiA9CVRvdGVtQ29uZmNoZ0NhbGxiYWNrLAoJLmZsYWdz -ID0JCUNQR19NT0RFTF9WMV9ERUxJVkVSX0lOSVRJQUxfVE9URU1fQ09ORiwKfTsKCnN0YXRpYyB2 -b2lkCnNlbmRfbXNnKGNwZ19oYW5kbGVfdCBjcGdfaGFuZGxlKQp7CglzdHJ1Y3QgdGVzdF9tc2cg -bXNnOwoJdW5zaWduZWQgY2hhciAqZGF0YTsKCXVpbnQzMl90IHUzMjsKCXN0cnVjdCBpb3ZlYyBp -b3ZbMl07Cgljc19lcnJvcl90IGNzX3JlczsKCglFTlRFUigpOwoKCW1zZy5kYXRhX2xlbiA9IHJh -bmRfcigmc2VudF9yYW5kX3NlZWQpICUgTUFYX01TR19MRU47Cgltc2cuc2VxX25vID0gc2VudF9t -c2dfc2VxX25vOwoKCXNlbnRfbXNnX3NlcV9ubysrOwoKCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKHVu -c2lnbmVkIGNoYXIpICogbXNnLmRhdGFfbGVuKTsKCWFzc2VydChkYXRhICE9IE5VTEwpOwoKCWZv -ciAodTMyID0gMDsgdTMyIDwgbXNnLmRhdGFfbGVuOyB1MzIrKykgewoJCWRhdGFbdTMyXSA9ICh1 -bnNpZ25lZCBjaGFyKXJhbmRfcigmc2VudF9yYW5kX3NlZWQpOwoJfQoKCWlvdlswXS5pb3ZfYmFz -ZSA9ICh2b2lkICopJm1zZzsKCWlvdlswXS5pb3ZfbGVuID0gc2l6ZW9mKG1zZyk7Cglpb3ZbMV0u -aW92X2Jhc2UgPSAodm9pZCAqKWRhdGE7Cglpb3ZbMV0uaW92X2xlbiA9IG1zZy5kYXRhX2xlbjsK -Cgljc19yZXMgPSBjcGdfbWNhc3Rfam9pbmVkKGNwZ19oYW5kbGUsIENQR19UWVBFX0FHUkVFRCwg -aW92LCAyKTsKCWFzc2VydChjc19yZXMgPT0gQ1NfT0spOwoKCWZyZWUoZGF0YSk7CgoJTEVBVkUo -KTsKfQoKc3RhdGljIHZvaWQKdGVzdF9jcGcodm9pZCkKewoJY3BnX2hhbmRsZV90IGNwZ19oYW5k -bGU7CglzdHJ1Y3QgY3BnX25hbWUgZ3JvdXBfbmFtZTsKCWNzX2Vycm9yX3QgY3NfcmVzOwoJdW5z -aWduZWQgaW50IGxvY2FsX25vZGVpZDsKCWludCBjcGdfZmQ7CglzdHJ1Y3QgcG9sbGZkIHBmZDsK -CWludCBwb2xsX3JlczsKCWludCBzdGF0ZTsKCWludCBjb250OwoKCUVOVEVSKCk7CgoJc3RhdGUg -PSAwOwoKCXN0cmNweShncm91cF9uYW1lLnZhbHVlLCBURVNUX0dST1VQX05BTUUpOwoJZ3JvdXBf -bmFtZS5sZW5ndGggPSBzdHJsZW4oVEVTVF9HUk9VUF9OQU1FKTsKCgljc19yZXBlYXQoY3NfcmVz -ID0gY3BnX21vZGVsX2luaXRpYWxpemUoJmNwZ19oYW5kbGUsIENQR19NT0RFTF9WMSwKCSAgICAo -Y3BnX21vZGVsX2RhdGFfdCAqKSZtb2RlbF9kYXRhLCBOVUxMKSk7Cglhc3NlcnQoY3NfcmVzID09 -IENTX09LKTsKCgljc19yZXBlYXQoY3NfcmVzID0gY3BnX2pvaW4oY3BnX2hhbmRsZSwgJmdyb3Vw -X25hbWUpKTsKCWFzc2VydChjc19yZXMgPT0gQ1NfT0spOwoKCWNzX3JlcGVhdChjc19yZXMgPSBj -cGdfbG9jYWxfZ2V0KGNwZ19oYW5kbGUsICZsb2NhbF9ub2RlaWQpKTsKCWFzc2VydChjc19yZXMg -PT0gQ1NfT0spOwoJYXNzZXJ0KGxvY2FsX25vZGVpZCA9PSBURVNUX05PREVJRCk7CgoJY3NfcmVw -ZWF0KGNzX3JlcyA9IGNwZ19mZF9nZXQoY3BnX2hhbmRsZSwgJmNwZ19mZCkpOwoJYXNzZXJ0KGNz -X3JlcyA9PSBDU19PSyk7CgoJY29udCA9IDE7CgoJZG8gewoJCXBmZC5mZCA9IGNwZ19mZDsKCQlw -ZmQuZXZlbnRzID0gUE9MTElOOwoJCXBmZC5yZXZlbnRzID0gMDsKCgkJcG9sbF9yZXMgPSBwb2xs -KCZwZmQsIDEsIElORlRJTSk7CgkJaWYgKHBvbGxfcmVzID09IC0xKSB7CgkJCXBlcnJvcigicG9s -bF9yZXMgPT0gLTEiKTsKCQl9CgoJCWFzc2VydChwb2xsX3JlcyAhPSAwKTsKCQlhc3NlcnQocGZk -LnJldmVudHMgJiBQT0xMSU4pOwoKCQljc19yZXBlYXQoY3NfcmVzID0gY3BnX2Rpc3BhdGNoKGNw -Z19oYW5kbGUsIENTX0RJU1BBVENIX0FMTCkpOwoJCWFzc2VydChjc19yZXMgPT0gQ1NfT0spOwoK -CQlzd2l0Y2ggKHN0YXRlKSB7CgkJY2FzZSAwOgoJCQkvKgoJCQkgKiBXYWl0aW5nIGZvciBjcGdf -Y29uZmNoZ19yZWNlaXZlZCBhbmQgY3BnX3RvdGVtX2NvbmZjaGdfcmVjZWl2ZWQKCQkJICovCgkJ -CWlmIChjcGdfY29uZmNoZ19yZWNlaXZlZCAmJiBjcGdfdG90ZW1fY29uZmNoZ19yZWNlaXZlZCkg -ewoJCQkJLyoKCQkJCSAqIFNlbmQgZmlyc3QgbWVzc2FnZSBhbmQgd2FpdCBmb3IgaXQgaW4gbmV4 -dCBzdGF0ZQoJCQkJICovCgkJCQlzZW5kX21zZyhjcGdfaGFuZGxlKTsKCQkJCXN0YXRlID0gMTsK -CQkJfQoJCQlicmVhazsKCQljYXNlIDE6CgkJCWlmIChyZWNlaXZlZF9tc2dfc2VxX25vID49IE1F -U1NBR0VTX1RPX1NFTlQpIHsKCQkJCWNvbnQgPSAwOwoJCQl9IGVsc2UgIGlmIChyZWNlaXZlZF9t -c2dfc2VxX25vID09IHNlbnRfbXNnX3NlcV9ubykgewoJCQkJLyoKCQkJCSAqIE1lc3NhZ2UgZGVs -aXZlcmVkIHNvIHNlbnQgbmV3IG9uZSBhbmQgd2FpdCBmb3IgaXQKCQkJCSAqLwoJCQkJc2VuZF9t -c2coY3BnX2hhbmRsZSk7CgkJCX0KCQkJYnJlYWs7CgkJfQoJfSB3aGlsZSAoY29udCk7CgoJY3Nf -cmVwZWF0KGNzX3JlcyA9IGNwZ19sZWF2ZShjcGdfaGFuZGxlLCAmZ3JvdXBfbmFtZSkpOwoJYXNz -ZXJ0KGNzX3JlcyA9PSBDU19PSyk7CgoJY3NfcmVwZWF0KGNzX3JlcyA9IGNwZ19maW5hbGl6ZShj -cGdfaGFuZGxlKSk7Cglhc3NlcnQoY3NfcmVzID09IENTX09LKTsKCglMRUFWRSgpOwp9CgppbnQK -bWFpbih2b2lkKQp7CgoJRU5URVIoKTsKCglzZXRsaW5lYnVmKHN0ZG91dCk7CgoJdGVzdF9jcGco -KTsKCglMRUFWRSgpOwoKCXJldHVybiAoMCk7Cn0K" | base64 -d | tee "/tmp/corosync-api-test.c" -# - corosync-api-test.c -# corosync-api-test-mp.c -echo "LyoKICogQ29weXJpZ2h0IChjKSAyMDE5LCBSZWQgSGF0LCBJbmMuCiAqCiAqIFBlcm1pc3Npb24g -dG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9y -IGFueQogKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHBy -b3ZpZGVkIHRoYXQgdGhlIGFib3ZlCiAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz -c2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCiAqCiAqIFRIRSBTT0ZUV0FSRSBJUyBQ -Uk9WSURFRCAiQVMgSVMiIEFORCBSRUQgSEFULCBJTkMuIERJU0NMQUlNUyBBTEwgV0FSUkFOVElF -UwogKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBX -QVJSQU5USUVTCiAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQg -U0hBTEwgUkVEIEhBVCwgSU5DLiBCRSBMSUFCTEUKICogRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1Qs -IElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKICogV0hB -VFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVU -SEVSIElOIEFOIEFDVElPTgogKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JU -SU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCiAqIENPTk5FQ1RJT04gV0lUSCBUSEUg -VVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAqCiAqIEF1dGhvcjogSmFuIEZy -aWVzc2UgPGpmcmllc3NlQHJlZGhhdC5jb20+CiAqLwoKLyoKICogTWFpbiBwcm9jZXNzIGNyZWF0 -ZXMgbXVsdGlwbGUgKE5PX0NISUxEUykgY2hpbGRzIGFuZCB3YWl0cyBmb3IgdGhlaXIgZXhpdC4K -ICogRWFjaCBjaGlsZCBqb2lucyBDUEcgZ3JvdXAgYW5kIHN0YXJ0cyBwcm9jZXNzaW5nIENQRyBl -dmVudHMuIEVhY2ggY2hpbGQgaXMKICogaWRlbnRpZmllZCBieSBJRCAobXlfaWQpIHdoaWNoIGlz -IHNldCBieSBtYWluIHByb2Nlc3MgaW4gaW5jcmVhc2luZyBvcmRlciAoc28KICogdmFsdWUgaXMg -MC4uTk9fQ0hJTERTLTEpLiBXaGVuIGFsbCBjaGlsZHMgam9pbiBDUEcgZ3JvdXAgKENvbmZjaGdD -YWxsYmFjayB2YXJpYWJsZQogKiBtZW1iZXJfbGlzdF9lbnRyaWVzIGlzIGVxdWFsIHRvIE5PX0NI -SUxEUykgdGhlbiBjaGlsZCB3aXRoIElEIDAgc2VuZHMgQ1BHIG1lc3NhZ2UKICogd2l0aCByYW5k -b20gbGVuZ3RoICh1cC10byBNQVhfTVNHX0xFTikgYW5kIHJhbmRvbSBjb250ZW50LiBXaGVuIGNo -aWxkIHdpdGggSUQgMQogKiByZWNlaXZlcyBtZXNzYWdlIGlzc3VlZCBieSBjaGlsZCB3aXRoIElE -IDAsIGl0IHNlbmRzIGFub3RoZXIgcmFuZG9tIG1lc3NhZ2UuCiAqIFRoaXMgcHJvY2VzcyBjb250 -aW51ZXMgd2l0aCBjaGlsZCB3aXRoIElEIDIsIHRoZW4gd2l0aCBjaGlsZCAzLCAuLi4gTk9fQ0hJ -TERTIC0gMSBhbmQKICogdGhlbiBvdmVybGFwcyBiYWNrIHRvIDAuIEVhY2ggY2hpbGQgY29tcGFy -ZXMgcmVjZWl2ZWQgbWVzc2FnZSBieSBnZW5lcmF0aW5nIHNhbWUKICogcmFuZG9tIG51bWJlcnMg -KHJhbmRfciBmdW5jdGlvbiBpcyB1c2VkKSBzdHJlYW0gYXMgc2VuZGVyIHNvIHNlbnRfcmFuZF9z -ZWVkIGFuZAogKiByZWNlaXZlZF9yYW5kX3NlZWQgbXVzdCBiZSBrZXB0IGluIHN5bmMuIEtlZXBp -bmcgcmVjZWllZF9yYW5kX3NlZWQgaW4gc3luYyBpcwogKiBzaW1wbGUsIGJlY2F1c2UgaXQgaXMg -dXBkYXRlZCBldmVyeSB0aW1lIHdoZW4gbWVzc2FnZSBpcyByZWNlaXZlZC4KICogc2VudF9yYW5k -X3NlZWQgaXMgdXBkYXRlZCBldGhlciBieSBzZW5kaW5nIG1lc3NhZ2Ugb3IgYnkKICogY2FsbGlu -ZyBhZGp1c3Rfc2VudF9yYW5kX3NlZWQgZnVuY3Rpb24uCiAqCiAqIFRoaXMgdGVzdCBjaGVja3Mg -Zm9sbG93aW5nIHByb3BlcnRpZXMgQ1BHOgogKiAtIE1vcmUgdGhhbiBvbmUgY2xpZW50IGNhbiBq -b2luIENQRyBncm91cAogKiAtIEVhY2ggY2xpZW50IGV2ZW50dWFsbHkgc2VlcyBhbGwgb3RoZXIg -Y2xpZW50cwogKiAtIEVhY2ggY2xpZW50IHJlY2VpdmVzIG1lc3NhZ2VzIHNlbnQgYnkgb3RoZXIg -Y2xpZW50cyBbMV0KICogLSBNZXNzYWdlIGlzIG5vdCBjb3JydXB0ZWQgWzFdCiAqIC0gTWVzc2Fn -ZXMgYXJlIGRlbGl2ZXJlZCB3aXRoIEZJRk8gcXVhcmFudGVlIFsxXQogKgogKiBbMV0gLSBFbnN1 -cmVkIGJ5IGVxdWFsaXR5IG9mIHJhbmRfciBnZW5lcmF0ZWQgYnl0ZXMgd2hlcmUgc2VuZGVyIHNl -ZWQKICogICAgICAgKHNlbnRfcmFuZF9zZWVkKSBhbmQgcmVjZWl2ZXIgc2VlZCAocmVjZWl2ZWRf -cmFuZF9zZWVkKSBhcmUga2VwdCBpbgogKiAgICAgICBzeW5jLgogKi8KCiNpbmNsdWRlIDxzeXMv -dHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KI2luY2x1ZGUgPHN5cy93YWl0Lmg+Cgoj -aW5jbHVkZSA8YXNzZXJ0Lmg+CiNpbmNsdWRlIDxlcnJuby5oPgojaW5jbHVkZSA8aW50dHlwZXMu -aD4KI2luY2x1ZGUgPHBvbGwuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIu -aD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CgojaW5jbHVkZSA8Y29y -b3N5bmMvY29yb3R5cGVzLmg+CiNpbmNsdWRlIDxjb3Jvc3luYy9jcGcuaD4KCi8qCiAqIFByZWRl -ZmluZWQgdGVzdCBjb25zdGFudHMKICovCiNkZWZpbmUgVEVTVF9OT0RFSUQJCTEKI2RlZmluZSBU -RVNUX0dST1VQX05BTUUJCSJzbW9rZS1hcGktdGVzdC1jcGctZ3JvdXAtbXAiCiNkZWZpbmUgTUFY -X1JFVFJJRVMJCTMwCiNkZWZpbmUgTUFYX01TR19MRU4JCSgxMDI0ICogMTI4KQoKI2RlZmluZSBO -T19DSElMRFMJCTMKCiNkZWZpbmUgTUVTU0FHRVNfVE9fU0VOVAkoMTI4ICogTk9fQ0hJTERTKQoK -LyoKICogVXNlZnVsIG1hY3JvcwogKi8KI2RlZmluZSBjc19yZXBlYXQoY29kZSkgZG8gewkJCQlc -CglpbnQgY3NfcmVwZWF0X2NvdW50ZXIgPSAwOwkJCVwKCWRvIHsJCQkJCQlcCgkJaWYgKChjb2Rl -KSA9PSBDU19FUlJfVFJZX0FHQUlOKSB7CVwKCQkJY3NfcmVwZWF0X2NvdW50ZXIrKzsJCVwKCQkJ -cG9sbChOVUxMLCAwLCAxMDAwKTsJCVwKCQl9IGVsc2UgewkJCQlcCgkJCWJyZWFrOwkJCQlcCgkJ -fQkJCQkJXAoJfSB3aGlsZSAoY3NfcmVwZWF0X2NvdW50ZXIgPCBNQVhfUkVUUklFUyk7CVwKfSB3 -aGlsZSAoMCkKCiNpZm5kZWYgSU5GVElNCiNkZWZpbmUgSU5GVElNCQkJLTEKI2VuZGlmCgojZGVm -aW5lIEVOVEVSKCkgcHJpbnRmKCJbJWxkXSArICVzOiV1ICVzXG4iLCAobG9uZyBzaWduZWQgaW50 -KWdldHBpZCgpLCBfX0ZJTEVfXyxcCiAgICBfX0xJTkVfXywgX19mdW5jX18pCiNkZWZpbmUgTEVB -VkUoKSBwcmludGYoIlslbGRdIC0gJXM6JXUgJXNcbiIsIChsb25nIHNpZ25lZCBpbnQpZ2V0cGlk -KCksIF9fRklMRV9fLFwKICAgIF9fTElORV9fLCBfX2Z1bmNfXykKCnN0YXRpYyBpbnQzMl90IG15 -X2lkID0gLTE7CnN0YXRpYyBpbnQgZnVsbF9tZW1iZXJzaGlwX3NlZW4gPSAwOwpzdGF0aWMgaW50 -IHNlbnRfbWVzc2FnZXMgPSAwOwpzdGF0aWMgaW50IHRlc3RfY3BnX2xvb3BfY29udCA9IDE7Cgov -KgogKiBib3RoIHJhbmQgc2VlZHMgbXVzdCBiZSBpbiBzeW5jCiAqLwpzdGF0aWMgdW5zaWduZWQg -aW50IHNlbnRfcmFuZF9zZWVkID0gMDsKc3RhdGljIHVuc2lnbmVkIGludCByZWNlaXZlZF9yYW5k -X3NlZWQgPSAwOwpzdGF0aWMgaW50MzJfdCBleHBlY3RlZF9zZW5kZXJfaWQ7CnN0YXRpYyB1aW50 -MzJfdCBleHBlY3RlZF9tc2dfc2VxX25vID0gMDsKCnN0cnVjdCB0ZXN0X21zZyB7CglpbnQzMl90 -IHNlbmRlcl9pZCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsKCXVpbnQzMl90IHNlcV9u -byBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsKCXVpbnQzMl90IGRhdGFfbGVuIF9fYXR0 -cmlidXRlX18gKChhbGlnbmVkICg4KSkpOwoJdW5zaWduZWQgY2hhciBkYXRhWzBdIF9fYXR0cmli -dXRlX18gKChhbGlnbmVkICg4KSkpOwp9OwoKc3RhdGljIHZvaWQKc2VuZF9tc2coY3BnX2hhbmRs -ZV90IGNwZ19oYW5kbGUpCnsKCXN0cnVjdCB0ZXN0X21zZyBtc2c7Cgl1bnNpZ25lZCBjaGFyICpk -YXRhOwoJdWludDMyX3QgdTMyOwoJc3RydWN0IGlvdmVjIGlvdlsyXTsKCWNzX2Vycm9yX3QgY3Nf -cmVzOwoKCUVOVEVSKCk7CgoJbXNnLnNlbmRlcl9pZCA9IG15X2lkOwoJbXNnLmRhdGFfbGVuID0g -cmFuZF9yKCZzZW50X3JhbmRfc2VlZCkgJSBNQVhfTVNHX0xFTjsKCW1zZy5zZXFfbm8gPSBleHBl -Y3RlZF9tc2dfc2VxX25vOwoKCWRhdGEgPSBtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICog -bXNnLmRhdGFfbGVuKTsKCWFzc2VydChkYXRhICE9IE5VTEwpOwoKCWZvciAodTMyID0gMDsgdTMy -IDwgbXNnLmRhdGFfbGVuOyB1MzIrKykgewoJCWRhdGFbdTMyXSA9ICh1bnNpZ25lZCBjaGFyKXJh -bmRfcigmc2VudF9yYW5kX3NlZWQpOwoJfQoKCWlvdlswXS5pb3ZfYmFzZSA9ICh2b2lkICopJm1z -ZzsKCWlvdlswXS5pb3ZfbGVuID0gc2l6ZW9mKG1zZyk7Cglpb3ZbMV0uaW92X2Jhc2UgPSAodm9p -ZCAqKWRhdGE7Cglpb3ZbMV0uaW92X2xlbiA9IG1zZy5kYXRhX2xlbjsKCgljc19yZXMgPSBjcGdf -bWNhc3Rfam9pbmVkKGNwZ19oYW5kbGUsIENQR19UWVBFX0FHUkVFRCwgaW92LCAyKTsKCWFzc2Vy -dChjc19yZXMgPT0gQ1NfT0spOwoKCWZyZWUoZGF0YSk7CgoJc2VudF9tZXNzYWdlcysrOwoKCUxF -QVZFKCk7Cn0KCnN0YXRpYyB2b2lkCmFkanVzdF9zZW50X3JhbmRfc2VlZCh2b2lkKQp7Cgl1aW50 -MzJfdCBkYXRhX2xlbjsKCXVpbnQzMl90IHUzMjsKCglkYXRhX2xlbiA9IHJhbmRfcigmc2VudF9y -YW5kX3NlZWQpICUgTUFYX01TR19MRU47CgoJZm9yICh1MzIgPSAwOyB1MzIgPCBkYXRhX2xlbjsg -dTMyKyspIHsKCQkodm9pZClyYW5kX3IoJnNlbnRfcmFuZF9zZWVkKTsKCX0KfQoKc3RhdGljIHZv -aWQKRGVsaXZlckNhbGxiYWNrKGNwZ19oYW5kbGVfdCBoYW5kbGUsCiAgICBjb25zdCBzdHJ1Y3Qg -Y3BnX25hbWUgKmdyb3VwTmFtZSwKICAgIHVpbnQzMl90IG5vZGVpZCwKICAgIHVpbnQzMl90IHBp -ZCwKICAgIHZvaWQgKmNwZ19tc2csCiAgICBzaXplX3QgY3BnX21zZ19sZW4pCnsKCXN0cnVjdCB0 -ZXN0X21zZyAqbXNnOwoJdWludDMyX3QgdTMyOwoKCUVOVEVSKCk7CgoJYXNzZXJ0KG5vZGVpZCA9 -PSBURVNUX05PREVJRCk7CgoJYXNzZXJ0KGNwZ19tc2dfbGVuID49IHNpemVvZihzdHJ1Y3QgdGVz -dF9tc2cpKTsKCgltc2cgPSAoc3RydWN0IHRlc3RfbXNnICopY3BnX21zZzsKCWFzc2VydChtc2ct -PnNlbmRlcl9pZCA9PSBleHBlY3RlZF9zZW5kZXJfaWQpOwoKCWV4cGVjdGVkX3NlbmRlcl9pZCA9 -IChleHBlY3RlZF9zZW5kZXJfaWQgKyAxKSAlIE5PX0NISUxEUzsKCglhc3NlcnQobXNnLT5zZXFf -bm8gPT0gZXhwZWN0ZWRfbXNnX3NlcV9ubyk7CglleHBlY3RlZF9tc2dfc2VxX25vKys7CgoJYXNz -ZXJ0KGNwZ19tc2dfbGVuID09IG1zZy0+ZGF0YV9sZW4gKyBzaXplb2Yoc3RydWN0IHRlc3RfbXNn -KSk7CgoJLyoKCSAqIE1lc3NhZ2UgaGFzIGV4cGVjdGVkIGxlbmd0aCBhbmQgY29udGVudAoJICov -Cglhc3NlcnQobXNnLT5kYXRhX2xlbiA9PSAodWludDMyX3QpKHJhbmRfcigmcmVjZWl2ZWRfcmFu -ZF9zZWVkKSAlIE1BWF9NU0dfTEVOKSk7CgoJZm9yICh1MzIgPSAwOyB1MzIgPCBtc2ctPmRhdGFf -bGVuOyB1MzIrKykgewoJCWFzc2VydChtc2ctPmRhdGFbdTMyXSA9PSAodW5zaWduZWQgY2hhcily -YW5kX3IoJnJlY2VpdmVkX3JhbmRfc2VlZCkpOwoJfQoKCWlmIChleHBlY3RlZF9tc2dfc2VxX25v -ID4gTUVTU0FHRVNfVE9fU0VOVCkgewoJCXRlc3RfY3BnX2xvb3BfY29udCA9IDA7Cgl9CgoJaWYg -KGV4cGVjdGVkX3NlbmRlcl9pZCA9PSBteV9pZCkgewoJCXNlbmRfbXNnKGhhbmRsZSk7Cgl9IGVs -c2UgewoJCWFkanVzdF9zZW50X3JhbmRfc2VlZCgpOwoJfQoKCUxFQVZFKCk7Cn0KCnN0YXRpYyB2 -b2lkClRvdGVtQ29uZmNoZ0NhbGxiYWNrKGNwZ19oYW5kbGVfdCBoYW5kbGUsCiAgICBzdHJ1Y3Qg -Y3BnX3JpbmdfaWQgcmluZ19pZCwKICAgIHVpbnQzMl90IG1lbWJlcl9saXN0X2VudHJpZXMsCiAg -ICBjb25zdCB1aW50MzJfdCAqbWVtYmVyX2xpc3QpCnsKCglFTlRFUigpOwoKCWFzc2VydChtZW1i -ZXJfbGlzdF9lbnRyaWVzID09IDEpOwoJYXNzZXJ0KG1lbWJlcl9saXN0WzBdID09IFRFU1RfTk9E -RUlEKTsKCglMRUFWRSgpOwp9CgpzdGF0aWMgdm9pZApDb25mY2hnQ2FsbGJhY2soY3BnX2hhbmRs -ZV90IGhhbmRsZSwKICAgIGNvbnN0IHN0cnVjdCBjcGdfbmFtZSAqZ3JvdXBfbmFtZSwKICAgIGNv -bnN0IHN0cnVjdCBjcGdfYWRkcmVzcyAqbWVtYmVyX2xpc3QsIHNpemVfdCBtZW1iZXJfbGlzdF9l -bnRyaWVzLAogICAgY29uc3Qgc3RydWN0IGNwZ19hZGRyZXNzICpsZWZ0X2xpc3QsIHNpemVfdCBs -ZWZ0X2xpc3RfZW50cmllcywKICAgIGNvbnN0IHN0cnVjdCBjcGdfYWRkcmVzcyAqam9pbmVkX2xp -c3QsIHNpemVfdCBqb2luZWRfbGlzdF9lbnRyaWVzKQp7CglpbnQgaTsKCglFTlRFUigpOwoKCWFz -c2VydChncm91cF9uYW1lLT5sZW5ndGggPT0gc3RybGVuKFRFU1RfR1JPVVBfTkFNRSkpOwoJYXNz -ZXJ0KG1lbWNtcChncm91cF9uYW1lLT52YWx1ZSwgVEVTVF9HUk9VUF9OQU1FLCBzdHJsZW4oVEVT -VF9HUk9VUF9OQU1FKSkgPT0gMCk7CgoJZm9yIChpID0gMDsgaSA8IG1lbWJlcl9saXN0X2VudHJp -ZXM7IGkrKykgewoJCWFzc2VydChtZW1iZXJfbGlzdFtpXS5ub2RlaWQgPT0gVEVTVF9OT0RFSUQp -OwoJfQoKCWlmICghZnVsbF9tZW1iZXJzaGlwX3NlZW4gJiYgbWVtYmVyX2xpc3RfZW50cmllcyA9 -PSBOT19DSElMRFMpIHsKCQlpZiAobXlfaWQgPT0gMCkgewoJCQkvKgoJCQkgKiBGaXJzdCBjaGls -ZCBzZW5kcyBmaXJzdCBtZXNzYWdlCgkJCSAqLwoJCQlzZW5kX21zZyhoYW5kbGUpOwoJCX0gZWxz -ZSB7CgkJCWFkanVzdF9zZW50X3JhbmRfc2VlZCgpOwoJCX0KCgkJZnVsbF9tZW1iZXJzaGlwX3Nl -ZW4gPSAxOwoJfQoKCUxFQVZFKCk7Cn0KCnN0YXRpYyBjcGdfbW9kZWxfdjFfZGF0YV90IG1vZGVs -X2RhdGEgPSB7CgkuY3BnX2RlbGl2ZXJfZm4gPQlEZWxpdmVyQ2FsbGJhY2ssCgkuY3BnX2NvbmZj -aGdfZm4gPQlDb25mY2hnQ2FsbGJhY2ssCgkuY3BnX3RvdGVtX2NvbmZjaGdfZm4gPQlUb3RlbUNv -bmZjaGdDYWxsYmFjaywKCS5mbGFncyA9CQlDUEdfTU9ERUxfVjFfREVMSVZFUl9JTklUSUFMX1RP -VEVNX0NPTkYsCn07CgoKc3RhdGljIHZvaWQKdGVzdF9jcGcodm9pZCkKewoJY3BnX2hhbmRsZV90 -IGNwZ19oYW5kbGU7CglzdHJ1Y3QgY3BnX25hbWUgZ3JvdXBfbmFtZTsKCWNzX2Vycm9yX3QgY3Nf -cmVzOwoJdW5zaWduZWQgaW50IGxvY2FsX25vZGVpZDsKCWludCBjcGdfZmQ7CglzdHJ1Y3QgcG9s -bGZkIHBmZDsKCWludCBwb2xsX3JlczsKCglFTlRFUigpOwoKCXN0cmNweShncm91cF9uYW1lLnZh -bHVlLCBURVNUX0dST1VQX05BTUUpOwoJZ3JvdXBfbmFtZS5sZW5ndGggPSBzdHJsZW4oVEVTVF9H -Uk9VUF9OQU1FKTsKCgljc19yZXBlYXQoY3NfcmVzID0gY3BnX21vZGVsX2luaXRpYWxpemUoJmNw -Z19oYW5kbGUsIENQR19NT0RFTF9WMSwKCSAgICAoY3BnX21vZGVsX2RhdGFfdCAqKSZtb2RlbF9k -YXRhLCBOVUxMKSk7Cglhc3NlcnQoY3NfcmVzID09IENTX09LKTsKCgljc19yZXBlYXQoY3NfcmVz -ID0gY3BnX2pvaW4oY3BnX2hhbmRsZSwgJmdyb3VwX25hbWUpKTsKCWFzc2VydChjc19yZXMgPT0g -Q1NfT0spOwoKCWNzX3JlcGVhdChjc19yZXMgPSBjcGdfbG9jYWxfZ2V0KGNwZ19oYW5kbGUsICZs -b2NhbF9ub2RlaWQpKTsKCWFzc2VydChjc19yZXMgPT0gQ1NfT0spOwoJYXNzZXJ0KGxvY2FsX25v -ZGVpZCA9PSBURVNUX05PREVJRCk7CgoJY3NfcmVwZWF0KGNzX3JlcyA9IGNwZ19mZF9nZXQoY3Bn -X2hhbmRsZSwgJmNwZ19mZCkpOwoJYXNzZXJ0KGNzX3JlcyA9PSBDU19PSyk7CgoJZG8gewoJCXBm -ZC5mZCA9IGNwZ19mZDsKCQlwZmQuZXZlbnRzID0gUE9MTElOOwoJCXBmZC5yZXZlbnRzID0gMDsK -CgkJcG9sbF9yZXMgPSBwb2xsKCZwZmQsIDEsIElORlRJTSk7CgkJaWYgKHBvbGxfcmVzID09IC0x -KSB7CgkJCXBlcnJvcigicG9sbF9yZXMgPT0gLTEiKTsKCQl9CgoJCWFzc2VydChwb2xsX3JlcyAh -PSAwKTsKCQlhc3NlcnQocGZkLnJldmVudHMgJiBQT0xMSU4pOwoKCQljc19yZXBlYXQoY3NfcmVz -ID0gY3BnX2Rpc3BhdGNoKGNwZ19oYW5kbGUsIENTX0RJU1BBVENIX0FMTCkpOwoJCWFzc2VydChj -c19yZXMgPT0gQ1NfT0spOwoJfSB3aGlsZSAodGVzdF9jcGdfbG9vcF9jb250KTsKCgljc19yZXBl -YXQoY3NfcmVzID0gY3BnX2xlYXZlKGNwZ19oYW5kbGUsICZncm91cF9uYW1lKSk7Cglhc3NlcnQo -Y3NfcmVzID09IENTX09LKTsKCgljc19yZXBlYXQoY3NfcmVzID0gY3BnX2ZpbmFsaXplKGNwZ19o -YW5kbGUpKTsKCWFzc2VydChjc19yZXMgPT0gQ1NfT0spOwoKCUxFQVZFKCk7Cn0KCmludAptYWlu -KHZvaWQpCnsKCWludCBpOwoJcGlkX3QgZm9ya19yZXM7CglwaWRfdCB3YWl0X3JlczsKCWludCBz -dGF0dXM7CgoJRU5URVIoKTsKCglzZXRsaW5lYnVmKHN0ZG91dCk7CgoJZm9yIChpID0gMDsgaSA8 -IE5PX0NISUxEUzsgaSsrKSB7CgkJbXlfaWQgPSBpOwoKCQlmb3JrX3JlcyA9IGZvcmsoKTsKCgkJ -aWYgKGZvcmtfcmVzID09IC0xKSB7CgkJCXBlcnJvcigiZm9yayIpOwoJCX0KCgkJaWYgKGZvcmtf -cmVzID09IDApIHsKCQkJLyoKCQkJICogQ2hpbGQKCQkJICovCgkJCWJyZWFrIDsKCQl9IGVsc2Ug -ewoJCQkvKgoJCQkgKiBQYXJlbnQKCQkJICovCgkJCW15X2lkID0gLTE7CgkJfQoJfQoKCWlmIChm -b3JrX3JlcyA9PSAwKSB7CgkJLyoKCQkgKiBDaGlsZCBydW5zIHRoZSB0ZXN0CgkJICovCgkJdGVz -dF9jcGcoKTsKCX0gZWxzZSB7CgkJLyoKCQkgKiBXYWl0IGZvciBjaGlsZHMKCQkgKi8KCQlmb3Ig -KGkgPSAwOyBpIDwgTk9fQ0hJTERTOyBpKyspIHsKCQkJd2FpdF9yZXMgPSB3YWl0KCZzdGF0dXMp -OwoJCQlpZiAod2FpdF9yZXMgPT0gLTEpIHsKCQkJCXBlcnJvcigid2FpdCIpOwoJCQl9CgoJCQlh -c3NlcnQoV0lGRVhJVEVEKHN0YXR1cykpOwoJCQlhc3NlcnQoV0VYSVRTVEFUVVMoc3RhdHVzKSA9 -PSAwKTsKCQl9Cgl9CgoJTEVBVkUoKTsKCglyZXR1cm4gKDApOwp9Cg==" | base64 -d | tee "/tmp/corosync-api-test-mp.c" -# - corosync-api-test-mp.c -################## -# Test functions # -################## -test_corosync_v() { - # Check corosync -v exits without error and - # result version contain numbers in path format [0-9]*.[0-9]*.[0-9] - ver_res=$(corosync -v) - [ "$ver_res" != "${ver_res/[0-9]*\.[0-9]*\.[0-9]/}" ] -} - -test_corosync_keygen() { - rm -f "$COROSYNC_AUTHKEY" - corosync-keygen - - # File exists - [ -f "$COROSYNC_AUTHKEY" ] - - # ... and is not empty (wc format is "SIZE FILENAME" - remove FILENAME part) - wc_res=$(wc -c "$COROSYNC_AUTHKEY") - [ "${wc_res%% *}" -gt 0 ] -} - -# test_corosync_start crypto -# crypto can be on or off -test_corosync_start() { - generate_corosync_conf "$1" > "$COROSYNC_CONF" - cat "$COROSYNC_CONF" - - service_start "corosync" -} - -test_corosync_stop() { - service_stop "corosync" -} - -test_corosync_quorumtool() { - quorumtool_res_file=`mktemp` - # This is already fixed in upstream db38e3958c4f88d5d06e8f7c83d6d90334d9fbd2 - (corosync-quorumtool -ips || true) | tee "$quorumtool_res_file" - - # Ensure this is single node cluster - grep -qi '^Nodes:.*1$' "$quorumtool_res_file" - # Current node id is 1 - grep -qi '^Node ID:.*1$' "$quorumtool_res_file" - # Is quorate (libquorum) - grep -qi '^Quorate:.*Yes$' "$quorumtool_res_file" - # Quorum is 1 - grep -qi '^Quorum:.*1' "$quorumtool_res_file" - # Is quorate (libvotequorum) - grep -qi '^Flags:.*Quorate' "$quorumtool_res_file" - - rm -f "$quorumtool_res_file" -} - -test_corosync_cmapctl() { - cmapctl_res_file=`mktemp` - corosync-cmapctl | tee "$cmapctl_res_file" - # cluster_name key exists in full output - grep -qi '^totem.cluster_name (str) = smoketestcluster$' "$cmapctl_res_file" - - corosync-cmapctl "totem." | tee "$cmapctl_res_file" - # cluster_name key exists in reduced output - grep -qi '^totem.cluster_name (str) = smoketestcluster$' "$cmapctl_res_file" - - # cluster_name key should be returned - corosync-cmapctl -g "totem.cluster_name" | tee "$cmapctl_res_file" - grep -qi '^totem.cluster_name (str) = smoketestcluster$' "$cmapctl_res_file" - - rm -f "$cmapctl_res_file" -} - -# test_corosync_reload - requires stopped corosync -test_corosync_reload() { - cmapctl_res_file=`mktemp` - - test_corosync_start "off" - - # Get current token timeout - corosync-cmapctl -g "runtime.config.totem.token" | tee "$cmapctl_res_file" - cmapctl_res=$(cat "$cmapctl_res_file") - # Format is runtime.config.totem.token (u32) = value - token_pre_reload=${cmapctl_res##* } - [ "$token_pre_reload" -eq "$TOKEN_TIMEOUT" ] - - # Generate new corosync.conf with token_timeout*10 - new_token_timeout=$((TOKEN_TIMEOUT*10)) - generate_corosync_conf "off" "$new_token_timeout" > "$COROSYNC_CONF" - cat "$COROSYNC_CONF" - - # Main call of the test - corosync-cfgtool -R - - # Check that new token timeout is in use - corosync-cmapctl -g "runtime.config.totem.token" | tee "$cmapctl_res_file" - cmapctl_res=$(cat "$cmapctl_res_file") - # Format is runtime.config.totem.token (u32) = value - token_post_reload=${cmapctl_res##* } - [ "$token_post_reload" -eq "$new_token_timeout" ] - - test_corosync_stop - - rm -f "$cmapctl_res_file" -} - -test_corosync_api() { - cflags=$(pkg-config --cflags libcpg) - libs=$(pkg-config --libs libcpg) - - gcc -ggdb -Wall $cflags "/tmp/corosync-api-test.c" \ - $libs -o "/tmp/corosync-api-test" - - /tmp/corosync-api-test -} - -test_corosync_api_mp() { - cflags=$(pkg-config --cflags libcpg) - libs=$(pkg-config --libs libcpg) - - gcc -ggdb -Wall $cflags "/tmp/corosync-api-test-mp.c" \ - $libs -o "/tmp/corosync-api-test-mp" - - /tmp/corosync-api-test-mp -} - -test_corosync_man_pages() { - # At least these man pages should be installed - expected_mp="corosync corosync.conf corosync-cfgtool corosync-cmapctl - corosync-keygen corosync-quorumtool" - - for mp in $expected_mp;do - man -w "$mp" - done -} - -######## -# main # -######## -if [ -z "$PREFIX" ];then - echo "PREFIX not defined. Do not run *.inc.sh directly" - exit 1 -fi - -test_corosync_v -test_corosync_keygen -test_corosync_man_pages - -for crypto in "off" "on";do - test_corosync_start "$crypto" - test_corosync_quorumtool - test_corosync_cmapctl - test_corosync_api - test_corosync_api_mp - test_corosync_stop -done - -test_corosync_reload