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 和其他服务之间正确共享并行端口。
IRQ 和触发超时¶
当用于 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 使用几种不同的数据传输方法。第一种(也是早期代码中实现的唯一一种)使用标准打印机“空”电缆一次传输 4 位数据,使用连接到状态位输入的数据位输出。
第二种数据传输方法依赖于两台机器都具有双向并行端口,而不是仅输出打印机
端口。这允许字节宽传输,并避免将半字节重构为字节,从而实现更快的传输。
并行传输模式 0 电缆¶
第一种传输模式的电缆是标准的打印机“空”电缆,它一次传输 4 位数据,使用第一个端口(机器 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¶
第二种数据传输方法依赖于两台机器都具有双向并行端口,而不是仅输出打印机
端口。这允许字节宽传输,并避免将半字节重构为字节。此电缆不应在单向打印机
(而不是并行
)端口上使用,或在未为 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