By default, do not synchronize CLOCK_REALTIME. To do it, -r option is
needed. That will only consider CLOCK_REALTIME as the destination. To
consider it also as a possible time source, use -rr.

Signed-off-by: Jiri Benc <jb...@redhat.com>
---
 phc2sys.c |   31 ++++++++++++++++++++++++-------
 1 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/phc2sys.c b/phc2sys.c
index 51213a0ae976..8890e5e1abad 100644
--- a/phc2sys.c
+++ b/phc2sys.c
@@ -72,6 +72,7 @@ struct clock {
        clockid_t clkid;
        int sysoff_supported;
        int is_utc;
+       int dest_only;
        int state;
        int new_state;
        struct servo *servo;
@@ -328,10 +329,16 @@ static void reconfigure(struct node *node)
                node->master = NULL;
                return;
        }
+       if ((!src_cnt && (!rt || rt->dest_only)) ||
+           (!dst_cnt && !rt)) {
+               pr_info("nothing to synchronize");
+               node->master = NULL;
+               return;
+       }
        if (!src_cnt) {
                src = rt;
                rt->state = PS_SLAVE;
-       } else {
+       } else if (rt) {
                if (rt->state != PS_MASTER) {
                        rt->state = PS_MASTER;
                        clock_reinit(rt);
@@ -926,7 +933,7 @@ static void close_pmc(struct node *node)
        node->pmc = NULL;
 }
 
-static int auto_init_ports(struct node *node)
+static int auto_init_ports(struct node *node, int add_rt)
 {
        struct port *port;
        struct clock *clock;
@@ -981,8 +988,13 @@ static int auto_init_ports(struct node *node)
        }
        node->state_changed = 1;
 
-       if (!clock_add(node, "CLOCK_REALTIME"))
-               return -1;
+       if (add_rt) {
+               clock = clock_add(node, "CLOCK_REALTIME");
+               if (!clock)
+                       return -1;
+               if (add_rt == 1)
+                       clock->dest_only = 1;
+       }
 
        /* get initial offset */
        if (run_pmc_get_utc_offset(node, 1000) <= 0) {
@@ -1077,6 +1089,8 @@ static void usage(char *progname)
                "\n"
                " automatic configuration:\n"
                " -a             turn on autoconfiguration\n"
+               " -r             synchronize system (realtime) clock\n"
+               "                repeat -r to consider it also as a time 
source\n"
                " manual configuration:\n"
                " -c [dev|name]  slave clock (CLOCK_REALTIME)\n"
                " -d [dev]       master PPS device\n"
@@ -1109,7 +1123,7 @@ int main(int argc, char *argv[])
        char *progname;
        char *src_name = NULL, *dst_name = NULL;
        struct clock *src, *dst;
-       int autocfg = 0;
+       int autocfg = 0, rt = 0;
        int c, domain_number = 0, pps_fd = -1;
        int r, wait_sync = 0;
        int print_level = LOG_INFO, use_syslog = 1, verbose = 0;
@@ -1129,11 +1143,14 @@ int main(int argc, char *argv[])
        progname = strrchr(argv[0], '/');
        progname = progname ? 1+progname : argv[0];
        while (EOF != (c = getopt(argc, argv,
-                                 "ac:d:s:E:P:I:S:F:R:N:O:L:i:u:wn:xl:mqvh"))) {
+                                 "arc:d:s:E:P:I:S:F:R:N:O:L:i:u:wn:xl:mqvh"))) 
{
                switch (c) {
                case 'a':
                        autocfg = 1;
                        break;
+               case 'r':
+                       rt++;
+                       break;
                case 'c':
                        dst_name = strdup(optarg);
                        break;
@@ -1263,7 +1280,7 @@ int main(int argc, char *argv[])
        if (autocfg) {
                if (init_pmc(&node, domain_number))
                        return -1;
-               if (auto_init_ports(&node) < 0)
+               if (auto_init_ports(&node, rt) < 0)
                        return -1;
                return do_loop(&node, 1);
        }
-- 
1.7.6.5


------------------------------------------------------------------------------
HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
Find What Matters Most in Your Big Data with HPCC Systems
Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
Leverages Graph Analysis for Fast Processing & Easy Data Exploration
http://p.sf.net/sfu/hpccsystems
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to