Versatile-ISDN (vISDN for short) is an attempt at writing an ISDN implementation for Linux. It started as a "joke", a project you don't even hope will become real but eventually it did.
All begun after I wrote vzaphfc, an alternative Zaptel driver for Cologne Chip's HFC-S PCI A based ISDN boards.
This project reached his beta-testing phase
I started this project because I was not satisfied with the many variants of ISDN infrastructures available for Linux.
I was mainly using ISDN for voice applications and, at home, to backup my pre-WiFi link to my ISP.
I found zaptel to be too much voice-oriented and libpri to be a partial ISDN stack implementation, it is my opinion and the opinion of many people I know that the zaptel/libpri/chan_zap suite:
I've so decided to rewrite from scratch most of the functionality present in zaptel/libpri/chan_zap to support ISDN. My implementation wants to be well-integrated in the linux kernel, while still being very modular.
After several redesigns I was surprised of how much flexible vISDN did become. Initially I didn't ever plan to support anything else than ISDN stuff. Now I'm seeing that the architecture could be more or less easily used for other applications. For example, vISDN's soft-TDM bus architecture will be used to support the new GSM PCI board manufactured by VoiSmart.
Yes, all the stuff, not only the Kernel modules is released under the Gnu General Public License version 2.
When designing and implementing vISDN, no special treatments has been given to primary rate or basic rate interfaces.
It is often a much needed feature in voice applications to be able to play in network terminator role, in order to interface with PBXs and terminals. vISDN has complete protocol support for that role and all Cologne Chip's cards may be configured to be network terminators.
Ethereal supports dissecting LAPD and q.931 traffic for other architectures. vISDN's NetDev module supports sniffing of frames through the packet(7) interface. By applying very small patches to libpcap and Ethereal you will be able to live-capture and inspect LAPD and q.931 traffic in full detail. Ethereal already supports LAPD and q.931 dissecting, the patch just enables it to receive LAPD traffic from vISDN interfaces.
Since interface role and frame direction are encoded in SLL header, Ethereal is able to clearly show frame source/destination and to interpret direction-dependant flags (C/R and P/F bits).
If you're talking on a multipoint basic rate interface, you've probably wondered wether it's possible to sniff frames transmitted by other terminal equipments on the same bus. The E-channel, normally used to imlement collision detection contains an exact copy of all the traffic transmitted on the D-channel. If your hardware supports reading the E-channel (all Cologne's chips do) you will be able to analyze traffic not sent by you.
Again, if you are on a multipoint BRI, more than an application can concurrently open and bind a socket to a single interface. All the application will receive their unique TEI on the bus and may act independently from each other. vISDN's LAPD layer will multiplex the communication between them transparently.
vISDN makes extensive use of all the bleeding-edge features and techniques present in the latest kernels. The infrastructure exports lots of informations through sysfs and may easilly controlled or monitored by userspace tools.
The LAPD and q.931 are implemented following the finite-state-machine models described in the ETSI specifications. Standards compliance is easier to achieve and eventual problems will be much easier to diagnose and fix.
The PPP gateway faces towards both the kernel PPP layer and vISDN's softTDM bus. Frames coming from the bus are routed immediatly to the kernel without the need to pass them to userland.
Current drivers for HFC based boards make full usage of the integrated HDLC framer. Frames (and thus signalling) is passed between the hardware and the application in form of packets and not as streams. This leads to lower load and better immunity to system latency/load.
Hardware PCM buses are supported by vISDN's design and will probably be supported soon by the drivers.
Along with external PCM buses, support for intra-device crossconnections is already working as experimental code.
In order to follow the ETSI procedures on BRI interfaces, vISDN supports dynamic (optionally automatic) layer-2 activation and deactivation. Automatic layer-1 activation is also supported. vISDN currently does not initiate layer-1 deactivation but this will not be a problem unless you are going to run a telco.
This is an implementation for Linux so, no wonder it works under Linux only :)
The usage of the latest features in the newer kernels makes difficult to be compatible with older kernels. vISDN has been tested with kernels as old as 2.6.8 which is the oldest found in most distributions.
Yes, this is the biggest lack. Unfortunately I don't have access to non-EuroISDN networks so I cannot test vISDN against them. Here is a field where I would like someone contributing with code once it begins to stabilize.
There are still many missing features but I wouldn't include them here until the project is somewhat ready.