From e48c0dda854c3ef07e71a032938e77a84c63d5de Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 20 Jun 2022 11:00:36 +0930 Subject: [PATCH] common: downgrade "internal error" errors from lnd. Prior to 0.11.0 we had cases where we would treat errors as warnings: regretfully, this is still needed. This message in particular has been widely reported, and it now causes channel force closes. Downgrade and log. I did insert some snarky log message earlier, but hey, I'm sure CLN has done worse things to our peers! Signed-off-by: Rusty Russell Changelog-Fixed: Protocol: treat LND "internal error" as warnings, not force close events (as we did in v0.10). --- common/peer_failed.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/common/peer_failed.c b/common/peer_failed.c index c9c18d84d..96325cf23 100644 --- a/common/peer_failed.c +++ b/common/peer_failed.c @@ -84,6 +84,15 @@ void peer_failed_received_errmsg(struct per_peer_state *pps, { u8 *msg; + /* LND sends "internal error" and we close the channel. But + * prior to 0.11 we would turn this into a warning, and they + * would recover after a reconnect. So we downgrade, but snark + * about it in the logs. */ + if (!warning && streq(desc, "internal error")) { + status_unusual("lnd sent 'internal error':" + " let's give it some space"); + warning = true; + } msg = towire_status_peer_error(NULL, channel_id, desc, warning, NULL); peer_billboard(true, "Received %s", desc);