[Linuxptp-devel] [PATCH 3/8] port: track interface info in port
PTP IEEE 1588 stack for Linux
Brought to you by:
rcochran
From: Hangbin L. <liu...@gm...> - 2017-06-24 08:49:14
|
Add interface element in struct port. And update ts iface info after device fail over. Signed-off-by: Hangbin Liu <liu...@gm...> --- clock.c | 7 +++++++ port.c | 7 +++++++ port.h | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/clock.c b/clock.c index 5e9f2cd..67bdecb 100644 --- a/clock.c +++ b/clock.c @@ -331,6 +331,7 @@ static void clock_link_status(void *ctx, int index, int linkup, char *ts_iface) struct clock *c = ctx; struct port *p; char key[16]; + struct interface *iface; snprintf(key, sizeof(key), "%d", index); p = hash_lookup(c->index2port, key); @@ -338,6 +339,12 @@ static void clock_link_status(void *ctx, int index, int linkup, char *ts_iface) return; } port_link_status_set(p, linkup); + + iface = port_interface_get(p); + if (ts_iface[0] != '\0' && strcmp(iface->ts_iface, ts_iface)) { + strncpy(iface->ts_iface, ts_iface, MAX_IFNAME_SIZE); + } + if (linkup) { port_dispatch(p, EV_FAULT_CLEARED, 0); } else { diff --git a/port.c b/port.c index ec02825..b28849f 100644 --- a/port.c +++ b/port.c @@ -66,6 +66,7 @@ struct nrate_estimator { struct port { LIST_ENTRY(port) list; char *name; + struct interface *iface; struct clock *clock; struct transport *trp; enum timestamp_type timestamping; @@ -2378,6 +2379,11 @@ void port_link_status_set(struct port *p, int up) pr_notice("port %hu: link %s", portnum(p), up ? "up" : "down"); } +struct interface *port_interface_get(struct port *p) +{ + return p->iface; +} + int port_manage(struct port *p, struct port *ingress, struct ptp_message *msg) { struct management_tlv *mgt; @@ -2586,6 +2592,7 @@ struct port *port_open(int phc_index, } p->name = interface->name; + p->iface = interface; p->asymmetry = config_get_int(cfg, p->name, "delayAsymmetry"); p->asymmetry <<= 16; p->announce_span = transport == TRANS_UDS ? 0 : ANNOUNCE_SPAN; diff --git a/port.h b/port.h index b00bc64..7f9be42 100644 --- a/port.h +++ b/port.h @@ -139,6 +139,13 @@ int port_link_status_get(struct port *p); void port_link_status_set(struct port *p, int up); /** + * Obtain the interface pointer of a port. + * @param p A port instance. + * @return Interface pointer of the port. + */ +struct interface *port_interface_get(struct port *p); + +/** * Manage a port according to a given message. * @param p A pointer previously obtained via port_open(). * @param ingress The port on which 'msg' was received. -- 2.5.5 |