123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556 |
- ----------------------------------------------------------------------------
- NOTE: See also arcnet-hardware.txt 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.
- ----------------------------------------------------------------------------
- Since no one seems to listen to me otherwise, perhaps a poem will get your
- attention:
- This driver's getting fat and beefy,
- But my cat is still named Fifi.
- Hmm, I think I'm allowed to call that a poem, even though it's only two
- lines. Hey, I'm in Computer Science, not English. Give me a break.
- The point is: I REALLY REALLY REALLY REALLY REALLY want to hear from you if
- you test this and get it working. Or if you don't. Or anything.
- ARCnet 0.32 ALPHA first made it into the Linux kernel 1.1.80 - this was
- nice, but after that even FEWER people started writing to me because they
- didn't even have to install the patch. <sigh>
- Come on, be a sport! Send me a success report!
- (hey, that was even better than my original poem... this is getting bad!)
- --------
- WARNING:
- --------
- If you don't e-mail me about your success/failure soon, I may be forced to
- start SINGING. And we don't want that, do we?
- (You know, it might be argued that I'm pushing this point a little too much.
- If you think so, why not flame me in a quick little e-mail? Please also
- include the type of card(s) you're using, software, size of network, and
- whether it's working or not.)
- My e-mail address is: apenwarr@worldvisions.ca
- ---------------------------------------------------------------------------
-
- 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!
- Where do I discuss these drivers?
- ---------------------------------
- Tomasz has been so kind as to set up a new and improved mailing list.
- Subscribe by sending a message with the BODY "subscribe linux-arcnet YOUR
- REAL NAME" to listserv@tichy.ch.uj.edu.pl. Then, to submit messages to the
- list, mail to linux-arcnet@tichy.ch.uj.edu.pl.
- There are archives of the mailing list at:
- http://epistolary.org/mailman/listinfo.cgi/arcnet
- The people on linux-net@vger.kernel.org (now defunct, replaced by
- netdev@vger.kernel.org) have also been known to be very helpful, especially
- when we're talking about ALPHA Linux kernels that may or may not work right
- in the first place.
- Other Drivers and Info
- ----------------------
- You can try my ARCNET page on the World Wide Web at:
- http://www.qis.net/~jschmitz/arcnet/
- Also, SMC (one of the companies that makes ARCnet cards) has a WWW site you
- might be interested in, which includes several drivers for various cards
- including ARCnet. Try:
- http://www.smc.com/
-
- Performance Technologies makes various network software that supports
- ARCnet:
- http://www.perftech.com/ or ftp to ftp.perftech.com.
-
- Novell makes a networking stack for DOS which includes ARCnet drivers. Try
- FTPing to ftp.novell.com.
- You can get the Crynwr packet driver collection (including arcether.com, the
- one you'll want to use with ARCnet cards) from
- oak.oakland.edu:/simtel/msdos/pktdrvr. It won't work perfectly on a 386+
- without patches, though, and also doesn't like several cards. Fixed
- versions are available on my WWW page, or via e-mail if you don't have WWW
- access.
- Installing the Driver
- ---------------------
- All you will need to do in order to install the driver is:
- make config
- (be sure to choose ARCnet in the network devices
- and at least one chipset driver.)
- make clean
- make zImage
-
- If you obtained this ARCnet package as an upgrade to the ARCnet driver in
- your current kernel, you will need to first copy arcnet.c over the one in
- the linux/drivers/net directory.
- You will know the driver is installed properly if you get some ARCnet
- messages when you reboot into the new Linux kernel.
- There are four chipset options:
- 1. Standard ARCnet COM90xx chipset.
- This is the normal ARCnet card, which you've probably got. This is the only
- chipset driver which will autoprobe if not told where the card is.
- It following options on the command line:
- com90xx=[<io>[,<irq>[,<shmem>]]][,<name>] | <name>
- If you load the chipset support as a module, the options are:
- io=<io> irq=<irq> shmem=<shmem> device=<name>
- To disable the autoprobe, just specify "com90xx=" on the kernel command line.
- To specify the name alone, but allow autoprobe, just put "com90xx=<name>"
- 2. ARCnet COM20020 chipset.
- This is the new chipset from SMC with support for promiscuous mode (packet
- sniffing), extra diagnostic information, etc. Unfortunately, there is no
- sensible method of autoprobing for these cards. You must specify the I/O
- address on the kernel command line.
- The command line options are:
- com20020=<io>[,<irq>[,<node_ID>[,backplane[,CKP[,timeout]]]]][,name]
- If you load the chipset support as a module, the options are:
- io=<io> irq=<irq> node=<node_ID> backplane=<backplane> clock=<CKP>
- timeout=<timeout> device=<name>
- 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 three options refer
- to, then they won't interest you - forget them.
- 3. ARCnet COM90xx chipset in IO-mapped mode.
- This will also work with the normal ARCnet cards, but doesn't use the shared
- memory. It performs less well than the above driver, but is provided in case
- you have a card which doesn't support shared memory, or (strangely) in case
- you have so many ARCnet cards in your machine that you run out of shmem slots.
- If you don't give the IO address on the kernel command line, then the driver
- will not find the card.
- The command line options are:
- com90io=<io>[,<irq>][,<name>]
- If you load the chipset support as a module, the options are:
- io=<io> irq=<irq> device=<name>
- 4. ARCnet RIM I cards.
- These are COM90xx chips which are _completely_ memory mapped. The support for
- these is not tested. If you have one, please mail the author with a success
- report. All options must be specified, except the device name.
- Command line options:
- arcrimi=<shmem>,<irq>,<node_ID>[,<name>]
- If you load the chipset support as a module, the options are:
- shmem=<shmem> irq=<irq> node=<node_ID> device=<name>
- Loadable Module Support
- -----------------------
- Configure and rebuild Linux. When asked, answer 'm' to "Generic ARCnet
- support" and to support for your ARCnet chipset if you want to use the
- loadable module. You can also say 'y' to "Generic ARCnet support" and 'm'
- to the chipset support if you wish.
- make config
- make clean
- make zImage
- make modules
-
- If you're using a loadable module, you need to use insmod to load it, and
- you can specify various characteristics of your card on the command
- line. (In recent versions of the driver, autoprobing is much more reliable
- and works as a module, so most of this is now unnecessary.)
- For example:
- cd /usr/src/linux/modules
- insmod arcnet.o
- insmod com90xx.o
- insmod com20020.o io=0x2e0 device=eth1
-
- Using the Driver
- ----------------
- If you build your kernel with ARCnet COM90xx support included, it should
- probe for your card automatically when you boot. If you use a different
- chipset driver complied into the kernel, you must give the necessary options
- on the kernel command line, as detailed above.
- Go read the NET-2-HOWTO and ETHERNET-HOWTO for Linux; they should be
- available where you picked up this driver. Think of your ARCnet as a
- souped-up (or down, as the case may be) Ethernet card.
- By the way, be sure to change all references from "eth0" to "arc0" in the
- HOWTOs. Remember that ARCnet isn't a "true" Ethernet, and the device name
- is DIFFERENT.
- Multiple Cards in One Computer
- ------------------------------
- Linux has pretty good support for this now, but since I've been busy, the
- ARCnet driver has somewhat suffered in this respect. COM90xx support, if
- compiled into the kernel, will (try to) autodetect all the installed cards.
- If you have other cards, with support compiled into the kernel, then you can
- just repeat the options on the kernel command line, e.g.:
- LILO: linux com20020=0x2e0 com20020=0x380 com90io=0x260
- If you have the chipset support built as a loadable module, then you need to
- do something like this:
- insmod -o arc0 com90xx
- insmod -o arc1 com20020 io=0x2e0
- insmod -o arc2 com90xx
- The ARCnet drivers will now sort out their names automatically.
- 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.
-
- However, v2.00 and higher of 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 v2.10 ALPHA 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 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?
- -------------------
- Send mail describing 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 to me at the following address:
- apenwarr@worldvisions.ca
- I do send (sometimes automated) replies to all messages I receive. My email
- can be weird (and also usually gets forwarded all over the place along the
- way to me), so if you don't get a reply within a reasonable time, please
- resend.
- 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.
- Starting with v2.40 ALPHA, the autoprobe routines have changed
- significantly. In particular, they won't tell you why the card was not
- found unless you turn on the D_INIT_REASONS debugging flag.
- 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
- /etc/rc.d/rc.inet1
- 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 (starting with v1.90 ALPHA) a binary
- combination of different debug flags; so 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.
- E-mail me about your problem.
- I want to send money: what now?
- -------------------------------
- Go take a nap or something. You'll feel better in the morning.
|