Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/net Reconnect when a down event caused by tlf caught



details:   https://anonhg.NetBSD.org/src/rev/98f14fc6c22c
branches:  trunk
changeset: 946389:98f14fc6c22c
user:      yamaguchi <yamaguchi%NetBSD.org@localhost>
date:      Wed Nov 25 10:27:18 2020 +0000

description:
Reconnect when a down event caused by tlf caught

diffstat:

 sys/net/if_spppsubr.c |  27 +++++++++++++++++++++++++--
 sys/net/if_spppvar.h  |   3 ++-
 2 files changed, 27 insertions(+), 3 deletions(-)

diffs (86 lines):

diff -r 748ad8a17c02 -r 98f14fc6c22c sys/net/if_spppsubr.c
--- a/sys/net/if_spppsubr.c     Wed Nov 25 10:25:22 2020 +0000
+++ b/sys/net/if_spppsubr.c     Wed Nov 25 10:27:18 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_spppsubr.c,v 1.211 2020/11/25 10:25:22 yamaguchi Exp $       */
+/*     $NetBSD: if_spppsubr.c,v 1.212 2020/11/25 10:27:18 yamaguchi Exp $       */
 
 /*
  * Synchronous PPP/Cisco link level subroutines.
@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.211 2020/11/25 10:25:22 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_spppsubr.c,v 1.212 2020/11/25 10:27:18 yamaguchi Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -2426,6 +2426,7 @@
        sp->lcp.max_terminate = 2;
        sp->lcp.max_configure = 10;
        sp->lcp.max_failure = 10;
+       sp->lcp.tlf_sent = false;
 
        /*
         * Initialize counters and timeout values.  Note that we don't
@@ -2485,6 +2486,16 @@
        sppp_down_event(sp, xcp);
 
        /*
+        * We need to do tls to restart when a down event is caused
+        * by the last tlf.
+        */
+       if (sp->scp[pidx].state == STATE_STARTING &&
+           sp->lcp.tlf_sent) {
+               cp->tls(cp, sp);
+               sp->lcp.tlf_sent = false;
+       }
+
+       /*
         * If this is neither a dial-on-demand nor a passive
         * interface, simulate an ``ifconfig down'' action, so the
         * administrator can force a redial by another ``ifconfig
@@ -3149,6 +3160,7 @@
 
        /* Notify lower layer if desired. */
        sppp_notify_tls_wlocked(sp);
+       sp->lcp.tlf_sent = false;
 }
 
 static void
@@ -3161,6 +3173,17 @@
 
        /* Notify lower layer if desired. */
        sppp_notify_tlf_wlocked(sp);
+
+       switch (sp->scp[IDX_LCP].state) {
+       case STATE_CLOSED:
+       case STATE_STOPPED:
+               sp->lcp.tlf_sent = true;
+               break;
+       case STATE_INITIAL:
+       default:
+               /* just in case */
+               sp->lcp.tlf_sent = false;
+       }
 }
 
 static void
diff -r 748ad8a17c02 -r 98f14fc6c22c sys/net/if_spppvar.h
--- a/sys/net/if_spppvar.h      Wed Nov 25 10:25:22 2020 +0000
+++ b/sys/net/if_spppvar.h      Wed Nov 25 10:27:18 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_spppvar.h,v 1.30 2020/11/25 10:12:03 yamaguchi Exp $        */
+/*     $NetBSD: if_spppvar.h,v 1.31 2020/11/25 10:27:18 yamaguchi Exp $        */
 
 #ifndef _NET_IF_SPPPVAR_H_
 #define _NET_IF_SPPPVAR_H_
@@ -58,6 +58,7 @@
        u_long  mrru;           /* our   max received reconstructed unit */
        u_long  their_mrru;     /* their max receive dreconstructed unit */
        bool    reestablish;    /* reestablish after the next down event */
+       bool    tlf_sent;       /* call lower layer's tlf before a down event */
 };
 
 #define IDX_IPCP 1             /* idx into state table */



Home | Main Index | Thread Index | Old Index