On Tue, Feb 13, 2018 at 06:04:55PM +0100, Petr Kulhavy wrote:
> Let me develop this idea further. What about splitting the transportSpecific
> into the two nibbles, where lower nibble is as now and the upper nibble is a
> mask telling which bits to ignore on RX.

I think it would less confusing to simply have a new configuration
item.  It could be:

   transport_specific_ignore [0|1]

   When set, the transportSpecific field of incoming messages is

   (untested patch, below)

In my view, this would be enough.  I doubt we will get to the point of
needing individual bits ignored.

> One more thing to mention here. The different tools are still not aligned on
> the configuration. So while ptp4l takes the transportSpecific value from the
> config file, pmc from the command line, phc2sys doesn't have this option.
> Would this approach still work also with phc2sys?

The phc2sys program has enough command line options as is.  It would
be useful to add one last option, phc2sys -f [file].
> And does it make sense to require full match of transportSpecific on UDS?

It isn't needed, of course, but for the sake of consistency it makes
sense.  You can send management messages locally via UDS, and
depending on the value of 'boundary_hops' these are forwarded out the
network interfaces.  So we really want to treat UDS in the same way.


diff --git a/config.c b/config.c
index bbaf36e..4c30214 100644
--- a/config.c
+++ b/config.c
@@ -192,6 +192,7 @@ struct config_item config_tab[] = {
        PORT_ITEM_INT("freq_est_interval", 1, 0, INT_MAX),
        GLOB_ITEM_INT("gmCapable", 1, 0, 1),
        PORT_ITEM_INT("hybrid_e2e", 0, 0, 1),
+       PORT_ITEM_INT("ignore_transport_specific", 0, 0, 1),
        PORT_ITEM_INT("ingressLatency", 0, INT_MIN, INT_MAX),
        GLOB_ITEM_INT("kernel_leap", 1, 0, 1),
        PORT_ITEM_INT("logAnnounceInterval", 1, INT8_MIN, INT8_MAX),
diff --git a/port.c b/port.c
index d8e29d5..9bf2c39 100644
--- a/port.c
+++ b/port.c
@@ -125,6 +125,7 @@ struct port {
        int                 follow_up_info;
        int                 freq_est_interval;
        int                 hybrid_e2e;
+       int                 match_transport_specific;
        int                 min_neighbor_prop_delay;
        int                 path_trace_enabled;
        int                 rx_timestamp_offset;
@@ -641,7 +642,8 @@ static int port_ignore(struct port *p, struct ptp_message 
        if (path_trace_ignore(p, m)) {
                return 1;
-       if (msg_transport_specific(m) != p->transportSpecific) {
+       if (p->match_transport_specific &&
+           msg_transport_specific(m) != p->transportSpecific) {
                return 1;
        if (pid_eq(&m->header.sourcePortIdentity, &p->portIdentity)) {
@@ -1489,6 +1491,7 @@ static int port_initialize(struct port *p)
        p->syncReceiptTimeout      = config_get_int(cfg, p->name, 
        p->transportSpecific       = config_get_int(cfg, p->name, 
        p->transportSpecific     <<= 4;
+       p->match_transport_specific = !config_get_int(cfg, p->name, 
        p->logSyncInterval         = config_get_int(cfg, p->name, 
        p->logMinPdelayReqInterval = config_get_int(cfg, p->name, 
        p->neighborPropDelayThresh = config_get_int(cfg, p->name, 

Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Linuxptp-devel mailing list

Reply via email to