linuxptp
linuxptp copied to clipboard
User space PTP stack for the GNU/Linux operating system.
-
Introduction
This software is an implementation of the Precision Time Protocol (PTP) according to IEEE standard 1588 for Linux. The dual design goals are to provide a robust implementation of the standard and to use the most relevant and modern Application Programming Interfaces (API) offered by the Linux kernel. Supporting legacy APIs and other platforms is not a goal.
-
License
The software is copyrighted by the authors and is licensed under the GNU General Public License. See the file, COPYING, for details of the license terms.
-
Features
-
Supports hardware and software time stamping via the Linux SO_TIMESTAMPING socket option.
-
Supports the Linux PTP Hardware Clock (PHC) subsystem by using the clock_gettime family of calls, including the clock_adjtimex system call.
-
Implements Boundary Clock (BC), Ordinary Clock (OC) and Transparent Clock (TC).
-
Transport over UDP/IPv4, UDP/IPv6, and raw Ethernet (Layer 2).
-
Supports IEEE 802.1AS-2011 in the role of end station.
-
Modular design allowing painless addition of new transports and clock servos.
-
Implements unicast operation.
-
Supports a number of profiles, including:
-
The automotive profile
-
The default 1588 profile.
-
The enterprise profile.
-
The telecom profiles G.8265.1, G.8275.1, and G.8275.2.
-
-
Supports the NetSync Monitor protocol.
-
Implements Peer to peer one-step.
-
Supports bonded, IPoIB, and vlan interfaces.
-
Supports Authentication TLV using Nettle, GnuTLS, or OpenSSL
- NOTE: OpenSSLv3+ is distributed under Apache 2 license. When compiled with this library, LinuxPTP is distributed under GPL3. An additional flag is required for linking: ~make EXTRA_CFLAGS=-DUSE_OPENSSL~
-
-
Getting the Code
You can download the latest released version at Source Forge.
http://sourceforge.net/projects/linuxptp/files/latest/download
The source code is managed using the git version control system. To get your own copy of the project sources, use the following command.
#+BEGIN_EXAMPLE git clone git://git.code.sf.net/p/linuxptp/code linuxptp #+END_EXAMPLE
If the git protocol is blocked by your local area network, then you can use the alternative HTTP protocol instead.
#+BEGIN_EXAMPLE git clone http://git.code.sf.net/p/linuxptp/code linuxptp #+END_EXAMPLE
-
System Requirements
In order to run this software, you need Linux kernel version 3.0 or newer. Check whether your network interface supports PTP with the following command.
#+BEGIN_EXAMPLE ethtool -T eth0 #+END_EXAMPLE
This command shows whether a MAC supports hardware or software time stamping. The following example output indicates support for hardware time stamping.
#+BEGIN_EXAMPLE Time stamping parameters for eth6: Capabilities: hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE) software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE) hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE) software-receive (SOF_TIMESTAMPING_RX_SOFTWARE) software-system-clock (SOF_TIMESTAMPING_SOFTWARE) hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE) PTP Hardware Clock: 1 Hardware Transmit Timestamp Modes: off (HWTSTAMP_TX_OFF) on (HWTSTAMP_TX_ON) Hardware Receive Filter Modes: none (HWTSTAMP_FILTER_NONE) all (HWTSTAMP_FILTER_ALL) #+END_EXAMPLE
The next example shows the case where the MAC only supports software time stamping. The ~ptp4l~ program requires either the ~-S~ command line argument or the ~time_stamping software~ configuration option when using such interfaces.
#+BEGIN_EXAMPLE Time stamping parameters for enp6s0: Capabilities: software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE) software-receive (SOF_TIMESTAMPING_RX_SOFTWARE) software-system-clock (SOF_TIMESTAMPING_SOFTWARE) PTP Hardware Clock: none Hardware Transmit Timestamp Modes: none Hardware Receive Filter Modes: none #+END_EXAMPLE
Note the ~software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)~ capability. If this is lacking, then the MAC cannot be used at all. However, adding this capability entails adding a single line of code to the device driver.
-
Installation
-
Just type 'make'
-
If you compiled your own kernel (and the headers are not installed into the system path), then you should set the KBUILD_OUTPUT environment variable as in the example, above.
-
In order to install the programs and man pages into /usr/local, run the 'make install' target. You can change the installation directories by setttings the variables prefix, sbindir, mandir, and man8dir on the make command line.
-
-
Getting Involved
The software development is hosted at Source Forge.
https://sourceforge.net/projects/linuxptp/
** Reporting Bugs
Please report any bugs or other issues with the software to the linuxptp-users mailing list.
https://lists.nwtime.org/sympa/info/linuxptp-users
** Development
If you would like to get involved in improving the software, please join the linuxptp-devel mailing list.
https://lists.nwtime.org/sympa/info/linuxptp-devel
*** Submitting Patches
-
Before submitting patches, please make sure that you are starting your work on the current HEAD of the git repository.
-
Please checkout the ~CODING_STYLE.org~ file for guidelines on how to properly format your code.
-
Describe your changes. Each patch will be reviewed, and the reviewers need to understand why you did what you did.
-
Sign-Off each commit, so the changes can be properly attributed to you and you explicitely give your agreement for distribution under linuxptp's license. Signing-off is as simple as:
#+BEGIN_EXAMPLE git commit -s #+END_EXAMPLE
or by adding the following line (replace your real name and email) to your patch:
#+BEGIN_EXAMPLE Signed-off-by: Random J Developer [email protected] #+END_EXAMPLE
-
Finally, send your patches via email to the linuxptp-devel mailing list, where they will be reviewed, and eventually be included in the official code base.
#+BEGIN_EXAMPLE git send-email --to [email protected] origin/master #+END_EXAMPLE
-
Thanks
Thanks to AudioScience Inc for sponsoring the 8021.AS support.
- http://www.audioscience.com
Thanks to Exablaze for donating an ExaNIC X10
- http://exablaze.com/exanic-x10
Thanks to Intel Corporation for donating four NICs, the 82574, 82580, 82599, and the i210.
- http://www.intel.com
- http://e1000.sourceforge.net
Thanks to Meinberg Funkuhren for donating a LANTIME M1000.
- https://www.meinbergglobal.com
Thanks to Moser Baer for sponsoring the Telecom Profiles and unicast support.
- http://www.mobatime.com
For testing I use an OTMC 100 grandmaster clock donated by OMICRON Lab.
- http://www.omicron-lab.com/ptp