diff options
-rw-r--r-- | usr.sbin/ppp/chap.c | 3 | ||||
-rw-r--r-- | usr.sbin/ppp/command.c | 8 | ||||
-rw-r--r-- | usr.sbin/ppp/ip.c | 4 | ||||
-rw-r--r-- | usr.sbin/ppp/ipcp.c | 3 | ||||
-rw-r--r-- | usr.sbin/ppp/lcp.c | 15 | ||||
-rw-r--r-- | usr.sbin/ppp/lqr.c | 4 | ||||
-rw-r--r-- | usr.sbin/ppp/main.c | 121 | ||||
-rw-r--r-- | usr.sbin/ppp/modem.c | 29 | ||||
-rw-r--r-- | usr.sbin/ppp/os.c | 11 | ||||
-rw-r--r-- | usr.sbin/ppp/pap.c | 4 | ||||
-rw-r--r-- | usr.sbin/ppp/ppp.8 | 5 | ||||
-rw-r--r-- | usr.sbin/ppp/ppp.8.m4 | 5 | ||||
-rw-r--r-- | usr.sbin/ppp/vars.h | 8 |
13 files changed, 125 insertions, 95 deletions
diff --git a/usr.sbin/ppp/chap.c b/usr.sbin/ppp/chap.c index be677f56..6467fb5 100644 --- a/usr.sbin/ppp/chap.c +++ b/usr.sbin/ppp/chap.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: chap.c,v 1.13 1997/03/24 16:01:42 ache Exp $ + * $Id: chap.c,v 1.14 1997/05/10 01:22:06 brian Exp $ * * TODO: */ @@ -212,6 +212,7 @@ struct mbuf *bp; */ ChapOutput(CHAP_FAILURE, chp->id, "Invalid!!", 9); LcpClose(); + reconnectCount = 0; break; } } diff --git a/usr.sbin/ppp/command.c b/usr.sbin/ppp/command.c index 4e51046..be5b140 100644 --- a/usr.sbin/ppp/command.c +++ b/usr.sbin/ppp/command.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: command.c,v 1.45 1997/05/10 23:46:29 ache Exp $ + * $Id: command.c,v 1.46 1997/05/14 01:18:50 brian Exp $ * */ #include <sys/types.h> @@ -108,6 +108,8 @@ IsInteractive() if (mode & MODE_DDIAL) mes = "Working in dedicated dial mode."; + else if (mode & MODE_BACKGROUND) + mes = "Working in background mode."; else if (mode & MODE_AUTO) mes = "Working in auto mode."; else if (mode & MODE_DIRECT) @@ -630,7 +632,9 @@ static int CloseCommand() { LcpClose(); - lostCarrier = 0; + reconnectCount = 0; + if (mode & MODE_BACKGROUND) + Cleanup(EX_NORMAL); return(1); } diff --git a/usr.sbin/ppp/ip.c b/usr.sbin/ppp/ip.c index 3d73275..ee1fb27 100644 --- a/usr.sbin/ppp/ip.c +++ b/usr.sbin/ppp/ip.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: ip.c,v 1.15 1997/04/21 01:01:45 brian Exp $ + * $Id: ip.c,v 1.16 1997/05/10 01:22:11 brian Exp $ * * TODO: * o Return ICMP message for filterd packet @@ -45,7 +45,7 @@ static void IdleTimeout() { LogPrintf(LOG_PHASE_BIT, "Idle timer expired.\n"); LcpClose(); - lostCarrier = 0; + reconnectCount = 0; } /* diff --git a/usr.sbin/ppp/ipcp.c b/usr.sbin/ppp/ipcp.c index a55a67c..8ef0f49 100644 --- a/usr.sbin/ppp/ipcp.c +++ b/usr.sbin/ppp/ipcp.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: ipcp.c,v 1.15 1997/05/10 15:37:40 brian Exp $ + * $Id: ipcp.c,v 1.16 1997/05/10 23:46:29 ache Exp $ * * TODO: * o More RFC1772 backwoard compatibility @@ -245,6 +245,7 @@ struct fsm *fp; { LogPrintf(LOG_LCP_BIT, "%s: LayerFinish.\n", fp->name); LcpClose(); + reconnectCount = 0; NewPhase(PHASE_TERMINATE); } diff --git a/usr.sbin/ppp/lcp.c b/usr.sbin/ppp/lcp.c index d3c6d7a..2cfabd7 100644 --- a/usr.sbin/ppp/lcp.c +++ b/usr.sbin/ppp/lcp.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: lcp.c,v 1.17 1997/05/11 00:41:30 ache Exp $ + * $Id: lcp.c,v 1.18 1997/05/11 00:44:37 ache Exp $ * * TODO: * o Validate magic number received from peer. @@ -124,18 +124,11 @@ int new; IpcpOpen(); CcpUp(); CcpOpen(); - if (mode & MODE_BACKGROUND && BGFiledes[1] != -1) { - char c = EX_NORMAL; - if (write(BGFiledes[1],&c,1) == 1) - LogPrintf(LOG_PHASE_BIT,"Parent notified of success.\n"); - else - LogPrintf(LOG_PHASE_BIT,"Failed to notify parent of success.\n"); - close(BGFiledes[1]); - BGFiledes[1] = -1; - } break; case PHASE_DEAD: - if (mode & (MODE_DIRECT|MODE_BACKGROUND)) + if (mode & MODE_DIRECT) + Cleanup(EX_DEAD); + if (mode & MODE_BACKGROUND && !reconnectRequired) Cleanup(EX_DEAD); break; } diff --git a/usr.sbin/ppp/lqr.c b/usr.sbin/ppp/lqr.c index 5475da8..aafe340 100644 --- a/usr.sbin/ppp/lqr.c +++ b/usr.sbin/ppp/lqr.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: lqr.c,v 1.10 1997/05/07 23:40:31 brian Exp $ + * $Id: lqr.c,v 1.11 1997/05/09 16:16:31 jdp Exp $ * * o LQR based on RFC1333 * @@ -111,6 +111,7 @@ SendLqrReport() LogPrintf(LOG_PHASE_BIT, "** 1 Too many ECHO packets are lost. **\n"); lqmmethod = 0; /* Prevent rcursion via LcpClose() */ LcpClose(); + reconnectRequired = 1; } else { bp = mballoc(sizeof(struct lqrdata), MB_LQR); HdlcOutput(PRI_LINK, PROTO_LQR, bp); @@ -121,6 +122,7 @@ SendLqrReport() LogPrintf(LOG_PHASE_BIT, "** 2 Too many ECHO packets are lost. **\n"); lqmmethod = 0; /* Prevent rcursion via LcpClose() */ LcpClose(); + reconnectRequired = 1; } else SendEchoReq(); } diff --git a/usr.sbin/ppp/main.c b/usr.sbin/ppp/main.c index c0f1a70..5e74744 100644 --- a/usr.sbin/ppp/main.c +++ b/usr.sbin/ppp/main.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: main.c,v 1.50 1997/05/14 01:18:51 brian Exp $ + * $Id: main.c,v 1.51 1997/05/17 16:08:46 brian Exp $ * * TODO: * o Add commands for traffic summary, version display, etc. @@ -69,6 +69,7 @@ extern int aft_cmd; extern int IsInteractive(); static void DoLoop(void); static void TerminalStop(); +static char *ex_desc(); static struct termios oldtio; /* Original tty mode */ static struct termios comtio; /* Command level tty mode */ @@ -168,7 +169,7 @@ int excode; OsLinkdown(); OsCloseLink(1); sleep(1); - if (mode & (MODE_AUTO | MODE_BACKGROUND)) + if (mode & MODE_AUTO) DeleteIfRoutes(1); (void)unlink(pid_filename); (void)unlink(if_filename); @@ -181,7 +182,7 @@ int excode; LogPrintf(LOG_PHASE_BIT,"Failed to notify parent of failure.\n"); close(BGFiledes[1]); } - LogPrintf(LOG_PHASE_BIT, "PPP Terminated %d.\n",excode); + LogPrintf(LOG_PHASE_BIT, "PPP Terminated (%s).\n",ex_desc(excode)); LogClose(); if (server >= 0) { close(server); @@ -223,6 +224,7 @@ int signo; else { LogPrintf(LOG_PHASE_BIT, "Signal %d, terminate.\n", signo); LcpClose(); + reconnectCount = 0; Cleanup(EX_TERM); } } @@ -245,6 +247,19 @@ int signo; kill(getpid(), signo); } +static char * +ex_desc(int ex) +{ + static char num[12]; + static char *desc[] = { "normal", "start", "sock", + "modem", "dial", "dead", "done", "reboot", "errdead", + "hangup", "term", "nodial", "nologin" }; + + if (ex >= 0 && ex < sizeof(desc)/sizeof(*desc)) + return desc[ex]; + snprintf(num, sizeof num, "%d", ex); + return num; +} void Usage() @@ -266,7 +281,7 @@ ProcessArgs(int argc, char **argv) if (strcmp(cp, "auto") == 0) mode |= MODE_AUTO; else if (strcmp(cp, "background") == 0) - mode |= MODE_BACKGROUND; + mode |= MODE_BACKGROUND|MODE_AUTO; else if (strcmp(cp, "direct") == 0) mode |= MODE_DIRECT; else if (strcmp(cp, "dedicated") == 0) @@ -339,7 +354,7 @@ char **argv; exit(EX_START); } - if (mode & (MODE_AUTO|MODE_DIRECT|MODE_DEDICATED|MODE_BACKGROUND)) + if (mode & (MODE_AUTO|MODE_DIRECT|MODE_DEDICATED)) mode &= ~MODE_INTER; if (mode & MODE_INTER) { printf("Interactive mode\n"); @@ -347,14 +362,8 @@ char **argv; } else if (mode & MODE_AUTO) { printf("Automatic Dialer mode\n"); if (dstsystem == NULL) { - fprintf(stderr, - "Destination system must be specified in auto or ddial mode.\n"); - exit(EX_START); - } - } else if (mode & MODE_BACKGROUND) { - printf("Background mode\n"); - if (dstsystem == NULL) { - fprintf(stderr, "Destination system must be specified in background mode.\n"); + fprintf(stderr, "Destination system must be specified in" + " auto, background or ddial mode.\n"); exit(EX_START); } } @@ -393,7 +402,8 @@ char **argv; Cleanup(EX_START); } if ((mode & MODE_AUTO) && DefHisAddress.ipaddr.s_addr == INADDR_ANY) { - fprintf(stderr, "Must specify dstaddr with auto or ddial mode.\n"); + fprintf(stderr, "Must specify dstaddr with" + " auto, background or ddial mode.\n"); Cleanup(EX_START); } } @@ -402,33 +412,31 @@ char **argv; if (!(mode & MODE_INTER)) { int port = SERVER_PORT + tunno; + if (mode & MODE_BACKGROUND) { if (pipe (BGFiledes)) { perror("pipe"); Cleanup(EX_SOCK); } } - else { - /* - * Create server socket and listen at there. - */ - server = socket(PF_INET, SOCK_STREAM, 0); - if (server < 0) { - perror("socket"); - Cleanup(EX_SOCK); - } - ifsin.sin_family = AF_INET; - ifsin.sin_addr.s_addr = INADDR_ANY; - ifsin.sin_port = htons(port); - if (bind(server, (struct sockaddr *) &ifsin, sizeof(ifsin)) < 0) { - perror("bind"); - if (errno == EADDRINUSE) - fprintf(stderr, "Wait for a while, then try again.\n"); - Cleanup(EX_SOCK); - } - if (listen(server, 5) != 0) { - fprintf(stderr, "Unable to listen to socket - OS overload?\n"); - } + + /* Create server socket and listen at there. */ + server = socket(PF_INET, SOCK_STREAM, 0); + if (server < 0) { + perror("socket"); + Cleanup(EX_SOCK); + } + ifsin.sin_family = AF_INET; + ifsin.sin_addr.s_addr = INADDR_ANY; + ifsin.sin_port = htons(port); + if (bind(server, (struct sockaddr *) &ifsin, sizeof(ifsin)) < 0) { + perror("bind"); + if (errno == EADDRINUSE) + fprintf(stderr, "Wait for a while, then try again.\n"); + Cleanup(EX_SOCK); + } + if (listen(server, 5) != 0) { + fprintf(stderr, "Unable to listen to socket - OS overload?\n"); } DupLog(); @@ -447,12 +455,16 @@ char **argv; /* Wait for our child to close its pipe before we exit. */ BGPid = bgpid; close (BGFiledes[1]); - if (read(BGFiledes[0], &c, 1) != 1) + if (read(BGFiledes[0], &c, 1) != 1) { + printf("Child exit, no status.\n"); LogPrintf (LOG_PHASE_BIT, "Parent: Child exit, no status.\n"); - else if (c == EX_NORMAL) + } else if (c == EX_NORMAL) { + printf("PPP enabled.\n"); LogPrintf (LOG_PHASE_BIT, "Parent: PPP enabled.\n"); - else + } else { + printf("Child failed %d.\n",(int)c); LogPrintf (LOG_PHASE_BIT, "Parent: Child failed %d.\n",(int)c); + } close (BGFiledes[0]); } exit(c); @@ -728,7 +740,7 @@ DoLoop() pgroup = getpgrp(); - if (mode & (MODE_DIRECT|MODE_BACKGROUND)) { + if (mode & MODE_DIRECT) { modem = OpenModem(mode); LogPrintf(LOG_PHASE_BIT, "Packet mode enabled\n"); fflush(stderr); @@ -742,7 +754,7 @@ DoLoop() timeout.tv_sec = 0; timeout.tv_usec = 0; - lostCarrier = 0; + reconnectRequired = 0; if (mode & MODE_BACKGROUND) dial_up = TRUE; /* Bring the line up */ @@ -763,19 +775,26 @@ DoLoop() /* * If we lost carrier and want to re-establish the connection * due to the "set reconnect" value, we'd better bring the line - * back up now. + * back up. */ - if (LcpFsm.state <= ST_CLOSED && dial_up != TRUE && lostCarrier) - if (lostCarrier <= VarReconnectTries) { - LogPrintf(LOG_PHASE_BIT, "Connection lost, re-establish (%d/%d)\n", - lostCarrier, VarReconnectTries); - StartRedialTimer(VarReconnectTimer); - dial_up = TRUE; - } else { - LogPrintf(LOG_PHASE_BIT, "Connection lost, maximum (%d) times\n", - VarReconnectTries); - lostCarrier = 0; + if (LcpFsm.state <= ST_CLOSED) { + if (dial_up != TRUE && reconnectRequired) { + if (++reconnectCount <= VarReconnectTries) { + LogPrintf(LOG_PHASE_BIT, "Connection lost, re-establish (%d/%d)\n", + reconnectCount, VarReconnectTries); + StartRedialTimer(VarReconnectTimer); + dial_up = TRUE; + } else { + if (VarReconnectTries) + LogPrintf(LOG_PHASE_BIT, "Connection lost, maximum (%d) times\n", + VarReconnectTries); + reconnectCount = 0; + if (mode & MODE_BACKGROUND) + Cleanup(EX_DEAD); + } } + reconnectRequired = 0; + } /* * If Ip packet for output is enqueued and require dial up, diff --git a/usr.sbin/ppp/modem.c b/usr.sbin/ppp/modem.c index 6271efe..f2c4dd0 100644 --- a/usr.sbin/ppp/modem.c +++ b/usr.sbin/ppp/modem.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: modem.c,v 1.36 1997/05/10 03:39:54 brian Exp $ + * $Id: modem.c,v 1.37 1997/05/14 01:14:32 brian Exp $ * * TODO: */ @@ -44,7 +44,6 @@ extern int DoChat(); static int mbits; /* Current DCD status */ -static int connect_time; /* connection time */ static int connect_count; static struct pppTimer ModemTimer; @@ -217,8 +216,6 @@ DownConnection() CloseModem(); LcpDown(); } - lostCarrier++; - connect_time = 0; } /* @@ -228,28 +225,21 @@ DownConnection() void ModemTimeout() { - static int waiting; int ombits = mbits; int change; StopTimer(&ModemTimer); - if (Online) - connect_time++; StartTimer(&ModemTimer); if (dev_is_modem) { - if (modem < 0) { - if (!waiting) + if (modem >= 0) { + if (ioctl(modem, TIOCMGET, &mbits) < 0) { + LogPrintf(LOG_PHASE_BIT, "ioctl error (%s)!\n", strerror(errno)); DownConnection(); - waiting = 1; - return; - } - waiting = 0; - if (ioctl(modem, TIOCMGET, &mbits) < 0) { - LogPrintf(LOG_PHASE_BIT, "ioctl error (%s)!\n", strerror(errno)); - DownConnection(); - return; - } + return; + } + } else + mbits = 0; change = ombits ^ mbits; if (change & TIOCM_CD) { if (Online) { @@ -263,6 +253,7 @@ ModemTimeout() if (mode & MODE_DEDICATED) PacketMode(); } else { + reconnectRequired = 1; DownConnection(); } } @@ -272,7 +263,6 @@ ModemTimeout() LogPrintf(LOG_PHASE_BIT, "Connected!\n"); mbits = TIOCM_CD; connect_count++; - connect_time = 0; } else if (uptime == 0) { time(&uptime); } @@ -282,7 +272,6 @@ ModemTimeout() void StartModemTimer() { - connect_time = 0; StopTimer(&ModemTimer); ModemTimer.state = TIMER_STOPPED; ModemTimer.load = SECTICKS; diff --git a/usr.sbin/ppp/os.c b/usr.sbin/ppp/os.c index c0ffdb8..2bdab3e 100644 --- a/usr.sbin/ppp/os.c +++ b/usr.sbin/ppp/os.c @@ -17,7 +17,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: os.c,v 1.15 1997/04/15 00:03:36 brian Exp $ + * $Id: os.c,v 1.16 1997/05/04 02:39:04 ache Exp $ * */ #include "fsm.h" @@ -186,6 +186,15 @@ OsLinkup() if (linkup == 0) { if (setuid(0) < 0) logprintf("setuid failed\n"); + if (mode & MODE_BACKGROUND && BGFiledes[1] != -1) { + char c = EX_NORMAL; + if (write(BGFiledes[1],&c,1) == 1) + LogPrintf(LOG_PHASE_BIT,"Parent notified of success.\n"); + else + LogPrintf(LOG_PHASE_BIT,"Failed to notify parent of success.\n"); + close(BGFiledes[1]); + BGFiledes[1] = -1; + } peer_addr = IpcpInfo.his_ipaddr; s = (char *)inet_ntoa(peer_addr); LogPrintf(LOG_LINK_BIT|LOG_LCP_BIT, "OsLinkup: %s\n", s); diff --git a/usr.sbin/ppp/pap.c b/usr.sbin/ppp/pap.c index de3f54a..db1c9aa 100644 --- a/usr.sbin/ppp/pap.c +++ b/usr.sbin/ppp/pap.c @@ -18,7 +18,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id$ + * $Id: pap.c,v 1.9 1997/02/22 16:10:40 peter Exp $ * * TODO: */ @@ -154,6 +154,7 @@ struct mbuf *bp; } else { SendPapCode(php->id, PAP_NAK, "Login incorrect"); LcpClose(); + reconnectCount = 0; } break; case PAP_ACK: @@ -175,6 +176,7 @@ struct mbuf *bp; cp[len] = 0; LogPrintf(LOG_PHASE_BIT, "Received PAP_NAK (%s)\n", cp); LcpClose(); + reconnectCount = 0; break; } } diff --git a/usr.sbin/ppp/ppp.8 b/usr.sbin/ppp/ppp.8 index 599d78b..09a3243 100644 --- a/usr.sbin/ppp/ppp.8 +++ b/usr.sbin/ppp/ppp.8 @@ -1,5 +1,5 @@ .\" manual page [] for ppp 0.94 beta2 + alpha -.\" $Id: ppp.8,v 1.32 1997/05/12 11:54:12 brian Exp $ +.\" $Id: ppp.8,v 1.33 1997/05/13 09:31:05 brian Exp $ .Dd 20 September 1995 .Os FreeBSD .Dt PPP 8 @@ -472,6 +472,9 @@ longer than the remote timeout, the reconnect feature will always be triggered (up to the given number of times) after the remote side times out and hangs up. +NOTE: In this context, losing too many LQRs constitutes a loss of +carrier and will trigger a reconnect. + If the .Fl background flag is specified, all phone numbers are dialed at most once until diff --git a/usr.sbin/ppp/ppp.8.m4 b/usr.sbin/ppp/ppp.8.m4 index 599d78b..09a3243 100644 --- a/usr.sbin/ppp/ppp.8.m4 +++ b/usr.sbin/ppp/ppp.8.m4 @@ -1,5 +1,5 @@ .\" manual page [] for ppp 0.94 beta2 + alpha -.\" $Id: ppp.8,v 1.32 1997/05/12 11:54:12 brian Exp $ +.\" $Id: ppp.8,v 1.33 1997/05/13 09:31:05 brian Exp $ .Dd 20 September 1995 .Os FreeBSD .Dt PPP 8 @@ -472,6 +472,9 @@ longer than the remote timeout, the reconnect feature will always be triggered (up to the given number of times) after the remote side times out and hangs up. +NOTE: In this context, losing too many LQRs constitutes a loss of +carrier and will trigger a reconnect. + If the .Fl background flag is specified, all phone numbers are dialed at most once until diff --git a/usr.sbin/ppp/vars.h b/usr.sbin/ppp/vars.h index 9edc6a2..483121a 100644 --- a/usr.sbin/ppp/vars.h +++ b/usr.sbin/ppp/vars.h @@ -15,7 +15,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * $Id: vars.h,v 1.12 1997/04/21 01:02:02 brian Exp $ + * $Id: vars.h,v 1.13 1997/05/10 03:39:57 brian Exp $ * * TODO: */ @@ -117,5 +117,9 @@ extern struct pppvars pppVars; int ipInOctets, ipOutOctets, ipKeepAlive; int ipConnectSecs, ipIdleSecs; -int lostCarrier; +/* + * One of these should be set (reconnectRequired=1 or reconnectCount=0) + * every time LcpClose is called + */ +int reconnectRequired, reconnectCount; #endif |