mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-08-09 06:14:34 +02:00
The ARCnet documentation contains a lot of outdated and irrelevant information (such as changes in decades-old driver versions and messages from a former maintainer) and has some writing style issues. Remove this unnecessary information and improve the writing style. Also remove links to pages that no longer exist. Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com> Link: https://patch.msgid.link/20260521001631.45434-7-enelsonmoore@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
400 lines
16 KiB
ReStructuredText
400 lines
16 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
======
|
|
ARCnet
|
|
======
|
|
|
|
:Author: Avery Pennarun <apenwarr@worldvisions.ca>
|
|
|
|
.. note::
|
|
|
|
See also arcnet-hardware.rst in this directory for jumper-setting
|
|
and cabling information if you're like many of us and didn't happen to get a
|
|
manual with your ARCnet card.
|
|
|
|
----
|
|
|
|
These are the ARCnet drivers for Linux.
|
|
|
|
This new release (2.91) has been put together by David Woodhouse
|
|
<dwmw2@infradead.org>, in an attempt to tidy up the driver after adding support
|
|
for yet another chipset. Now the generic support has been separated from the
|
|
individual chipset drivers, and the source files aren't quite so packed with
|
|
#ifdefs! I've changed this file a bit, but kept it in the first person from
|
|
Avery, because I didn't want to completely rewrite it.
|
|
|
|
The previous release resulted from many months of on-and-off effort from me
|
|
(Avery Pennarun), many bug reports/fixes and suggestions from others, and in
|
|
particular a lot of input and coding from Tomasz Motylewski. Starting with
|
|
ARCnet 2.10 ALPHA, Tomasz's all-new-and-improved RFC1051 support has been
|
|
included and seems to be working fine!
|
|
|
|
|
|
.. _arcnet-netdev:
|
|
|
|
Where do I discuss these drivers?
|
|
---------------------------------
|
|
|
|
ARCnet discussions take place on netdev. Simply send your email to
|
|
netdev@vger.kernel.org and make sure to Cc: maintainer listed in
|
|
"ARCNET NETWORK LAYER" heading of Documentation/process/maintainers.rst.
|
|
|
|
Other Drivers and Info
|
|
----------------------
|
|
|
|
You can try JoAnne Schmitz's ARCNET page on the World Wide Web at:
|
|
|
|
https://www.qis.net/~jschmitz/arcnet/
|
|
|
|
|
|
Supported Hardware
|
|
------------------
|
|
|
|
Only PCI and PCI Express devices based on the COM20020 chipset are supported.
|
|
This is the newest chipset from SMC with support for promiscuous mode (packet
|
|
sniffing), extra diagnostic information, etc. These devices use the com20020_pci
|
|
driver.
|
|
|
|
Support for older chipsets and ISA and PCMCIA devices was previously available
|
|
but has been removed.
|
|
|
|
|
|
Configuring the Driver
|
|
----------------------
|
|
|
|
The COM20020 driver will be loaded automatically at boot if a supported card is
|
|
detected.
|
|
|
|
If the com20020_pci driver was compiled as a loadable module, the options are::
|
|
|
|
node=<node_ID> backplane=<backplane> clockp=<CKP> clockm=<CKM>
|
|
timeout=<timeout> device=<interface_name>
|
|
|
|
If the driver was compiled into the kernel, the same options can be specified on
|
|
the kernel command line by prefixing them with `com20020_pci.`, as in the
|
|
following example::
|
|
|
|
com20020_pci.device=eth1
|
|
|
|
The COM20020 chipset allows you to set the node ID in software, overriding the
|
|
default which is still set in DIP switches on the card. If you don't have the
|
|
COM20020 data sheets, and you don't know what the other options refer
|
|
to, then they won't interest you - forget them.
|
|
|
|
Otherwise, ARCnet can be configured in a similar way to Ethernet, with the
|
|
exception that ARCnet interface names begin with `arc`.
|
|
|
|
|
|
How do I get it to work with...?
|
|
--------------------------------
|
|
|
|
NFS:
|
|
Should be fine linux->linux, just pretend you're using Ethernet cards.
|
|
oak.oakland.edu:/simtel/msdos/nfs has some nice DOS clients. There
|
|
is also a DOS-based NFS server called SOSS. It doesn't multitask
|
|
quite the way Linux does (actually, it doesn't multitask AT ALL) but
|
|
you never know what you might need.
|
|
|
|
With AmiTCP (and possibly others), you may need to set the following
|
|
options in your Amiga nfstab: MD 1024 MR 1024 MW 1024
|
|
(Thanks to Christian Gottschling <ferksy@indigo.tng.oche.de>
|
|
for this.)
|
|
|
|
Probably these refer to maximum NFS data/read/write block sizes. I
|
|
don't know why the defaults on the Amiga didn't work; write to me if
|
|
you know more.
|
|
|
|
DOS:
|
|
If you're using the freeware arcether.com, you might want to install
|
|
the driver patch from my web page. It helps with PC/TCP, and also
|
|
can get arcether to load if it timed out too quickly during
|
|
initialization. In fact, if you use it on a 386+ you REALLY need
|
|
the patch, really.
|
|
|
|
Windows:
|
|
See DOS :) Trumpet Winsock works fine with either the Novell or
|
|
Arcether client, assuming you remember to load winpkt of course.
|
|
|
|
LAN Manager and Windows for Workgroups:
|
|
These programs use protocols that
|
|
are incompatible with the Internet standard. They try to pretend
|
|
the cards are Ethernet, and confuse everyone else on the network.
|
|
|
|
The Linux ARCnet driver supports this protocol via the 'arc0e' device.
|
|
See the section on "Multiprotocol Support" for more information.
|
|
|
|
Using the freeware Samba server and clients for Linux, you can now
|
|
interface quite nicely with TCP/IP-based WfWg or Lan Manager
|
|
networks.
|
|
|
|
Windows 95:
|
|
Tools are included with Win95 that let you use either the LANMAN
|
|
style network drivers (NDIS) or Novell drivers (ODI) to handle your
|
|
ARCnet packets. If you use ODI, you'll need to use the 'arc0'
|
|
device with Linux. If you use NDIS, then try the 'arc0e' device.
|
|
See the "Multiprotocol Support" section below if you need arc0e,
|
|
you're completely insane, and/or you need to build some kind of
|
|
hybrid network that uses both encapsulation types.
|
|
|
|
OS/2:
|
|
I've been told it works under Warp Connect with an ARCnet driver from
|
|
SMC. You need to use the 'arc0e' interface for this. If you get
|
|
the SMC driver to work with the TCP/IP stuff included in the
|
|
"normal" Warp Bonus Pack, let me know.
|
|
|
|
ftp.microsoft.com also has a freeware "Lan Manager for OS/2" client
|
|
which should use the same protocol as WfWg does. I had no luck
|
|
installing it under Warp, however. Please mail me with any results.
|
|
|
|
NetBSD/AmiTCP:
|
|
These use an old version of the Internet standard ARCnet
|
|
protocol (RFC1051) which is compatible with the Linux driver v2.10
|
|
ALPHA and above using the arc0s device. (See "Multiprotocol ARCnet"
|
|
below.) ** Newer versions of NetBSD apparently support RFC1201.
|
|
|
|
|
|
Using Multiprotocol ARCnet
|
|
--------------------------
|
|
|
|
The ARCnet driver supports three protocols, each on its own
|
|
"virtual network device":
|
|
|
|
====== ===============================================================
|
|
arc0 RFC1201 protocol, the official Internet standard which just
|
|
happens to be 100% compatible with Novell's TRXNET driver.
|
|
Version 1.00 of the ARCnet driver supported _only_ this
|
|
protocol. arc0 is the fastest of the three protocols (for
|
|
whatever reason), and allows larger packets to be used
|
|
because it supports RFC1201 "packet splitting" operations.
|
|
Unless you have a specific need to use a different protocol,
|
|
I strongly suggest that you stick with this one.
|
|
|
|
arc0e "Ethernet-Encapsulation" which sends packets over ARCnet
|
|
that are actually a lot like Ethernet packets, including the
|
|
6-byte hardware addresses. This protocol is compatible with
|
|
Microsoft's NDIS ARCnet driver, like the one in WfWg and
|
|
LANMAN. Because the MTU of 493 is actually smaller than the
|
|
one "required" by TCP/IP (576), there is a chance that some
|
|
network operations will not function properly. The Linux
|
|
TCP/IP layer can compensate in most cases, however, by
|
|
automatically fragmenting the TCP/IP packets to make them
|
|
fit. arc0e also works slightly more slowly than arc0, for
|
|
reasons yet to be determined. (Probably it's the smaller
|
|
MTU that does it.)
|
|
|
|
arc0s The "[s]imple" RFC1051 protocol is the "previous" Internet
|
|
standard that is completely incompatible with the new
|
|
standard. Some software today, however, continues to
|
|
support the old standard (and only the old standard)
|
|
including NetBSD and AmiTCP. RFC1051 also does not support
|
|
RFC1201's packet splitting, and the MTU of 507 is still
|
|
smaller than the Internet "requirement," so it's quite
|
|
possible that you may run into problems. It's also slower
|
|
than RFC1201 by about 25%, for the same reason as arc0e.
|
|
|
|
The arc0s support was contributed by Tomasz Motylewski
|
|
and modified somewhat by me. Bugs are probably my fault.
|
|
====== ===============================================================
|
|
|
|
You can choose not to compile arc0e and arc0s into the driver if you want -
|
|
this will save you a bit of memory and avoid confusion when eg. trying to
|
|
use the "NFS-root" stuff in recent Linux kernels.
|
|
|
|
The arc0e and arc0s devices are created automatically when you first
|
|
ifconfig the arc0 device. To actually use them, though, you need to also
|
|
ifconfig the other virtual devices you need. There are a number of ways you
|
|
can set up your network then:
|
|
|
|
|
|
1. Single Protocol.
|
|
|
|
This is the simplest way to configure your network: use just one of the
|
|
two available protocols. As mentioned above, it's a good idea to use
|
|
only arc0 unless you have a good reason (like some other software, ie.
|
|
WfWg, that only works with arc0e).
|
|
|
|
If you need only arc0, then the following commands should get you going::
|
|
|
|
ifconfig arc0 MY.IP.ADD.RESS
|
|
route add MY.IP.ADD.RESS arc0
|
|
route add -net SUB.NET.ADD.RESS arc0
|
|
[add other local routes here]
|
|
|
|
If you need arc0e (and only arc0e), it's a little different::
|
|
|
|
ifconfig arc0 MY.IP.ADD.RESS
|
|
ifconfig arc0e MY.IP.ADD.RESS
|
|
route add MY.IP.ADD.RESS arc0e
|
|
route add -net SUB.NET.ADD.RESS arc0e
|
|
|
|
arc0s works much the same way as arc0e.
|
|
|
|
|
|
2. More than one protocol on the same wire.
|
|
|
|
Now things start getting confusing. To even try it, you may need to be
|
|
partly crazy. Here's what *I* did. :) Note that I don't include arc0s in
|
|
my home network; I don't have any NetBSD or AmiTCP computers, so I only
|
|
use arc0s during limited testing.
|
|
|
|
I have three computers on my home network; two Linux boxes (which prefer
|
|
RFC1201 protocol, for reasons listed above), and one XT that can't run
|
|
Linux but runs the free Microsoft LANMAN Client instead.
|
|
|
|
Worse, one of the Linux computers (freedom) also has a modem and acts as
|
|
a router to my Internet provider. The other Linux box (insight) also has
|
|
its own IP address and needs to use freedom as its default gateway. The
|
|
XT (patience), however, does not have its own Internet IP address and so
|
|
I assigned it one on a "private subnet" (as defined by RFC1597).
|
|
|
|
To start with, take a simple network with just insight and freedom.
|
|
Insight needs to:
|
|
|
|
- talk to freedom via RFC1201 (arc0) protocol, because I like it
|
|
more and it's faster.
|
|
- use freedom as its Internet gateway.
|
|
|
|
That's pretty easy to do. Set up insight like this::
|
|
|
|
ifconfig arc0 insight
|
|
route add insight arc0
|
|
route add freedom arc0 /* I would use the subnet here (like I said
|
|
to in "single protocol" above),
|
|
but the rest of the subnet
|
|
unfortunately lies across the PPP
|
|
link on freedom, which confuses
|
|
things. */
|
|
route add default gw freedom
|
|
|
|
And freedom gets configured like so::
|
|
|
|
ifconfig arc0 freedom
|
|
route add freedom arc0
|
|
route add insight arc0
|
|
/* and default gateway is configured by pppd */
|
|
|
|
Great, now insight talks to freedom directly on arc0, and sends packets
|
|
to the Internet through freedom. If you didn't know how to do the above,
|
|
you should probably stop reading this section now because it only gets
|
|
worse.
|
|
|
|
Now, how do I add patience into the network? It will be using LANMAN
|
|
Client, which means I need the arc0e device. It needs to be able to talk
|
|
to both insight and freedom, and also use freedom as a gateway to the
|
|
Internet. (Recall that patience has a "private IP address" which won't
|
|
work on the Internet; that's okay, I configured Linux IP masquerading on
|
|
freedom for this subnet).
|
|
|
|
So patience (necessarily; I don't have another IP number from my
|
|
provider) has an IP address on a different subnet than freedom and
|
|
insight, but needs to use freedom as an Internet gateway. Worse, most
|
|
DOS networking programs, including LANMAN, have braindead networking
|
|
schemes that rely completely on the netmask and a 'default gateway' to
|
|
determine how to route packets. This means that to get to freedom or
|
|
insight, patience WILL send through its default gateway, regardless of
|
|
the fact that both freedom and insight (courtesy of the arc0e device)
|
|
could understand a direct transmission.
|
|
|
|
I compensate by giving freedom an extra IP address - aliased 'gatekeeper' -
|
|
that is on my private subnet, the same subnet that patience is on. I
|
|
then define gatekeeper to be the default gateway for patience.
|
|
|
|
To configure freedom (in addition to the commands above)::
|
|
|
|
ifconfig arc0e gatekeeper
|
|
route add gatekeeper arc0e
|
|
route add patience arc0e
|
|
|
|
This way, freedom will send all packets for patience through arc0e,
|
|
giving its IP address as gatekeeper (on the private subnet). When it
|
|
talks to insight or the Internet, it will use its "freedom" Internet IP
|
|
address.
|
|
|
|
You will notice that we haven't configured the arc0e device on insight.
|
|
This would work, but is not really necessary, and would require me to
|
|
assign insight another special IP number from my private subnet. Since
|
|
both insight and patience are using freedom as their default gateway, the
|
|
two can already talk to each other.
|
|
|
|
It's quite fortunate that I set things up like this the first time (cough
|
|
cough) because it's really handy when I boot insight into DOS. There, it
|
|
runs the Novell ODI protocol stack, which only works with RFC1201 ARCnet.
|
|
In this mode it would be impossible for insight to communicate directly
|
|
with patience, since the Novell stack is incompatible with Microsoft's
|
|
Ethernet-Encap. Without changing any settings on freedom or patience, I
|
|
simply set freedom as the default gateway for insight (now in DOS,
|
|
remember) and all the forwarding happens "automagically" between the two
|
|
hosts that would normally not be able to communicate at all.
|
|
|
|
For those who like diagrams, I have created two "virtual subnets" on the
|
|
same physical ARCnet wire. You can picture it like this::
|
|
|
|
|
|
[RFC1201 NETWORK] [ETHER-ENCAP NETWORK]
|
|
(registered Internet subnet) (RFC1597 private subnet)
|
|
|
|
(IP Masquerade)
|
|
/---------------\ * /---------------\
|
|
| | * | |
|
|
| +-Freedom-*-Gatekeeper-+ |
|
|
| | | * | |
|
|
\-------+-------/ | * \-------+-------/
|
|
| | |
|
|
Insight | Patience
|
|
(Internet)
|
|
|
|
|
|
|
|
It works: what now?
|
|
-------------------
|
|
|
|
:ref:`Send an email to netdev <arcnet-netdev>`. Describe your setup, preferably
|
|
including driver version, kernel version, ARCnet card model, CPU type, number
|
|
of systems on your network, and list of software in use.
|
|
|
|
It doesn't work: what now?
|
|
--------------------------
|
|
|
|
Do the same as above, but also include the output of the ifconfig and route
|
|
commands, as well as any pertinent log entries (ie. anything that starts
|
|
with "arcnet:" and has shown up since the last reboot) in your mail.
|
|
|
|
If you want to try fixing it yourself (I strongly recommend that you mail me
|
|
about the problem first, since it might already have been solved) you may
|
|
want to try some of the debug levels available. For heavy testing on
|
|
D_DURING or more, it would be a REALLY good idea to kill your klogd daemon
|
|
first! D_DURING displays 4-5 lines for each packet sent or received. D_TX,
|
|
D_RX, and D_SKB actually DISPLAY each packet as it is sent or received,
|
|
which is obviously quite big.
|
|
|
|
Once the driver is running, you can run the arcdump shell script (available
|
|
from me or in the full ARCnet package, if you have it) as root to list the
|
|
contents of the arcnet buffers at any time. To make any sense at all out of
|
|
this, you should grab the pertinent RFCs. (some are listed near the top of
|
|
arcnet.c). arcdump assumes your card is at 0xD0000. If it isn't, edit the
|
|
script.
|
|
|
|
Buffers 0 and 1 are used for receiving, and Buffers 2 and 3 are for sending.
|
|
Ping-pong buffers are implemented both ways.
|
|
|
|
If your debug level includes D_DURING and you did NOT define SLOW_XMIT_COPY,
|
|
the buffers are cleared to a constant value of 0x42 every time the card is
|
|
reset (which should only happen when you do an ifconfig up, or when Linux
|
|
decides that the driver is broken). During a transmit, unused parts of the
|
|
buffer will be cleared to 0x42 as well. This is to make it easier to figure
|
|
out which bytes are being used by a packet.
|
|
|
|
You can change the debug level without recompiling the kernel by typing::
|
|
|
|
ifconfig arc0 down metric 1xxx
|
|
ifconfig arc0 up
|
|
|
|
where "xxx" is the debug level you want. For example, "metric 1015" would put
|
|
you at debug level 15. Debug level 7 is currently the default.
|
|
|
|
Note that the debug level is a binary combination of different debug flags;
|
|
debug level 7 is really 1+2+4 or D_NORMAL+D_EXTRA+D_INIT. To include D_DURING,
|
|
you would add 16 to this, resulting in debug level 23.
|
|
|
|
If you don't understand that, you probably don't want to know anyway.
|