From nobody Tue Sep 13 09:44:28 2022 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4MRdph6J8qz4bqZn; Tue, 13 Sep 2022 09:44:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4MRdph5jbLz3bj3; Tue, 13 Sep 2022 09:44:28 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1663062268; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=c1Eiu1YSJawNz/QxWshLZG/7voxciq44AqiVrEjAqYU=; b=mCgrSxQXhAWHUwKoLjUcd1kwoeCUtiP9hzpNgvJ6SLgfgpATRCZP/4bh/4/0wVCVSFFCHz 2mANhUw7CpFsRsahYNRGNyM+ydad7IBBaXGzDRANCJBlK1DRQAYZxB/klChxMz7pCi/T8K 3SsX74VGFP/8M6A83NE6LzgXN43i0Q5RVjUFjgmvrUmL+jxaqjM7IWlI6lU8zZZY8f3/Fi U252exZ7ZHymRmuGNvej67AmxQYUL2jrlAH64gMTVnHPR9FaUxnQqRPJpMCyP5V0/SLv0u Kamyv+dBdYphNEtaM99mfRCJmQv+f9rfnIYeE+C7f6hJYtnG2woZ0WLOXnAlUw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4MRdph4kXSzHtL; Tue, 13 Sep 2022 09:44:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 28D9iSUL057224; Tue, 13 Sep 2022 09:44:28 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 28D9iS2s057223; Tue, 13 Sep 2022 09:44:28 GMT (envelope-from git) Date: Tue, 13 Sep 2022 09:44:28 GMT Message-Id: <202209130944.28D9iS2s057223@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Eugene Grosbein Subject: git: d9aecafba755 - main - net/mpd5: fix some LCP negotiation problems List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-main@freebsd.org X-BeenThere: dev-commits-ports-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: eugen X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d9aecafba755cf46596c08f80516348aaeb5a452 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1663062268; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=c1Eiu1YSJawNz/QxWshLZG/7voxciq44AqiVrEjAqYU=; b=GojohSNp1XBhh7OeGLRnii7FJ479EvnYsYA1T3E3JGjKO1xJvX43cQrSeiLeK0TPK1CDIv 5UPELeTlZ4AsbrzJYk8Wept5yWJpbn3Jhjk9qB6OPnVH5rVwg7+ONwhrEyw3/XQGdljWtM 7RMp/v1O6UXGFrSVbhZYDxrZxoVoUdRqwsGp2d0MwZBrAj/G6lM6NkCfQeg9DxvuKFwy2F tngrmh4FyCJ3hYSIgbNWAEu+We3Ex1uY7lqcyZNemSLZJHxBm06MZNRs9mn63mNwWqBgTg jHO4RKOJpODMCsqUQZ0HccU33fquMWfxHIkLjJfc1/LDc7+kMiM3875jZJtZhQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1663062268; a=rsa-sha256; cv=none; b=jpAVsoKzn6PXc85s81JYn/6pMLjy+ZW19Rre79120awAQStgQDL/9Ni6r3s3D5OaF/WCiw GKmq4Xc/TT31Is8plaqTmHoXbU7p2zHpOKXgCJ5CtOhJzgV7OxTHnaVjfCWqM7P6Ns7Rvv NnIqibBt9Rsuf7flQUdHw1lsDqX7MZGZ7gJ6vmHAhmII229bjnRqnAKc6SYMb9vtofE6iv anqUo7b5xD2VqPzHh4koWCg2l2ePAJL/nwoYNiPxH7SwsKsDFJiKCvUItdlrGTzbMhjK12 yqfMvNCRV4bKAUvYcSY0ffpSUg18ZDFbVzt3XVShy5/XE8fJ04+h9E7HiHHjfA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by eugen: URL: https://cgit.FreeBSD.org/ports/commit/?id=d9aecafba755cf46596c08f80516348aaeb5a452 commit d9aecafba755cf46596c08f80516348aaeb5a452 Author: Eugene Grosbein AuthorDate: 2022-09-13 09:32:20 +0000 Commit: Eugene Grosbein CommitDate: 2022-09-13 09:42:24 +0000 net/mpd5: fix some LCP negotiation problems * Import upstream r2453: prevent endless LCP restarts in case of broken peer or heavy packet drops. Allow 3 restarts then terminate LCP. Let link redial restart it from the beginning, if configured. * Import upstream r2454: fixes long-standing bug known as "LCP: not converging" problem leaving link closed with erroneously disabled redial. --- net/mpd5/files/patch-redial | 174 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) diff --git a/net/mpd5/files/patch-redial b/net/mpd5/files/patch-redial new file mode 100644 index 000000000000..b8f8c18d28c1 --- /dev/null +++ b/net/mpd5/files/patch-redial @@ -0,0 +1,174 @@ +Index: src/lcp.c +=================================================================== +--- src/lcp.c (revision 2452) ++++ src/lcp.c (revision 2454) +@@ -26,6 +26,7 @@ + + #define LCP_ECHO_INTERVAL 5 /* Enable keep alive by default */ + #define LCP_ECHO_TIMEOUT 40 ++ #define LCP_MAX_RESETS 3 + + #define LCP_KNOWN_CODES ( (1 << CODE_CONFIGREQ) \ + | (1 << CODE_CONFIGACK) \ +@@ -180,6 +181,7 @@ LcpInit(Link l) + FsmInit(&lcp->fsm, &gLcpFsmType, l); + lcp->fsm.conf.echo_int = LCP_ECHO_INTERVAL; + lcp->fsm.conf.echo_max = LCP_ECHO_TIMEOUT; ++ lcp->resets = LCP_MAX_RESETS; + lcp->phase = PHASE_DEAD; + + AuthInit(l); +@@ -690,8 +692,17 @@ LcpLayerDown(Fsm fp) + LcpState const lcp = &l->lcp; + + LcpStopActivity(l); +- if (lcp->phase == PHASE_AUTHENTICATE || lcp->phase == PHASE_NETWORK) ++ if (lcp->phase == PHASE_AUTHENTICATE || lcp->phase == PHASE_NETWORK) { + lcp->need_reset = 1; ++ if (lcp->resets > 0) { ++ Log(LG_LCP2, ("[%s] LCP: Reset (%u left)", l->name, (int)lcp->resets)); ++ lcp->resets--; ++ } else { ++ Log(LG_LCP2, ("[%s] LCP: Too many resets", l->name)); ++ FsmFailure(&lcp->fsm, FAIL_NEGOT_FAILURE); ++ lcp->resets = LCP_MAX_RESETS; ++ } ++ } + } + + void LcpOpen(Link l) +Index: src/lcp.h +=================================================================== +--- src/lcp.h (revision 2452) ++++ src/lcp.h (revision 2454) +@@ -87,6 +87,7 @@ + struct fsm fsm; /* Finite state machine */ + + u_char need_reset; /* LCP needs complete reset before ConfReq */ ++ u_char resets; /* LCP resets left before failure */ + }; + typedef struct lcpstate *LcpState; + +Index: src/link.c +=================================================================== +--- src/link.c (revision 2452) ++++ src/link.c (revision 2454) +@@ -52,6 +52,17 @@ + SET_NO + }; + ++ /* Used to prevent auto-up on links closed manually */ ++ enum { ++ LINK_ADMINSTATE_DOWN = 0, ++ LINK_ADMINSTATE_OPERATIONAL ++ }; ++ ++ static const char *linkAdminStateNames[] = { ++ "DOWN", ++ "OPERATIONAL" ++ }; ++ + #define RBUF_SIZE 100 + + /* +@@ -193,6 +204,7 @@ LinkOpenCmd(Context ctx) + { + if (ctx->lnk->tmpl) + Error("impossible to open template"); ++ ctx->lnk->admin_state = LINK_ADMINSTATE_OPERATIONAL; + RecordLinkUpDownReason(NULL, ctx->lnk, 1, STR_MANUALLY, NULL); + LinkOpen(ctx->lnk); + return (0); +@@ -207,6 +219,7 @@ LinkCloseCmd(Context ctx) + { + if (ctx->lnk->tmpl) + Error("impossible to close template"); ++ ctx->lnk->admin_state = LINK_ADMINSTATE_DOWN; + RecordLinkUpDownReason(NULL, ctx->lnk, 0, STR_MANUALLY, NULL); + LinkClose(ctx->lnk); + return (0); +@@ -258,7 +271,7 @@ LinkDown(Link l) + { + Log(LG_LINK, ("[%s] Link: DOWN event", l->name)); + +- if (OPEN_STATE(l->lcp.fsm.state)) { ++ if (OPEN_STATE(l->lcp.fsm.state) || l->admin_state != LINK_ADMINSTATE_DOWN) { + if (((l->conf.max_redial != 0) && (l->num_redial >= l->conf.max_redial)) || + gShutdownInProgress) { + if (l->conf.max_redial >= 0) { +@@ -307,6 +320,8 @@ LinkReopenTimeout(void *arg) + Log(LG_LINK, ("[%s] Link: reconnection attempt %hu", + l->name, l->num_redial)); + RecordLinkUpDownReason(NULL, l, 1, STR_REDIAL, NULL); ++ if (!OPEN_STATE(l->lcp.fsm.state)) ++ LinkOpen(l); + PhysOpen(l); + } + +@@ -411,6 +426,7 @@ LinkCreate(Context ctx, int ac, const char *const av[] + strlcpy(l->name, av[0 + stay], sizeof(l->name)); + l->type = pt; + l->tmpl = tmpl; ++ l->admin_state = LINK_ADMINSTATE_OPERATIONAL; + l->stay = stay; + l->parent = -1; + SLIST_INIT(&l->actions); +@@ -551,6 +567,7 @@ LinkInst(Link lt, const char *name, int tmpl, int stay + SLIST_INSERT_AFTER(ap, a, next); + ap = a; + } ++ l->admin_state = LINK_ADMINSTATE_OPERATIONAL; + l->tmpl = tmpl; + l->stay = stay; + /* Count link as one more child of parent. */ +@@ -1321,6 +1338,7 @@ LinkStat(Context ctx, int ac, const char *const av[], + Printf("\tChildren : %d\r\n", l->children); + else { + Printf("\tState : %s\r\n", gPhysStateNames[l->state]); ++ Printf("\tAdmin. state : %s\r\n", linkAdminStateNames[l->admin_state]); + Printf("\tSession Id : %s\r\n", l->session_id); + Printf("\tPeer ident : %s\r\n", l->lcp.peer_ident); + if (l->state == PHYS_STATE_UP) +Index: src/link.h +=================================================================== +--- src/link.h (revision 2452) ++++ src/link.h (revision 2454) +@@ -115,7 +115,8 @@ + int id; /* Index of this link in gLinks */ + u_char tmpl; /* This is template, not an instance */ + u_char stay; /* Must not disappear */ +- u_char state; /* Device current state */ ++ u_char state; /* Physical device current state */ ++ u_char admin_state; /* Link administrative state */ + u_char joined_bund; /* Link successfully joined bundle */ + u_char originate; /* Who originated the connection */ + u_char die; /* LCP agreed to die */ +Index: src/phys.c +=================================================================== +--- src/phys.c (revision 2452) ++++ src/phys.c (revision 2454) +@@ -590,8 +590,8 @@ PhysMsg(int type, void *arg) + UNREF(l); + return; + } +- Log(LG_PHYS2, ("[%s] device: %s event", +- l->name, MsgName(type))); ++ Log(LG_PHYS2, ("[%s] device: %s event in state %s", ++ l->name, MsgName(type), gPhysStateNames[l->state])); + switch (type) { + case MSG_OPEN: + l->downReasonValid=0; +@@ -599,7 +599,12 @@ PhysMsg(int type, void *arg) + PhysUp(l); + break; + } +- (*l->type->open)(l); ++ /* Redial may result in MSG_OPEN for just opened device */ ++ if (l->state == PHYS_STATE_DOWN) ++ (*l->type->open)(l); ++ else ++ Log(LG_PHYS2, ("[%s] device: OPEN event ignored", ++ l->name)); + break; + case MSG_CLOSE: + (*l->type->close)(l);