mars+ncpfs-HOWTO: (how to make ncpfs and/or mars_nwe work under linux)
(draft 2, circa 30-Nov-1999, current for mars_nwe version 0.99pl17)
(draft 3, circa 7-Jun-2000, with an important typo correction, and an
update for mars_nwe version is 0.99pl19)
(draft 4, circa 10-Dec-2000, with just a couple of link updates)
(draft 5, circa 21-Mar-2002, with an inconsequential change)
(draft 6, circa 28-May-2004, with notes about Novell's Client 4.90)

by David Burton  <dave@burtonsys.com.nospam>  (remove the ".nospam")
Burton Systems Software
Makers of TLIB Version Control 5.54 for Win-NT/2K/XP/9x/ME/3.1x, DOS & OS/2.
 (and command-line version also runs under Linux's WINE Windows Emulator)
http://www.burtonsys.com/


**** For the latest version of this document, look here:
     http://www.burtonsys.com/mars_ncpfs-HOWTO.html
  or http://www.burtonsys.com/mars_ncpfs-HOWTO.txt


==============================================================================

Synopsis
--------

If you want to run both ncpfs and mars_nwe, then you must:

o  Use the "#define INTERNAL_RIP_SAP 1" version of mars_nwe (which
   probably means that you needn't recompile it, if you got an already
   compiled version, as I did with Redhat 6.0).

o  Load nwserv first, then 'insmod ncpfs' and ncpmount.

o  Do not use ipx_interface or ipx_configure.

o  Configure the Internal Network Number in section/line 3 of
   /etc/nwserv.conf to be unique.

o  Configure the External Network Number in section/line 4 of
   /etc/nwserv.conf to be the external network number of your
   existing Netware server(s), which is NOT the network number
   displayed by slist.  You can find out the Internal and External
   Network Numbers of a Novell 3.12 server by doing a 'config'
   command on the system console, or 'load install' and edit
   STARTUP.NCF.  (Note that the comments in nwserv.conf are wrong!)


Note: you can get the latest MARS_NWE from:
http://www.compu-art.de/download/mars_nwe.html or perhaps
http://www.compu-art.de/service/mars_nwe/mars_nwe.html or
ftp://www.compu-art.de/mars_nwe/

The latest version is mars_nwe-0.99.pl20.tgz (09/01/2000), but
this document is for the previous version, mars_nwe-0.99.pl19.

Also, the SMArT configurator (which I've not used) for MARS_NWE is at:
http://www.lintux.cx/smart.html

Martin Stover's email address is: mstover@compu-art.de.nospam (remove the ".nospam")


==============================================================================


IPX Internal and External Network Numbers
-----------------------------------------

When someone refers to an "IPX network number" for an IPX (Novell-style)
network or server, they can be talking about either of two different
things: an "Internal Network Number" or an "External Network Number."

A single LAN cabling system can have several servers on it, all sharing
the same 10baseT hub or coax loop or TokenRing MAU or whatever.

Also, if a single server computer has two (or more) Network Interface
Cards (NICs, e.g., NE2000), then it can be a server to two (or more)
LAN cabling systems.  [I suppose that such a server could also work as
a router or bridge between the two LAN cabling systems, but I don't
know anything about that subject.]

Each SERVER on a LAN must have a single, unique "INTERNAL Network
Number" assigned to it.  Even if there are several NICs in the
server, there will still be only one Internal Network Number for that
entire server.

Each LAN CABLING SYSTEM must have a single, unique "EXTERNAL Network
Number" assigned to it.  If there are several servers on the LAN
cabling system, then all must be configured for the SAME External
Network Number.  But if there are several NICs in the server, connected
to several different LAN cabling systems, then that one server will be
using several different External Network Numbers.

Thus, if you are configuring a Linux PC, the External Network Number
is the network number that is associated with each NIC, and the
Internal Network Number is the network number that is associated with
the PC as a whole.

I think that Internal and External Network Numbers are part of the
SAME "name space" ("number space"?).  In other words, you should not
try to use the same number for both an Internal Network Number (of a
server) and an External Network Number (of a LAN cabling system).



Network Numbers on a Real Novell NetWare Server
-----------------------------------------------

I have a small Novell 3.12 network, with just one 10baseT hub and just
one genuine Novell NetWare 3.12 server.  On my Novell NetWare 3.12
Server, STARTUP.NCF contains:

file server name BURTON
ipx internal net 11
register memory...
load NE2000...
bind IPX to NE2000 net=21
mount all
...

In this case, as you can see, my Novell server's Internal Network
Number is 11 hexadecimal (a/k/a 0x11), and the LAN cabling system's
External Network Number is 21 hexadecimal (a/k/a 0x21).

Note: You can view the contents of your STARTUP.NCF file from the
server console via "load install".  (You can also view various
configuration settings, including internal and external network
numbers, from the console via the "config" command.)

Typing 'slist' from any client workstation shows server=BURTON,
network=11, node=1, Status=Default (except that Linux's slist adds
superflous leading zeros to the numbers).  That means that the
Internal Network Number for that server is 11 hexadecimal (0x11).

I don't know what a "node" or "node address" is, but it seems to
always be 1.  Maybe it is for when you have two NICs in the same
server, connected to the same LAN cabling system (for redundancy?
or performance?).

"Status=Default" just means that this server is the designated
default server.

As an experiment, I typed "unbind ipx ne2000" on the server console,
and it responded:

{date,time}:   1.1.116 IPX local network 00000021 removed because of
  unbind request
IPX LAN protocol unbound from NE2000

In this case, "IPX local network 00000021" refers to the External
Network Number for the cabling system which is attached to that
particular NIC.  After the unbind command, the server no longer
knows what NIC is attached to external network number 0x21.



Using ncpfs Without mars_nwe
----------------------------

If you only need to enable your Linux PC to access existing Novell
NetWare servers, and you don't need to use your Linux PC as a server
or router, then you do not need mars_nwe.  You need ncpfs.

Under Redhat Linux 6.0, I got ncpfs (the Netware Client File
System) to work with my existing NetWare 3.12 server by adding
this series of commands to the end of my /etc/rc.d/rc.local file,
so that it runs at boot time:

insmod ncpfs
# ipx_interface add -p eth0 802.3
ipx_interface add -p eth0 802.3 0x21
ncpmount -S BURTON -U LINUX1 -n /burton

(Note #1: it was NOT necessary to recompile the Linux kernel,
since IPX support is compiled into this version of Linux by
default.)

(Note #2: different Linux distributions handle startup "autoexec"
processing in different ways.  I only have Redhat, and with Redhat
it worked to add the commands to the end of /etc/rc.d/rc.local,
but you may have to do something different if you use a different
Linux distribution.  See /etc/inittab to see how the process begins.)

The "insmod ncpfs" command simply loads the ncpfs module, since
it is not linked into the kernel on my Redhat 6.0 Linux system.

The "ipx_interface add -p eth0 802.3 0x21" command is similar to
Novell's "bind" command on my Novell 3.12 server: it tells the OS
what the External Network Number is for this LAN cabling system.
(It exposes that information via a small text-format pseudo-file
named /proc/net/ipx_interface which other programs can read.)

The ipx_interface command also tells Linux what the device name
is for my NIC ("eth0" for my NE2000 Ethernet adapter), and what
"frame type" to use.  The frame type must match what all the other
computers on the LAN cabling system are using.

As it happens, if there is a working server on the LAN cabling
system, then it is not mandatory to specify the external network
number in the ipx_interface command, since ncpmount (or ncpfs?)
can "listen" to the network to discover what external network
number the existing server is using.

The "ncpmount -S BURTON -U LINUX1 -n /burton" command tells Linux
to log into the server and mount it as a Linux file system.  In
my case, the server name is BURTON, the Novell login name on that
server for my Linux workstation is LINUX1, the "-n" means there
is no password needed to log in, and /burton is the "mount point".

If you are new to Linux, then please note that the mount point
must be an ALREADY EXISTING directory.  You can create it with
the mkdir (make directory) command, for example "mkdir /burton"
or "mkdir /mnt/burton".

Note #1: The ipx_configure command is supposed to be a simpler way
to do the same thing as ipx_interface, but ipx_configure does not
work at all for me.

Note #2: If you have a DOS or OS/2 or Windows-9x/NT workstation on
your NetWare LAN then you can use Novell's 'slist' command to list
servers without mounting (logging into) them.  However, contrary
to the documentation, Linux's 'slist' command will NOT list your
servers until at least one of them has been mounted with the
ncpmount command.  I don't know why.  My first guess was that
slist does not know how to listen for the external network number,
but even after I began specifying the external network number in
my ipx_interface command, Linux's slist was still unable to find
the server.



Using mars_nwe to Make Your Linux PC Emulate a NetWare Server
-------------------------------------------------------------

I also wanted to make my Linux workstation act as a second server
on my Novell Netware network.  For this, you can use MARtin Stover's
NetWare Emulator, mars_nwe.

The programs that are part of mars_nwe are nwserv, nwconn, ncpserv,
nwclient, nwbind, nwrouted, and dbmtool.  The only one that you'll
need to run explicitly is nwserv (NetWare SERVer), and the only
commands you'll use with it are 'nwserv' to start it, and 'nwserv -k'
to stop it.

From the mars_nwe documentation you might conclude that there are
two ways to use mars_nwe (or mars_nwe and ncpfs together).  The two
ways correspond to the two choices for "#define INTERNAL_RIP_SAP"
in the config.h source file.  However, one of the two ways does not
seem to work.

The doc/INSTALL file says:

   (2) Decide, if mars_nwe should initialize your IPX-subsystem,
       make routing and handle sap/rip or if you want to do this
       with 3rd party products by hand.

The way that does NOT work is to use the ipx_interface command to
specify your external network number and frame type, as you did
when using ncpfs alone, and build a version of mars_nwe with
"#define INTERNAL_RIP_SAP 0" in config.h.  (I tried a LOT of
permutations, over several days, and, believe me, it just does not
work in version 0.99pl17.  I didn't try it with version 0.99pl19.)
This is the "do this with 3rd party products by hand" choice.
Don't waste your time.

The way that DOES work is to use a version of mars_nwe that has
been compiled with "#define INTERNAL_RIP_SAP 1" in config.h, and
load nwserv INSTEAD OF using ipx_interface.  This is the "mars_nwe
should initialize your IPX-subsystem, make routing and handle
sap/rip" choice.  Note that you will have to start nwserv BEFORE
trying to use mount the other NetWare server(s) with ncpfs and
ncpmount.

For RedHat 6.x users, this is more convenient, anyhow, because the
precompiled binaries were built with "#define INTERNAL_RIP_SAP 1", so
you need not recompile mars_nwe.  However, if you do want to recompile
mars_nwe, then be sure to download the latest and greatest version
from Mr. Stover's Web site, http://www.compu-art.de/mars_nwe/
(When I wrote this document, I was using mars_nwe-0.99.pl17, i.e.,
version 0.99.pl17, circa June 3, 1999, which was still the latest
version as of August, 1999).  The latest version is now (2 years later)
0.99.pl20.



Configuring mars_nwe
--------------------

To configure mars_nwe, you must edit its configuration file,
/etc/nwserv.conf (which is initially a copy of a file called nw.ini).
It consists of a lot of one-line "sections."  The sections that
deal with IPX network numbers are sections 3 and 4.  Section 3
specifies the Internal Network Number for your server, and it is
required.  Section 4 specifies the External Network Number for the
cabling system to which your NIC is attached, and this network
number must be the SAME as any other server on the cabling system.

Section 4 mostly specifies the same information that you would
specify with the ipx_interface command if you were using ncpfs
without mars_nwe.

Note: the mars_nwe documentation indicates that section 4 is only
"strongly recommended," not required.  Do not believe it.  It is
required.  Also, the documentation for section/line 4 indicates that
the network number there should be unique, but that is WRONG.  The
section 4 network number is actually the External Network Number, and
it MUST be the SAME as the External Network Number used by the other
servers on this cabling system.

Here's what I have configured for sections/lines 3 and 4:

  3 0x31 1   # internal network number (1 per SERVER), and node
  4 0x21 eth0 802.3 1   # external network number (1 per cabling system)

As you can see, I've configured mars_nwe to use internal network
number 31 (hexadecimal) for my Linux server, and external network
number 21 (hexadecimal) for the cabling system attached to the NIC.

The other sections/lines in the configuration file are well-
documented, and are unlikely to cause you difficulty, so I'm not
going to discuss them here.

To start the mars_nwe NetWare Emulator, run nwserv.  To stop it,
run 'nwserv -k'.



Order of Commands
-----------------

To use mars_nwe alone, without ncpfs, after you have configured it
in /etc/nwserv.conf you need only one command to start it:

   nwserv

In my case, I put this in my /etc/rc.d/rc.local file, so that it
starts automatically whenever my Linux system reboots.

When using both mars_nwe (the IPX server, nwserv) and ncpfs (the IPX
client, ncpmount), you must start mars_nwe first.  In my case, I
wanted it to start automatically whenever my Linux system reboots,
so I added the following lines to my /etc/rc.d/rc.local file:

   # Start mars_nwe, the netware server emulator:
   nwserv

   # Load ncpfs, so that we can also mount the real Novell 3.12 server:
   insmod ncpfs

   # # The ipx_interface command is not needed if nwserv is running, because
   # # its functionality is handled by section 4 of the /etc/nwserv.conf file.
   # # If you try to run it after already starting nwserv, then ipx_interface
   # # will fail with the innocuous error message:
   # #    ipx_interface: Primary network already selected.
   # # But if you want to run ncpfs without nwserv, then you need this:
   # ipx_interface add -p eth0 802.3 0x21

   # Log onto and mount the Novell Netware 3.12 server:
   ncpmount -S BURTON -U LINUX1 -n /burton

   # Log onto and mount the mars_nwe emulated server:
   ncpmount -S MARS -U SUPERVISOR -P apassword /mars
   # There's no real need to do this, of course, since we can access
   # the /mars/... stuff via the normal Linux paths.  But it is convenient
   # to be able to see for verification purposes, when administering the
   # server.




==============================================================================


Interpreting Error Messages
---------------------------
(seen either at a console or in /var/log/mars_nwe.log):


Q: ipx_interface: Primary network already selected.

A: This is an error that is displayed if you try to run
   ipx_interface after already starting nwserv.  You don't need
   to run ipx_interface if you are running nwserv.  Section/line 4
   of the configuration information in /etc/nwserv.conf enables
   mars_nwe (nwserv) to replace the functionality of ipx_interface.


Q: ncpmount: No server found when trying to find BURTON

   (where "BURTON" is the name of a file server that is known to be
   working)

A: Something is probably wrong with the ipx_interface command (if
   you are using ncpfs without nwserv), or in section/line 4 of
   /etc/nwserv.conf (if you use nwserv instead of ipx_interface).

   Check that the External Network Number and frame type are the
   same as for the other computers on your network.

   If you already have a Novell Netware 3.12 server, type 'config'
   on the console.  The external network number is shown as 0x21 in:
      LAN protocol: IPX network 00000021
   The frame type is shown as 802.3 in:
      Frame type: ETHERNET_802.3


Q: !! 08.30,03:51:25 NWS 0   0:PANIC !!
   08.30,03:51:25 NWS 0   0:!! IPX IN USE ERROR !!:
   mars_nwe would kill existing IPX programs if starting
   because it must reinit ipx devices.
   Please stop other IPX programs e.g. ncpmount,
   or change mars_nwe's configuration.

A: This is the error that you will see when you try to start nwserv
   after already running ipx_interface and/or ncpmount.  You must
   run nwserv first (instead of ipx_interface).


Q: !! 08.29,13:43:30 NWS 0   0:PANIC !!
   08.29,13:43:30 NWS 0   0:Get_ini:
   device net 0xc = internal net

A: I think that this is another error that can occur if you try
   to start nwserv after running ipx_interface or ncpmount.  But
   I'm not sure.


Q: NWS 0   0:SERVER name='MARS', INTERNAL NET=0x21, NODE=0x00:40:95:05:e2:e2

A: That is a status message that you may see in /var/log/mars_nwe.log
   when mars_nwe starts.  In my case, I've adjusted some of the
   settings in /etc/nwserv.conf so that I get more status messages
   logged, so I'm not sure whether this message is one that everyone
   will see, or whether it is shown because I have configured:

      100  1   # debug IPX KERNEL (0 | 1)   normal=0
      101  1   # debug NWSERV               normal=1
      102  1   # debug NCPSERV              normal=0
      103  1   # debug NWCONN               normal=0
      104  0   # debug (start) NWCLIENT, should *always* be '0' !
      105  1   # debug NWBIND               normal=0
      106  1   # debug NWROUTED             normal=1

   This message tells you your mars_nwe server's name (in this case
   the name is MARS because I configured "2 MARS" in /etc/nwserv.conf),
   and also the Internal Network Number for this server.

   In the example above, it isn't an error message, but it DOES
   indicate a problem!  On my system, the EXTERNAL Network Number is
   actually 0x21, but in the above status message we can see that
   mars_nwe thinks that is the server's INTERNAL Network Number!

   As you can imagine, mars_nwe did not work until I managed to get
   it to stop using my External network number for an Internal
   network number.

   This problem occurred when I tried to set the external network
   number with ipx_interface, and use a nwserv that was compiled with
   "#define INTERNAL_RIP_SAP 0" in config.h.  For some reason,
   mars_nwe ignored the section/line 3 setting for the internal
   network number in /etc/nwserv.conf, and instead tried to use the
   external network number (perhaps obtained from ipx_interface) as
   its internal network number.  This is presumably some sort of bug.

   Note: at one point I suspected that mars_nwe had saved the
   previously configured network number, perhaps in the bindery
   files, and was ignoring changes in /etc/nwserv.conf.  I don't
   know whether that was true or not, but it doesn't seem to hurt
   anything to just delete all the bindery files.  The bindery files
   are normally in either /var/nwserv/db/* or /var/mars_nwe/bindery/*
   depending upon the "#define PATHNAME_BINDERY" setting in config.h
   and/or the path specified in section/line 45 of /etc/nwserv.conf
   (if there is a section/line 45 configured).


Q: !! 08.30,14:04:59 NCP 0   0:PANIC !!
   08.30,14:04:59 NCP 0   0:Usage::Success
   ncpserv: nwname address nwbindsock echosocket
   08.30,14:16:40 NWS 0   0:t_error:Cannot assign requested address
   t_rcvudata !OK
   08.30,14:16:40 NWS 0   0:t_error:Cannot assign requested address
   t_rcvudata !OK

   (and many megabytes of identical t_error messages)

A: I don't know what this means, but my guess is that it is related
   to the above problem in which mars_nwe was trying to use the
   external network number as an internal network number.

   Does anyone know what these error messages mean?  And which
   section/line in /etc/nwserv.conf enables/disables them?


Q: slist: No server found in ncp_open

A: This CAN mean that there is no working server on the network.

   However, for some unknown reason, Linux's slist also gives this
   error message until a server is mounted with ncpmount.  If you
   have a DOS, OS/2, or Windows machine on the network, and real
   Novell client software, then you can run 'slist' from one of those
   other computers to see the list of servers.


Q: 09.02,18:04:04 NWS 0   0:Starting Version: 0.99pl17
   09.02,18:04:05 NWS 0   0:TLI-BIND:Cannot assign requested address
   socket Nr:0x0
   09.02,18:04:05 NWS 0   0:t_error:Cannot assign requested address
   tbind:get_ipx_addr
   !! 09.02,18:04:05 NWS 0   0:PANIC !!
   09.02,18:04:05 NWS 0   0:No ipx-router running !:Cannot assign requested address

A: This is what happens if you try to run a version of nwserv which
   was compiled with "#define INTERNAL_RIP_SAP 0" in config.h.  You
   can make the error message go away by running ipx_interface, but
   it still won't run correctly.  The right solution is to use a
   version of nwserv built with "#define INTERNAL_RIP_SAP 1" in
   config.h.


Q: What does it mean when you see error messages on a Novell server
   console every couple of seconds, saying:

   {date,time}:  1.1.112 Router configuration error detected
     Router at node 00409505E2E2 claims network 00000021 should be 00000041

A: That means that you have erroneously configured your External
   Network Number to 0x41 when it should have been 0x21 (to match
   the existing Novell server).  Fix it in section/line 4 of
   /etc/nwserv.conf (and/or in your ipx_interface command line, if
   you don't always use mars_nwe).

   By the way, to stop the errors on your Novell NetWare Server
   console, stop mars_nwe with the 'nwserv -k' command.


Q: I started nwserv, and from my OS/2 workstation I can see the
   server when I run Novell's slist command, but when I try to map
   a drive I get a "cannot be located" error.  This is the command
   that I'm using:
      MAP V:=\\MYSERVR\SYS\
   and then I enter the user name when prompted.
   The MAP program replies with:
      Your station is attached to server MYSERVR.
      MAP-4.07-195: Directory [MYSERVR\SYS\] cannot be located.

A: Enable more debug logging options in /etc/nwserv.conf, like this
      102 1  # debug NCPSERV
      103 1  # debug NWCONN  <-- especially this one!
      105 1  # debug NWBIND
   Then shutdown mars_nwe:
      nwserv -k
   Then restart it:
      nwserv
   In my case, when I checked the log file for errors (/var/log/nw.log
   unless you changed the default in section 201 of /etc/nwserv.conf)
   the log file showed:
      09.03,01:07:05 NWC 1   19:Cannot map inode=1170868, dev=777, namespace=4 to vol=0 handle
   This turned out to be due to my use of the "o" option in section 1
   of /etc/nwserv.conf.  With mars_nwe version 0.99pl17, for reasons
   I cannot recall, I'd configured:
       1 SYS /home/nwe/SYS kioO 777 666
   but mars_nwe version 0.99pl19 didn't work until I changed that line to:
       1 SYS /home/nwe/SYS kiO 777 666


Q: In my /var/log/nw.log file I got this error message:
   09.03,01:03:00 NWS 0   0:Cannot get unix uid/gid:
   User='SUPERVISOR'
   So I did "adduser -m SUPERVISOR" but that didn't fix it.
   Why not?

A: Because it needs to be lower-case.  For some unknown reason,
   nwserv changes the name to upper-case when logging it, even
   if the name must actually be all lower-case, as are all the
   examples in the default /etc/nwserv.conf (a/k/a nw.ini).
   (I think this is a minor bug.)

   All the user accounts mentioned in sections 12 and 13 of
   /etc/nwserv.conf must be created in this way, to avoid this
   error.


Q: 09.03,01:04:00 NWS 0   0:Starting Version: 0.99pl17
   09.03,01:04:05 NWS 0   0:DEVICE=eth0, FRAME=802.3, NETWORK=0x21
   09.03,01:04:05 NWS 0   0:SERVER name='MARS', INTERNAL NET=0x31, NODE=0x00:00:00:00:00:01
   09.03,01:04:05 NWS 0   0:USE_PERMANENT_OUT_SOCKET enabled
   09.03,01:04:05 NWS 0   0:IPX_MAX_DATA=1470, RW_BUFFERSIZE =1444
   09.03,01:04:05 NWB 0   0:Starting Version: 0.99pl17
   09.03,01:04:06 NWB 0   0:check_compress_bindery starts...
   09.03,01:04:06 NWB 0   0:check_compress_bindery after qsort
   09.03,01:04:06 NWB 0   0:check_compress_bindery after deleting props, propok=1
   09.03,01:04:06 NWB 0   0:check_compress_bindery ends after 1 seconds.
   09.03,01:04:06 NWB 0   0:Add/Change User='SUPERVISOR', UnixUser='apassword'
   09.03,01:04:07 NCP 0   0:Starting Version: 0.99pl17
   09.03,01:04:07 NCP 0   0:USE_PERMANENT_OUT_SOCKET enabled
   09.03,01:04:07 NWB 0   0:USE_PERMANENT_OUT_SOCKET enabled

A: That is all good stuff!  You can see from the 2nd line that the
   frame type is 802.3, and that External Network Number 0x21 is the
   cabling system attached to the eth0 Ethernet card.  You can see
   from the 3rd line that the mars_nwe server name is MARS, and the
   server's internal network number is 0x31.


==============================================================================

Status Info That You Can View
-----------------------------

There is a lot of information about your system available in
the /proc/net/ipx* pseudo-files, while either nwserv or ipx_interface
is running.  Here are some examples, and how to read them.  This
is with one real Novell 3.12 server at Internal Network Number 0x11,
and with the cabling system's External Network Number being 0x21.

In /etc/nwserv.conf I have configured:

   3 0x31 1
   4 0x21 eth0 802.3 1

...which means that my Linux system has Internal Network Number 0x31.

Also, I've used ncpmount to log onto and mount both the real Novell
Server and the Linux machine's own mars_nwe server.

/proc/net/ipx contains:

   Local_Address  Remote_Address              Tx_Queue  Rx_Queue  State  Uid
   00000031:4000  Not_Connected               00000000  00000000  07     000
   00000031:0452  Not_Connected               00000000  00000000  07     000
   00000031:0453  Not_Connected               00000000  00000000  07     000
   00000031:0001  Not_Connected               00000000  00000000  07     000
   00000031:0456  Not_Connected               00000000  00000000  07     000
   00000031:4001  Not_Connected               00000000  00000000  07     000
   00000031:4002  Not_Connected               00000000  00000000  07     000
   00000031:0451  Not_Connected               00000000  00000000  07     000
   00000031:4003  Not_Connected               00000000  00000000  07     000
   00000031:4004  Not_Connected               00000000  00000000  07     000
   00000031:4008  Not_Connected               00000000  00000000  07     000
   00000031:400C  00000011:000000000001:0451  00000000  00000000  01     000
   00000031:400D  Not_Connected               00000000  00000000  07     000
   00000031:400E  Not_Connected               00000000  00000000  07     000
   00000031:4012  00000031:000000000001:0451  00000000  00000000  01     000
   00000031:4013  Not_Connected               00000000  00000000  07     000
   00000031:4014  Not_Connected               00000000  00000000  07     000
   00000031:4015  Not_Connected               00000000  00000000  07     000

Note that the Local Address column all starts with 00000031 because
the Internal Network Number of the Linux box is 0x31.  The two
mounted server volumes are on Internal Network number 0x11 (for the
real Novell server) and Internal Network number 0x31 (for the Linux
box's own mars_nwe server).


/proc/net/ipx_interface contains:

   Network    Node_Address   Primary  Device     Frame_Type
   00000031   000000000001   Yes      Internal   None
   00000021   00409505E2E2   No       eth0       802.3

Note that the "Network" number for device "Internal" is the Linux
box's Internal Network Number, 0x31; and the "Network" number for
the eth0 Ethernet card is the cabling system's External Network
Number, 0x21.


/proc/net/ipx_route contains:

   Network    Router_Net   Router_Node
   00000011   00000021     00409505E2A7
   00000021   Directly     Connected
   00000031   Directly     Connected

Note that the way we can reach the 0x11 Network Number (i.e., the
Novell Server) is via Network Number 0x21, which is the External
Network Number for the cabling system.


The process list is also somewhat interesting.  The relevant part of
'ps ax' on my system shows:

    1933 ?        S      0:00 nwserv
    1936 ?        S      0:01 nwbind MARS 0.0.0.31:0.0.0.0.0.1:4.51 4002
    1937 ?        S      0:00 ncpserv MARS 0.0.0.31:0.0.0.0.0.1:4.51 4002 4000
    1961 ?        S      0:00 nwconn 1 0.0.0.21:0.80.ad.b3.c6.e2:40.f AVA
    1983 ?        S      0:00 ncpd
    2001 ?        S      0:00 ncpd
    2002 ?        S      0:00 nwconn 3 0.0.0.31:0.0.0.0.0.1:40.12 SUPERVISOR

(Note: the first nwconn instance is for a Win95 box elsewhere on
the LAN that I logged into the MARS server using the login name AVA.)


Note that if you do not use mars_nwe, but just ipx_interface and
ncpfs and ncpmount, then your Linux box won't have an Internal
Network Number at all.  So, the /proc/net/ipx_interface pseudo-
file will have no "Internal" line:

   Network    Node_Address   Primary  Device     Frame_Type
   00000021   00409505E2E2   Yes      eth0       802.3

Also, the /proc/net/ipx pseudo-file will contain only references to
the External Network Number:

   Local_Address  Remote_Address              Tx_Queue  Rx_Queue  State  Uid
   00000021:4002  00000011:000000000001:0451  00000000  00000000  01     000
   00000021:4003  Not_Connected               00000000  00000000  07     000
   00000021:4004  Not_Connected               00000000  00000000  07     000

And, of course, /proc/net/ipx_route will not mention an Internal
Network Number:

   Network    Router_Net   Router_Node
   00000011   00000021     00409505E2A7
   00000021   Directly     Connected


If you then try to run nwserv (the version compiled with "#define
INTERNAL_SAP_RIP 0"), it'll be confused and try to use the 0x21
External Network Number as its Internal Network Number:

   09.03,05:47:49 NWS 0   0:SERVER name='MARS', INTERNAL NET=0x21, NODE=0x00:40:95:05:e2:e2

You'll see no errors, but it won't work.


==============================================================================

Next, a few questions.  Some with answers, some without.
-------------------------------------------------------


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
doc/README says:

nwserv  . . .
       Sends broadcasts, wdogs, sap and rip packets.

I have no idea what that means.  What are those things?  Especially,
what are SAP and RIP?


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

I have no idea how any of this works with NetWare 4 or 5.  I only
have NetWare 3.12.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

How can I tell whether my kernel has "CONFIG_IPX_INTERN=NO" ?


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

doc/README says:

       If nwserv is started with the parameter 'y', then the simple
       test client 'nwclient', only for debugging, is started.
       Parameter '-k' is for stopping the actual running nwserv
       and parameter '-h' for sending a HUP signal to the
       running nwserv.

But "nwserv y" doesn't work at all.  It just gives the usage message.
What is the right syntax?

And what is the test client, anyhow, and why would I want to run it?

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Q: slist shows my existing Novell 3.12 server as being on network
   number 00000011, but is that decimal or hexadecimal?

A: It is hexadecimal, and that is the Internal Network Number for
   the server, not the External Network Number for the cabling system.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Q: doc/INSTALL says:

   (8) Stop programs (server down)

       If nwserv isn't daemonized, then the server can be stopped
       with ^C, otherwise the server must be shut down with a
       kill of nwserv or with starting 'nwserv -k' or with the
       right dos client programm (fconsole server down) as supervisor.

   But there doesn't seem to be any way to start nwserv not daemonized.

A: See section/line 200 in /etc/nwserv.conf


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Q: nwserv seems to load okay, and there are no error messages, but
   the workstations still can't see the server.  What is wrong?

A: Make sure that you did not run ipx_interface or ipx_configure
   or ncpmount before starting nwserv.  nwserv must run first.

Q: I did that, but slist still doesn't list my server.

A: Run a DOS or OS/2 or Windows version of slist, from another
   workstation on the network.  Linux's slist won't show the servers
   until you have already mounted (logged onto) them.


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Q: Shared access to read-only files via "FLAG x:\subdir\file.ext +S"
   or "FLAG x:\subdir\file.ext +Sh" doesn't seem to work.  I still
   get file sharing errors when old DOS programs try to open such
   files in "compatibility mode."  Why?

A: I don't know, I think it is a bug.  Maybe it is fixed in
   mars_nwe-0.99.pl20?  (I'm using mars_nwe-0.99.pl19.)


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Q: When some programs overwrite an existing file with a new, shorter
   version, the file does not get truncated down to the new/shorter
   file length.  Why not?

A: I don't know, I am pretty sure this is a bug.  Maybe it is fixed in
   mars_nwe-0.99.pl20?  (I'm using mars_nwe-0.99.pl19.)


==============================================================================

Here's my /etc/nwserv.conf with the comment lines removed:

   1   SYS /home/nwe/SYS kiO 777 666
   1   CDROM /mnt/cdrom kmnor
   2   MARS
   3   0x31 1  # internal network number
   4   0x21 eth0 802.3 1
   5   0x0
   6   1   0x1
   7   1
   8   0x61
   9   0751  0640
   10  99
   11  99
   12  SUPERVISOR supervisor apassword
   13  AVA avaspassword
   15  0 generalpassword
   16  2
   17  0x0
   18  0x1
   21  LP SYS:/PRINT/LP lp  # note: I've not tried the print server
   40  /var/spool/nwserv/.volcache
   41  /var/spool/nwserv/.locks
   42  /var/spool/nwserv
   45  /var/nwserv/db
   46  /var/nwserv/attrib
   47  /var/nwserv/trustees
   100 1   # debug IPX KERNEL (0 | 1)   normal=0
   101 1   # debug NWSERV               normal=1
   102 1   # debug NCPSERV              normal=0
   103 1   # debug NWCONN               normal=0
   104 0   # debug (start) NWCLIENT, should *always* be '0' !
   105 1   # debug NWBIND               normal=0
   106 1   # debug NWROUTED             normal=1
   200 1   # 0 = no logfile and dont daemonize nwserv/nwrouted
   201 /var/log/mars_nwe.log     # filename of logfile
   202 0x0 # flag in hex notation
   210 03  # 1 .. 600  (default 10) seconds after server
   211 60  # 10 .. 600 (default 60) broadcasts every x seconds
   300 1   # > 0 print routing info to file every x broadcasts.
   301 /var/log/nw.routes #  filename of logfile
   302 0x1 # flags will be interpreted as hex value.
   310 7   # send wdog's only to device net < x ticks.
   400 /etc/nwserv.stations  # for syntax see file in the examples directory.
   401 0   # 0 = ignore entry 400, get nearest response always enabled.
   402 0   # 0 = ignore entry 400, create connection always enabled.

==============================================================================





This is also possibly of interest:

--------- Begin forwarded message ----------
From: dburton@BurtonSys.com.nospam (David Burton -- remove the ".nospam")
Message-ID: <e4gNHFvcwapi@salzo.Cary.NC.US>
Date: Mon, 06 Sep 1999 13:47:58 EDT
Subject: What's wrong with 802.3
X-Mailer: SilverMail version B.145

Linux apparently supports four choices of "frame type" for
networking.  The four are Ethernet-II, 802.2, 802.3, and SNAP.

Somewhere in the Linux IPX and mars_nwe documention (in the mars_nwe
FAQ, at least, and perhaps in other places, too) I had read a
preference expressed for Ethernet-II as the "best" frame type to use,
with 802.2 being the second choice.  As for SNAP, it sounds like
nobody uses it except on AppleTalk networks, and maybe the Linux guys
weren't REALLY even sure that it worked at all.  And the LAST choice
was 802.3, which they grudginly admitted should work, but if you have
a choice you were advised to use something else.  Their favorite was
Ethernet-II.  Second choice was 802.2.  But there was no indication
of WHY they so dislike 802.3.

Well, my Novell network has always used 802.3, probably just because
that's what Greg Sluder set it up with, eons ago.  I think it was
an arbitrary choice.  If he asked me, I'd probably have said to go
with the default, or go with the "higher" number (assuming, wrongly,
that a higher number meant a more modern protocol).

The Novell documentation seems neutral between choosing 802.2 and
802.3.  Some versions of Novell apparently default to 802.3, others
to 802.2.  I think that recent versions are defaulting to 802.2, but
I've seen nothing from Novell that indicated that one is better than
the other.

So, I naturally wondered why the Linux people so dislike 802.3, since
it obviously *does* work.

Well, today I think that I found out.  It wasn't where I expected.

I was messing around with the Novell network client settings on Ava's
machine, having a bit of trouble at first keeping it from logging off
one server when logging onto the other.  Well, I fumbled around until
I got that to work (why are UIs always so hideous?).  While I was in
there, I wandered through the menus, looking at other settings.  I
found "Client32 preferences" -> "Advanced settings" and one setting
was for checksums.

Checksums?  You mean they let you disable checksums?!?  How awful!

My NT version of Novell's Client does NOT have a "checksums" setting.

No wonder I've had customers tell me that files sometimes just get
corrupted on their servers, a few bits clobbered here and there!
Without checksums, a network cabling problem could EASILY cause data
loss.  So, I figured that I'd better make sure that I had checksums
enabled, for safety.  I went to the checksums setting, and discovered
that it could be set to a number from 0-3.

Again I was surprised.  What could four choices be for?  What could
it be other than "enabled" and "disabled?"

Well, that was just odd enough to entice me into looking for a
help screen for it.  I clicked on the "?" and then on the word
"checksums."  Wonder of wonders, it came up with help on checksums
(usually I just get something generic and useless).  The help
explained that 0 (my current setting, gak!) meant no checksums, 3
meant checksums required, 2 meant checksums preferred, 1 meant prefer
no checksums, but allow them.  Then it noted that choosing 2 or 3
carries a performance cost.  Then, at the very bottom of the help
screen, I read this:

   Note: Ethernet frame type 802.3 does not support checksums.

Arrrrgh!  You've GOT to be kidding!  *NOW* I know what is wrong with
frame type 802.3!  <groan>

-Dave Burton
Burton Systems Software: http://www.burtonsys.com/
Tel: +1 919-481-0149 or 481-6658   Fax: 481-3787
--------- End forwarded message ----------


--------- Begin forwarded message ----------
Path: prv-forum2.provo.novell.com!prv-forum1.provo.novell.com!prv-forum2.provo.novell.com.POSTED!53ab2750!not-for-mail
From: "Dave Burton" <dave146@burtonsys.com>
Newsgroups: novell.support.netware.client.winnt-2x-xp
References: <aleZb.2897$tW6.1299@prv-forum2.provo.novell.com> <x60_b.4201$tW6.3569@prv-forum2.provo.novell.com>
Subject: Novell NetWare Client 4.90 Sp1a doesn't work with Mars-NWE server (but 4.90 does)
Message-ID: <72Dtc.506$uj7.125@prv-forum2.provo.novell.com>
Date: Fri, 28 May 2004 08:49:07 GMT
Organization: Novell Inc.
Xref: prv-forum1.provo.novell.com novell.support.netware.client.winnt-2x-xp:10070

I just blew a couple of hours discovering that, although Client version 4.90
works okay with Linux Mars-NWE (netware emulator), Client version
4.90 SP1a does NOT work with Mars-NWE.

I have both a real (ancient) NetWare 3.12 server, and a Mars-NWE server
on my LAN.  After I installed Client 4.90 SP1a, it would consistently lose
its connections to the Mars-NWE server after about 1 minute (except that
if a program had a file already open it could continue to access it).

I could get it back for another minute by Right-clicking the big red "N",
picking Netware Connections..., detaching both servers, then logging onto
my 3.12 server again, then mapping the Mars-NWE drive again.  But about
60 seconds later the Mars-NWE drive became inaccessable again.

Switching back to Client 4.90 (which I fortunately still had on my hard
disk drive) solved the problem.

BTW, my workstation is running Windows 2000 (SP4).  My Mars-NWE
is version 0.99pl19, which is one rev back from the latest (and probably
final) version, 0.99pl20.  See:
http://www.burtonsys.com/mars_ncpfs-HOWTO.html
I supposed that 0.99pl20 might fix the incompatibility with Client 4.90
Sp1a, but I doubt it, because 0.99pl20 is much older than Client 4.90 Sp1a.

Note "0.99pl20" is lower-case "0.99PL20", not "0.99p120"

-Dave
dave146 at burtonsys.com
--------- End forwarded message ----------


--------- Begin forwarded message ----------
Path: prv-forum2.provo.novell.com!prv-forum1.provo.novell.com!prv-forum2.provo.novell.com.POSTED!53ab2750!not-for-mail
From: "Tony Pedretti" <ynotpe@NOSPAMhotmail.com>
Newsgroups: novell.support.netware.client.winnt-2x-xp
References: <aleZb.2897$tW6.1299@prv-forum2.provo.novell.com> <x60_b.4201$tW6.3569@prv-forum2.provo.novell.com> <72Dtc.506$uj7.125@prv-forum2.provo.novell.com>
Subject: Re: Novell NetWare Client 4.90 Sp1a doesn't work with Mars-NWE server (but 4.90 does)
Organization: TransUnion LLC
Message-ID: <LZHtc.727$uj7.402@prv-forum2.provo.novell.com>
Date: Fri, 28 May 2004 14:25:47 GMT
Xref: prv-forum1.provo.novell.com novell.support.netware.client.winnt-2x-xp:10086

Dave,

Rumor has it connecting to NetWare 3.x servers with client 4.90 has been
troublesome and in most cases it's recommended to stick with client 4.83.

Beta SP2 for 4.90 is available for testing and is going well. In addition
to this forum, report issues via the beta feedback link...
http://www.novell.com/beta/auth/beta.jsp?pid=7474&type=1

Both beta SP2 and the feedback section are available at the above link and
a TID on Product Updates.  Should it not work, go off the main beta site
to get it...
http://www.novell.com/beta

--
Tony Pedretti
TransUnion LLC
--------- End forwarded message ----------