diff --git a/clock.c b/clock.c index 9f4207d..7d13b3b 100644 --- a/clock.c +++ b/clock.c @@ -849,7 +849,7 @@ int clock_required_modes(struct clock *c) static void ensure_ts_label(struct interface *iface) { if (iface->ts_label[0] == '\0') - strncpy(iface->ts_label, iface->name, MAX_IFNAME_SIZE); + strncpy(iface->ts_label, interface_name(iface), MAX_IFNAME_SIZE); } struct clock *clock_create(enum clock_type type, struct config *config, @@ -960,13 +960,13 @@ struct clock *clock_create(enum clock_type type, struct config *config, c->timestamping = timestamping; required_modes = clock_required_modes(c); STAILQ_FOREACH(iface, &config->interfaces, list) { - rtnl_get_ts_device(iface->name, iface->ts_label); + rtnl_get_ts_device(interface_name(iface), iface->ts_label); ensure_ts_label(iface); sk_get_ts_info(iface->ts_label, &iface->ts_info); if (iface->ts_info.valid && ((iface->ts_info.so_timestamping & required_modes) != required_modes)) { - pr_err("interface '%s' does not support " - "requested timestamping mode", iface->name); + pr_err("interface '%s' does not support requested timestamping mode", + interface_name(iface)); return NULL; } } @@ -996,7 +996,7 @@ struct clock *clock_create(enum clock_type type, struct config *config, if (strcmp(config_get_string(config, NULL, "clockIdentity"), "000000.0000.000000") == 0) { if (generate_clock_identity(&c->dds.clockIdentity, - iface->name)) { + interface_name(iface))) { pr_err("failed to generate a clock identity"); return NULL; } @@ -1011,19 +1011,20 @@ struct clock *clock_create(enum clock_type type, struct config *config, /* Configure the UDS. */ snprintf(udsif->name, sizeof(udsif->name), "%s", config_get_string(config, NULL, "uds_address")); - if (config_set_section_int(config, udsif->name, + if (config_set_section_int(config, interface_name(udsif), "announceReceiptTimeout", 0)) { return NULL; } - if (config_set_section_int(config, udsif->name, + if (config_set_section_int(config, interface_name(udsif), "delay_mechanism", DM_AUTO)) { return NULL; } - if (config_set_section_int(config, udsif->name, + if (config_set_section_int(config, interface_name(udsif), "network_transport", TRANS_UDS)) { return NULL; } - if (config_set_section_int(config, udsif->name, "delay_filter_length", 1)) { + if (config_set_section_int(config, interface_name(udsif), + "delay_filter_length", 1)) { return NULL; } @@ -1147,7 +1148,7 @@ struct clock *clock_create(enum clock_type type, struct config *config, /* Create the ports. */ STAILQ_FOREACH(iface, &config->interfaces, list) { if (clock_add_port(c, phc_device, phc_index, timestamping, iface)) { - pr_err("failed to open port %s", iface->name); + pr_err("failed to open port %s", interface_name(iface)); return NULL; } } diff --git a/config.c b/config.c index 65afa70..c30f6bc 100644 --- a/config.c +++ b/config.c @@ -775,15 +775,15 @@ int config_read(const char *name, struct config *cfg) if (parse_setting_line(line, &option, &value)) { fprintf(stderr, "could not parse line %d in %s section\n", line_num, current_section == GLOBAL_SECTION ? - "global" : current_port->name); + "global" : interface_name(current_port)); goto parse_error; } check_deprecated_options(&option); parser_res = parse_item(cfg, 0, current_section == GLOBAL_SECTION ? - NULL : current_port->name, option, value); - + NULL : interface_name(current_port), + option, value); switch (parser_res) { case PARSED_OK: break; @@ -791,7 +791,7 @@ int config_read(const char *name, struct config *cfg) fprintf(stderr, "unknown option %s at line %d in %s section\n", option, line_num, current_section == GLOBAL_SECTION ? "global" : - current_port->name); + interface_name(current_port)); goto parse_error; case BAD_VALUE: fprintf(stderr, "%s is a bad value for option %s at line %d\n", @@ -820,10 +820,12 @@ parse_error: struct interface *config_create_interface(const char *name, struct config *cfg) { struct interface *iface; + const char *ifname; /* only create each interface once (by name) */ STAILQ_FOREACH(iface, &cfg->interfaces, list) { - if (0 == strncmp(name, iface->name, MAX_IFNAME_SIZE)) + ifname = interface_name(iface); + if (0 == strncmp(name, ifname, MAX_IFNAME_SIZE)) return iface; } diff --git a/makefile b/makefile index e1e0e99..e1dd3fa 100644 --- a/makefile +++ b/makefile @@ -57,13 +57,13 @@ all: $(PRG) ptp4l: $(OBJ) -nsm: config.o $(FILTERS) hash.o msg.o nsm.o phc.o print.o \ +nsm: config.o $(FILTERS) hash.o interface.o msg.o nsm.o phc.o print.o \ rtnl.o sk.o $(TRANSP) tlv.o tsproc.o util.o version.o -pmc: config.o hash.o msg.o phc.o pmc.o pmc_common.o print.o sk.o tlv.o \ - $(TRANSP) util.o version.o +pmc: config.o hash.o interface.o msg.o phc.o pmc.o pmc_common.o print.o sk.o \ + tlv.o $(TRANSP) util.o version.o -phc2sys: clockadj.o clockcheck.o config.o hash.o msg.o \ +phc2sys: clockadj.o clockcheck.o config.o hash.o interface.o msg.o \ phc.o phc2sys.o pmc_common.o print.o $(SERVOS) sk.o stats.o \ sysoff.o tlv.o $(TRANSP) util.o version.o @@ -71,7 +71,7 @@ hwstamp_ctl: hwstamp_ctl.o version.o phc_ctl: phc_ctl.o phc.o sk.o util.o clockadj.o sysoff.o print.o version.o -snmp4lptp: config.o hash.o msg.o phc.o pmc_common.o print.o sk.o \ +snmp4lptp: config.o hash.o interface.o msg.o phc.o pmc_common.o print.o sk.o \ snmp4lptp.o tlv.o $(TRANSP) util.o $(CC) $^ $(LDFLAGS) $(LOADLIBES) $(LDLIBS) $(snmplib) -o $@ diff --git a/nsm.c b/nsm.c index 43daf59..269c3c8 100644 --- a/nsm.c +++ b/nsm.c @@ -262,14 +262,15 @@ static void nsm_help(FILE *fp) static int nsm_open(struct nsm *nsm, struct config *cfg) { enum transport_type transport; + const char *ifname, *name; struct interface *iface; - const char *name; int count = 0; STAILQ_FOREACH(iface, &cfg->interfaces, list) { - rtnl_get_ts_device(iface->name, iface->ts_label); + ifname = interface_name(iface); + rtnl_get_ts_device(ifname, iface->ts_label); if (iface->ts_label[0] == '\0') { - strncpy(iface->ts_label, iface->name, MAX_IFNAME_SIZE); + strncpy(iface->ts_label, ifname, MAX_IFNAME_SIZE); } count++; } @@ -278,7 +279,7 @@ static int nsm_open(struct nsm *nsm, struct config *cfg) return -1; } iface = STAILQ_FIRST(&cfg->interfaces); - nsm->name = name = iface->name; + nsm->name = name = interface_name(iface); nsm->cfg = cfg; transport = config_get_int(cfg, name, "network_transport"); diff --git a/pmc_common.c b/pmc_common.c index 46aac30..d5c8b61 100644 --- a/pmc_common.c +++ b/pmc_common.c @@ -352,7 +352,7 @@ struct pmc *pmc_create(struct config *cfg, enum transport_type transport_type, strncpy(iface.name, iface_name, MAX_IFNAME_SIZE); if (iface.ts_label[0] == '\0') { - strncpy(iface.ts_label, iface.name, MAX_IFNAME_SIZE); + strncpy(iface.ts_label, interface_name(&iface), MAX_IFNAME_SIZE); } if (transport_open(pmc->transport, &iface, diff --git a/port.c b/port.c index 27d9885..6423568 100644 --- a/port.c +++ b/port.c @@ -1717,10 +1717,13 @@ int port_initialize(struct port *p) if (p->bmca == BMCA_NOOP) { port_set_delay_tmo(p); } - if (p->fda.fd[FD_RTNL] == -1) + if (p->fda.fd[FD_RTNL] == -1) { p->fda.fd[FD_RTNL] = rtnl_open(); - if (p->fda.fd[FD_RTNL] >= 0) - rtnl_link_query(p->fda.fd[FD_RTNL], p->iface->name); + } + if (p->fda.fd[FD_RTNL] >= 0) { + const char *ifname = interface_name(p->iface); + rtnl_link_query(p->fda.fd[FD_RTNL], ifname); + } } port_nrate_initialize(p); @@ -2974,10 +2977,10 @@ struct port *port_open(const char *phc_device, } p->phc_index = phc_index; - p->jbod = config_get_int(cfg, interface->name, "boundary_clock_jbod"); - transport = config_get_int(cfg, interface->name, "network_transport"); - p->master_only = config_get_int(cfg, interface->name, "masterOnly"); - p->bmca = config_get_int(cfg, interface->name, "BMCA"); + p->jbod = config_get_int(cfg, interface_name(interface), "boundary_clock_jbod"); + transport = config_get_int(cfg, interface_name(interface), "network_transport"); + p->master_only = config_get_int(cfg, interface_name(interface), "masterOnly"); + p->bmca = config_get_int(cfg, interface_name(interface), "BMCA"); if (p->bmca == BMCA_NOOP && transport != TRANS_UDS) { if (p->master_only) { @@ -3013,7 +3016,7 @@ struct port *port_open(const char *phc_device, } } - p->name = interface->name; + p->name = interface_name(interface); p->iface = interface; p->asymmetry = config_get_int(cfg, p->name, "delayAsymmetry"); p->asymmetry <<= 16; diff --git a/port_private.h b/port_private.h index 5789fbb..bc16d95 100644 --- a/port_private.h +++ b/port_private.h @@ -60,7 +60,7 @@ struct tc_txd { struct port { LIST_ENTRY(port) list; - char *name; + const char *name; struct interface *iface; struct clock *clock; struct transport *trp; diff --git a/udp.c b/udp.c index 48af482..143f714 100644 --- a/udp.c +++ b/udp.c @@ -154,9 +154,9 @@ static int udp_open(struct transport *t, struct interface *iface, struct fdarray *fda, enum timestamp_type ts_type) { struct udp *udp = container_of(t, struct udp, t); + const char *name = interface_name(iface); uint8_t event_dscp, general_dscp; int efd, gfd, ttl; - char *name = iface->name; ttl = config_get_int(t->cfg, name, "udp_ttl"); udp->mac.len = 0; diff --git a/udp6.c b/udp6.c index 74ebc7f..6e5f86f 100644 --- a/udp6.c +++ b/udp6.c @@ -164,9 +164,9 @@ static int udp6_open(struct transport *t, struct interface *iface, struct fdarray *fda, enum timestamp_type ts_type) { struct udp6 *udp6 = container_of(t, struct udp6, t); + const char *name = interface_name(iface); uint8_t event_dscp, general_dscp; int efd, gfd, hop_limit; - char *name = iface->name; hop_limit = config_get_int(t->cfg, name, "udp_ttl"); udp6->mac.len = 0; diff --git a/uds.c b/uds.c index 44d135f..a4c856b 100644 --- a/uds.c +++ b/uds.c @@ -55,11 +55,11 @@ static int uds_close(struct transport *t, struct fdarray *fda) static int uds_open(struct transport *t, struct interface *iface, struct fdarray *fda, enum timestamp_type tt) { - int fd, err; - struct sockaddr_un sa; - struct uds *uds = container_of(t, struct uds, t); char *uds_path = config_get_string(t->cfg, NULL, "uds_address"); - char *name = iface->name; + struct uds *uds = container_of(t, struct uds, t); + const char *name = interface_name(iface); + struct sockaddr_un sa; + int fd, err; fd = socket(AF_LOCAL, SOCK_DGRAM, 0); if (fd < 0) {