From 5caa4d0a9161e6a33e269c8e445b322e4437e6b3 Mon Sep 17 00:00:00 2001 Message-Id: <5caa4d0a9161e6a33e269c8e445b322e4437e6b3.1630418391.git.Jim.Somerville@windriver.com> In-Reply-To: <0389752e3aecf8d2b2743f16ce1408a58088bea9.1630418391.git.Jim.Somerville@windriver.com> References: <0389752e3aecf8d2b2743f16ce1408a58088bea9.1630418391.git.Jim.Somerville@windriver.com> From: Miroslav Lichvar Date: Mon, 31 May 2021 11:07:55 +0200 Subject: [PATCH 4/6] port: Don't renew raw transport. Renewing of the transport on announce/sync timeout is needed in the client-only mode to avoid getting stuck with a broken multicast socket when the link goes down. This shouldn't be necessary with the raw transport. Closing and binding of raw sockets can apparently be so slow that it triggers a false positive in the clock check. Reported-by: Amar Subramanyam Signed-off-by: Miroslav Lichvar Reviewed-by: Jacob Keller [commit 6df84259647757bc53818a039734f8ff85618c02 upstream] Signed-off-by: Jim Somerville --- port.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/port.c b/port.c index 387d5a2..d26b87f 100644 --- a/port.c +++ b/port.c @@ -1805,6 +1805,12 @@ static int port_renew_transport(struct port *p) if (!port_is_enabled(p)) { return 0; } + + /* Closing and binding of raw sockets is too slow and unnecessary */ + if (transport_type(p->trp) == TRANS_IEEE_802_3) { + return 0; + } + transport_close(p->trp, &p->fda); port_clear_fda(p, FD_FIRST_TIMER); res = transport_open(p->trp, p->iface, &p->fda, p->timestamping); -- 2.29.2