5. 信令

5.1. ATM 主机文件

因为 ATM 地址使用起来不方便,所以大多数 ATM 工具也接受名称而不是数字地址。名称和数字之间的映射关系在以下文件中定义:/etc/hosts.atm。此文件的结构类似于/etc/hosts文件

numeric_address name(s)

例如:

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

数字地址可以使用 [api] 中描述的任何格式指定。Linux 系统的数字地址可以使用命令 atmaddr -n 确定(另请参阅 手动地址配置 部分)。

许多 ATM 工具在显示地址时也会尝试查找相应的名称。当从数字形式转换为名称时,将使用文件中第一个适用的名称。

除了 SVC 的 ATM 地址外,PVC 地址也可以存储在/etc/hosts.atm。如果不同的地址类型存储在相同的名称下,则将选择第一个合适的地址,即,如果应用程序明确请求仅 SVC 地址,则将忽略任何 PVC 地址。

5.2. ANS

如果您可以访问 ATM 名称服务 (ANS,例如因为您已安装 ANS 扩展),则可以通过在/etc/resolv.conf文件中指定运行 ANS 的主机。

为了执行 E.164 地址的反向查找,需要知道电话国家代码列表。该列表可以从 国际电信联盟 获取。ITU-T 建议 E.164 分配国家代码列表 目前提供 PDF 和 Word 文档格式。

Note注意:
 

如果 URL 过期,则应通过在 ITU 网站上搜索文档标题轻松找到该文档。

可以使用 atm-linux 发行版中的脚本 src/lib/pdf2e164_cc.pl 以及国家代码列表的 PDF 版本来创建 E.164 国家代码表,例如:

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

应该注意的是,需要安装 pdftotext 才能运行上述脚本。可以从 xpdf 获取。

5.3. 信令守护进程

手册页:atmsigd(8) atmsigd.conf(4)

请注意,atmsigd 对点对多点的支持非常有限:仅支持作为点对多点树的单个叶节点运行。

默认情况下,atmsigd 配置为符合动态配置 UNI 版本。可以通过传递--with-uni=VERSION到 linux-atm 源代码发行版顶层目录中的 ./configure 脚本。

请注意,atmsigd 配置为偏执模式。如果它检测到异常问题,它会频繁终止。这(显然)将在未来改变。

atmsigd 还在使用-c选项指定的位置查找配置文件。默认位置是/usr/local/etc/atmsigd.conf.

5.4. ILMI 守护进程

ILMI 提供了一种自动地址配置机制。如果没有交换机或交换机不支持 ILMI,则必须手动配置 ATM 地址(请参阅 手动地址配置 部分)。请注意,ILMI 守护进程不应在手动配置地址的接口上使用。

ILMI 守护进程的启动方式如下

ilmid [-b] [-d] [-ilocal_ip] [-llog_file] [-qqos] [-uuni_version] [-v] [-x] [itf]

-b

后台运行。在初始化后在 fork 的子进程中运行。

-d

启用调试输出。默认情况下,ilmid 非常安静。

-i local_ip

IP 地址,用于在被询问时告知交换机。可以是点分十进制或文本格式。默认情况下,ilmid 使用一些启发式方法来选择本地 IP 地址。

-l logfile

将诊断消息写入指定的文件,而不是标准错误。特殊名称syslog用于将诊断信息发送到系统日志记录器。

-q qos

配置 ILMI VC 以使用指定的服务质量。默认情况下,ILMI VC 上使用链路速度的 UBR。

-u uni_version

设置 UNI 版本。可能的值是3.0, 3.1,4.0、 和 。点可以省略。默认值取决于 ilmid 的编译方式。通常是3.0.

-v

启用扩展调试输出。

-x

禁用在 ColdstartTrap 中包含变量绑定。某些交换机(例如 LS100)仅在此选项设置时才工作。

如果未指定接口号,则 ilmid 服务于接口 0。您可以使用 atmaddr 命令(见下文)检查地址注册是否成功。

该代理仅支持 ATM 论坛 UNI 3.1 规范第 5.8 节中指定的地址注册程序。这些程序涉及交换机在主机上注册网络前缀,以及主机在交换机上注册最终 ATM 地址。主机通过将 ESI(终端系统标识符)和空选择器字节附加到交换机注册的网络前缀来完成此操作。ESI 是 ATM 接口的物理或 MAC 地址。

5.5. 手动地址配置

如果您的交换机不支持 ILMI,则必须在交换机和 PC 上手动设置 ATM 地址。在 Linux 端,请确保 ilmid 不会干扰,然后使用 atmaddr 命令设置地址。

手册页:atmaddr(8)

在交换机上手动配置 ATM 地址取决于品牌。在 Fore ASX-200 上,可以使用以下命令完成

conf nsap route new nsap_addr 152 port vpi

例如:

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

整个 NSAP 地址始终必须具有 40 位数字的长度。请注意,您也可以使用具有不同前缀和 ESI 的地址,这些 ESI 与您的适配器拥有的任何 ESI 都不对应。选择器字节 (SEL) 的值将被忽略。

5.6. 背靠背运行两个 ATM NIC

也可以在两个背靠背连接的 ATM NIC 的情况下运行,中间没有交换机。这非常适合简单的测试环境。

首先,如果您使用 UTP 或 STP-5,则需要合适的电缆。我们使用标准 100Base-T 背靠背电缆的经验并不好。似乎它们使用的引脚排列不同。在一些错误的开始之后,我们发现以下电缆有效

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

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

Pins 3, 4, 5, 6 unconnected.

说明这一点的更好方法可能是显示背靠背电缆两端 RJ45 连接器的正确颜色方案。第一个连接器应使用以下方案

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

第二个连接器应使用此方案

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

您还可以制作一个环回电缆,其中 1 -- 7 和 2 -- 8 连接,用于超低成本设置。

这里我们有两台名为 ``virgil'' 和 ``nestor'' 的机器。根据需要替换您自己的名称。

ATM 连接的一侧需要使用 atmsigd 的网络版本,另一侧应使用普通用户版本。因此,在这里我们在 nestor 上使用以下命令启动 atmsigd

atmsigd -b -m network

在 virgil 上使用以下命令启动 atmsigd

atmsigd -b

没有交换机,您将无法使用 ILMI。相反,创建一个/etc/hosts.atm包含两个虚拟地址的文件。我们的 ATM 主机文件包含

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

当然,这些是完全伪造的地址,但是只要您没有连接到公共或私有 ATM 网络,我认为这无关紧要。为了在驱动程序中正确设置地址,我们使用

atmaddr -a virgil-atm

在 virgil 上使用以下命令设置地址

atmaddr -a nestor-atm

在 nestor 上使用以下命令设置地址。现在以正常方式在两台机器上启动 atmarpd。现在您(应该)有一个可工作的 ATM 设置。要使 IP over ATM 工作,只需按照 IP Over ATM 部分中的说明进行操作即可。

5.7. Q.2931 消息转储器

Q.2931 消息编译器还为 Q.2931 消息生成了一个美化打印器。可执行文件名为 q.dump,存储在src/qgen目录中。请注意,它不会被 make install 复制到其他位置。

q.dump 期望在标准输入中接收一系列以空格分隔的十六进制字节,并在消息可以解析时输出消息结构。例如

% 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"