From a75616f0f6948d7ad95a443434f6cd244f8fc569 Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Fri, 25 Oct 2024 19:30:17 +0300 Subject: [PATCH] import synce4l-1.1.0-4.el10 --- .gitignore | 1 + .synce4l.metadata | 1 + SOURCES/synce4l-ccwarns.patch | 90 +++++++++++++++++++++ SOURCES/synce4l-initpinid.patch | 24 ++++++ SOURCES/synce4l-noduppin.patch | 43 +++++++++++ SOURCES/synce4l-smc.patch | 133 ++++++++++++++++++++++++++++++++ SOURCES/synce4l-stacksize.patch | 26 +++++++ SOURCES/synce4l.service | 9 +++ SPECS/synce4l.spec | 123 +++++++++++++++++++++++++++++ 9 files changed, 450 insertions(+) create mode 100644 .gitignore create mode 100644 .synce4l.metadata create mode 100644 SOURCES/synce4l-ccwarns.patch create mode 100644 SOURCES/synce4l-initpinid.patch create mode 100644 SOURCES/synce4l-noduppin.patch create mode 100644 SOURCES/synce4l-smc.patch create mode 100644 SOURCES/synce4l-stacksize.patch create mode 100644 SOURCES/synce4l.service create mode 100644 SPECS/synce4l.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..616d143 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/synce4l-1.1.0.tar.gz diff --git a/.synce4l.metadata b/.synce4l.metadata new file mode 100644 index 0000000..6d5fb29 --- /dev/null +++ b/.synce4l.metadata @@ -0,0 +1 @@ +b140fb69715e4d8d20fbd7ae763510b2a3986eec SOURCES/synce4l-1.1.0.tar.gz diff --git a/SOURCES/synce4l-ccwarns.patch b/SOURCES/synce4l-ccwarns.patch new file mode 100644 index 0000000..0b6ac2b --- /dev/null +++ b/SOURCES/synce4l-ccwarns.patch @@ -0,0 +1,90 @@ +commit b8089eabc28d665cba462c29aabdb159f0f153a6 +Author: Miroslav Lichvar +Date: Tue May 28 13:38:13 2024 +0200 + + Fix more compiler warnings + + Fix the following warnings observed when -O2 and -D_FORTIFY_SOURCE=2 are + added to CFLAGS. + + synce_dev.c: In function ‘rebuild_inputs_prio’: + synce_dev.c:610:28: warning: ‘best_c_idx’ may be used uninitialized [-Wmaybe-uninitialized] + 610 | all[best_c_idx] = NULL; + | ^ + synce_dev.c:582:39: note: ‘best_c_idx’ was declared here + 582 | int i = 0, prio_count = 0, j, best_c_idx, ret; + | ^~~~~~~~~~ + + synce_manager.c: In function ‘synce_manager_server_thread’: + synce_manager.c:260:9: warning: ‘strncpy’ specified bound 108 equals destination size [-Wstringop-truncation] + 260 | strncpy(server.sun_path, synce_clock_get_socket_path(clk), + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 261 | sizeof(server.sun_path)); + | ~~~~~~~~~~~~~~~~~~~~~~~~ + + synce_manager.c:343:20: warning: ‘ret’ may be used uninitialized [-Wmaybe-uninitialized] + 343 | if (!ret) + | ^ + synce_manager.c:241:26: note: ‘ret’ was declared here + 241 | int tlv_num = 0, ret, i, resp_len, bytes_read; + | ^~~ + + synce_manager.c: In function ‘synce_manager_server_thread’: + synce_manager.c:346:25: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 346 | write(new_socket, response, resp_len); + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Signed-off-by: Miroslav Lichvar + +diff --git a/synce_dev.c b/synce_dev.c +index fc784ed..5e2bbb9 100644 +--- a/synce_dev.c ++++ b/synce_dev.c +@@ -579,7 +579,7 @@ static bool source_invalid(struct synce_clock_source *c) + int rebuild_inputs_prio(struct synce_dev *dev) + { + struct synce_clock_source *c, *best_c, **all, **prioritized; +- int i = 0, prio_count = 0, j, best_c_idx, ret; ++ int i = 0, prio_count = 0, j, best_c_idx = 0, ret; + uint32_t prio; + + all = calloc(dev->num_clock_sources, sizeof(*all)); +diff --git a/synce_manager.c b/synce_manager.c +index b9ba08d..598ef7e 100644 +--- a/synce_manager.c ++++ b/synce_manager.c +@@ -257,8 +257,8 @@ static void *synce_manager_server_thread(void *arg) + } + + server.sun_family = AF_UNIX; +- strncpy(server.sun_path, synce_clock_get_socket_path(clk), +- sizeof(server.sun_path)); ++ snprintf(server.sun_path, sizeof(server.sun_path), "%s", ++ synce_clock_get_socket_path(clk)); + + if (bind(server_fd, (struct sockaddr *)&server, sizeof(server)) < 0) { + pr_err("%s Bind failed", __func__); +@@ -289,10 +289,12 @@ static void *synce_manager_server_thread(void *arg) + bytes_read = recv(new_socket, command, MAX_COMMAND_SIZE, 0); + if (bytes_read <= 0) { + synce_manager_generate_err_tlv(&err_tlv, "NULL command"); ++ ret = -1; + goto return_response; + } else if (bytes_read > MAX_COMMAND_SIZE) { + synce_manager_generate_err_tlv(&err_tlv, + "Command size exceeds MAX_COMMAND_SIZE"); ++ ret = -1; + goto return_response; + } + ret = synce_manager_parse_input(command, bytes_read, &tlv_array, +@@ -340,8 +342,8 @@ return_response: + if (tlv_array) + free((void *)tlv_array); + +- if (!ret) +- write(new_socket, response, resp_len); ++ if (!ret && write(new_socket, response, resp_len) != resp_len) ++ ret = -1; + close(new_socket); + } + diff --git a/SOURCES/synce4l-initpinid.patch b/SOURCES/synce4l-initpinid.patch new file mode 100644 index 0000000..ed50ea0 --- /dev/null +++ b/SOURCES/synce4l-initpinid.patch @@ -0,0 +1,24 @@ +commit b61dd54c1015692785a1766b15f7f5914f68df70 +Author: Miroslav Lichvar +Date: Wed Aug 7 14:14:32 2024 +0200 + + Initialize pin ID to -1 + + When creating the pin structure, initialize the pin ID to -1 to avoid + matching an existing pin with ID 0 (e.g. CVL-SDP22 on E810) when a + nonexistent pin is specified in the config. + + Signed-off-by: Miroslav Lichvar + +diff --git a/dpll_mon.c b/dpll_mon.c +index 39659fe..36aa559 100644 +--- a/dpll_mon.c ++++ b/dpll_mon.c +@@ -240,6 +240,7 @@ static struct dpll_mon_pin *pin_create(void) + } + pr_debug("%s %p", __func__, pin); + pin->parent_used_by = PARENT_NOT_USED; ++ pin->id = -1; + STAILQ_INIT(&pin->parents); + + return pin; diff --git a/SOURCES/synce4l-noduppin.patch b/SOURCES/synce4l-noduppin.patch new file mode 100644 index 0000000..5d2254d --- /dev/null +++ b/SOURCES/synce4l-noduppin.patch @@ -0,0 +1,43 @@ +commit 11319e050cde0657395d2656e2be4a629b53fb3b +Author: Miroslav Lichvar +Date: Mon Aug 5 16:20:49 2024 +0200 + + Fix crash in dpll_rt_recv() + + A crash was observed with E810 firmware 4.50 and kernel 6.11-rc1 in + dpll_rt_recv() trying to assign pin id to the pin which was removed by + remove_no_ifname_pin(). The pin is not a duplicate. + + Add a third parameter to remove_no_ifname_pin() to avoid removing the + incorrect pin. + + Signed-off-by: Miroslav Lichvar + +diff --git a/dpll_mon.c b/dpll_mon.c +index 06b4bce..39659fe 100644 +--- a/dpll_mon.c ++++ b/dpll_mon.c +@@ -256,12 +256,12 @@ static void pin_destroy(struct dpll_mon_pin *pin) + free(pin); + } + +-void remove_no_ifname_pin(struct dpll_mon *dm, uint32_t pin_id) ++void remove_no_ifname_pin(struct dpll_mon *dm, uint32_t pin_id, struct dpll_mon_pin *except) + { + struct dpll_mon_pin *pin; + + STAILQ_FOREACH(pin, &dm->pins, list) +- if (pin && pin_id == pin->id && pin->ifname == NULL) { ++ if (pin && pin != except && pin_id == pin->id && pin->ifname == NULL) { + pr_debug_pin("removed duplicated pin", pin); + STAILQ_REMOVE(&dm->pins, pin, dpll_mon_pin, list); + pin_destroy(pin); +@@ -589,7 +589,7 @@ static int dpll_rt_recv(struct nl_msg *msg, void *arg) + goto unlock; + pin_id = nla_get_u32(an[DPLL_A_PIN_ID]); + if (pin) { +- remove_no_ifname_pin(dm, pin_id); ++ remove_no_ifname_pin(dm, pin_id, pin); + pin->id = pin_id; + pr_debug_pin("pin assigned id", pin); + } else { diff --git a/SOURCES/synce4l-smc.patch b/SOURCES/synce4l-smc.patch new file mode 100644 index 0000000..1857241 --- /dev/null +++ b/SOURCES/synce4l-smc.patch @@ -0,0 +1,133 @@ +commit 6edb7f5a974c8a80f68c7b82b1bde1c1b37b75bb +Author: Miroslav Lichvar +Date: Wed Jun 5 12:55:29 2024 +0200 + + Change default smc_socket_path to /run/synce4l_socket + + System services should use /run for sockets and other runtime files. + + Signed-off-by: Miroslav Lichvar + +diff --git a/README.md b/README.md +index 87623a9..c1c1d73 100644 +--- a/README.md ++++ b/README.md +@@ -125,7 +125,7 @@ related to a running synce4l instance. + | `logging_level` | `6` | `0-7` | Minimum log level required to appear in a log. | + | `message_tag` | None | string | Tag reported in a log. | + | `poll_interval_msec` | 20 | 0-500 | Sleep time between subsequent SyncE clock polls | +-| `smc_socket_path` | `/tmp/synce4l_socket` | string | Full path to socket file for external application communication | ++| `smc_socket_path` | `/run/synce4l_socket` | string | Full path to socket file for external application communication | + | `use_syslog` | `1` | `0`, `1` | Set to 1 if `syslog` should be used. | + | `verbose` | `0` | `0`, `1` | Set to 1 to log extra information. | + +@@ -200,7 +200,7 @@ logging_level 7 + use_syslog 0 + verbose 1 + message_tag [synce4l] +-smc_socket_path /tmp/synce4l_socket ++smc_socket_path /run/synce4l_socket + + [] + network_option 1 +@@ -239,7 +239,7 @@ logging_level 7 + use_syslog 0 + verbose 1 + message_tag [synce4l] +-smc_socket_path /tmp/synce4l_socket ++smc_socket_path /run/synce4l_socket + + [] + network_option 1 +diff --git a/config.c b/config.c +index bb438a6..274c2d3 100644 +--- a/config.c ++++ b/config.c +@@ -180,7 +180,7 @@ struct config_item config_tab_synce[] = { + GLOB_ITEM_STR("message_tag", NULL), + GLOB_ITEM_INT("poll_interval_msec", 20, CLOCK_POLL_INTERVAL_MIN, + CLOCK_POLL_INTERVAL_MAX), +- GLOB_ITEM_STR("smc_socket_path", "/tmp/synce4l_socket"), ++ GLOB_ITEM_STR("smc_socket_path", "/run/synce4l_socket"), + GLOB_ITEM_INT("use_syslog", 1, 0, 1), + GLOB_ITEM_STR("userDescription", ""), + GLOB_ITEM_INT("verbose", 0, 0, 1), +diff --git a/configs/synce4l.cfg b/configs/synce4l.cfg +index ca12e9f..de92bd1 100644 +--- a/configs/synce4l.cfg ++++ b/configs/synce4l.cfg +@@ -7,7 +7,7 @@ logging_level 7 + use_syslog 0 + verbose 1 + message_tag [synce4l] +-smc_socket_path /tmp/synce4l_socket ++smc_socket_path /run/synce4l_socket + + + # +diff --git a/configs/synce4l_dpll.cfg b/configs/synce4l_dpll.cfg +index b814266..db4bd88 100644 +--- a/configs/synce4l_dpll.cfg ++++ b/configs/synce4l_dpll.cfg +@@ -7,7 +7,7 @@ logging_level 6 + use_syslog 0 + verbose 1 + message_tag [synce4l] +-smc_socket_path /tmp/synce4l_socket ++smc_socket_path /run/synce4l_socket + + + # + +commit 2f50c7a8b98d99220108abb0163696dcfed77635 +Author: Miroslav Lichvar +Date: Wed Jun 5 13:05:18 2024 +0200 + + Check smc_socket_path length + + Exit with an error message if the configured socket path is too long to + be bound as a Unix domain socket. + + Signed-off-by: Miroslav Lichvar + +diff --git a/synce_manager.c b/synce_manager.c +index 598ef7e..a42b823 100644 +--- a/synce_manager.c ++++ b/synce_manager.c +@@ -256,6 +256,10 @@ static void *synce_manager_server_thread(void *arg) + exit(EXIT_FAILURE); + } + ++ if (strlen(synce_clock_get_socket_path(clk)) >= sizeof(server.sun_path)) { ++ pr_err("%s smc_socket_path is too long", __func__); ++ exit(EXIT_FAILURE); ++ } + server.sun_family = AF_UNIX; + snprintf(server.sun_path, sizeof(server.sun_path), "%s", + synce_clock_get_socket_path(clk)); + +commit b5a9ad4f0aa1fb98e4ac060c91a08d82fe66e7d2 +Author: Miroslav Lichvar +Date: Wed Jun 5 13:07:04 2024 +0200 + + Unlink smc_socket_path before binding + + Remove the Unix domain socket if it already exists (e.g. previous + synce4l instance didn't exit cleanly) to avoid failing in the bind() + call. + + Signed-off-by: Miroslav Lichvar + +diff --git a/synce_manager.c b/synce_manager.c +index a42b823..6baf18c 100644 +--- a/synce_manager.c ++++ b/synce_manager.c +@@ -264,6 +264,8 @@ static void *synce_manager_server_thread(void *arg) + snprintf(server.sun_path, sizeof(server.sun_path), "%s", + synce_clock_get_socket_path(clk)); + ++ unlink(server.sun_path); ++ + if (bind(server_fd, (struct sockaddr *)&server, sizeof(server)) < 0) { + pr_err("%s Bind failed", __func__); + exit(EXIT_FAILURE); diff --git a/SOURCES/synce4l-stacksize.patch b/SOURCES/synce4l-stacksize.patch new file mode 100644 index 0000000..bdadc15 --- /dev/null +++ b/SOURCES/synce4l-stacksize.patch @@ -0,0 +1,26 @@ +commit f134a38219fc390405f488d5eaaa64e7957b29f3 +Author: Miroslav Lichvar +Date: Tue Aug 13 12:19:24 2024 +0200 + + Fix requested thread stack size + + The pthread_attr_setstacksize() call requesting size of 0xffff fails on + systems with 64k pages. Request the maximum of 0xffff and + PTHREAD_STACK_MIN instead. + + Signed-off-by: Miroslav Lichvar + +diff --git a/synce_thread_common.h b/synce_thread_common.h +index cf607ac..8db11d7 100644 +--- a/synce_thread_common.h ++++ b/synce_thread_common.h +@@ -13,7 +13,8 @@ + #define MSEC_TO_USEC(X) (X * 1000) + #define THREAD_STOP_SLEEP_USEC MSEC_TO_USEC(50) + #define THREAD_START_SLEEP_USEC MSEC_TO_USEC(20) +-#define SYNCE_THREAD_STACK_SIZE 0xffff ++#define SYNCE_THREAD_STACK_SIZE (0xffff > PTHREAD_STACK_MIN ? \ ++ 0xffff : PTHREAD_STACK_MIN) + #define TASK_COMM_LEN 16 + + #endif /* HAVE_SYNCE_THREAD_COMMON_H */ diff --git a/SOURCES/synce4l.service b/SOURCES/synce4l.service new file mode 100644 index 0000000..9093e9b --- /dev/null +++ b/SOURCES/synce4l.service @@ -0,0 +1,9 @@ +[Unit] +Description=Synchronous Ethernet (SyncE) service + +[Service] +Type=simple +ExecStart=/usr/sbin/synce4l -f /etc/synce4l.conf + +[Install] +WantedBy=multi-user.target diff --git a/SPECS/synce4l.spec b/SPECS/synce4l.spec new file mode 100644 index 0000000..57e48f0 --- /dev/null +++ b/SPECS/synce4l.spec @@ -0,0 +1,123 @@ +Name: synce4l +Version: 1.1.0 +Release: 4%{?dist} +Summary: SyncE implementation for Linux + +License: GPL-2.0-or-later +URL: https://github.com/intel/synce4l +Source0: https://github.com/intel/synce4l/archive/%{version}/synce4l-%{version}.tar.gz +Source1: synce4l.service + +# Fix compiler warnings to avoid build failures with -Werror +Patch1: synce4l-ccwarns.patch +# Change default smc socket path and remove existing socket on start +Patch2: synce4l-smc.patch +# Fix crash observed with newer E810 firmware +Patch3: synce4l-noduppin.patch +# Fix initial pin ID to not match an existing pin +Patch4: synce4l-initpinid.patch +# Fix requested thread stack size on aarch64 +Patch5: synce4l-stacksize.patch + +BuildRequires: gcc make systemd +BuildRequires: libnl3-devel + +%{?systemd_requires} + +%description +synce4l is a software implementation of Synchronous Ethernet (SyncE) according +to ITU-T Recommendation G.8264. The design goal is to provide logic to +supported hardware by processing Ethernet Synchronization Messaging Channel +(ESMC) and control Ethernet Equipment Clock (EEC) on Network Card Interface +(NIC). + +%prep +%autosetup -p1 + +sed \ + -e 's|^\(logging_level *\)[0-7]|\16|' \ + -e 's|^\(use_syslog *\)[01]|\11|' \ + -e 's|^\(verbose *\)[01]|\10|' \ + < configs/synce4l_dpll.cfg > synce4l.conf +touch -r configs/synce4l_dpll.cfg synce4l.conf + +%build +%{make_build} \ + EXTRA_CFLAGS="$RPM_OPT_FLAGS" \ + EXTRA_LDFLAGS="$RPM_LD_FLAGS" + +%install +# make_install doesn't work here +%makeinstall + +mkdir -p $RPM_BUILD_ROOT{%{_sysconfdir},%{_unitdir},%{_mandir}/man5} +install -m 644 -p %{SOURCE1} $RPM_BUILD_ROOT%{_unitdir} +install -m 644 -p synce4l.conf $RPM_BUILD_ROOT%{_sysconfdir} + +echo '.so man8/synce4l.8' > $RPM_BUILD_ROOT%{_mandir}/man5/synce4l.conf.5 + +%check +./synce4l -h 2>&1 | grep 'usage:.*synce4l' + +%post +%systemd_post synce4l.service + +%preun +%systemd_preun synce4l.service + +%postun +%systemd_postun_with_restart synce4l.service + +%files +%license COPYING +%doc README.md +%config(noreplace) %{_sysconfdir}/synce4l.conf +%{_unitdir}/synce4l.service +%{_sbindir}/synce4l +%{_mandir}/man5/*.5* +%{_mandir}/man8/*.8* + +%changelog +* Tue Aug 20 2024 Miroslav Lichvar 1.1.0-4 +- remove existing smc socket on start (RHEL-40673) +- fix crash observed with newer E810 firmware (RHEL-55261) +- fix initial pin ID to not match an existing pin (RHEL-55261) +- fix requested thread stack size on aarch64 (RHEL-55260) + +* Mon Jun 24 2024 Troy Dawson - 1.1.0-3 +- Bump release for June 2024 mass rebuild + +* Wed Jun 05 2024 Miroslav Lichvar 1.1.0-2 +- move smc_socket_path in default config to /run + +* Tue Jun 04 2024 Miroslav Lichvar 1.1.0-1 +- update to 1.1.0 (RHEL-39976, RHEL-39467, RHEL-39465, RHEL-39463, RHEL-39454) + +* Sat Jan 27 2024 Fedora Release Engineering - 1.0.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Nov 06 2023 Miroslav Lichvar 1.0.0-1 +- update to 1.0.0 +- switch default config to use kernel DPLL API + +* Sat Jul 22 2023 Fedora Release Engineering - 0.9.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Mon Jul 10 2023 Miroslav Lichvar 0.9.1-1 +- update to 0.9.1 + +* Mon Jun 19 2023 Miroslav Lichvar 0.9.0-1 +- update to 0.9.0 + +* Sat Jan 21 2023 Fedora Release Engineering - 0-4.20221114gitca51d5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Nov 16 2022 Miroslav Lichvar 0-3.20221114gitca51d5 +- update to 20221114gitca51d5 (#2141038) + +* Thu Nov 10 2022 Miroslav Lichvar 0-2.20221108git079577 +- fix compiler warning (#2141038) +- add simple test (#2141038) + +* Tue Nov 08 2022 Miroslav Lichvar 0-1.20221108git079577 +- make initial release