PLIP: 并行线互联网协议设备

Donald Becker (becker@super.org) I.D.A. 超级计算研究中心, Bowie MD 20715

在某个时候,T. Thorn 可能会贡献文本,Tommy Thorn (tthorn@daimi.aau.dk)

PLIP 简介

本文档描述了 Net/LGX 的并行端口数据包推送器。此设备接口允许两个并行端口之间的点对点连接显示为 IP 网络接口。

什么是 PLIP?

PLIP 是并行线 IP,即通过并行端口传输 IP 数据包。 对于 PC 而言,显而易见的选择是打印机端口。 PLIP 是非标准的,但 [可以使用] 使用标准 LapLink 空打印机电缆 [也可以在 Turbo 模式下使用,使用 PLIP 电缆]。 [用于打包 IP 数据包的协议是由 Crynwr 发起的简单协议。]

PLIP 的优点

它便宜,随处可用,而且容易。

只需 PLIP 电缆即可连接两台 Linux 机器,而且可以用很少的钱制造出来。

连接两台 Linux 机器只需要一秒钟的决定和几分钟的工作,无需搜索 [受支持的] 网卡。 这在笔记本电脑的情况下尤其重要,因为网卡不易获得。

不需要网卡还意味着,除了连接电缆之外,其他一切都是软件配置 [原则上可以很容易地完成。]

PLIP 的缺点

无法像 SLIP 和 PPP 一样通过调制解调器工作。 范围有限,15 米。 只能用于连接三台(?)Linux 机器。 无法连接到现有的以太网。 不是标准(甚至不是像 SLIP 那样的实际标准)。

性能

PLIP 轻松超越以太网卡......(哎呀,我在做梦,但 *是* 快晚了。EOB)

PLIP 驱动程序详细信息

Linux PLIP 驱动程序是原始 Crynwr 协议的实现,它使用内核的并行端口子系统,以便在 PLIP 和其他服务之间正确共享并行端口。

IRQs 和触发超时

当用于 PLIP 驱动程序的并行端口配置了 IRQ 时,只要通过电缆向其发送数据,PLIP 驱动程序就会收到信号,这样,当没有数据可用时,就不会使用该驱动程序。

但是,在某些机器上,很难(如果不是不可能)为某个并行端口配置 IRQ,主要是因为它被某些其他设备使用。 在这些机器上,PLIP 驱动程序可以在无 IRQ 模式下使用,在这种模式下,PLIP 驱动程序会不断轮询并行端口以等待数据,如果此类数据可用,则对其进行处理。 这种模式不如 IRQ 模式高效,因为驱动程序必须每秒多次检查并行端口,即使根本没有发送任何数据。 一些粗略的测量表明,就数据传输速度而言,使用无 IRQ 模式与 IRQ 模式相比,性能没有明显的下降。 主机驱动程序的机器上性能会有所下降。

当 PLIP 驱动程序在 IRQ 模式下使用时,用于触发数据传输的超时(PLIP 驱动程序在尝试握手传输某些数据时,在宣布超时之前允许另一方的最大时间)默认为 500 微秒。 由于 IRQ 传递或多或少是立即的,因此此超时时间非常充分。

当在无 IRQ 模式下时,PLIP 驱动程序每秒轮询并行端口 HZ 次(在本撰写时,HZ 在大多数平台上通常为 100,在 Alpha 上为 1024)。 在两个此类轮询之间,有 10^6/HZ 微秒。 例如,在 i386 上,10^6/100 = 10000 微秒。 很容易看出,触发超时很可能在两个此类轮询之间过期,因为超时时间只有 500 微秒。 因此,需要在 PLIP 连接的 *另一侧* 更改触发超时时间,约为 10^6/HZ 微秒。 如果 PLIP 连接的两侧都在无 IRQ 模式下使用,则需要在两侧都进行此超时设置。

实际上,触发超时时间可以短于上述计算。 这不是一个重要的问题,除非电线有故障,在这种情况下,长超时时间会在由于某种原因而丢失位时导致机器停顿。

可以在 Linux 中执行此更改的实用程序是 plipconfig,它是 net-tools 包的一部分(可以在 Documentation/Changes 文件中找到其位置)。 一个示例命令是“plipconfig plipX trigger 10000”,其中 plipX 是适当的 PLIP 设备。

PLIP 硬件互连

PLIP 使用几种不同的数据传输方法。 第一种(也是早期版本的代码中唯一实现的一种)使用标准打印机“空”电缆一次传输四个位,使用连接到状态位输入的数位输出。

第二种数据传输方法依赖于两台机器都具有双向并行端口,而不是仅输出 printer 端口。 这允许字节宽度传输,并避免将半字节重建为字节,从而导致更快的传输。

并行传输模式 0 电缆

第一种传输模式的电缆是标准打印机“空”电缆,它使用第一个端口(机器 T)的数位输出一次传输四个位,连接到第二个端口(机器 R)的状态位输入。 有五个状态输入,它们用作四个数据输入和一个时钟(数据选通)输入,排列方式使得数据输入位显示为具有标准状态寄存器实现的连续位。

实现此协议的电缆可以作为“空打印机”或“Turbo Laplink”电缆在市场上购买。 它可以由两个 DB-25 公连接器对称连接而成,如下所示

STROBE output       1*
D0->ERROR   2 - 15          15 - 2
D1->SLCT    3 - 13          13 - 3
D2->PAPOUT  4 - 12          12 - 4
D3->ACK     5 - 10          10 - 5
D4->BUSY    6 - 11          11 - 6
D5,D6,D7 are   7*, 8*, 9*
AUTOFD output 14*
INIT   output 16*
SLCTIN      17 - 17
extra grounds are 18*,19*,20*,21*,22*,23*,24*
GROUND      25 - 25

* Do not connect these pins on either end

如果您使用的电缆具有金属屏蔽层,则应仅在一端将其连接到金属 DB-25 外壳。

并行传输模式 1

第二种数据传输方法依赖于两台机器都具有双向并行端口,而不是仅输出 printer 端口。 这允许字节宽度传输,并避免将半字节重建为字节。 此电缆不应在单向 printer (而不是 parallel)端口上使用,或者在未为 PLIP 配置机器时使用,因为它会导致输出驱动程序冲突以及(不太可能的)损坏的可能性。

此传输模式的电缆应按如下方式构建

STROBE->BUSY 1 - 11
D0->D0      2 - 2
D1->D1      3 - 3
D2->D2      4 - 4
D3->D3      5 - 5
D4->D4      6 - 6
D5->D5      7 - 7
D6->D6      8 - 8
D7->D7      9 - 9
INIT -> ACK  16 - 10
AUTOFD->PAPOUT 14 - 12
SLCT->SLCTIN 13 - 17
GND->ERROR  18 - 15
extra grounds are 19*,20*,21*,22*,23*,24*
GROUND      25 - 25

* Do not connect these pins on either end

同样,如果您使用的电缆具有金属屏蔽层,则应仅在一端将其连接到金属 DB-25 外壳。

PLIP 模式 0 传输协议

PLIP 驱动程序与模式 0 中的“Crynwr”并行端口传输标准兼容。该标准规定了以下协议

send header nibble '0x8'
count-low octet
count-high octet
... data octets
checksum octet

每个八位字节都作为以下内容发送

<wait for rx. '0x1?'>   <send 0x10+(octet&0x0F)>
<wait for rx. '0x0?'>   <send 0x00+((octet>>4)&0x0F)>

要启动传输,发送机器输出一个半字节 0x08。 这会提高 ACK 线,从而触发接收机器中的中断。 接收机器禁用中断并提高自己的 ACK 线。

重申

(OUT is bit 0-4, OUT.j is bit j from OUT. IN likewise)
Send_Byte:
   OUT := low nibble, OUT.4 := 1
   WAIT FOR IN.4 = 1
   OUT := high nibble, OUT.4 := 0
   WAIT FOR IN.4 = 0