Upcoming functionality will need to configure the input and output pins of
PHC devices. However, this requires fairly recent kernel support. This
patch adds the needed definitions for compiling with older kernel headers.
In addition, kernel v5.4 introduced a second set of ioctls for the
ancillary PTP Hardware Clock functionality. The original ioctls
failed to enforce the various flags and reversed fields, but the
second version has fixed the issues. Going forward, our user space
PTP stack ought to use the newer ioctls (if available) from day one.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
The one user of the function, posix_clock_open(), simply open codes
the closing call to phc_close(). This patch provides a method to
balance closing and opening of a posix clock. In addition, the
phc_ctl program never explicitly closed the opened clock, and so this
patch adds the missing call.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Unfortunately the SNMP code still has issues like not passing the
valgrind test, and no one is able to finish this up right now. This
patch removes the SNMP program so that the upcoming release does not
contain unfinished work, potentially misleading end users about the
scope and completeness of the features.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
When updating and potentially removing event subscribers, the code uses
the simple list traversal macro. As a result, the list will become
corrupted whenever a subscriber is removed. This patch fixes the issue
by using the appropriate macro.
Fixes: 5104e3e56b ("Event subscribing")
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reported-by: Michael Walle <michael@walle.cc>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
This novel use of the STA_UNSYNC flag breaks with the established,
traditional meaning of that flag, which is:
The clock has is believed to have an error larger than 16 seconds.
This reverts commit 944f5f7ac6.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
In case there is no connection to the server, notify the kernel
that the clock is currently unsynchronized.
Signed-off-by: Ville Heikkinen <ville.heikkinen@nokia.com>
Now that all call sites have been converted to interface_create(), there
is no longer any needed for a way to set the interface's name. This patch
removes the useless method.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
When compiling with gcc8 and -O2, the clever compiler complains:
interface.c: In function ‘interface_ensure_tslabel’:
interface.c:38:3: error: ‘strncpy’ output may be truncated copying 108 bytes from a string of length 108 [-Werror=stringop-truncation]
Even though this is a false positive, this patch silences the warning
by using memcpy instead of strncpy.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Now that a complete functional API is in place, there is no need to expose
the inner workings of the network interface data type. This patch converts
it into an opaque type while leaving the list marker visible to users
through a simple form of "friendly exposition".
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
In order to eventually hide the implementation details of the interface,
users will need to be able to create and destroy instances thereof. This
patch adds the needed methods.
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
The ts_label field of the interface is set in different ways by different
callers. In order to prevent users from open coding the logic that sets
the label, this patch adds an appropriate method.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
The name field of the interface is set in different ways by different
callers. In order to prevent users from open coding the logic that sets
the name, this patch adds an appropriate method.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
In many cases, the time stamping label will be the same as the name of
the interface. In order to prevent users from open coding the logic that
initializes the label from the interface name, this patch add an
appropriate method.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
In order to prevent users from open coding this logic, this patch
provides a method that populates the time stamping information from
the interface label.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Many of the users only require a read only reference to the time
stamping label of the interface. This patch adds an appropriate
method.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Many of the users only require a read only reference to the interface name.
This patch adds an appropriate method.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Up until now, the users of the interface data structure simply access
its fields without restriction. This patch takes the first step
towards abstracting this data structure by giving it a file of its
very own.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
The function to open a posix clock never modifies the passed in
string. This patch adds the const keyword to ensure this function
stays that way.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Three of the rtnl methods never modify the strings passed in. This
patch adds the const keyword to ensure these functions stay that way.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
The two methods, config_create_interface and config_read, never modify the
strings passed in. This patch adds the const keyword to ensure these
functions stay that way.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Any program that links to the servo interface must also link with the
implementations of that interface. Similarly, the filter and network
transport interfaces each require their implementations. This patch
re-factors the makefile to reflect this fact in order to simplify
adding new programs making use of these interfaces.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
This fixes an issue with free running clocks. When the master clock id
changes the measured master/local ratio should be reset. If it isn't,
and the local clock becomes master, then the last measured ratio to
the old master continues to be used in peer delay calculations. If a
bad master/local ration calculation triggers this state change the
port can get "stuck" in not "asCapable" mode.
Signed-off-by: Erik Hons <erik.hons@ni.com>
Don't require each port to have its own master table specified in the
config. Instead of ports claming configured tables, clone the table in
each port, so different ports don't interfere with each other.
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
A single, external PTP Hardware Clock device may be wired to one or more
MAC devices, providing the MACs with an input clock. This patch adds
support for such a hardware architecture by letting the command line PHC
override the one discovered via the ethtool ioctl.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
The sysoff_measure() function gained an additional parameter some time
ago, but the legacy method for older kernels without PTP_SYS_OFFSET was
overlooked. This patch brings the legacy method up to date again.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
In port_synchronize(), when the clock returned SERVO_UNLOCKED and
port_dispatch() triggered a switch of the PHC, the variable "s" would
point to a servo which was already freed and the following call of
servo_offset_threshold() would read invalid memory.
Don't save the servo before dispatching the port.
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
Fixes: 3f5f5653d7 ("port: Add interval update mechanism.")
TLV_PORT_PROPERTIES_NP messages serve for querying of port properties, such
as timestamp type and, prominently, netdevice name associated with the
port. pmc however does not support this query, which makes it difficult to
access this information e.g. from scripts. Add this support to pmc.
Signed-off-by: Mykola Zhuravel <mykola@mellanox.com>
Signed-off-by: Petr Machata <petrm@mellanox.com>
TLV_PORT_PROPERTIES_NP carries, among other attributes, a timestamp type
used for that port. In order to make it possible to format the value for
user consumption, introduce a new function ts_str().
Signed-off-by: Petr Machata <petrm@mellanox.com>
In commit 2b5bec8d27 ("pmc: Add a new TLV to obtain per-port
statistics"), pmc gained a new TLV to obtain port stats from ptp4l. Mention
the TLV in the pmc man page.
Signed-off-by: Petr Machata <petrm@mellanox.com>
mc6_addr holds the parsed multicast address to which messages should be sent.
But since each port can have a different scope, and the primary MC address
depends on the scope, it really can't be stored in a global variable. Move both
to struct udp6.
Additionally, document the fact that the primary multicast address is changed at
runtime.
Reported-by: Alex Veber <alexve@mellanox.com>
Signed-off-by: Petr Machata <petrm@mellanox.com>
Add struct PortStats to keep per-port number of messages sent and received,
split by message type. Bump TX counters after messages are sent
successfully, and RX counters after a message is received. To keep things
simple, reserve one counter for each theoretically possible message type,
including the reserved ones.
Signed-off-by: Petr Machata <petrm@mellanox.com>
The two programs, phc2sys and phc_ctl, use nearly identical subroutines to
open an instance of a dynamic posix clock. In anticipation of yet a third
program with similar needs, this patch refactors the common code into the
utilities.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>