CINDI Version 2.0, a NDIS-2 Driver for Common-ISDN-API 2.0

Herbert Hanewinkel, Nov 1995


CINDI is Shareware

CINDI, as it is provided, is a demo version. To make use of the full capabilities of CINDI you have to register CINDI. The registration fee for a single user license of CINDI is DM 92. Please read the file "CINDI.REG" for details.

As long as you have NOT registered CINDI you may test CINDI using a ? in place of the registration code. In this case CINDI will stop forwarding data after 20 min.

Disclaimer

The program and this documentation is Copyright (C) 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.

Manufacturers and distributors of ISDN products may distribute unregistered versions of this software a long with their ISDN products under the condition, that the customers are informed, that they have to register the software. If you want 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

CINDI is a (realmode) NDIS-2 Driver for IP-Routing or remote Ethernet bridging over ISDN. CINDI communicates with the ISDN card using the Common ISDN API 2.0 specification (a standard defined by German ISDN card manufacturers and the German Telekom). Because of this, CINDI is completely hardware independent and has successfully been tested with many active or passive ISDN cards.

CINDI was developed for Internet access over ISDN from WfW 3.11 and MSTCP-32. CINDI has successfully been tested with Win95. CINDI is also known to work with other NDIS based TCP/IP packages for DOS and Windows, e.g. ChameleonNFS.

CINDI can be used with standard DOS CAPI 2.0 software or VxD implemenations of the CAPI 2.0 software. Using a VxD CAPI implementation, CINDI is available only under Windows but it frees a lot of DOS memory otherwise used by the CAPI software.

CINDI 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.

CINDI 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, Spyder Routers, SunLink ISDN 1.0, SunLink ISDN 1.0.2.

CINDI was written for use with ISDN BRI PC cards. CINDI was developed and implemented on a NCP /P8 card from NCP engineering GmbH, Nuernberg..

The current version of CINDI supports two independent active connections at a time. Alternativly a connection can use both B- channels for loadsharing. CINDI 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 CINDI with a Cisco Router and two Philips TA's. With this kind of loadsharing it is possible to get a performance of up to 13kBytes/s.

Availability

The latest version of CINDI is available on http://www.biochem.mpg.de/~heha/ or via ftp from: ftp.biochem.mpg.de in directory /pc/isdn.


Installation

To use CINDI you have to set up a configuration file with your ISDN configuration as described below. The default name for this file is CINDI.INI.

To load the NDIS-2 Driver into memory install CINDI.DOS in your NDIS environment and run CINDI.EXE after binding the NDIS modules (after executing "netbind" or "net start"). You have to start CINDI.EXE after starting your CAPI 1.1 software. For use with VxD CAPI implemenations you can start CINDI.EXE via WINSTART.BAT. WINSTART.BAT has to be in one of your PATH directories and is automatically executed at Windows startup.

CINDI.EXE accepts the following arguments: (Parameters in [ ] are optional, if not given a default is used)

   CINDI  RegCode [ConfigFile] 

"RegCode" is your personal registration code you will receive after registration of CINDI. As long as you have NOT registered CINDI you may test CINDI using a ? in place of the registration code. In this case CINDI will stop forwarding data after 20 min.

"ConfigFile" specifies the name of the CINDI configuration file. If the name is not given, it defaults to "CINDI.INI". The configuration file is a readable text file. Read the section "Setting up an CINDI configuration file" below for creating up an CINDI configuration file.

Installation in a NDIS-1 environment

CINDI is an NDIS-2 MAC driver. Multiple protocol modules can bind to CINDI. To include CINDI in your NDIS configuration:

  1. Unpack the CINDI software into a directory, e.g.: C:\CINDI
  2. In the CINDI directory create a CINDI.INI file with the desired ISDN configuration.
  3. Set-up an entry for CINDI in the NDIS PROTOCOL.INI file
        [CINDI]
        Drivername=CINDI.DOS
  4. The protocol module you want to bind to CINDI should reference the CINDI MAC driver with a "BINDINGS" entry of the form:
        BINDINGS=CINDI
  5. Load CINDI by starting CINDI.EXE with your arguments in AUTOEXEC.BAT after running netbind or in case of a VxD CAPI start CINDI.EXE in WINSTART.BAT. Check also that the device PROTMAN.DOS is loaded in CONFIG.SYS.
        C:\CINDI\CINDI ? C:\CINDI\CINDI.INI 
    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 CINDI software into a directory, e.g.: C:\CINDI
    2. In the CINDI directory create a CINDI.INI file with the desired ISDN configuration.
    3. Use Netsetup to install CINDI.
      • Select "Add adapter"
      • Select "OEM provided adapter" in directory C:\CINDI
      • Add the TCP Protocol and remove all other protocols from the adapter.
      • Configure the TCP/IP parameters.
    4. Add a line to start CINDI.EXE in "AUTOEXEC.BAT" after "NET START", so that the entry looks like:
          C:\WINDOWS\NET START
          C:\CINDI\CINDI ? C:\CINDI\CINDI.INI
      or start CINDI.EXE via WINSTART.BAT:
          C:\CINDI\CINDI ? C:\CINDI\CINDI.INI
      Registered users replace the ? by the received registration code.
    5. (WfW only) After rebooting start 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. The ISDN2MON monitor should display the dialed number and a 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 CINDI, this will trigger an ISDN connection every time a broadcast packet is sent. You can disable broadcasts in CINDI by either specifying a dedicated ip-address (not 0.0.0.0) for the ISDN peer or enabling the k-option for this link. Using the k-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.

    Setting up a CINDI configuration file

    Structure of the configuration file

    The configuration file consists of the following formal parts:

    The first section is optional, but there has to be at least one of the two types of translation entries.

    The global options control CINDI's overall behaviour. Global options can be specified on one or more lines. Examples for global option:

          -e895123456    # local number for outgoing calls
          -u   # only one active channel
          -w   # active display on DOS screen
     
    See the "Global options" section below for a complete reference.

    Attention:
    To enable outgoing calls a local (calling) number has to be defined with the -e option.

    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:

    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]
    If the same IP-address appears more than once in the configuration file, CINDI 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. CINDI can operate only in routing or bridging mode. You can not mix entries with routing and bridging protocols in the configuration file.

    CINDI 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 the same line.
    -a
    disables the auto-dialler. If not selected CINDI will dial-on- demand. default: auto-dialler enabled
    -c n[,56]
    selects the ISDN controller (card), n specifies the controller number in the range 1..N.. Specify 56 for 56kBit ISDN lines. default: 1, 64kBit
    -i vector
    specifies the software interrupt for communication with the Common-ISDN-API-2.0 software. default: 0xf1
    -o
    if CINDI'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 OutgoingNumber[,ListenNumber]
    the "OutgoingNumber" is used as the calling number for outgoing calls. The number may be screened by the network. the "ListenNumber" specifies the number CINDI will listen on incoming calls. If this number isn't defined CINDI will listen for any call.
    -k setup[,sleep[,callbackwait]]
    specifies the set-up time in seconds. CINDI will wait "setup" seconds for a connection to come up. If the connection does not reach the active state during this time, CINDI 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 CINDI 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 CINDI receives an error from the Common ISDN API 2.0 software. Specifying "0e" enables only reboot on errors. default: disabled
    -q
    suppresses any message output on the screen.
    -v
    CINDI tries to allocate buffers for the CAPI in upper memory (UMB). This option disables this feature and CINDI 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
    remote logging on a UNIX host with a syslogd. Using CINDI 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 CINDI (a NDIS driver can not automatically retrieve this information). Syslog-messages are sent with the characteristics "local0.info".
    -l interval[c]
    if "interval" is non zero and a connection is up, a statistic message will be displayed 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 force immediate log (on the screen or syslog host) of every charge message received from the CAPI software.
    -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:
    • going 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 CINDI to one active connection at a time. This will reduce CINDI'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 CINDI

    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 CINDI 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. CINDI 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:

    CINDI 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. CINDI 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 userd/password combination. Incoming PPP connections are accepted only if the remote site sends this userid/password combination.
    -i
    Operate as an IP-address provider for PPP. (If the IP- address of this entry isn't zero, tell the peer which IP- address it has to use.)
    -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 = 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, CINDI 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 "\". CINDI 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 CINDI. 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 mode
    Specifies the mode of operation
    • 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.
    default: 1, incoming and outgoing calls enabled
    -r
    Don't reset disconnect timer on received packets. Some peers send packets on regular basis (e.g Cisco's keepalive packets, RIP routing information packets) These packets will normally keep a line up. The option allows a link to time out even if packets are received.
    -k
    Don't reset disconnect timer on sending broadcast packets. Don't open a connection by broadcast packets. Enable this option if your IP software should announce routing information when the link is up. Setting this option will allow the link to timeout even if broadcast packets are sent.
    -u
    Declares a link as a broadcast link. Broadcast packets are sent over this link.

    Additional features

    1. Dynamic IP address assignment: CINDI 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 CINDICTL -d [ip-address] to manually set up a connection.
      • (Check the received IP address with CINDICTL -i )
      • 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 CINDI 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 CINDICTL-i
    3. CINDI 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 CINDI with a CtrlInterrupt, the Windows utility program ISDN2MON.EXE allows you to: ISDN2MON.EXE tries to locate CINDI automatically searching for a signature.

    The DOS utility program CINDICTL.EXE allows you to:

    Ethernet characteristics

    CINDI works as an ethernet type NDIS-2 Driver. The ethernet address of CINDI 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 CINDI 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 CINDI'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 CINDI 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.
          CINDI ?
          
          CINDI.INI:
          -e12345678             # local number
          -u        # only only one active channel
          -w        # activity display
          0.0.0.0 089987654 -p -nguest,gast -t60  # timeout 60 sec 
    2. CINDI 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 CINDI and MS-TCP32 configuration will allow the PC of example 1. to dial in as an unknown ISDN peer and connect to the Internet. CINDI can handle two active connections, but only one unknown peer at a time.
          CINDI ?
          
          CINDI.INI:
          -e12345678             # local number
          -r141.61.1.32,141.61.224.1           #   remote   logging   on 141.61.1.32
          #
          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 MS-TCP32 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. CINDI 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.
          CINDI ?
          
          CINDI.INI:
          -e12345678             # local number
          -w
          0.0.0.0 0815712345 -h2 -m10,20 -t90
    4. CINDI in multipoint configuration. For incoming calls from unknown numbers the -h1 protocol will be used.
       
          CINDI ? ip2isdn
          
          IP2ISDN  (CINDI configuration file):
          -e12345678             # local number
          -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 CINDI expects "ogin:", the id "guest" is sent, than CINDI expects "word:" and sends "mypass", CINDI expects "erver>" and sends "ppp". After this CINDI automatically switches to PPP protocol.
          CINDI ?
          
          CINDI.INI:
          -e12345678             # local number
          -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 CINDI is available on http://www.biochem.mpg.de/~heha/

    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 CINDI are the same as defined in the Common- ISDN-API-2.0 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
    

    Umgesetzt in HTML von:
    Markus Dahlweid
    <dahlweid@informatik.uni-bremen.de>