config: convert the fault interval options to the new scheme.
This conversion is not straightforward due to the fact that these options can take a value of "ASAP" or a number. We check for the special ASAP case in a helper function and leave the numbers to the generic code. Signed-off-by: Richard Cochran <richardcochran@gmail.com>master
parent
76f8d5eb48
commit
bbd8d62bec
62
config.c
62
config.c
|
@ -98,6 +98,8 @@ struct config_item config_tab[] = {
|
||||||
PORT_ITEM_INT("delayAsymmetry", 0, INT_MIN, INT_MAX),
|
PORT_ITEM_INT("delayAsymmetry", 0, INT_MIN, INT_MAX),
|
||||||
PORT_ITEM_INT("delay_filter_length", 10, 1, INT_MAX),
|
PORT_ITEM_INT("delay_filter_length", 10, 1, INT_MAX),
|
||||||
PORT_ITEM_INT("egressLatency", 0, INT_MIN, INT_MAX),
|
PORT_ITEM_INT("egressLatency", 0, INT_MIN, INT_MAX),
|
||||||
|
PORT_ITEM_INT("fault_badpeernet_interval", 16, INT32_MIN, INT32_MAX),
|
||||||
|
PORT_ITEM_INT("fault_reset_interval", 4, INT8_MIN, INT8_MAX),
|
||||||
GLOB_ITEM_DBL("first_step_threshold", 0.00002, 0.0, DBL_MAX),
|
GLOB_ITEM_DBL("first_step_threshold", 0.00002, 0.0, DBL_MAX),
|
||||||
PORT_ITEM_INT("follow_up_info", 0, 0, 1),
|
PORT_ITEM_INT("follow_up_info", 0, 0, 1),
|
||||||
GLOB_ITEM_INT("free_running", 0, 0, 1),
|
GLOB_ITEM_INT("free_running", 0, 0, 1),
|
||||||
|
@ -276,39 +278,35 @@ static enum parser_result parse_item(struct config *cfg,
|
||||||
return PARSED_OK;
|
return PARSED_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum parser_result parse_pod_setting(const char *option,
|
static enum parser_result parse_fault_interval(struct config *cfg,
|
||||||
const char *value,
|
const char *section,
|
||||||
struct port_defaults *pod)
|
const char *option,
|
||||||
|
const char *value)
|
||||||
{
|
{
|
||||||
int val;
|
int i, val;
|
||||||
enum parser_result r;
|
const char *str, *fault_options[2] = {
|
||||||
|
"fault_badpeernet_interval",
|
||||||
|
"fault_reset_interval",
|
||||||
|
};
|
||||||
|
int fault_values[2] = {
|
||||||
|
0, FRI_ASAP,
|
||||||
|
};
|
||||||
|
|
||||||
if (!strcmp(option, "fault_badpeernet_interval")) {
|
if (strcasecmp("ASAP", value)) {
|
||||||
pod->flt_interval_pertype[FT_BAD_PEER_NETWORK].type = FTMO_LINEAR_SECONDS;
|
|
||||||
if (!strcasecmp("ASAP", value)) {
|
|
||||||
pod->flt_interval_pertype[FT_BAD_PEER_NETWORK].val = 0;
|
|
||||||
} else {
|
|
||||||
r = get_ranged_int(value, &val, INT32_MIN, INT32_MAX);
|
|
||||||
if (r != PARSED_OK)
|
|
||||||
return r;
|
|
||||||
pod->flt_interval_pertype[FT_BAD_PEER_NETWORK].val = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (!strcmp(option, "fault_reset_interval")) {
|
|
||||||
pod->flt_interval_pertype[FT_UNSPECIFIED].type = FTMO_LOG2_SECONDS;
|
|
||||||
if (!strcasecmp("ASAP", value)) {
|
|
||||||
pod->flt_interval_pertype[FT_UNSPECIFIED].val = FRI_ASAP;
|
|
||||||
} else {
|
|
||||||
r = get_ranged_int(value, &val, INT8_MIN, INT8_MAX);
|
|
||||||
if (r != PARSED_OK)
|
|
||||||
return r;
|
|
||||||
pod->flt_interval_pertype[FT_UNSPECIFIED].val = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else
|
|
||||||
return NOT_PARSED;
|
return NOT_PARSED;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
str = fault_options[i];
|
||||||
|
val = fault_values[i];
|
||||||
|
if (!strcmp(option, str)) {
|
||||||
|
if (config_set_section_int(cfg, section, str, val)) {
|
||||||
|
pr_err("bug: failed to set option %s!", option);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
return PARSED_OK;
|
return PARSED_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NOT_PARSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static enum parser_result parse_port_setting(struct config *cfg,
|
static enum parser_result parse_port_setting(struct config *cfg,
|
||||||
|
@ -318,7 +316,7 @@ static enum parser_result parse_port_setting(struct config *cfg,
|
||||||
{
|
{
|
||||||
enum parser_result r;
|
enum parser_result r;
|
||||||
|
|
||||||
r = parse_pod_setting(option, value, &iface->pod);
|
r = parse_fault_interval(cfg, iface->name, option, value);
|
||||||
if (r != NOT_PARSED)
|
if (r != NOT_PARSED)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
@ -389,11 +387,9 @@ static enum parser_result parse_global_setting(const char *option,
|
||||||
unsigned char oui[OUI_LEN];
|
unsigned char oui[OUI_LEN];
|
||||||
|
|
||||||
struct defaultDS *dds = &cfg->dds.dds;
|
struct defaultDS *dds = &cfg->dds.dds;
|
||||||
struct port_defaults *pod = &cfg->pod;
|
|
||||||
|
|
||||||
enum parser_result r;
|
enum parser_result r;
|
||||||
|
|
||||||
r = parse_pod_setting(option, value, pod);
|
r = parse_fault_interval(cfg, NULL, option, value);
|
||||||
if (r != NOT_PARSED)
|
if (r != NOT_PARSED)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
1
ds.h
1
ds.h
|
@ -116,7 +116,6 @@ struct portDS {
|
||||||
#define FRI_ASAP (-128)
|
#define FRI_ASAP (-128)
|
||||||
|
|
||||||
struct port_defaults {
|
struct port_defaults {
|
||||||
struct fault_interval flt_interval_pertype[FT_CNT];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
18
port.c
18
port.c
|
@ -116,6 +116,7 @@ struct port {
|
||||||
int path_trace_enabled;
|
int path_trace_enabled;
|
||||||
int rx_timestamp_offset;
|
int rx_timestamp_offset;
|
||||||
int tx_timestamp_offset;
|
int tx_timestamp_offset;
|
||||||
|
struct fault_interval flt_interval_pertype[FT_CNT];
|
||||||
enum fault_type last_fault_type;
|
enum fault_type last_fault_type;
|
||||||
unsigned int versionNumber; /*UInteger4*/
|
unsigned int versionNumber; /*UInteger4*/
|
||||||
/* foreignMasterDS */
|
/* foreignMasterDS */
|
||||||
|
@ -202,8 +203,8 @@ int fault_interval(struct port *port, enum fault_type ft,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (ft < 0 || ft >= FT_CNT)
|
if (ft < 0 || ft >= FT_CNT)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
i->type = port->pod.flt_interval_pertype[ft].type;
|
i->type = port->flt_interval_pertype[ft].type;
|
||||||
i->val = port->pod.flt_interval_pertype[ft].val;
|
i->val = port->flt_interval_pertype[ft].val;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2506,6 +2507,7 @@ struct port *port_open(int phc_index,
|
||||||
{
|
{
|
||||||
struct config *cfg = clock_config(clock);
|
struct config *cfg = clock_config(clock);
|
||||||
struct port *p = malloc(sizeof(*p));
|
struct port *p = malloc(sizeof(*p));
|
||||||
|
int i;
|
||||||
|
|
||||||
if (!p)
|
if (!p)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -2551,6 +2553,18 @@ struct port *port_open(int phc_index,
|
||||||
p->delayMechanism = interface->dm;
|
p->delayMechanism = interface->dm;
|
||||||
p->versionNumber = PTP_VERSION;
|
p->versionNumber = PTP_VERSION;
|
||||||
|
|
||||||
|
/* Set fault timeouts to a default value */
|
||||||
|
for (i = 0; i < FT_CNT; i++) {
|
||||||
|
p->flt_interval_pertype[i].type = FTMO_LOG2_SECONDS;
|
||||||
|
p->flt_interval_pertype[i].val = 4;
|
||||||
|
}
|
||||||
|
p->flt_interval_pertype[FT_BAD_PEER_NETWORK].type = FTMO_LINEAR_SECONDS;
|
||||||
|
p->flt_interval_pertype[FT_BAD_PEER_NETWORK].val =
|
||||||
|
config_get_int(cfg, p->name, "fault_badpeernet_interval");
|
||||||
|
|
||||||
|
p->flt_interval_pertype[FT_UNSPECIFIED].val =
|
||||||
|
config_get_int(cfg, p->name, "fault_reset_interval");
|
||||||
|
|
||||||
p->tsproc = tsproc_create(interface->tsproc_mode,
|
p->tsproc = tsproc_create(interface->tsproc_mode,
|
||||||
interface->delay_filter,
|
interface->delay_filter,
|
||||||
config_get_int(cfg, p->name, "delay_filter_length"));
|
config_get_int(cfg, p->name, "delay_filter_length"));
|
||||||
|
|
8
ptp4l.c
8
ptp4l.c
|
@ -118,7 +118,7 @@ static void usage(char *progname)
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char *config = NULL, *req_phc = NULL, *progname;
|
char *config = NULL, *req_phc = NULL, *progname;
|
||||||
int c, i;
|
int c;
|
||||||
struct interface *iface;
|
struct interface *iface;
|
||||||
int *cfg_ignore = &cfg_settings.cfg_ignore;
|
int *cfg_ignore = &cfg_settings.cfg_ignore;
|
||||||
enum delay_mechanism *dm = &cfg_settings.dm;
|
enum delay_mechanism *dm = &cfg_settings.dm;
|
||||||
|
@ -136,12 +136,6 @@ int main(int argc, char *argv[])
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set fault timeouts to a default value */
|
|
||||||
for (i = 0; i < FT_CNT; i++) {
|
|
||||||
cfg_settings.pod.flt_interval_pertype[i].type = FTMO_LOG2_SECONDS;
|
|
||||||
cfg_settings.pod.flt_interval_pertype[i].val = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Process the command line arguments. */
|
/* Process the command line arguments. */
|
||||||
progname = strrchr(argv[0], '/');
|
progname = strrchr(argv[0], '/');
|
||||||
progname = progname ? 1+progname : argv[0];
|
progname = progname ? 1+progname : argv[0];
|
||||||
|
|
Loading…
Reference in New Issue