                            
   ISDI Version 2.5, a NDIS-2 Driver for ISDN-API 1.1
                            
              Herbert Hanewinkel, Sept 1995
                            
                            

ISDI is Shareware
 
 ISDI,  as  it is provided, is a demo version. To make use  of  the
 full  functionality of ISDI you have to register ISDI.  The  basic
 registration  fee for a single user version of ISDI  is  DM  70,-.
 Please read the file "ISDI.REG" for details.
 
 As long as you have NOT registered ISDI you may test ISDI using  a
 ?  in  place of the registration code. In this case ISDI will stop
 forwarding data after 20 min.
 
 
Disclaimer

 The program and this documentation is
      Copyright (C) 1994, 1995 by Herbert Hanewinkel,
      All Rights Reserved.
 
 It is provided as shareware with the following limitations:
 
 This  program  is copyrighted and it is not in the public  domain.
 It  may not be distributed for profit or included in any CD-ROM or
 diskette  software collection without permission. This applies  in
 particular to commercial PD libraries. The program is  not  to  be
 resold  or distributed for sale with other programs which are  for
 sale without my express written permission.
 There  is  no  warranty or claim of fitness  or  reliability.  The
 program is distributed AS IS, and as such the author shall NOT  be
 held  liable for any loss of data, down time,  loss of revenue  or
 any  other  direct  or indirect damage or claims  caused  by  this
 program.
 
 If  you  are  a  distributor of ISDN products and  would  like  to
 distribute  unregistered  versions of this  software  or  to  sell
 registered  versions  of  this software  with  printed  hard  copy
 manuals,  please  contact  me. You may  not  bundle  or  otherwise
 distribute  this  software  with any  other  software  without  my
 express  written permission (i.e., on the same diskettes  as  part
 of  a  commercial  package, compressed along with other  software,
 etc.).
 
 
Overview

 ISDI  is  a  (realmode)  NDIS-2 Driver for  IP-Routing  or  remote
 Ethernet bridging over ISDN. ISDI communicates with the ISDN  card
 using  the  ISDN  API  1.1 specification (a  standard  defined  by
 German  ISDN  card manufacturers and the German Telekom).  Because
 of   this,  ISDI  is  completely  hardware  independent  and   has
 successfully been tested with many active or passive ISDN cards.
 
 ISDI  was  developed for Internet access over ISDN from  WfW  3.11
 and  MSTCP-32. ISDI has successfully been tested with  Win95  beta
 releases. ISDI is also known to work with other NDIS based  TCP/IP
 packages for DOS and Windows, e.g. ChameleonNFS.
 
 ISDI  can  be  used  with standard DOS CAPI 1.1  software  or  VxD
 implemenations  of   the  CAPI  1.1 software.  Using  a  VxD  CAPI
 implementation, ISDI is available only under Windows but it  frees
 a lot of DOS memory otherwise used by the CAPI software.
 
 ISDI  supports  a  large set of protocols for  communication  with
 other vendors ISDN routers or servers. Among these protocols  are:
 LAPB, Frame-Relay, PPP, SLIP, Cisco-HDLC.
 
 Some  protocols  conserve  the protocol type  over  point-to-point
 lines  (multi-LAPB, Frame-Relay, Cisco-HDLC). These protocols  are
 able  to handle multiprotocol routing. For PPP only IP support  is
 implemented at the network configuration layer.
 
 ISDI  can  communicate  at  least with  the  following  commercial
 systems:
 Ascend  Routers,   AVM  MPR  3.0,   Biodata  ISDN  Router,   Cisco
 Routers,   Conet S2M Router,  INS/CLS Banzai ISDN  Router,   netCS
 ISDN  Router, RzK SLIP Bridge,  SGI Indy ISDN 1.0 &  1.1,   Spider
 Routers,  SunLink ISDN 1.0 & 1.0.2.
 
 ISDI  is  a  MS-DOS TSR program for use with TSR or VxD  CAPI  1.1
 implementations.ISDI was written for use with ISDN BRI  PC  cards.
 I  myself have used ISDI only with Teles.S0 cards and tested  ISDI
 successfully  with NCP cards. But I got responses  from  users  of
 ISDI  that  it  will work at least with the following  other  ISDN
 cards:
 
 AVM A1, B1
 Creatix S0/16
 Diehl Diva, Quadro, SCOM, S0Tec
 Elsa ISDN/PCF, MicroLink
 ITK
 Loewe ISCOM C100
 MIRO connect P1000
 mbp Solis
 NCP P8, P16,  A
 Dr. Neuhaus NICCY 1000 PC
 RFI HOTISDN ISDN-PCMCIA-Controller
 Sedlbauer S0, SpeedBox par. Port, PCMCIA Adapter
 Teles.S0/8, S0/16
 
 (Check for a related *.txt file in ftp.biochem.mpg.de/pc/isdn,  if
 you are looking for details on a specific environment).
 
 The  current  version  of  ISDI supports  two  independent  active
 connections at a time. Alternativly a connection can use  both  B-
 channels  for loadsharing. ISDI can be loaded more than  once,  if
 more  than  two  simultaneous connections to different  sites  are
 desired.  Loadsharing  can  be configured  as  static  or  dynamic
 (bandwidth   on   demand).  Dynamic  loadsharing   can   be   used
 concurrently with a second independent connection.
 
 Loadsharing  over two channels is implemented using  simple  round
 robin  scheduling, because IP doesn't require the original  packet
 sequence.  This is completely hardware independent  and  supported
 by  many router systems. It works the same way as Cisco implements
 loadsharing over to X.21 interfaces and I have tested ISDI with  a
 Cisco  Router and two Philips TA's. With this kind of  loadsharing
 it is possible to get a performance of up to  around 13kBytes/s.
 
 The  latest version of ISDI is available on ftp.biochem.mpg.de  in
 directory /pc/isdn.

Installation
 
 To  use  ISDI  you have to set up a configuration file  with  your
 ISDN  configuration as described below. The default name for  this
 file is ISDI.INI.
 
 To  load the NDIS-2 Driver into memory run ISDI.EXE before binding
 the NDIS modules (before executing "netbind" or "net start").
 For  standard DOS CAPI implementations you have to load ISDI after
 starting  your  CAPI 1.1 software. If ISDI can not find  the  CAPI
 software,   ISDI  disables  itself  and  waits  for   a   VxD-CAPI
 implementation.
 
 ISDI.EXE accepts the following arguments:
 (Parameters in [ ] are optional, if not given a default is used)
 
 ISDI  RegCode [ConfigFile] [CtrlInterrupt]
 
 "RegCode"  is  your personal registration code  you  will  receive
 after  registration  of ISDI. As long as you have  NOT  registered
 ISDI  you  may  test ISDI using a ? in place of  the  registration
 code. In this case ISDI will stop forwarding data after 20 min.
 
 "ConfigFile"  specifies the name of the ISDI  configuration  file.
 If  the  name  is  not  given,  it  defaults  to  "ISDI.INI".  The
 configuration  file  is  a readable text file.  Read  the  section
 "Setting up an ISDI configuration file" below for creating  up  an
 ISDI configuration file.
 
 "CtrlInterupt" allows you to specify a software interrupt  in  the
 range 0x60 to 0x80 for controlling ISDI with ISDICTL.EXE. The  use
 of  the software interrupt is optional and there is no default for
 this argument.
 
 
 
 Installation in a NDIS-1 environment
 
 ISDI  is  a NDIS-2 compliant MAC driver. Multiple protocol modules
 can bind to ISDI. To include ISDI in your NDIS configuration:
 
 1.Unpack the ISDI software into a directory, e.g.: C:\ISDI
 
 2. In  the  ISDI directory create a ISDI.INI file with the desired
    ISDN configuration.
 
 3. Set-up an entry for ISDI in the NDIS PROTOCOL.INI file
 
    [ISDI]
    Drivername=ISDI.EXE
    
 4.The  protocol  module you want to bind to ISDI should  reference
    the  ISDI  MAC  driver section with a "BINDINGS" entry  of  the
    form:
    
    BINDINGS=ISDI
    
 5.Load   ISDI   by  starting  ISDI.EXE  with  your  arguments   in
    AUTOEXEC.BAT before running netbind. Check also that the device
    PROTMAN.DOS is loaded in CONFIG.SYS.
 
    C:\ISDI\ISDI ? C:\ISDI\ISDI.INI
    C:\....\NETBIND
    
    Registered  users  replace the ? by the  received  registration
    code.
 
 6.Reboot your system.
 
 
 Installation   in  WfW  3.11  and  Windows  4  (Win95)   (NDIS-2/3
 environment)
 
 1.Unpack the ISDI software into a directory, e.g.: C:\ISDI
 
 2. In  the  ISDI directory create a ISDI.INI file with the desired
    ISDN configuration.
 
 3.Use Netsetup to install ISDI.
 
    Select "Add adapter"
    Select "OEM provided adapter" in directory C:\ISDI
    Add  the  TCP/IP Protocol and remove all other protocols   from
    the adapter.
    Configure the TCP/IP parameters.
    
 4.Add  two  lines before the line with "C:\WINDOWS\NET  START"  to
    your "AUTOEXEC.BAT" file, so that the whole entry looks like:
    
    C:\WINDOWS\NET INIT
    C:\ISDI\ISDI ? C:\ISDI\ISDI.INI 0x79
    C:\WINDOWS\NET START
    
    Registered  users  replace the ? by the  received  registration
    code.
 
 5.(WfW  only) After rebooting call a DOS-shell inside Windows  and
    run "IPCONFIG". It should display your TCP/IP parameters.
 
 6.Test  your  set-up  with a ping in the DOS-shell.  Dialing  ....
    should be displayed and the connection should come up.
 
 Attention:
 The  NETBIOS  based WfW 3.11 peer-to-peer network can  operate  on
 different  transport protocols (NETBEUI, DECnet,  TCP/IP).   After
 installing  MS-TCP32, WfW and Win95 send broadcast  messages  also
 over   TCP/IP  to  look-up  other  nodes.  If  you  don't  disable
 broadcast's  in  ISDI, this will trigger an ISDN connection  every
 time  a  broadcast packet is sent. You can disable  broadcasts  in
 ISDI  by  either specifying a dedicated ip-address  (not  0.0.0.0)
 for  the ISDN peer or setting a flag-bit of the d-option (Bit  9).
 Using the d-option, broadcasts will not keep the line up and  will
 not  trigger  a  new  connection,  but  the  peer-to-peer  network
 capabilities are available over ISDN after opening a connection.
 
 
 Installation for ChameleonNFS
 
 1.Unpack the ISDI software into a directory, e.g.: C:\ISDI
 
 2.In  the  ISDI directory create a ISDI.INI file with the  desired
    ISDN configuration.
 
 3.Start the program "Custom".
 
 4.Select a new interface of type "Ethernet".
 
 5.Select hardware and vendor "Other".
 
 6.Enter:
    Section name:  ISDI
    Driver  name:  ISDI
    File:          C:\ISDI\ISDI.DOS
 
 7.Continue with configuration from "Custom".
 
 8.Custom  creates  a  PROTOCOL.INI and add the following  line  to
    AUTOEXEC.BAT C:\NETMANAG\NETBIND
    
    Just ahead of this line you have manually to add your lines to:
    a)   start the CAPI 1.1 software of your  ISDN-card (if using a
    DOS CAPI).
    b)   start ISDI
    
    e.g.:
    
    C:\ISDI\ISDI ? C:\ISDI\ISDI.INI
    C:\NETMANAG\NETBIND
    
    Registered  users  replace the ? by the  received  registration
    code.
 
 9. Reboot and check your configuration.
 
 
 
Setting up an ISDI configuration file

Structure of the configuration file

 The configuration file consists of the following formal parts:
 
 [global options]
 [translation entry for incoming calls from numbers not specified]
 [translation entries for incoming and outgoing calls]
 
 The  first  section is optional, but there has to be at least  one
 of the two types of translation entries.
 
 The  global  options  control  ISDI's  overall  behaviour.  Global
 options  can  be  specified  on one or more  lines.  Examples  for
 global option:
      -c0  # controller 0
      -u   # only one active channel
      -w   # active display on DOS screen
 
 See the "Global options" section below for a complete reference.
 
 The  second and third part consist of translation entries  to  map
 IP-addresses   to  ISDN  numbers  and  to  select  peer   specific
 parameters for these entries.
 
 The  translation  entries  in  the  configuration  file  have  two
 functionalities:
 
 - they  act  as  a  translation table for IP routing  on  outgoing
    calls  by mapping the IP-address of the peer to an ISDN number.
    They don't operate as a routing table.
 
 - they  are used for calling line identification (CLI) on incoming
    calls.
 
 Incoming  connections  will be accepted  only  from  ISDN  numbers
 specified  in  the configuration file. To disable  CLI  and  allow
 incoming  calls from any number, the first translation  entry  has
 to  contain  a  '*' in the common part of ISDN number  field.  For
 incoming  calls  from  ISDN numbers not otherwise  specified,  the
 parameters of  this entry will be used.
 
 The  translation entries in the file have to be in  the  following
 format:
 
 ip-address  ISDNnumber  [ISDNnumber2]  [options]  [# comment]
 
 "ip-address" defines the IP-address of the peer.
 "ISDNnumber" defines the ISDN number of the peer.
 "ISDNnumber2"  defines  a  second  ISDN  number,  when  used  with
 loadsharing.
 "options" define the protocol, time-out, ... for this link.
 
 If   the   same   IP-address  appears  more  than  once   in   the
 configuration file, ISDI will try all corresponding  ISDN  numbers
 until a connection  an be established.
 
 Attention:  If the first entry in the configuration  file  selects
 an  ethernet bridging protocol, the use of the configuration  file
 as  a  translation  table  for outgoing  calls  is  disabled.  All
 outgoing calls will be set up to the first entry. Further  entries
 will be used only for CLI of incoming calls.
 ISDI  can  operate only in routing or bridging mode. You  can  not
 mix   entries   with  routing  and  bridging  protocols   in   the
 configuration file.
 
 ISDI  supports  IP-address based routing (as it is implemented  in
 MS-TCP32) as well as interface based routing of IP packets.
 
 For IP-applications not supporting IP-address based routing or  in
 case   of   simple   point-to-point   configurations,   a   single
 translation entry for outgoing calls may be specified with an  IP-
 address  of  0.0.0.0. In this case no further translation  entries
 for  outgoing  calls are allowed and all IP packets  (unicast  and
 broadcast)  sent from the application are forwarded  to  the  ISDN
 peer.
 
 For  translation entries having a non zero IP-address only unicast
 IP  packets  routed  via  this IP-gateway  are  forwarded  to  the
 corresponding ISDN peer. In this case the IP-address has to  match
 the   (or   one  of  the)  IP-gateway  address(es)  in  your   IP-
 configuration of your application software.
 
 Up   to   64   translation  entries  can  be  specified   in   the
 configuration  file.  Loadsharing entries to  two  different  ISDN
 numbers allocate two entries.
 
 
Global options:

  ip-address
   defines  a static local IP-address for use with PPP negotiation.
    You can not combine the IP-address with other global options on
    one line.
  
  -a
   disables  the  auto-dialler. If not selected ISDI will  dial-on-
    demand.
   default: auto-dialler enabled
  
  -c n
    selects  the ISDN controller (card), n specifies the controller
    number.
    default: 0
    
  -i vector
    specifies  the  software interrupt for communication  with  the
    Common ISDN-API 1.1 software.
    default: 0xf1
    
  -o
    if  ISDI's  automatic  selection of the video-RAM  fails,  this
    option  can  be  used to force screen output to the  monochrome
    video-RAM at B000:0.
    
  -e EAZ | index
    German  ISDN  (1TR6) allows to specify 1 digit subaddress(EAZ).
    This option defines the EAZ used by ISDI to listen for incoming
    calls.  The EAZ will be appended to the basic local address  on
    outgoing  calls. EAZ's range from 1 to 9. In 1TR6 EAZ  0  means
    accept all EAZ's.
    
          For EuroISDN this option defines an index in the range  0
    to  9. If your EuroISDN BRI supports MSN's (multiple subscriber
    numbers)  this  option defines an index into a table  of  local
    addresses  defined  during installation of  your  ISDN-API  1.1
    software.  The address defined for this index will be  used  as
    the  local  address on outgoing calls and will  match  incoming
    calls.
         default: 2
    
  -k setup[,sleep[,callbackwait]]
    specifies  the set-up time in seconds. ISDI will  wait  "setup"
    seconds for a connection to come up. If the connection does not
    reach  the  active  state during this  time,  ISDI  resets  the
    channel.  The "sleep" parameter allows you to modify the  delay
    between   a   disconnect  and  the  next  dial   request.   The
    "callbacklwait"  parameter allows  you  to  specify  the  delay
    before ISDI will call-back.
         defaults: 10,5,2 seconds
    
    
  -z days[e]
    forces  an  automatic restart of the PC after  "days"-days,  as
    soon  as the system becomes idle. "days" should be in the range
    from  1 to 2761. Appending an "e" to the number of days enables
    automatic restart of the PC if ISDI receives an error from  the
    ISDN  API 1.1 software. Specifying "0e" enables only reboot  on
    errors.
         default: disabled
    
  -q
    suppresses any message output on the screen.
  
  -v
    ISDI  tries  to allocate buffers for the CAPI in  upper  memory
    (UMB).  This  option disables this feature and  ISDI  will  use
    conventional memory at the top of the DOS memory for  the  CAPI
    buffers. Don't use this option, if you are running Windows.
    
  -r log-ip,my-ip[,interval][c]
    remote  logging on a UNIX host with a syslogd. Using ISDI  with
    IP-Router  software  this  option  can  be  used  to  log   all
    connection  related  messages on a UNIX host  with  a  Berkeley
    syslogd.
    "log-ip" defines the IP address of the UNIX host.
    "my-ip"  defines the source IP address of syslog messages  sent
    by  ISDI  (a packet driver can not automatically retrieve  this
    information from the router).
    If  "interval" is specified and a connection is  up,  a  syslog
    message  will  be  sent  every  "interval"-seconds.  "interval"
    should  be a multiple of 8, otherwise it is internally  rounded
    up to the next multiple of 8.
    Appending  a  "c"  to interval will send a syslog  message  for
    every charge message received from the CAPI software.
    If the ip-addresses are set to 0.0.0.0 messages are sent to the
    screen.
    Syslog-messages    are    sent   with    the    characteristics
    "local0.info".
    
  -w
    Display  activity, state and charge information  in  the  upper
    right  corner  of  the screen. The display  has  the  following
    layout:
              /0_\0_APnnn
    
    The symobls mark from left to right:
    
    -outgoing data, the symbol rotates for every transmitted
      packet
    -outgoing data rate on channel 1 in kBytes/sec, averaged over
      8 seconds
    -outgoing data rate on channel 2 in kBytes/sec, averaged over
      8 seconds
    -incoming data, rotates for every received packet
    -incoming data rate on channel 1 in kB/sec, averaged over 8
      seconds
    -incoming data rate on channel 2 in kB/sec, averaged over 8
      seconds
    -Status of channel 1
    -Status of channel 2
    -accumulated charge units for open connections
    
    
    Status:
          _ = free,
          D = D-channel up,
          C = B-channel requested,
          B = B-channel up,
          A = connection set up,
          additional information for PPP:
          L = LCP configuration up,
          I = PAP configuration up, IPCP configuration started,
          P = PPP connection up
  
  -u
    Limits  ISDI  to  one active connection at a  time.  This  will
    reduce ISDI's memory requirement by 20kB. Selecting loadsharing
    (-m) overrides this option.
    
  -j low[,high]
    defines  an ethernet type range for ethernet bridging. Ethernet
    packets  with  type  values  outside  the  selected  range  are
    discarded.     This filter applies to all bridging protocols.
    "low" defines the lower boundary. default: 0
    "high" defines the upper boundary. default: 0xffff

Translation entry format
 
 IP-Address
 
 IP  addresses  should be specified in standard dot  format.  e.g.:
 141.61.1.23
 
 
 ISDN number and related features of ISDI
 
 PBX's  sometimes require a special key-code for dialling  out.  If
 this prefix is not displayed on incoming calls, Dial back and  CLI
 will  normally  fail.  To  solve this  problem  ISDI  supports  an
 outgoing call prefix, which is not checked on incoming calls.  The
 prefix can be specified in front of each ISDN number separated  by
 a comma.
 
 Digits, which should not be used in an outgoing call, but have  to
 be  present  for  CLI can be marked by a decimal  point  from  the
 common part of the number.
 
 Examples:
 089.345678  will  dial 345678 and will match incoming  calls  from
 089345678.
 
 0,30.123456 will dial 0123456 and will match incoming  calls  from
 30123456.
 
 00,123456789  will dial 00123456789 and will match incoming  calls
 from 123456789.
 
 Subaddresses (available only in EuroISDN, E-DSS1) can be  appended
 to  a  number  by  separating  them with  a  /.  Only  digits  are
 supported in a subaddress.
 
 The  total  length  of  number  +  subaddress  is  limited  to  26
 characters.
 
 A  SPV connection (available only in German ISDN, 1TR6) is set  up
 by  appending  an "s" to the end of the ISDN-number.  An  incoming
 SPV request is accepted only if the "s" is specified.
 
 The  CAPI  standard  doesn't define a standard set-up  for  PVC's.
 Teles,  Berlin  supports  PVC's (Digitale  Festverbindungen  D64s)
 using  a  pseudo ISDN number "tap" and selecting  one  of  the  B-
 channels.   ISDI   supports  this  feature  of  the   Teles   CAPI
 implementation  and  allows  the  selection  of  a  PVC  with  the
 specification "1tap" or "2tap", depending on the desired  channel,
 for the ISDN number.
 
 Translation entry options:
 
  ISDI supported protocols:
   (only one protocol can be used for one peer)
  
  -f dlci[i]
    Frame-relay protocol. "dlci" specifies the data link connection
    identifier. Appending an "i" to the dlci switches encapsulation
    from "early" style to IETF format as described in RFC 1294 (but
    without fragmentation support, a data size of 1500 is assumed).
    
  -p
    Point-to-Point  protocol using default PPP-parameters.  Of  the
    possible  upper layer protocols, only IP is supported  at  this
    time.
    From the PPP configuration options PPP PAP is supported in both
    directions.  With the -n option an id/password combination  can
    be  specified for each remote site. With the -g option a  local
    id/password can be defined for each peer.
    ISDI accepts the following PPP options from the remote site:
    -LCP MRU requests with values greater or equal to 1500.
    -     LCP protocol field compression
    -     LCP address and control field compression.
    -IPCP  IP-ADDRESS  requests.  The received  ip-address  can  be
      retrieved
     from an IP application program via RARP.
    
         Additional options for use with PPP. These options have to
    be specified after the protocol selection option.
    
    -n    id,password
      Userid/password  combination for the  remote  PPP  site.  The
      authentication  string  is  send only,  if  the  remote  site
      requests   Password   authentication   during   PPP    option
      negotiation.
      
    -g    id,password
      Defines  a  local userid/password combination.  Incoming  PPP
      connections are accepted only if the remote site  sends  this
      userid/password combination.
      
  -h type
    other HDLC based protocols
    type = 0  IP-Data, no header
    type  =  1   IP-Data,  X.75 unnumbered information  frame  (UI)
    header
    type = 2  Cisco style HDLC header
    type = 3  Ethernet bridging
  
  -l type
         LAPB (X.75) based protocols (caller=DCE, window=7, mod 8)
    type = 0       IP-Data, no header,
    type = 1       multi-X.75  (called LAPB encapsulation  on  ACC-
              Routers or multi-LAPB encapsulation on Cisco routers)
    type = 2[,login]    Asynchronous PPP (with Byte-Stuffing)
    type = 3       Ethernet bridging
    type = 4       T.70 NL
    type = 5[,login]    SLIP
    type  = 6[,login]    Ethernet bridging using SLIP encapsulation
    (SLX)
    
         For the "login" parameter see below (-y Option).
    
  -b baudrate[,login]
    asynchronous  point-to-point-protocol  (PPP)  with  V.110  bit-
    stuffing. "baudrate" defines the desired transfer rate.
    baudrate = 9,  9600 baud,  async, 8 bit, no parity, 1 stop bit
    baudrate = 19, 19200 baud, async, 8 bit, no parity, 1 stop bit
    baudrate = 38, 38400 baud, async, 8 bit, no parity, 1 stop bit
    
    For the "login" parameter see below (-y Option).
    
  -s baudrate[,login]
    SLIP  protocol with V.110 bit-stuffing. "baudrate" defines  the
    desired transfer rate.
    baudrate = 9,  9600 baud,  async, 8 bit, no parity, 1 stop bit
    baudrate = 19, 19200 baud, async, 8 bit, no parity, 1 stop bit
    baudrate = 38, 38400 baud, async, 8 bit, no parity, 1 stop bit
    
    For the "login" parameter see below (-y Option).
    
  -y baudrate[,login]
    SLX  (Ethernet bridging using SLIP encapsulation) protocol with
    V.110   bitrate  adjustment.  "baudrate"  defines  the  desired
    transfer rate.
    baudrate = 9,  9600 baud,  async, 8 bit, no parity, 1 stop bit
    baudrate = 19, 19200 baud, async, 8 bit, no parity, 1 stop bit
    baudrate = 38, 38400 baud, async, 8 bit, no parity, 1 stop bit
    
    
    
    login = expect1/send1,expect2/send2,...
    A  sequence of strings to send for asyncPPP or SLIP/SLX  login.
    To  adapt  to  the different kinds of login sequences  used  by
    asyncPPP/SLIP servers, ISDI uses an expect/send sequence.  Each
    "send"  string will be automatically terminated  by  a  RETURN.
    This  way  an  empty string field will send  a  single  RETURN.
    Special  characters can be included in the strings by  escaping
    with  "\" and specifying the ASCII code of the character  (e.g.
    \32 will insert a space).  If required,  the ascii code may  be
    terminated by a ".".  Additionally "\," will insert a comma and
    "\/"  will  insert  a  slash,  otherwise  used  for  separating
    strings.  A "\." will insert a literal "." after an ASCII  code
    and  "\\"  will insert a single "\". ISDI shows all  characters
    received  and will switch to SLIP mode after sending  the  last
    string.  The total length of the string sequence is limited  to
    64 characters.
  
  default protocol: -h0
  
  
 Other translation entry options:
 
  The  following  options can be specified  for  each  ISDN  number
  entry in the configuration file:
  
  -t max-idle[,min-idle[s]]
    an  idle  connection  will  be disconnected  after  "max-idle"-
    seconds. Setting "max-idle" to zero disables shutdown  of  idle
    connections.  Specifying a "min-idle" value  lower  than  "max-
    idle",  an outgoing (charged) connection will be hold at  least
    "min-idle"  seconds, it will be closed down shortly before  the
    next  charge unit is exceeded or max-idle expires. The time  of
    one  charge  unit  is  calculated  from  the  first  two  units
    received.  max-idle may be used to specify the  length  of  the
    first charge-unit.
    
    To  use adaptive timeout without advice-of-charge an "s" can be
    appended  to  the min-idle value. In this case advice-of-charge
    messages  are  simulated by ISDI. The max-idle value  specifies
    the length of a charge unit.
    
    default: max-idle: 300 seconds, min-idle: disabled
  
  -m high[,low]
    static or dynamic loadsharing over both s0-channels.
    "high"  = 0, static loadsharing, the caller will always try  to
    activate both channels.
    "high"  <>  0, dynamic loadsharing, if the load is higher  than
    6000 Bytes/sec for "high"-seconds, the system will activate the
    second channel. After "down"-seconds of a load lower than  6000
    Bytes/sec the second channel will be closed down. If "down"  is
    not specified, the "max-idle" Time-out will be used (see option
    -t).
    A  -m  option  has  to be specified at both  ends  of  a  link.
    However, only the caller of the first channel will activate the
    second channel.
    The  values  for  "high" and "low" should be  multiples  of  8,
    otherwise they will be rounded up to next multiple of 8.
    
    To  set  up  loadsharing to different target  ISDN  numbers,  a
    second ISDN number can be specified for each translation entry.


  -d flags
    
    Specifies ISDI's mode of operation and various flags:
    The "flags" parameter is interpreted as a 16 Bit value with the
    following meaning:
    
    Bit 0-2: Operation mode:
    mode = 0, outgoing calls are disabled.
    mode = 1, incoming and outgoing calls are allowed.
    mode = 2, an outgoing call is dropped after sending the connect
         request and the system waits for a call back.
    mode =  3,  incoming calls are rejected but trigger an outgoing
         call to the received ISDN number.
    mode = 4, incoming calls are disabled.
    
    Bit 3-7: unused
    Bit 8:   Don't reset disconnect timer on received packets.
    Bit 9:    Don't  reset  disconnect timer on  sending  broadcast
         packets. Don't open a connection by broadcast packets.
    Bit 10:  Send broadcast packets over this link.
    Bit 11:   Operate as an IP-address provider for PPP.  (If  this
         is a PPP link and the IP-address of this entry isn't zero,
         tell the peer which IP-address he has to use.)
    
    default: 1, incoming and outgoing calls enabled
    
  -a service
    (specific  to German ISDN, however the API software should  map
    the values to corresponding EuroISDN codes)
    Additional  service indicator and service indicator  selection.
    The  high byte of the argument "service" redefines the  service
    indicator   the   low-byte  defines  the   additional   service
    indicator.  Some  ISDN  equipment  (e.g.  Elink  TA)  use   the
    additional  service  indicator field to selected  a  predefined
    mode/protocol  of operation. However there is no  standard  for
    this field.
    ISDI sets "service" to 0x700 with the following exceptions:
    
    service = 0x7c5:    -s 9,     -y 9
    service = 0x7c7:    -s 19,    -y 19
    service = 0x740:    -s 38,    -y 38
    
    The  option allows to override the default value with your  own
    value.  (To override the protocol specific default,  the  value
    has to be positioned after the protocol option on the line.)
    
    To use the ISDN service "X.21 Services" in German national 1TR6
    ISDN use a "service" value of "0x30c".

Additional features

 1.    Dynamic IP address assignment:
   ISDI  supports dynamic IP address assignment by a remote  system
   via RARP and the PPP IPCP IP-ADDRESS negotiation:
 
   -(Make  sure  that  your peer supports the PPP  IPCP  IP-ADDRESS
     option.)
   -Configure your IP software for use with RARP.
   -Use  ISDICTL  -d   CtrlInt [ip-address] to manually  set  up  a
     connection.
   -(Check the received IP address with ISDICTL -i CtrlInt.)
   -Start your IP software.
    
 2.     Ascend Routers use the PPP IPCP IP-ADDRESS negotiation  for
   remote  system identification. They don't support asking for  an
   IP-address  using  PPP IPCP IP-ADDRESS negotiation(as  described
   above).  For Ascend Routers ISDI has to provide the correct  IP-
   address  to the peer. To accomplish this you can set  the  local
   IP-address  as  a global option in the configuration  file.  You
   can modify the ip-address to any desired value using ISDICTL  -i
   <pkt-int> <ip-address>
 
 3.     ISDI  can  operate  as  an  IP  address  provider  for  PPP
   connections. This feature can be enabled on a peer  basis  using
   a flag of the -d option.
 
 
Controlling and Monitoring
 
 If  you  have  started  ISDI  with a  CtrlInterrupt,  the  Windows
 utility program ISDNMON.EXE allows you to:
 
 -monitor  the status of the ISDN connections and display  the  IP-
   address received via PPP IP-address negotiation:
 -manually  set  up a connection. If the connection  is  configured
   for  PPP  with  authentication,  the  program  prompts  for  PPP
   username and password.
 -manually terminate all connections.
 -to check the configuration.
 
 ISDNMON.EXE  tries to locate ISDI automatically  searching  for  a
 signature.  Optionally you may specify the "CtrlInterrupt"  as  an
 argument to attach ISDNMON.EXE to a dedicated ISDI Driver.
 
 If  you  have  started ISDI with a CtrlInterrupt, the DOS  utility
 program ISDICTL.EXE allows you to:
 
 -manually set up a connection:
       ISDICTL -d CtrlInterrupt ip-address-of-peer
 
 -manually terminate all connections:
       ISDICTL -c CtrlInterrupt
 
 -to check the parameter table:
       ISDICTL -p CtrlInterrupt
 
 -to display/set the IP-address for PPP IP-address negotiation:
       ISDICTL -i CtrlInterrupt [ip-address]
 
 -to read out the connection statistics:
       ISDICTL CtrlInterrupt
 
 -to reset the connection statistics:
       ISDICTL -z CtrlInterrupt
 
 -to toggle the auto-dialler state
       ISDICTL -o CtrlInterrupt

 
Ethernet characteristics
 
 ISDI  works  as  an  ethernet  type NDIS-2  Driver.  The  ethernet
 address  of ISDI is defined as: 00-00-0xFB-0xAA-00-01. (Thanks  to
 RzK,  Asbach, Germany for using numbers from their official 00-00-
 0xFB range.)
 
 The  ethernet address of ISDI is settable by software via the NIDS
 interface.  This way the ethernet address can be  changed  to  any
 other desired value.
 
 Changing the ethernet address may be required when connecting  two
 ISDI's   with  direct  applications  using  an  ethernet  bridging
 protocol.
 
 
 
Examples
 
  1.      a  simple  point-to-point  configuration  to  connect   a
    standalone PC to an IP provider. Local IP address 141.61.224.5.
    The  IP Provider has a nameserver with address 141.61.1.32. The
    connections uses PPP protocol and the PC has to identify itself
    using  the  id  "guest"  and password "gast".  Because  the  IP
    address  in the ISDI configuration file is specified as 0.0.0.0
    ALL  packets will be send to the peer 0815712345. This  way  NO
    gateway IP address is required in the IP configuration.
 
    ISDI ?
    
    ISDI.INI:
    -u        # only only one active channel
    -w        # activity display
    0.0.0.0 089987654 -p -nguest,gast -t60  # timeout 60 sec
    
    
    And the IP configuration for the PC in format of wattcp.cfg
    my_ip=141.61.224.5
    netmask=255.255.255.0         # netmask
    nameserver=141.61.1.32        # nameserver
    nameserver=141.61.1.23        # alternate nameserver
    domainslist="biochem.mpg.de"
    
 2.ISDI  set  up in a multipoint configuration as a dial-in  server
    with  no outgoing connections. All connections are logged  with
    the   remote  logging  feature  in  the  syslog  file  of  host
    141.61.1.32.  The syslog messages will appear  as  coming  from
    141.61.224.1.  The  protocol for incoming  calls  from  unknown
    numbers is PPP with identification "guest" and password "gast".
    The net 141.61 is connected to the Internet via 141.61.1.1. The
    ISDI and PCROUTE configuration will allow the PC of example  1.
    to dial in as an unknown ISDN peer and connect to the Internet.
    ISDI  can  handle two active connections, but only one  unknown
    peer at a time.
    
    ISDI ?
    
    ISDI.INI:
    -r141.61.1.32,141.61.224.1           #   remote   logging    on
    141.61.1.32
    -e4                 # local EAZ 4
    #
    141.61.224.5 * -p -gguest, gast -t30    # no CLI, protocol PPP
    141.61.224.2 0815712345 -d0 -t60   # incoming from 0815712345
    141.61.224.3 08912345 -h1 -d0 -t60 # incoming from 08912345
    141.61.224.4 08923456 -l1 -d0 -t60 # incoming from 08923456
    
    and the corresponding pcroute configuration:
    Interface 1 (Ethernet):  141.61.1.200  255.255.255.0
    Interface 2 (ISDN)    :  141.61.224.1  255.255.255.0
    Routes:             Net:  0.0.0.0  Gateway:  141.61.1.1
    
 3.ISDI  in  point-to-point configuration with dynamic Loadsharing.
    The  second link will be established after 10 seconds of a load
    higher  than 6000 Bytes/sec and will be closed after 20 seconds
    of a load lower than 6000 Bytes/sec.
 
    ISDI ?
    
    ISDI.INI:
    -e4
    -w
    0.0.0.0 0815712345 -h2 -m10,20 -t90
    
 4.ISDI  in  multipoint  configuration.  For  incoming  calls  from
    unknown numbers the -h1 protocol will be used. At CtrlInterrupt
    for use by ISDICTL.EXE or ISDNMON.EXE at 0x79.
 
    ISDI ? ip2isdn 0x79
    
    IP2ISDN  (ISDI configuration file):
    -e4 -w                   # global options
    2.0.0.6 * -h1 -t60            # other incoming calls
    2.0.0.1 089.89512300 -f100i -t200,30     # ietf frame-relay
    2.0.0.2  089.89512301 -h2 -t20,5 -m8,30 # cisco-hdlc,  dynnamic
    loadsharing
    2.0.0.3 0033,815711111 -d0 -t40           # hdlc, only incoming
    2.0.0.5 0,4518789123 -p -t60,10            # PPP, no PAP
 
  5.     a  point-to-point configuration to connect a standalone PC
    to  an  IP  provider using async PPP protocol with  transparent
    login. For login ISDI expects "ogin:", the id "guest" is  sent,
    than  ISDI  expects  "word:" and sends "mypass",  ISDI  expects
    "erver>"   and  sends  "ppp".  After  this  ISDI  automatically
    switches to PPP protocol.
 
    ISDI ?
    
    ISDI.INI:
    -u        # only one active channel
    -w        # activity display
    0.0.0.0 089987654 -l2,ogin:/guest,word:/mypass,erver>/ppp -t60
    

Restrictions in current version
 
 1.     Option  parsing  is  far away from  being  perfect.  It  is
   possible  to  specify conflicting options.  Don't  specify  more
   than one protocol option per line (translation entry).
 
 
Support

 The latest version of ISDI is available on ftp.biochem.mpg.de.
 
 Please  mail comments, questions, problems to heha@biochem.mpg.de.
 I  can  not guarantee any level of technical support, or  for  any
 length  of  time. In general, I will give priority  to  registered
 users.
 
 
Warranty
 
 There  is absolutely NO  WARRANTY, expressed or implied with  this
 software.   If  you choose to use this software,  you  assume  all
 risk.

Appendix A: Error codes
 
 The  error codes from ISDI are the same as defined in the ISDN-API
 1.1 specification:
 
 2001 incorrect controller
 2002 incorrect PLCI
 2003 incorrect NCCI
 2004      incorrect type
 
 3101 B-channel incorrectly coded
 3102 Info-mask incorrectly coded
 3103 Serviced EAZ-mask incorrectly coded
 3104 Serviced SI mask incorrectly coded
 3105 B-channel protocol, level 2 incorrect
 3106 DLPD incorrect
 3107 B-channel protocol, level 3 incorrect
 3108 NCPD incorrect
 3109 NCPI incorrect
 310A    Flags incorrectly coded
 
 3201 Controller error
 3202 Conflict between registrations, check SI mask and EAZ
 3203 Function not supported
 3204 PLCI not active
 3205 NCCI not active
 3206 B-channel protocol, level 2 not supported
 3207  Changeover of B-channel protocol, level 2 in this state  not
 possible
 3208 B-channel protocol, level 3 not supported
 3209  Changeover of B-channel protocol, level 3 in this state  not
 possible
 320A Unsupported parameters in DLPD
 320B Unsupported parameters in NCPD
 320C Unsupported parameters in NCPI
 320D Data length not supported
 
 3301 Error on setup of D-channel, level 1
 3302 Error on setup of D-channel, level 2
 3303 Error on setup of B-channel, level 1
 3304 Error on setup of B-channel, level 2
 3305 Abort D-channel, level 1
 3306 Abort D-channel, level 2
 3307 Abort D-channel, level 3
 3308 Abort B-channel, level 1
 3309 Abort B-channel, level 2
 330A Abort B-channel, level 3
 330B B-channel connection, level 2 re-established
 330C B-channel connection, level 3 re-established
     
 34xx     Abort by network, low order 8 Bit contain the cause value
     according 1TR6, the MSB is used to signal an error, but is not
     set by all ISDN-API 1.1 implementations:
 
 00 Normal termination (0 = local, 3400 = from the network)
    Normale Ausloesung (0 = lokal, 3400 = durch die Gegenstelle)
 
 81 Invalid call reference value
    Ungueltiger call reference Wert
 
 83 Bearer service not implemented
    Dienst ist nicht verfuegbar oder nicht beantragt
 
 87 Unknown caller identity
 
 88 Caller identity already suspended
 
 8A No B-channel available
    Kein B-Kanal auf lokaler Anschlussleitung verfuegbar
 
 8F Disconnect
    Verbindung wurde getrennt
 
 90 Facility code unknown in this network
    Leistungsmerkmal nicht implementiert
 
 91 Requested service rejected
    Angefordertes Dienstmerkmal wurde abgelehnt, weil eigener
    oder ferner Anschluss keine Berechtigung besitzt
 
 A0 Outgoing calls barred
    Abgehende Rufe wegen eingerichteter Sperre nicht moeglich
 
 A1 User access busy
    Gegenstelle besetzt
 
 A2 Closed-user-group refused connection
    Verbindung nicht moeglich wegen negativen GBG-Vergleich
 
 A3 Nonexistent closed-user-group
    Angegebene GBG (geschlossene Benutzergruppe) unbekannt
 
 A5 SPV not enabled for this number
    Kommunikationsbeziehung als SPV nicht freigegeben
 
 A9 Temporarily not available
    Voruebergehende Stoerung
 
 B5 Destination not obtainable
     Verbindung nicht aufbaubar wegen falscher Zieladresse, Dienste
     oder Dienstmerkmale
     
 B8 Rufnummer des gerufenen Teilnehmers hat sich geaendert
    number of called station has changed
 
 B9 ferne DEE nicht betriebsbereit
    remote station not ready
 
 BA No user responding
    Ruf wurde von keiner Datenstation beantwortet
 
 BB Called station busy
    Gerufene Datenstation besetzt
 
 BD Incoming calls barred
     Gerufener  Teilnehmer  hat Sperre gegen ankommende  Rufe  oder
     angeforderter Dienst vom gerufenen Teilnehmer nicht beantragt
 
 BE Call was rejected by called station
    Ruf wurde von gerufener Datenstation abgewiesen
 
 D9 Network congestion
    Engpass im Netz, kein B-Kanal verfuegbar
 
 DA Connection was terminated or rejected by called station
    Verbindung von ferner Datenstation ausgeloest oder abgelehnt
 
 E0 Call id incomplete
    Anwahlelemente fehlen
 
 F0 Local procedure error
     Im  aktuellen  Verbindundsstand keine Dienstmerkmalanforderung
     moeglich
 
 F1 Disconneted due to an error at the remote station
    Ausloesung wegen Fehler bei der gerufenen Station
 
 F2 Remote user suspended call
    Die Gegenstelle hat die Verbindung abgebrochen
 
 FF Local reject of user-to-user info
    D-Kanal Userinfo nicht unterstuetzt
