mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-14 10:09:48 +00:00
ca9301398c
It is common case when modem hangs with carier on but don't receive anything from another side. This thing commonly healed with hangup and redialing. Enhancements below allows to determine when such action is needed and inform attach program with SIGURG signal. There two ioctls set: outfill and keepalive, used from both sides of connection. Outfill repeatedly sends FRAME_END with specified timeout (i.e. 40 seconds). It is needed to get input on other side even if no user activity on slip line currently. Keepalive checks FRAME_ENDs from other side, and if no one got in specified timeout (i.e. 60 seconds, max modem retrain time), send SIGURG to attach program. I plan to add code to slattach to handle this thing too. Reviewed by: wollman
90 lines
3.7 KiB
C
90 lines
3.7 KiB
C
/*-
|
|
* Copyright (c) 1991, 1993
|
|
* The Regents of the University of California. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. All advertising materials mentioning features or use of this software
|
|
* must display the following acknowledgement:
|
|
* This product includes software developed by the University of
|
|
* California, Berkeley and its contributors.
|
|
* 4. Neither the name of the University nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
* @(#)if_slvar.h 8.3 (Berkeley) 2/1/94
|
|
*
|
|
* $Id: if_slvar.h,v 1.4 1994/10/08 01:40:23 phk Exp $
|
|
*/
|
|
|
|
#ifndef _NET_IF_SLVAR_H_
|
|
#define _NET_IF_SLVAR_H_
|
|
|
|
/*
|
|
* Definitions for SLIP interface data structures
|
|
*
|
|
* (This exists so programs like slstats can get at the definition
|
|
* of sl_softc.)
|
|
*/
|
|
struct sl_softc {
|
|
struct ifnet sc_if; /* network-visible interface */
|
|
struct ifqueue sc_fastq; /* interactive output queue */
|
|
struct tty *sc_ttyp; /* pointer to tty structure */
|
|
u_char *sc_mp; /* pointer to next available buf char */
|
|
u_char *sc_ep; /* pointer to last available buf char */
|
|
u_char *sc_buf; /* input buffer */
|
|
u_int sc_flags; /* see below */
|
|
u_int sc_escape; /* =1 if last char input was FRAME_ESCAPE */
|
|
long sc_lasttime; /* last time a char arrived */
|
|
long sc_abortcount; /* number of abort esacpe chars */
|
|
long sc_starttime; /* time of first abort in window */
|
|
u_int sc_keepalive; /* time to decide link hang */
|
|
u_int sc_outfill; /* time to send FRAME_END when output idle */
|
|
#ifdef INET /* XXX */
|
|
struct slcompress sc_comp; /* tcp compression data */
|
|
#endif
|
|
caddr_t sc_bpf; /* BPF data */
|
|
};
|
|
|
|
/* internal flags */
|
|
#define SC_ERROR 0x0001 /* had an input error */
|
|
#define SC_OUTWAIT 0x0002 /* waiting for output fill */
|
|
#define SC_KEEPALIVE 0x0004 /* input keepalive */
|
|
|
|
/* visible flags */
|
|
#define SC_COMPRESS IFF_LINK0 /* compress TCP traffic */
|
|
#define SC_NOICMP IFF_LINK1 /* supress ICMP traffic */
|
|
#define SC_AUTOCOMP IFF_LINK2 /* auto-enable TCP compression */
|
|
|
|
#ifdef KERNEL
|
|
void slattach __P((void));
|
|
int slclose __P((struct tty *,int));
|
|
int slinput __P((int, struct tty *));
|
|
int slioctl __P((struct ifnet *, int, caddr_t));
|
|
int sltioctl __P((struct tty *, int, caddr_t, int, struct proc *));
|
|
int slopen __P((dev_t, struct tty *));
|
|
int sloutput __P((struct ifnet *,
|
|
struct mbuf *, struct sockaddr *, struct rtentry *));
|
|
int slstart __P((struct tty *));
|
|
#endif /* KERNEL */
|
|
|
|
#endif
|