5. Signaling

5.1. ATM Hosts File

Because ATM addresses are inconvenient to use, most ATM tools also accept names instead of numeric addresses. The mapping between names and numbers is defined in the file /etc/hosts.atm. The structure of this file is similar to the /etc/hosts file:

numeric_address name(s)

e.g.

47.0005.80FFE1000000F21A26D8.0020EA000EE0.00 pc2-a.fqdn pc2-a
47.0005.80FFE1000000F21A26D8.0020D4102A80.00 pc3-a.fqdn pc3-a

The numeric address can be specified in any of the formats described in [api]. The numeric address(es) of a Linux system can be determined with the command atmaddr -n (see also section Manual Address Configuration).

Many ATM tools also attempt to find the corresponding name when displaying an address. When translating from the numeric form to a name, the first applicable name in the file is used.

In addition to ATM addresses for SVCs, also PVC addresses can be stored in /etc/hosts.atm. If different address types are stored under the same name, the first suitable one will be chosen, i.e. if an application explicitly requests only SVC addresses, any PVC addresses will be ignored.

5.2. ANS

If you have access to the ATM Name Service (ANS, e.g because you've installed the ANS extension), you can use it instead of or in addition to the hosts file by specifying the host that runs ANS in the /etc/resolv.conf file.

For performing reverse lookups of E.164 addresses, the list of telephony country codes needs to be known. That list can be obtained from the International Telecommunications Union. The List of ITU-T Recommendation E.164 Assigned Country Codes is currently available in PDF and Word document formats.

NoteNOTE
 

Should the URL become out of date, the document should easily be found by searching for the document's title at the ITU web site.

The script src/lib/pdf2e164_cc.pl in the atm-linux distribution can be used to create the E.164 county codes table with the PDF version of the country code list, e.g.

perl pdf2e164_cc.pl e164_xxx.pdf >/etc/e164_cc

It should be noted that pdftotext needs to be available in order to run the script above. It can be obtained with xpdf.

5.3. Signaling Demon

Man pages: atmsigd(8) atmsigd.conf(4)

Note that atmsigd's support for point-to-multipoint is very limited: only operation as a single leaf of a point-to-multipoint tree works.

By default, atmsigd is configured to conform to dynamically configure the UNI version. It can be compiled for UNI 3.0, 3.1, or 4.0 specifically by passing the --with-uni=VERSION to the ./configure script in the top-level directory of the linux-atm source distribution.

Note that atmsigd is configured to be paranoid. If it detects unusual problems, it frequently terminates. This will (obviously) change in the future.

atmsigd also looks for a configuration file at the location specified with the -c option. The default location is /usr/local/etc/atmsigd.conf.

5.4. ILMI Demon

ILMI provides a mechanism for automatic address configuration. If there is no switch or if the switch doesn't support ILMI, the ATM addresses must be configured manually (see section Manual Address Configuration). Note that the ILMI demon should not be used on interfaces where addresses are manually configured.

The ILMI demon is started as follows:

ilmid [-b] [-d] [-i local_ip] [-l log_file] [-q qos] [-u uni_version] [-v] [-x] [itf]

-b

background. Run in a forked child process after initializing.

-d

enables debugging output. By default, ilmid is very quiet.

-i local_ip

IP address to tell switch when asked for one. Can be in either dotted decimal or textual format. By default, ilmid uses some heuristics to select a local IP address.

-l logfile

write diagnostic messages to the specified file instead of to standard error. The special name syslog is used to send diagnostics to the system logger.

-q qos

configures the ILMI VC to use the specified quality of service. By default, UBR at link speed is used on the ILMI VC.

-u uni_version

set UNI version. Possible values are 3.0, 3.1, and 4.0. The dot can be omitted. The default value depends on how ilmid was compiled. Typically, it is 3.0.

-v

enables extensive debugging output.

-x

disable inclusion of variable bindings in the ColdstartTrap. Some switches (e.g. the LS100) only work if this option is set.

If no interface number is specified, ilmid serves interface 0. You can check whether address registration was successful with the atmaddr command (see below).

The agent supports only the address registration procedures specified in section 5.8 of the ATM Forum's UNI 3.1 specification. These procedures involve the switch registering the network prefix on the host and the host registering the final ATM address back on the switch. The host accomplishes this by appending an ESI (End System Identifier) and a null selector byte to the network prefix registered by the switch. The ESI is the physical or MAC address of the ATM interface.

5.5. Manual Address Configuration

If your switch doesn't support ILMI, you have to set the ATM address manually on the switch and on the PC(s). On the Linux side, make sure that ilmid doesn't interfere, then use the atmaddr command to set the address(es).

Man pages: atmaddr(8)

Manual configuration of ATM addresses on the switch depends on the brand. On a Fore ASX-200, it can be done with the following command:

conf nsap route new nsap_addr 152 port vpi

e.g.

conf nsap route new 47000580ffe1000000f21510650020ea000ee000 152 1a2 0
                    |<---- NSAP prefix ----->||<--ESI--->|^^
                                                          SEL

The entire NSAP address always has to have a length of 40 digits. Note that you can also use addresses with a different prefix and an ESI that doesn't correspond to any ESI your adapters have. The value of the selector byte (SEL) is ignored.

5.6. Running Two ATM NICs Back-to-Back

It is also possible to run with two ATM NICs connected back-to-back, and no switch in between. This is great for simple test environments.

First, if you're using UTP or STP-5, you need a suitable cable. Our experience with standard 100Base-T back-to-back cables was not good. It appears that the pin-out they use is different. After some false starts, we found that the following cable works:

RJ45                            RJ45
   1        ------------        7
   2        ------------        8

   7        ------------        1
   8        ------------        2

Pins 3, 4, 5, 6 unconnected.

A better way to illustrate this may be to show the proper color schemes for the RJ45 connectors at each end of the back-to-back cable. The first connector should use the following scheme:

RJ45-1
   1 - Brown
   2 - White/Brown
   3 - Unconnected
   4 - Unconnected
   5 - Unconnected
   6 - Unconnected
   7 - Orange
   8 - White/Orange

And the second connector should use this scheme:

RJ45-2
   1 - Orange
   2 - White/Orange
   3 - Unconnected
   4 - Unconnected
   5 - Unconnected
   6 - Unconnected
   7 - Brown
   8 - White/Brown

You can also make up a loopback cable with 1 -- 7 and 2 -- 8 connected for ultra-cheap setups.

Here we have two machines called ``virgil'' and ``nestor''. Substitute your own names as necessary.

One side of the ATM connection needs to use the network version of atmsigd and the other side should use the normal user version. So here on nestor we start atmsigd with:

atmsigd -b -m network

and on virgil with:

atmsigd -b

Without a switch, you won't be able to use ILMI. Instead, create a /etc/hosts.atm file containing two dummy addresses. Our ATM hosts file contains:

47.0005.80FFE1000000F21A26D8.0020EA000EE0.00    nestor-atm
47.0005.80FFE1000000F21A26D8.0020D4102A80.00    virgil-atm

These are completely spurious addresses, of course, but as long as you're not connected to a public or private ATM network, I don't think it matters. To set the address correctly in the driver, we use:

atmaddr -a virgil-atm

on virgil, and:

atmaddr -a nestor-atm

on nestor. Now start atmarpd on both machines in the normal way. Now you (should) have a working ATM set-up. To get IP over ATM working, just follow the instructions in section IP Over ATM.

5.7. Q.2931 Message Dumper

The Q.2931 message compiler also generates a pretty-printer for Q.2931 messages. The executable is called q.dump is stored in the src/qgen directory. Note that it is not copied elsewhere by make install.

q.dump expects a sequence of whitespace-separated hex bytes at standard input and outputs the message structure if the message can be parsed. Example:

% echo 09 03 80 00 05 5A 80 00 06 08 80 00 02 81 83 00 48 \
  00 00 08 | ./q.dump
_pdsc = 9 "Q.2931 user-network call/connection control message"
_cr_len = 3
call_ref = 8388613 (0x800005)
msg_type = 0x5a "RELEASE COMPLETE"
_ext = 1
_flag = 0 "instruction field not significant"
_action_ind = 0 "clear call"
msg_len = 6 (0x6)
  _ie_id = 0x08 "Cause"
    _ext = 1
    cause_cs = 0 "ITU-T standardized"
    _flag = 0 "instruction field not significant"
    _action_ind = 0 "clear call"
    _ie_len = 2 (0x2)
      _ext = 1
      location = 1 "private network serving the local user"
      _ext = 1
      cause = 3 "no route to destination"