IPX Support in DPPP - Detlef Pleiss, Feb-24-1998

Support for IPX is currently in experimental state. It should allow DPPP
callers to play IPX based multiplayer online games against each other. 
DPIPXS.EXE and DPIPXS32.EXE are part of the IPX support for DPPP. They are 
only needed for IPX support, you do not need them for just IP (Internet) 
access.

Novell, NetWare, and Internetwork Packet Exchange (IPX), are
registered trademarks of Novell, Inc.

IPX (Internetwork Packet eXchange) is a protocol developed by Novell Inc. It
is widely used on Local Area Networks (LANs), i.e. using Ethernet. Novell
Netware is based on this protocol, but for its widespread availability on LANs
many games exist that allow multiplayer gaming based on the IPX protocol.
Although it was developed for LANs, IPX can also be used on different sorts of
wide area, including PPP, links. PPP supports not only TCP/IP, but also IPX
(and a couple more protocols). DPPP supports TCP/IP and IPX for PPP links.
Note that SLIP is dedicated to transporting IP, therefore IPX support is only
available for PPP callers. With IPX support, DPPP callers can use all sort of
IPX based software, especially multiplayer games, amongst each other.

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

Installation

It is assumed that you already have a working DPPP installation. 
For IPX to work, you need DPPP version 1.4 Beta 3 or later.
DPIPXS.EXE is the 16 bit version, DPIPXS32.EXE the 32bit version of the DPPP
IPX Support Server. If you run 32bit Windows, install the 32bit version,
regardless of what version of PBBS you run. If you run 16bit Windows, install
the 16bit version. Both versions are the same program, just 16bit versus
32bit. In the following this program will be called just DPIPXS, meaning
whatever version you install. DPIPXS forms the virtual IPX network between
DPPP callers in that it forwards packets between multiple BBS / DPPP nodes. 
You run one copy of it for the entire BBS. Copy it to whatever directory is 
convenient and keep it running in the background. You may want to put it in 
your autostart/startup group/folder. DPPP callers using IPX cannot connect to 
each other if you don't have DPIPXS running. If your BBS runs on a single 
machine, the \POWRBBS home directory would be a good choice to copy DPIPXS to.  
If your BBS runs on multiple networked machines, choose just one machine to
run DPIPXS on. DPIPXS uses the TCP/IP protocol to exchange data with the DPPP
nodes, so your network must support TCP/IP. Each node must be able to reach
the machine where you run DPIPXS via TCP/IP. If on your network you have one
"gateway" machine with an Internet connection and the rest of the network
connects to the Internet going through a proxy on the "gateway" machine, the
"gateway" machine would be a good choice to run DPIPXS on. But you can use any
machine, given all DPPP nodes can reach it via TCP/IP and you run just one
copy of DPIPXS for your entire BBS.
For IPX support to work, DPPP must know how to reach DPIPXS. Per default,
DPPP uses the IP address of the machine it runs on, or, if that address is
unknown, 127.0.0.1, the local loopback address. If your BBS runs on just one
machine, these defaults should be fine, just run DPIPXS on that machine and
you're done with the installation.
If DPPP and DPIPXS run on different machines, you must tell DPPP how to reach
DPIPXS. Currently you need to edit DPPP.INI manually in order to do so. Please
note that each time you use DPPPSet, a new DPPP.INI is written (except if you
leave DPPPSet by pressing "cancel"). So if you use DPPPSet to change 
something, you afterwards need to re-do the following addition:  
In order to tell DPPP how to reach DPIPXS, add the following line to the 
[DPPP] section of \WINDOWS\DPPP.INI (on each machine DPPP runs on!) :

ipxserver=<ip address of the machine that runs DPIPXS>

If you run a TCP/IP network using private IP addresses, i.e. in the
192.168.x.y range, and you run DPIPXS on the "gateway" machine (which has two
IP addresses, the private one and the one of the actual Internet connection),
then use the private IP address. I.e. if the private IP address of the
"gateway" machine is 192.168.0.1, make the line in DPPP.INI read:

ipxserver=192.168.0.1

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

Installation for the Caller

With IPX support in DPPP, the caller can not only use the TCP/IP protocol from
within PPP, but also the IPX protocol, given his PPP dialer supports it.
TCP/IP and IPX can be used concurrently, if the caller wishes so (and his
software supports it).
While the IPX support in DPPP is independent from what system the caller uses,
the following description refers to Windows 95, as this is supposed to be the
most common case, and it does support TCP/IP and IPX over the same PPP
connection and it does support using the IPX dial-up link from within DOS
boxes.
Given the caller already has a working setup for TCP/IP, everything he needs
to do is to add the IPX protocol to his networking setup and enable its use in
the dial-up networking entry.
(The following paragraphs address the caller. You, the sysop, do *not* need 
IPX installed for DPPP or DPIPXS to work)
To install the IPX protocol, go to the control panel and open the "networking"
control. In case the "IPX/SPX compatible protocol" is already listed there,
you're fine and can close "networking" and "control panel". Otherwise, click
the "add" button, choose "protocol" and from the upcoming list choose
"Microsoft" and then "IPX/SPX compatible protocol". The default IPX properties
are fine for use with DPPP, you don't need to change anything else. Click the
"ok" buttons, let Windows do its job of copying files and let it reboot the
machine once it asks to do so.
Now open dial-up networking and right-click the DPPP dial-up entry. Select
"properties", then select the "server type" tab. You should already have
"TCP/IP" checked, now also check "IPX/SPX compatible protocol". Leave
everything else unchecked. Click "ok".
If you now dial into the BBS with this changed dial-up networking entry, you
not only have TCP/IP (Internet) available as usual, but also an IPX connection
that connects you to all other DPPP callers who enabled IPX in their setup
just like you did.
Once dialled in, you can check that IPX connectivity is actually available by
double clicking the icon for the connection at the right edge of the task bar.
In the dialog that pops up, click "details" and you should see "IPX/SPX
compatible protocol" listed.
Windows 95 forwards this IPX connectivity to its DOS boxes. So you can now
open a DOS box and from there launch a game that supports multiplayer over
IPX. You can play this game together with other DPPP callers who did the same
like you did. Of course you can do the same thing with Windows based games
that support IPX multiplayer networking.
You may want to use a PA/NET connection to the BBS in order to find other
potential players in the chat rooms, learn about ongoing games and in order to
agree about game parameters like IPX socket number, number of players,
the level to play etc.
Note: Some utilities for Windows 95 allow setting the MRU and MTU (maximum
packet size) value for dial-up networking. Other TCP/IP stacks may allow
setting these values as well. DPPP will not work with settings below 576
bytes, while the maximum value it accepts is its default of 1500 bytes.
Windows 95 default settings are fine for DPPP, you do not need to tweak them.

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

Testing the Installation

A game that is easy getting to work with IPX is Descent 2 (Demo), so it's a
good test candidate for checking the IPX support in DPPP. The Descent 2
Demo is available at
ftp://ftp1.interplay.com/pub/demos/d2demo10.zip
or
http://www.pxsoftware.com/files/d2demo.zip
Have two callers download and install the game and then calling in with IPX
enabled. After (!) dialing in with an IPX enabled DUN connection they should
launch a DOS box and then the game from there. Both select "MULTIPLAYER..."
from the menu. One chooses "START AN IPX NETWORK GAME...", the other "JOIN AN
IPX NETWORK GAME...". They should agree about who does what beforehand ... The
caller who STARTed the network game should just press "enter" in the upcoming
"GAME SETUP" dialog. He should wait for the other caller to show up in the
"SELECT UP TO 8 PLAYERS" box and then press "enter" to start the game. The
JOINing player should wait for the game to show up in the "NETGAMES" listing
and press "enter" to join the highlighted game. Note that (in contrast to some
other games) Descent 2 allows other players to join in to an ongoing game.
Note that the F8 key allows players to send chat messages to each other. See
the README.TXT that comes with the demo for more details about the game and
network games in particular.
If the netgame appears slow or suffers from problems related to lost packets
(players jump around, hits not registering, removable walls not disappearing),
the one STARTing a game can lower the number of packets per second in the
"GAME SETUP" -> "MORE OPTIONS..." menu. The default of 10 may be too high for
modem connections. Try 3 packets per second instead. Leave the "network
socket" option alone (default: 0), so players can find the ongoing game
without having to change the socket number in the "JOIN" menu.

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

How does it work?

DPPP has the ability built in to not only negotiate and talk the TCP/IP
protocol, but also IPX (both concurrently if needed). Note that this ability
is available with PPP only, not for SLIP lines, as SLIP is an IP only
protocol.
DPPP encapsulates all IPX packets it receives in UDP packets according to RFC
1234 and sends them to DPIPXS, either on the local machine or to the IP
address you configured with the "ipxserver" line in DPPP.INI. DPIPXS uses UDP
port 213 decimal as assigned to encapsulated IPX.  Note that IPX is actually
spoken only on the PPP connection between the caller and DPPP. So you do *not*
need to have IPX installed on your BBS machine or your network. But you do
need to have TCP/IP installed on the BBS machine and/or your network for the
connections between DPPP nodes and DPIPXS.
DPIPXS keeps track of all DPPP nodes it receives (encapsulated) IPX packets
from. If it receives a packet destined to a single IPX network node that it 
knows about, it sends a (encapsulated) copy of that packet to the appropriate 
DPPP node. DPPP on that node then receives the packet, translates it back to 
IPX and sends it to the caller on that node. If DPIPXS receives an IPX 
broadcast packet, it sends a copy to all DPPP nodes it knows about. This way 
DPIPXS forms a virtual IPX network between all DPPP nodes that send their 
encapsulated IPX packets to it. Therefore you run just one copy of DPIPXS for
your entire BBS, and all DPPP nodes should send their encapsulated IPX packets
to whatever machine runs DPIPXS. So, if you run your BBS on a network, you
add the same "ipxserver=<ip address of the machine that runs DPIPXS>" line to
DPPP.INI on all machines.

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

Security Concerns

The IPX support in DPPP forms a virtual IPX network between DPPP callers,
separate from whatever network the BBS runs on. So, even if you do use IPX on
your network, DPPP callers can not access resources on that network.
But, for the same reason, callers should take some measurements to prevent
other DPPP/IPX callers from accessing their machine. The best way for a caller
to do so is *not* having "file and printer sharing" installed on his machine,
unless he actually does want to have other callers access resources on his
machine. In that case he should make double sure he configured appropriate
access restrictions. Another security measurement a caller should take is to
enable the "IPX/SPX compatible protocol" in the dial-up networking entry only
when he actually wants to use it, and disable it when he calls in for Internet
access only.

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

Troubleshooting

Only the same versions of a game can participate in a game session, different
versions of even the same game cannot participate in one network game!
Some games require all players to agree about parameters like IPX socket
number, number of players, level to play etc. and will not work if not all
participants use the correct parameters.
IPX over DPPP is not a 10 megabits/second LAN. Much more packets than on a
real Ethernet will get lost. Some games tolerate that, some not. The latter
will most likely not work with DPPP. If the game has a parameter to lower the
number of IPX packets it sends per second, this may help to get a game to work
that otherwise doesn't. Read the documentation of the game!
As the IPX support in DPPP forms just *one* virtual network between all
callers (not one per ongoing game), it is recommended to have only one game
going on at a time. Depending on the game, a game may flood DPPP/IPX callers
with its data packets, even if they don't participate in that game. Callers
should have IPX enabled only when they actually want to use it.
Some games are simply hard to get to work, even on a real Ethernet.
