$Id: design.txt,v 1.2 2000/01/26 20:11:33 he Exp $

This document is to briefly intruduce the EUROFILE protocol stack
and to document the design of the eftp4linux EUROFILE implementation.
It is derived from an original 'white paper' that I've written to
introduce the isdn4linux EUROFILE deveoping project to other developeres.

Enjoy,

Henner


Contents:  0.0 How to Read This

           1.1 EUROFILE Protocol Stack, General Aspects
           1.2 The ISO 8208 Protocol
           1.3 The Data Link Protocols

           2.1 ISO 8208 / X.25 inside Linux
           2.2 Socket User Interface to Protocol Layer
           2.3 Data Links in Linux:  X.25 LAP_B  vs.  isdn4linux x75i

           3.1 Encapsulation
           3.2 L2 Protocol
           3.3 Providing Data-link Control Primitives to the x25 Packet Layer

	   4.  EUROFILE protocol higher layers themselves and their
	       implementation (currently empty :-)

0.0 How to Read This
====================

This document serves two purposes:

- It give a brief introduction on how i4l was interfaced with the
  X.25 network layer (sections 3.* of this article). If you are familiar
  with EFT related protocols and (isdn4)linux internals you can goto 3.0
  right away and submit your comments.

- It also gives an introduction on EFT, and ideas how it was 
  implemented in Linux. Since it took quite some time for me
  to gather all the information related to EFT, I decided to write an
  introduction as the initial task of the linux EFT project. That
  introduction was also a good base for documentation.


Sections 1.*  will provide the necessary background information.

Sections 2.*  will provide background information concerning linux specific
EFT related protocol issues. If you focus on the user level part of the
EFT implementation 2.2 will be the most (or even only) important part for you.

In sections 3.* I'd like to discuss implementation issues concerning the
kernel related part. Please comment on that (no matter, whether
you are participating in the EFT project or not). You won't need to reed
this if you are not interested in the kernel related stuff (but I've
tried to describe my ideas from the i4l end users point of view).

Section 4 is to suggest a development strategy.


I've asked all EFT volunteers to subscribe to the i4l developer list. Since
I don't know whether all of them have already subscribed I also include
their addresses explicitly


1.1 EUROFILE Protocol Stack, General Aspects
============================================

From my point of view EFT is functionally similar to ftp (the purpose is to
transfer files), although the protocols used by them are totally different.
ftp runs on top of the TCP/IP protocol. EFT does  not  run on top of the
well supported TCP/IP protocol suite. It uses the less known (in the Unix
world) ISO-8208 network protocol instead.

TCP/IP and ISO-8208 provide similar services to the applications, namely a
connection oriented, reliable, multiplexed, and flow-controlled exchange of
data. There are also some differences, i.e. ISO-8208 preserves messages
boundaries while tcp/ip just provides reliable byte streams. And
ISO-8208 also has some strange stuff such as qualified data (which is
used by EUROFILE).


1.2 The ISO 8208 Protocol
=========================

ISO 8208 is similar to the packet layer protocol standardised by ITU-T
recommendation X.25. X.25 is widely applied in many public data networks
such as the German Datex-P network.

I didn't get the ISO-8208 specification yet, all of my
knowledge is from secondary sources. Thus, please correct me if I'm wrong!
But as I understand others, the differences between ITU X.25 and ISO 8208
are marginal (as far as the core functionality is concerned):

- ITU wanted to standardise the access to public data network switches. 
  Therefore, ITU specified the protocol as viewded from the network
  switch (the Data Circuit Equipment "DCE")
- ISO describes the protocol in terms of the user equipment (the Data Terminal
  equipment "DTE") that wants to communicate via the network.

Both standards essentially define the same protocol (but probably, the ISO
version has much more optional features which will never get implemented -:).

ITU X.25 specifies a whole protocol stack used to connect to X.25 switches
including the X.25 Packet Layer Protocol ("PLP", the network layer/layer 3
in terms of the OSI model), data link protocol ("LAP_B", OSI layer 2) and a
physical layer (OSI layer 1). ISO-8208 is just concerned with the network
layer.

I guess one could also say that ITU describes the process of communicating
with an X.25 network switch (which will route the packets) while ISO
describes how to communicate with your peer entity. Thus, ITU X.25 is also
refered as X.25 DTE-DCE. ISO, in contrast, also covers direct communication
of two X.25 peer entities (without involving an X.25 switch). This mode
of operation is frequently refered as X.25 DTE-DTE.

And this DTE-DTE mode is also used by EFT when operating over ISDN!

You can argue that the use of a network protocol like X.25 (which supports
routing and other stuff) is unnecessary when operating over a circuit
switched ISDN (and thus a waste of resources). You might be right,
but I didn't design the EFT protocol. So, don't blame me for that.


1.3 The Data Link Protocols
===========================

ITU X.25 PLP and ISO 8208 run on top of a data link protocol. ITU X.25
defines the LAP_B procedure itself. ISO-8208 doesn't define a data link
protocol itself. The layer-3 Protocol is just defined in terms of certain
data link service primitives which must be provided by the data link entity.

Protocols, which provide the data link service to ISO8208 are defined in
other ISO standards. I.e. a LAP_B protocol, which provides
such data link services, is defined in ISO 7776. ISO 7776 is (almost) identical
to the X.75 data link protocol. This layer-2 protocol is well known by
isdn4linux users who frequently choose it for tty-style connections in order
to benefit from its error recovery features.

X.75 by itself defines ITU's protocol stack to interconnect public
X.25 networks. Beside the data link protocol known by linux users, it
also defines (like X.25) a packet layer / layer 3 protocol which
is also very similar to X.25 PLP. We won't need any more information on
these (and other) X.75 procedures.

The ISO 7776 or X.75 LAP_B protocol is again similar to the LAP_B procedure
defined in ITU X.25.

In contrast to the packet layer / layer 3 protocols
the data link protocols are not purely symmetric:
The lap_b protocols work by exchanging "commands" and "responses".
Commands and responses are submitted on different data link addresses (the
protocols contain an address field to support this).
Usually, one peer submits commands using the data link address 1 and submits
responses using the data link address 3. The other peer sends commands on
address 3 and responses on address 1. Thus, before communication can start,
a decision has to be made on who is going to submit commands on data link 1
and on who must submit them on address 3.

With X.25, this decision is quite simple. The rule is that the DTE side
sends the commands on address 1 while the DCE sends the commands on address 3.

With X.75 or ISO-8208 there is no difference between the peers. Both peer
entities are functionally equivalent. Fortunately, for isdn, there is always
one side which must set up the physical isdn B channel connection by
calling the other side before communication can start. The rule is
that the calling party uses the addresses like the DTE while the called
party uses the addresses like the DCE.

Thus, when EFT is operated over ISDN, the latter rules will be applied.

When you configure the X.75 l2-protocol, isdn4linux will automatically
choose the proper data link addresses according to the rule above.



2.1 ISO 8208 / X.25 inside Linux
================================

Obviously, since EFT runs on top of ISO 8208, we definitely need an ISO
8208 protocol implementation before we can think about EFT. Fortunately,
Jonathan Naylor has add X.25 support to Linux (first kernel version
with X.25 was 2.1.16). This implementation was based on ITU-T X.25
specificatiion. But this also works well in the ISO 8208 DTE-DTE context.


2.2 Socket User Interface to Protocol Layer
===========================================

In Unix-like operating systems, ftp clients and servers are usually
implemented as user space programs which access the TCP/IP network protocol
service of the kernel by means of the socket interface. EFT does not run on
top of tcp/ip, but on top of the ISO 8208 protocol. But an operating system
can also provide access to the ISO 8208 / X.25 protocol by means of a socket
interface. Thus, EFT servers and clients might be similarly implemented as
user space programs like ftp or ftpd. The Linux X.25 implementation provides
such a socket interface.

To obtain information on socket programming you can start with "man socket".
There are also a lot of books which describe socket programming.


User space                ftp                  eft

Socket Interface      ------------          ------------

                          tcp                  x25
Kernel Space
                          ip                   lap_b


A lot of programmers are familiar with tcp/ip programming using the socket
interface. Since tcp/ip and x.25 provide similar services to the user,
programming an application that communicates via the X.25 protocol is
not essentially different from programming a tcp/ip application. However,
there are still some differences:

First, the address space and protocol family will be different
(PF/AF_INET vs. PF/AF_X25). For EUROFILE which applies X.25 in DTE-DTE
mode we can use an empty X.25 address anyway.

Second, in contrast to tcp/ip, X.25 preserves packet
boundaries. Thus, a SOCK_SEQPACKET type socket is used for X.25 while
tcp/ip uses SOCK_STREAM type sockets. If you write N bytes to a SOCK_SEQPACKET
socket using the Unix write() system call, then a read()
from the corresponding peer socket will return the same N bytes of data
as written. With stream sockets, this is generally not the case (the boundaries
of the written and read chunks won't necessarily match).

EFT also needs so called X25 qualified data to be transmitted.
The Linux X.25 protocol stack supports a special socket option that
makes the X.25 Q-Bit (which is used by the X.25 PLP to mark qualified
data packets) transparent to the uses.


2.3 Data Links in Linux:  X.25 LAP_B  vs.  isdn4linux x75i
==========================================================

X25 needs a data link protocol implementation. The Linux X25 PLP is designed
to interface directly to a Linux network interface. It requires the network
interface to implement the X.25 data link protocol (this design decision has
been made in order to make use of intelligent X25 cards which implement the
LAP_B protocol in firmware). Jonathan Naylor has also written a lapb_module
which can be used by all x25 network interface driver developers who don't
want to implement the lap_b protocol on their own (see
Documentation/networking/lapb-module.txt).

i4l also supports a lap_b protocol (l2_prot x75i). The protocol is also
implemented below the network interface. Thus, the situation was almost as
required by the X25 PLP implementation.

However, there was one difference:

In the beginning of the isdn4linux EUROFILE project, i4l's x.75 only
allowed the upper protocol layers to send and receive data.
A user might send data to the i4l x.75 data link entity at any time.
When the data link is in the "connected" state, than i4l's x.75 protocol
implementation will just send the data to the peer. If the data link is not
in the "connected" state then i4l will automatically established the data link
first. After it has been established, the data will be send. No special user
intervention was (and still is) needed for establishing the data link,
i4l takes care on this.

The X25 PLP protocol, in contrast, wants to control the establishment
and release of the data link by itself. Therefore, an X.25 lap_b
implementation must provide all the lap_b service primitives
(DL_DATA request/indication, DL_ESTABLISH request/indication/confirm,
DL_RELEASE request/indication/confirm) to the upper protocol layers (and in
turn doesn't need to bother with automatic establishment procedures). Each
message exchanged between the X.25 LAP_B network interface and the X25 PLP
gets prepended a special byte. This byte is used to distinguish between the
different DL service primitives. It is not part of the protocol data units to
be sent to or received from the peer. (see
Documentation/networking/x25-iface.txt for details)

Remark: The lapb module only provides the protocol implementation. The
interpretation of the leading control byte as defined in x25-iface.txt
must be performed by the x25-network-interface-device driver which uses
the lapb module.  


3.  Providing the X.25 lap_b Interface in i4l
=============================================

3.1 Encapsulation
=================

Some method of providing the LAP_B data link service primitives to
the Linux X.25 layer needed to be implemented.

This was done by means of a new encapsulation type for isdn4linux
network interfaces. This encapsulation is turned on in the same manner
as all other encapsulation, namely by the isdnctrl command, e.g.

"isdnctrl encap isdn0 x25iface"

configures an isdn4linux network interface for use by the X25 PLP.

This is only to indicate that the messages sent through the network interface
are formatted according to the Linux' x25-lapb interface specification.
(it might also be used by the device driver to take special actions which are
specific for communicating with the x25 PLP layer). But the encapsulation
doesn't specify how lower parts of i4l system will provide the data link
service. (the encap doesn't specify the data link protocol which provides the
data link service, but the protocol used between the network device and the
network protocol layers).  


3.2 L2 Protocol
===============

The data link protocol used to communicate between two peers is specified
as usual by the l2_prot parameter. For EFT,

"isdnctrl l2_prot isdn0 x75i"

is used and no new protocol implementation was necessary.

However, it might be a good opportunity to reserve two new
l2_prot parameters, namly x25_dte and x25_dce. These specify almost the same
as x75i, the only difference is that the data link addresses used for commands
and responses will be fixed (in X.75 they depend on who initiates the
corresponding call).

The x25_dte or dce l2-protocols are not needed for EFT, but
they might enable other x25 users to access public x25 data networks by
means of i4l b_channels (dialup as well as leased lines). Maybe some
x25 folks will be quite happy about this.


3.3 Providing Data Link Control Primitives to the x25 Packet Layer
==================================================================

One design question was how to provide the LAP_B protocol service by i4l.
(interpreting and setting the first byte and mapping them on the DL primitives
according to Documentation/networking/x25-iface.txt).

The final implementation used the existing x.75 L2 protocol
present in the HL level drivers but implemented the processing of the
first-byte (as specified in Documentation/networking/x25-iface.txt)
entirely in the isdn4linux link level module. This
was possible without any extension to the isdn4linux LL-HL driver interface.
Thus, no hardware level driver needed to be adopted and every hardware
level driver that supports l2prot x75i can be used for EUROFILE.
(This already turned out to be a FAQ: does Linux EUROFILE work with my
xy-isdn-card? Answer: Yes, if the card supports l2prot x75i. In
patricular all cards supported by HiSax work) 


4. EUROFILE protocol higher layers themselves and their implementation
======================================================================

TO BE ADDED
