summaryrefslogtreecommitdiff
path: root/sys/i4b/driver/i4b_isppp.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i4b/driver/i4b_isppp.c')
-rw-r--r--sys/i4b/driver/i4b_isppp.c710
1 files changed, 0 insertions, 710 deletions
diff --git a/sys/i4b/driver/i4b_isppp.c b/sys/i4b/driver/i4b_isppp.c
deleted file mode 100644
index b1cb2cf9df5b9..0000000000000
--- a/sys/i4b/driver/i4b_isppp.c
+++ /dev/null
@@ -1,710 +0,0 @@
-/*
- * Copyright (c) 1997 Joerg Wunsch. All rights reserved.
- *
- * Copyright (c) 1997, 1998 Hellmuth Michaelis. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
- *
- *---------------------------------------------------------------------------
- *
- * i4b_isppp.c - isdn4bsd kernel SyncPPP driver
- * --------------------------------------------
- *
- * Uses Serge Vakulenko's sppp backend (originally contributed with
- * the "cx" driver for Cronyx's HDLC-in-hardware device). This driver
- * is only the glue between sppp and i4b.
- *
- * $Id: i4b_isppp.c,v 1.20 1998/12/18 14:20:44 hm Exp $
- *
- * last edit-date: [Fri Dec 18 11:47:58 1998]
- *
- *---------------------------------------------------------------------------*/
-
-#include "i4bisppp.h"
-#ifdef __FreeBSD__
-#include "sppp.h"
-#endif
-
-#if NI4BISPPP == 0
-# error "You need to define `pseudo-device sppp <N>' with options ISPPP"
-#endif
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <sys/errno.h>
-#include <sys/ioccom.h>
-#include <sys/sockio.h>
-#include <sys/kernel.h>
-#include <sys/protosw.h>
-
-#include <net/if.h>
-#include <net/if_types.h>
-#include <net/netisr.h>
-#include <net/route.h>
-#ifdef __FreeBSD__
-#include <net/if_sppp.h>
-#else
-#include <i4b/sppp/if_sppp.h>
-#endif
-
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/in_var.h>
-#include <netinet/ip.h>
-
-#include "bpfilter.h"
-#if NBPFILTER > 0
-#include <sys/time.h>
-#include <net/bpf.h>
-#endif
-
-#ifdef __FreeBSD__
-#include <machine/i4b_ioctl.h>
-#include <machine/i4b_cause.h>
-#else
-#include <i4b/i4b_ioctl.h>
-#include <i4b/i4b_cause.h>
-#endif
-
-#include <i4b/include/i4b_global.h>
-#include <i4b/include/i4b_mbuf.h>
-#include <i4b/include/i4b_l3l4.h>
-
-#include <i4b/layer4/i4b_l4.h>
-
-#ifdef __FreeBSD__
-#define ISPPP_FMT "isp%d: "
-#define ISPPP_ARG(sc) ((sc)->sc_if.if_unit)
-#define PDEVSTATIC static
-#define IFP2UNIT(ifp) (ifp)->if_unit
-
-# if __FreeBSD_version >= 300001
-# define CALLOUT_INIT(chan) callout_handle_init(chan)
-# define TIMEOUT(fun, arg, chan, tick) chan = timeout(fun, arg, tick)
-# define UNTIMEOUT(fun, arg, chan) untimeout(fun, arg, chan)
-# define IOCTL_CMD_T u_long
-# else
-# define CALLOUT_INIT(chan) do {} while(0)
-# define TIMEOUT(fun, arg, chan, tick) timeout(fun, arg, tick)
-# define UNTIMEOUT(fun, arg, chan) untimeout(fun, arg)
-# define IOCTL_CMD_T int
-# endif
-
-#elif defined __NetBSD__ || defined __OpenBSD__
-#define ISPPP_FMT "%s: "
-#define ISPPP_ARG(sc) ((sc)->sc_if.if_xname)
-#define PDEVSTATIC /* not static */
-#define IOCTL_CMD_T u_long
-#define IFP2UNIT(ifp) ((struct i4bisppp_softc *)ifp->if_softc)->sc_unit
-#else
-# error "What system are you using?"
-#endif
-
-#ifdef __FreeBSD__
-PDEVSTATIC void i4bispppattach(void *);
-PSEUDO_SET(i4bispppattach, i4b_isppp);
-#else
-PDEVSTATIC void i4bispppattach __P((void));
-#endif
-
-#define I4BISPPPACCT 1 /* enable accounting messages */
-#define I4BISPPPACCTINTVL 2 /* accounting msg interval in secs */
-#define I4BISPPPDISCDEBUG 1
-
-#define PPP_HDRLEN 4 /* 4 octetts PPP header length */
-
-struct i4bisppp_softc {
- /*
- * struct sppp starts with a struct ifnet, but we gotta allocate
- * more space for it. NB: do not relocate this union, it must
- * be first in isppp_softc. The tls and tlf hooks below want to
- * convert a ``struct sppp *'' into a ``struct isppp_softc *''.
- */
- union {
- struct ifnet scu_if;
- struct sppp scu_sp;
- } sc_if_un;
-#define sc_if sc_if_un.scu_if
-
- int sc_state; /* state of the interface */
-
-#ifndef __FreeBSD__
- int sc_unit; /* unit number for Net/OpenBSD */
-#endif
-
- call_desc_t *sc_cdp; /* ptr to call descriptor */
-
-#ifdef I4BISPPPACCT
- int sc_iinb; /* isdn driver # of inbytes */
- int sc_ioutb; /* isdn driver # of outbytes */
- int sc_inb; /* # of bytes rx'd */
- int sc_outb; /* # of bytes tx'd */
- int sc_linb; /* last # of bytes rx'd */
- int sc_loutb; /* last # of bytes tx'd */
- int sc_fn; /* flag, first null acct */
-#endif
-
-#if defined(__FreeBSD_version) && __FreeBSD_version >= 300001
- struct callout_handle sc_ch;
-#endif
-
-} i4bisppp_softc[NI4BISPPP];
-
-static void i4bisppp_init_linktab(int unit);
-static int i4bisppp_ioctl(struct ifnet *ifp, IOCTL_CMD_T cmd, caddr_t data);
-
-#if 0
-static void i4bisppp_send(struct ifnet *ifp);
-#endif
-
-static void i4bisppp_start(struct ifnet *ifp);
-
-#if 0 /* never used ??? */
-static void i4bisppp_timeout(void *cookie);
-#endif
-
-static void i4bisppp_tls(struct sppp *sp);
-static void i4bisppp_tlf(struct sppp *sp);
-static void i4bisppp_state_changed(struct sppp *sp, int new_state);
-static void i4bisppp_negotiation_complete(struct sppp *sp);
-static void i4bisppp_watchdog(struct ifnet *ifp);
-
-/* initialized by L4 */
-
-static drvr_link_t i4bisppp_drvr_linktab[NI4BISPPP];
-static isdn_link_t *isdn_linktab[NI4BISPPP];
-
-enum i4bisppp_states {
- ST_IDLE, /* initialized, ready, idle */
- ST_DIALING, /* dialling out to remote */
- ST_CONNECTED, /* connected to remote */
-};
-
-/*===========================================================================*
- * DEVICE DRIVER ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * interface attach routine at kernel boot time
- *---------------------------------------------------------------------------*/
-PDEVSTATIC void
-#ifdef __FreeBSD__
-i4bispppattach(void *dummy)
-#else
-i4bispppattach(void)
-#endif
-{
- struct i4bisppp_softc *sc = i4bisppp_softc;
- int i;
-
-#ifndef HACK_NO_PSEUDO_ATTACH_MSG
- printf("i4bisppp: %d ISDN SyncPPP device(s) attached\n",
- NI4BISPPP);
-#endif
-
- for(i = 0; i < NI4BISPPP; sc++, i++) {
- i4bisppp_init_linktab(i);
-
- sc->sc_if.if_softc = sc;
-
-#ifdef __FreeBSD__
- sc->sc_if.if_name = "isp";
-#if defined(__FreeBSD_version) && __FreeBSD_version < 300001
- sc->sc_if.if_next = NULL;
-#endif
- sc->sc_if.if_unit = i;
-#else
- sprintf(sc->sc_if.if_xname, "isp%d", i);
- sc->sc_unit = i;
-#endif
-
- sc->sc_if.if_mtu = PP_MTU;
- sc->sc_if.if_flags = IFF_SIMPLEX | IFF_POINTOPOINT;
- sc->sc_if.if_type = IFT_ISDNBASIC;
- sc->sc_state = ST_IDLE;
-
- sc->sc_if.if_ioctl = i4bisppp_ioctl;
-
- /* actually initialized by sppp_attach() */
- /* sc->sc_if.if_output = sppp_output; */
-
- sc->sc_if.if_start = i4bisppp_start;
-
- sc->sc_if.if_hdrlen = 0;
- sc->sc_if.if_addrlen = 0;
- sc->sc_if.if_snd.ifq_maxlen = IFQ_MAXLEN;
-
- sc->sc_if.if_ipackets = 0;
- sc->sc_if.if_ierrors = 0;
- sc->sc_if.if_opackets = 0;
- sc->sc_if.if_oerrors = 0;
- sc->sc_if.if_collisions = 0;
- sc->sc_if.if_ibytes = 0;
- sc->sc_if.if_obytes = 0;
- sc->sc_if.if_imcasts = 0;
- sc->sc_if.if_omcasts = 0;
- sc->sc_if.if_iqdrops = 0;
- sc->sc_if.if_noproto = 0;
-
-#if I4BISPPPACCT
- sc->sc_if.if_timer = 0;
- sc->sc_if.if_watchdog = i4bisppp_watchdog;
- sc->sc_iinb = 0;
- sc->sc_ioutb = 0;
- sc->sc_inb = 0;
- sc->sc_outb = 0;
- sc->sc_linb = 0;
- sc->sc_loutb = 0;
- sc->sc_fn = 1;
-#endif
-
- sc->sc_if_un.scu_sp.pp_tls = i4bisppp_tls;
- sc->sc_if_un.scu_sp.pp_tlf = i4bisppp_tlf;
- sc->sc_if_un.scu_sp.pp_con = i4bisppp_negotiation_complete;
- sc->sc_if_un.scu_sp.pp_chg = i4bisppp_state_changed;
-
- sppp_attach(&sc->sc_if);
- if_attach(&sc->sc_if);
-
-#if NBPFILTER > 0
-#ifdef __FreeBSD__
- bpfattach(&sc->sc_if, DLT_PPP, PPP_HDRLEN);
- CALLOUT_INIT(&sc->sc_ch);
-#endif /* __FreeBSD__ */
-#ifdef __NetBSD__
- bpfattach(&sc->sc_if.if_bpf, &sc->sc_if, DLT_PPP, sizeof(u_int));
-#endif
-#endif
- }
-}
-
-/*---------------------------------------------------------------------------*
- * process ioctl
- *---------------------------------------------------------------------------*/
-static int
-i4bisppp_ioctl(struct ifnet *ifp, IOCTL_CMD_T cmd, caddr_t data)
-{
- struct i4bisppp_softc *sc = ifp->if_softc;
-#if 0
- struct sppp *sp = (struct sppp *)sc;
- struct ifaddr *ifa = (struct ifaddr *) data;
- struct ifreq *ifr = (struct ifreq *) data;
-#endif
-
- int error;
-
- error = sppp_ioctl(&sc->sc_if, cmd, data);
- if (error)
- return error;
-
- switch(cmd) {
- case SIOCSIFFLAGS:
-#if 0 /* never used ??? */
- x = splimp();
- if ((ifp->if_flags & IFF_UP) == 0)
- UNTIMEOUT(i4bisppp_timeout, (void *)sp, sc->sc_ch);
- splx(x);
-#endif
- break;
- }
-
- return 0;
-}
-
-/*---------------------------------------------------------------------------*
- * start output to ISDN B-channel
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_start(struct ifnet *ifp)
-{
- struct i4bisppp_softc *sc = ifp->if_softc;
- struct mbuf *m;
- int s;
- int unit = IFP2UNIT(ifp);
-
- if (sppp_isempty(ifp))
- return;
-
- if(sc->sc_state != ST_CONNECTED)
- return;
-
- s = splimp();
- /*ifp->if_flags |= IFF_OACTIVE; - need to clear this somewhere */
- splx(s);
-
- while ((m = sppp_dequeue(&sc->sc_if)) != NULL)
- {
-
-#if NBPFILTER > 0
-#ifdef __FreeBSD__
- if (ifp->if_bpf)
- bpf_mtap(ifp, m);
-#endif /* __FreeBSD__ */
-
-#ifdef __NetBSD__
- if (ifp->if_bpf)
- bpf_mtap(ifp->if_bpf, m);
-#endif
-#endif /* NBPFILTER > 0 */
-
- microtime(&ifp->if_lastchange);
-
- IF_ENQUEUE(isdn_linktab[unit]->tx_queue, m);
-
- sc->sc_if.if_obytes += m->m_pkthdr.len;
- sc->sc_outb += m->m_pkthdr.len;
- sc->sc_if.if_opackets++;
- }
- isdn_linktab[unit]->bch_tx_start(isdn_linktab[unit]->unit,
- isdn_linktab[unit]->channel);
-}
-
-#ifdef I4BISPPPACCT
-/*---------------------------------------------------------------------------*
- * watchdog routine
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_watchdog(struct ifnet *ifp)
-{
- struct i4bisppp_softc *sc = ifp->if_softc;
- int unit = IFP2UNIT(ifp);
- bchan_statistics_t bs;
-
- (*isdn_linktab[unit]->bch_stat)
- (isdn_linktab[unit]->unit, isdn_linktab[unit]->channel, &bs);
-
- sc->sc_ioutb += bs.outbytes;
- sc->sc_iinb += bs.inbytes;
-
- if((sc->sc_iinb != sc->sc_linb) || (sc->sc_ioutb != sc->sc_loutb) || sc->sc_fn)
- {
- int ri = (sc->sc_iinb - sc->sc_linb)/I4BISPPPACCTINTVL;
- int ro = (sc->sc_ioutb - sc->sc_loutb)/I4BISPPPACCTINTVL;
-
- if((sc->sc_iinb == sc->sc_linb) && (sc->sc_ioutb == sc->sc_loutb))
- sc->sc_fn = 0;
- else
- sc->sc_fn = 1;
-
- sc->sc_linb = sc->sc_iinb;
- sc->sc_loutb = sc->sc_ioutb;
-
- i4b_l4_accounting(BDRV_ISPPP, unit, ACCT_DURING,
- sc->sc_ioutb, sc->sc_iinb, ro, ri, sc->sc_outb, sc->sc_inb);
- }
- sc->sc_if.if_timer = I4BISPPPACCTINTVL;
-
-#if 0 /* old stuff, keep it around */
- printf(ISPPP_FMT "transmit timeout\n", ISPPP_ARG(sc));
- i4bisppp_start(ifp);
-#endif
-}
-#endif /* I4BISPPPACCT */
-
-/*
- *===========================================================================*
- * SyncPPP layer interface routines
- *===========================================================================*
- */
-
-#if 0 /* never used ??? */
-/*---------------------------------------------------------------------------*
- * just an alias for i4bisppp_tls, but of type timeout_t
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_timeout(void *cookie)
-{
- i4bisppp_tls((struct sppp *)cookie);
-}
-#endif
-
-/*---------------------------------------------------------------------------*
- * PPP this-layer-started action
- *---------------------------------------------------------------------------*
- */
-static void
-i4bisppp_tls(struct sppp *sp)
-{
- struct i4bisppp_softc *sc = (struct i4bisppp_softc *)sp;
- struct ifnet *ifp = (struct ifnet *)sp;
-
- if(sc->sc_state == ST_CONNECTED)
- return;
-
- i4b_l4_dialout(BDRV_ISPPP, IFP2UNIT(ifp));
-}
-
-/*---------------------------------------------------------------------------*
- * PPP this-layer-finished action
- *---------------------------------------------------------------------------*
- */
-static void
-i4bisppp_tlf(struct sppp *sp)
-{
- struct i4bisppp_softc *sc = (struct i4bisppp_softc *)sp;
-/* call_desc_t *cd = sc->sc_cdp; */
- struct ifnet *ifp = (struct ifnet *)sp;
-
- if(sc->sc_state != ST_CONNECTED)
- return;
-
-#if 0 /* never used ??? */
- UNTIMEOUT(i4bisppp_timeout, (void *)sp, sc->sc_ch);
-#endif
-
- i4b_l4_drvrdisc(BDRV_ISPPP, IFP2UNIT(ifp));
-}
-/*---------------------------------------------------------------------------*
- * PPP interface phase change
- *---------------------------------------------------------------------------*
- */
-static void
-i4bisppp_state_changed(struct sppp *sp, int new_state)
-{
- struct i4bisppp_softc *sc = (struct i4bisppp_softc *)sp;
-
- i4b_l4_ifstate_changed(sc->sc_cdp, new_state);
-}
-
-/*---------------------------------------------------------------------------*
- * PPP control protocol negotiation complete (run ip-up script now)
- *---------------------------------------------------------------------------*
- */
-static void
-i4bisppp_negotiation_complete(struct sppp *sp)
-{
- struct i4bisppp_softc *sc = (struct i4bisppp_softc *)sp;
-
- i4b_l4_negcomplete(sc->sc_cdp);
-}
-
-/*===========================================================================*
- * ISDN INTERFACE ROUTINES
- *===========================================================================*/
-
-/*---------------------------------------------------------------------------*
- * this routine is called from L4 handler at connect time
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_connect(int unit, void *cdp)
-{
- struct i4bisppp_softc *sc = &i4bisppp_softc[unit];
- struct sppp *sp = &sc->sc_if_un.scu_sp;
- int s = splimp();
-
- sc->sc_cdp = (call_desc_t *)cdp;
- sc->sc_state = ST_CONNECTED;
-
-#if I4BISPPPACCT
- sc->sc_iinb = 0;
- sc->sc_ioutb = 0;
- sc->sc_inb = 0;
- sc->sc_outb = 0;
- sc->sc_linb = 0;
- sc->sc_loutb = 0;
- sc->sc_if.if_timer = I4BISPPPACCTINTVL;
-#endif
-
-#if 0 /* never used ??? */
- UNTIMEOUT(i4bisppp_timeout, (void *)sp, sc->sc_ch);
-#endif
-
- sp->pp_up(sp); /* tell PPP we are ready */
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from L4 handler at disconnect time
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_disconnect(int unit, void *cdp)
-{
- call_desc_t *cd = (call_desc_t *)cdp;
- struct i4bisppp_softc *sc = &i4bisppp_softc[unit];
- struct sppp *sp = &sc->sc_if_un.scu_sp;
-
- int s = splimp();
-
- /* new stuff to check that the active channel is being closed */
- if (cd != sc->sc_cdp)
- {
-#ifdef I4BISPPPDISCDEBUG
- printf("i4bisppp_disconnect: isppp%d channel%d not active\n",
- cd->driver_unit, cd->channelid);
-#endif
- splx(s);
- return;
- }
-
-#if I4BISPPPACCT
- sc->sc_if.if_timer = 0;
-#endif
-
- i4b_l4_accounting(BDRV_ISPPP, unit, ACCT_FINAL,
- sc->sc_ioutb, sc->sc_iinb, 0, 0, sc->sc_outb, sc->sc_inb);
-
- if (sc->sc_state == ST_CONNECTED)
- {
-#if 0 /* never used ??? */
- UNTIMEOUT(i4bisppp_timeout, (void *)sp, sc->sc_ch);
-#endif
- sc->sc_cdp = (call_desc_t *)0;
- /* do thhis here because pp_down calls i4bisppp_tlf */
- sc->sc_state = ST_IDLE;
- sp->pp_down(sp); /* tell PPP we have hung up */
- }
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is used to give a feedback from userland demon
- * in case of dial problems
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_dialresponse(int unit, int status)
-{
-/* struct i4bisppp_softc *sc = &i4bisppp_softc[unit]; */
-}
-
-/*---------------------------------------------------------------------------*
- * interface up/down
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_updown(int unit, int updown)
-{
- /* could probably do something useful here */
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when a new frame (mbuf) has been received and was put on
- * the rx queue.
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_rx_data_rdy(int unit)
-{
- struct i4bisppp_softc *sc = &i4bisppp_softc[unit];
- struct mbuf *m;
- int s;
-
- if((m = *isdn_linktab[unit]->rx_mbuf) == NULL)
- return;
-
- m->m_pkthdr.rcvif = &sc->sc_if;
- m->m_pkthdr.len = m->m_len;
-
- microtime(&sc->sc_if.if_lastchange);
-
- sc->sc_if.if_ipackets++;
- sc->sc_if.if_ibytes += m->m_pkthdr.len;
-
-#if I4BISPPPACCT
- sc->sc_inb += m->m_pkthdr.len;
-#endif
-
-#ifdef I4BISPPPDEBUG
- printf("i4bisppp_rx_data_ready: received packet!\n");
-#endif
-
-#if NBPFILTER > 0
-
-#ifdef __FreeBSD__
- if(sc->sc_if.if_bpf)
- bpf_mtap(&sc->sc_if, m);
-#endif /* __FreeBSD__ */
-
-#ifdef __NetBSD__
- if(sc->sc_if.if_bpf)
- bpf_mtap(sc->sc_if.if_bpf, m);
-#endif
-
-#endif /* NBPFILTER > 0 */
-
- s = splimp();
-
- sppp_input(&sc->sc_if, m);
-
- splx(s);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * when the last frame has been sent out and there is no
- * further frame (mbuf) in the tx queue.
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_tx_queue_empty(int unit)
-{
- i4bisppp_start(&i4bisppp_softc[unit].sc_if);
-}
-
-/*---------------------------------------------------------------------------*
- * this routine is called from the HSCX interrupt handler
- * each time a packet is received or transmitted. It should
- * be used to implement an activity timeout mechanism.
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_activity(int unit, int rxtx)
-{
- i4bisppp_softc[unit].sc_cdp->last_active_time = SECOND;
-}
-
-/*---------------------------------------------------------------------------*
- * return this drivers linktab address
- *---------------------------------------------------------------------------*/
-drvr_link_t *
-i4bisppp_ret_linktab(int unit)
-{
- return(&i4bisppp_drvr_linktab[unit]);
-}
-
-/*---------------------------------------------------------------------------*
- * setup the isdn_linktab for this driver
- *---------------------------------------------------------------------------*/
-void
-i4bisppp_set_linktab(int unit, isdn_link_t *ilt)
-{
- isdn_linktab[unit] = ilt;
-}
-
-/*---------------------------------------------------------------------------*
- * initialize this drivers linktab
- *---------------------------------------------------------------------------*/
-static void
-i4bisppp_init_linktab(int unit)
-{
- i4bisppp_drvr_linktab[unit].unit = unit;
- i4bisppp_drvr_linktab[unit].bch_rx_data_ready = i4bisppp_rx_data_rdy;
- i4bisppp_drvr_linktab[unit].bch_tx_queue_empty = i4bisppp_tx_queue_empty;
- i4bisppp_drvr_linktab[unit].bch_activity = i4bisppp_activity;
- i4bisppp_drvr_linktab[unit].line_connected = i4bisppp_connect;
- i4bisppp_drvr_linktab[unit].line_disconnected = i4bisppp_disconnect;
- i4bisppp_drvr_linktab[unit].dial_response = i4bisppp_dialresponse;
- i4bisppp_drvr_linktab[unit].updown_ind = i4bisppp_updown;
-}
-
-/*===========================================================================*/