3 个不稳定版本

0.2.1 2024 年 6 月 7 日
0.2.0 2024 年 3 月 7 日
0.1.0 2023 年 11 月 24 日

#1532 in 网络编程

Apache-2.0 OR MIT

460KB
10K SLoC

Statime

codecov book book

Statime 是一个库,提供 PTP 2.1 版本 (IEEE1588-2019) 的实现。它提供了设置 PTP 普通时钟和边界时钟所需的所有构建块。

它设计成可以与许多不同的底层平台一起工作,包括嵌入式目标。这意味着它不能使用标准库和特定于平台的库与系统时钟和网络交互。这需要由库的用户提供。

在现代 Linux 内核上,statime-linux crate 提供了这些接口的即用型实现。对于其他平台,用户需要自己实现这些。

statime-stm32 crate 提供了如何在嵌入式目标上使用 statime 的示例。

Statime - PTP in Rust

statime-linux crate 提供了一个实现普通时钟或边界时钟的 Linux 二进制文件。它需要足够的权限来更改系统时钟。最简单的方法是通过 sudo 启动它

sudo ./target/debug/statime -c path/to/statime.toml

结构

statime 库被构建成尽可能无平台限制。为此,网络和时钟已被抽象化。statime-linux 库为基于 Linux 的平台提供这些抽象的实现。对于其他平台,这需要由用户提供。有关更多详细信息,请参阅 文档

Rust 版本

Statime 需要 cargo/rust 的夜间版本。最简单的方法是通过 rustup 获取这些版本

以提升权限运行

由于PTP协议使用了端口319和320,这里的代码需要以root权限运行。最好以非root用户构建代码,然后以root权限运行。

cargo +nightly build

然后,以root权限运行

sudo ./target/debug/statime -i <ETHERNET INTERFACE NAME>

为PTPd测试设置

PTPd可以用作测试的PTP主时钟。由于PTP标准要求的端口使用,这个主时钟必须在与运行此仓库中代码的机器不同的机器上。在Ubuntu上,可以使用以下命令安装:

apt install ptpd

你可能不想将其作为服务持续运行,因此可以使用以下命令禁用它

service ptpd disable

然后,要启动ptpd,作为root运行

ptpd -V -n -M -i <INTERFACE>

其中<INTERFACE>是要ptpd使用的网络接口。在这里-n禁用了ptpd的时钟调整,而-M确保它仅以主模式运行。

路线图

  • 2024年第二季度:电力领域配置文件 + 实验性NTS4PTP
  • 2024年第三季度:稳定发布Statime(待资助)
  • 2024年第一季度至第四季度:采用工作 & 维护工作

支持我们的工作

Statime的开发得到了NLnet Foundation的NGI Assure Fund的慷慨资助。

Logo NLnet Logo NGI Assure

SIDN Fonds通过一项资助支持我们开发运行Statime和ntpd-rs的时钟设备,并与SIDN Labs的TimeNL合作。

2023年8月,Sovereign Tech Fund对Pendulum(Statime和ntpd-rs)进行了投资。更多信息请访问他们的网站

Logo STF

我们持续寻求感兴趣方面的参与和未来工作的资助。请参阅Project Pendulum或联系[email protected]

依赖项

~9–19MB
~244K SLoC