3个不稳定版本

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

#195 in 网络编程


用于 statime-linux

Apache-2.0 OR MIT

365KB
8K 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的nightly版本。最简单的方法是通过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通过SIDN Labs的TimeNL合作,以资助开发运行Statime和ntpd-rs的时钟设备。

2023年8月,主权技术基金对Pendulum(Statime和ntpd-rs)进行了投资。有关更多信息,请参阅他们的网站

Logo STF

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

依赖关系

~4MB
~83K SLoC