Signed-off-by: Richard Cochran <richardcoch...@gmail.com>
---
 clock.c  |  3 ++-
 clock.h  |  2 --
 config.c | 22 +++++++++-------------
 config.h |  6 ------
 ptp4l.c  | 29 +++++++++++++----------------
 5 files changed, 24 insertions(+), 38 deletions(-)

diff --git a/clock.c b/clock.c
index 91ed78d..112d0a2 100644
--- a/clock.c
+++ b/clock.c
@@ -800,9 +800,10 @@ static void clock_remove_port(struct clock *c, struct port 
*p)
 
 struct clock *clock_create(struct config *config, int phc_index,
                           struct interfaces_head *ifaces,
-                          enum timestamp_type timestamping,
                           struct default_ds *dds, enum servo_type servo)
 {
+       enum timestamp_type timestamping =
+               config_get_int(config, NULL, "time_stamping");
        int fadj = 0, max_adj = 0, sw_ts = timestamping == TS_SOFTWARE ? 1 : 0;
        struct clock *c = &the_clock;
        struct port *p;
diff --git a/clock.h b/clock.h
index d7377fe..ce83996 100644
--- a/clock.h
+++ b/clock.h
@@ -72,14 +72,12 @@ struct config *clock_config(struct clock *c);
  * @param phc_index    PTP hardware clock device to use.
  *                     Pass -1 to select CLOCK_REALTIME.
  * @param ifaces       A queue of network interfaces.
- * @param timestamping The timestamping mode for this clock.
  * @param dds          A pointer to a default data set for the clock.
  * @param servo        The servo that this clock will use.
  * @return             A pointer to the single global clock instance.
  */
 struct clock *clock_create(struct config *config, int phc_index,
                           struct interfaces_head *ifaces,
-                          enum timestamp_type timestamping,
                           struct default_ds *dds, enum servo_type servo);
 
 /**
diff --git a/config.c b/config.c
index 3b6fdc8..673f218 100644
--- a/config.c
+++ b/config.c
@@ -130,6 +130,13 @@ static struct config_enum nw_trans_enu[] = {
        { NULL, 0 },
 };
 
+static struct config_enum timestamping_enu[] = {
+       { "hardware", TS_HARDWARE  },
+       { "software", TS_SOFTWARE  },
+       { "legacy",   TS_LEGACY_HW },
+       { NULL, 0 },
+};
+
 static struct config_enum tsproc_enu[] = {
        { "filter",        TSPROC_FILTER        },
        { "raw",           TSPROC_RAW           },
@@ -188,6 +195,7 @@ struct config_item config_tab[] = {
        GLOB_ITEM_INT("summary_interval", 0, INT_MIN, INT_MAX),
        PORT_ITEM_INT("syncReceiptTimeout", 0, 0, UINT8_MAX),
        GLOB_ITEM_INT("timeSource", INTERNAL_OSCILLATOR, 0x10, 0xfe),
+       GLOB_ITEM_ENU("time_stamping", TS_HARDWARE, timestamping_enu),
        PORT_ITEM_INT("transportSpecific", 0, 0, 0x0F),
        PORT_ITEM_ENU("tsproc_mode", TSPROC_FILTER, tsproc_enu),
        GLOB_ITEM_INT("twoStepFlag", 1, 0, 1),
@@ -409,7 +417,7 @@ static enum parser_result parse_global_setting(const char 
*option,
                                               const char *value,
                                               struct config *cfg)
 {
-       int i, cfg_ignore = cfg->cfg_ignore;
+       int i;
        unsigned char mac[MAC_LEN];
        unsigned char oui[OUI_LEN];
        enum parser_result r;
@@ -437,18 +445,6 @@ static enum parser_result parse_global_setting(const char 
*option,
                        return OUT_OF_RANGE;
                strncpy(cfg->uds_address, value, MAX_IFNAME_SIZE);
 
-       } else if (!strcmp(option, "time_stamping")) {
-               if (!(cfg_ignore & CFG_IGNORE_TIMESTAMPING)) {
-                       if (0 == strcasecmp("hardware", value))
-                               cfg->timestamping = TS_HARDWARE;
-                       else if (0 == strcasecmp("software", value))
-                               cfg->timestamping = TS_SOFTWARE;
-                       else if (0 == strcasecmp("legacy", value))
-                               cfg->timestamping = TS_LEGACY_HW;
-                       else
-                               return BAD_VALUE;
-               }
-
        } else if (!strcmp(option, "clock_servo")) {
                if (!strcasecmp("pi", value))
                        cfg->clock_servo = CLOCK_SERVO_PI;
diff --git a/config.h b/config.h
index 46767d8..948f792 100644
--- a/config.h
+++ b/config.h
@@ -38,12 +38,7 @@ struct interface {
        struct sk_ts_info ts_info;
 };
 
-#define CFG_IGNORE_TIMESTAMPING (1 << 2)
-
 struct config {
-       /* configuration override */
-       int cfg_ignore;
-
        /* configured interfaces */
        STAILQ_HEAD(interfaces_head, interface) interfaces;
 
@@ -51,7 +46,6 @@ struct config {
        struct hash *htab;
 
        /* the rest are legacy fields */
-       enum timestamp_type timestamping;
        struct default_ds dds;
        enum servo_type clock_servo;
 
diff --git a/ptp4l.c b/ptp4l.c
index 3888e71..0acc63d 100644
--- a/ptp4l.c
+++ b/ptp4l.c
@@ -59,14 +59,11 @@ static struct config cfg_settings = {
                },
        },
 
-       .timestamping = TS_HARDWARE,
        .clock_servo = CLOCK_SERVO_PI,
 
        .ptp_dst_mac = ptp_dst_mac,
        .p2p_dst_mac = p2p_dst_mac,
        .uds_address = uds_path,
-
-       .cfg_ignore = 0,
 };
 
 static void usage(char *progname)
@@ -106,8 +103,6 @@ int main(int argc, char *argv[])
        char *config = NULL, *req_phc = NULL, *progname;
        int c;
        struct interface *iface;
-       int *cfg_ignore = &cfg_settings.cfg_ignore;
-       enum timestamp_type *timestamping = &cfg_settings.timestamping;
        struct clock *clock;
        struct config *cfg = &cfg_settings;
        struct defaultDS *ds = &cfg_settings.dds.dds;
@@ -153,16 +148,16 @@ int main(int argc, char *argv[])
                                return -1;
                        break;
                case 'H':
-                       *timestamping = TS_HARDWARE;
-                       *cfg_ignore |= CFG_IGNORE_TIMESTAMPING;
+                       if (config_set_int(cfg, "time_stamping", TS_HARDWARE))
+                               return -1;
                        break;
                case 'S':
-                       *timestamping = TS_SOFTWARE;
-                       *cfg_ignore |= CFG_IGNORE_TIMESTAMPING;
+                       if (config_set_int(cfg, "time_stamping", TS_SOFTWARE))
+                               return -1;
                        break;
                case 'L':
-                       *timestamping = TS_LEGACY_HW;
-                       *cfg_ignore |= CFG_IGNORE_TIMESTAMPING;
+                       if (config_set_int(cfg, "time_stamping", TS_LEGACY_HW))
+                               return -1;
                        break;
                case 'f':
                        config = optarg;
@@ -258,21 +253,22 @@ int main(int argc, char *argv[])
        }
 
        if (!(ds->flags & DDS_TWO_STEP_FLAG)) {
-               switch (*timestamping) {
+               switch (config_get_int(cfg, NULL, "time_stamping")) {
                case TS_SOFTWARE:
                case TS_LEGACY_HW:
                        fprintf(stderr, "one step is only possible "
                                "with hardware time stamping\n");
                        return -1;
                case TS_HARDWARE:
-                       *timestamping = TS_ONESTEP;
+                       if (config_set_int(cfg, "time_stamping", TS_ONESTEP))
+                               return -1;
                        break;
                case TS_ONESTEP:
                        break;
                }
        }
 
-       switch (*timestamping) {
+       switch (config_get_int(cfg, NULL, "time_stamping")) {
        case TS_SOFTWARE:
                required_modes |= SOF_TIMESTAMPING_TX_SOFTWARE |
                        SOF_TIMESTAMPING_RX_SOFTWARE |
@@ -308,7 +304,8 @@ int main(int argc, char *argv[])
        iface = STAILQ_FIRST(&cfg_settings.interfaces);
        if (config_get_int(cfg, NULL, "free_running")) {
                phc_index = -1;
-       } else if (*timestamping == TS_SOFTWARE || *timestamping == 
TS_LEGACY_HW) {
+       } else if (config_get_int(cfg, NULL, "time_stamping") == TS_SOFTWARE ||
+                  config_get_int(cfg, NULL, "time_stamping") == TS_LEGACY_HW) {
                phc_index = -1;
        } else if (req_phc) {
                if (1 != sscanf(req_phc, "/dev/ptp%d", &phc_index)) {
@@ -335,7 +332,7 @@ int main(int argc, char *argv[])
 
        clock = clock_create(&cfg_settings,
                             phc_index, &cfg_settings.interfaces,
-                            *timestamping, &cfg_settings.dds,
+                            &cfg_settings.dds,
                             cfg_settings.clock_servo);
        if (!clock) {
                fprintf(stderr, "failed to create a clock\n");
-- 
2.1.4


------------------------------------------------------------------------------
_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to