16 Commits

Author SHA1 Message Date
Sebastian Dröge
2ef261557d ptp: Correctly parse clock ID from the commandline parameters in the helper
Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2652

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4806>
2023-06-08 10:53:32 +00:00
Sebastian Dröge
98c5ceb73f ptp: On Windows handle socket polls that result in no error but also no FD_READ event
According to the documentation this should never happen but apparently
does under certain circumstances. As the sockets are set non-blocking,
trying to read from them regardless should not cause any problems.

In all cases that were observed so far, the socket in question actually
has a packet queued up for reading.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4748>
2023-05-31 13:11:39 +00:00
Sebastian Dröge
fa8fbab0f7 ptp: Parse PTP messages in the helper process and filter earlier
This drops invalid, unknown or uninteresting PTP messages in the helper
process already instead of forwarding them to the main process.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4665>
2023-05-24 14:16:23 +00:00
Sebastian Dröge
5a79d230ce ptp: Set UDP sockets as non-blocking
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4665>
2023-05-24 14:16:23 +00:00
Sebastian Dröge
b76f9c8392 ptp: Capture actual send/receive times in the helper process
While this doesn't yet use any OS provided times from the actual network
stack, this still gets rid of any IPC jitter between the helper process
and the main process as part of the PTP time calculations and should
improve accuracy.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4665>
2023-05-24 14:16:23 +00:00
Sebastian Dröge
d55492add4 ptp: Fix compilation with Rust 1.48
Use `ErrorKind::NotFound` instead of `ErrorKind::Unsupported` if the
`getrandom` syscall is not available. `Unsupported` was added in 1.53.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4647>
2023-05-19 12:47:28 +00:00
Sebastian Dröge
87ca02bee7 ptp: Add logging between the helper process and the main process via stderr
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4647>
2023-05-19 12:47:28 +00:00
Sebastian Dröge
b74669a38a ptp: Get rid of struct padding in the messages with the helper process
Also remove the now unnecessary private header file.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4647>
2023-05-19 12:47:28 +00:00
Sebastian Dröge
0219b6f6fa ptp-helper: Add some tests for functionality and memory safety of unsafe code
These tests are mostly for ensuring that the calls to system APIs are
done correctly and that there are no memory bugs (that would be caught
by valgrind) in the unsafe code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4458>
2023-05-12 17:06:01 +00:00
Sebastian Dröge
6378ebbdcd ptp-helper: Add a feature option for the PTP support
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4410>
2023-04-13 12:43:25 +00:00
Sebastian Dröge
2e84603b02 ptp-helper: Convert various meson message() to warning()
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4410>
2023-04-13 12:43:25 +00:00
Sebastian Dröge
7cba04f2c6 ptp-helper: Don't check for a Rust compiler on unsupported platforms
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4410>
2023-04-13 12:43:25 +00:00
Sebastian Dröge
b35d598003 ptp-helper: Check for the required Rust toolchain version via meson
If an older version is found that gives a more useful output than a
compiler error at a later time.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4410>
2023-04-13 12:43:25 +00:00
Sebastian Dröge
9d25a5075e ptp-helper: Set a process priority / nice value of -5 on UNIX platforms
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3889>
2023-04-07 15:49:02 +00:00
Sebastian Dröge
572d344482 ptp-helper: Set thread priority to time-critical on Windows
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3889>
2023-04-07 15:49:02 +00:00
Sebastian Dröge
3fdfcdf2f6 ptp-helper: Rewrite in Rust for portability and security
This works on Linux, Android, Windows, macOS, FreeBSD, NetBSD, OpenBSD,
DragonFlyBSD, Solaris and Illumos.
Newly supported compared to the C version is Windows.

Compared to the C version various error paths are handled more correctly
and a couple of memory leaks are fixed. Otherwise it should work identically.

The minimum required Rust version for compiling this is 1.48, i.e. the
version currently in Debian stable. On Windows, Rust 1.54 is needed at
least.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1259

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3889>
2023-04-07 15:49:02 +00:00