dc1fbb135c
e.g. sysctl instead of the GATEWAY option use a refer instead of an old file (options.info)
503 lines
20 KiB
Plaintext
503 lines
20 KiB
Plaintext
<!-- This is an SGML version in the linuxdoc DTD of the SLIP Server
|
|
FAQ by Guy Helmer.
|
|
|
|
This guide provides instruction in configuring and preparing
|
|
a FreeBSD system to be a dialup SLIP server.
|
|
|
|
<title>
|
|
Setting up FreeBSD as a SLIP Server
|
|
<author>Guy Helmer, <tt/ghelmer@alpha.dsu.edu/
|
|
<date>v1.0, 15 May 1995
|
|
|
|
-->
|
|
|
|
<sect><heading>Setting up a SLIP server<label id="slips"></heading>
|
|
<p><em>Contribudted by &a.ghelmer;.<newline>
|
|
v1.0, 15 May 1995.</em>
|
|
|
|
This document provides suggestions for setting up SLIP Server services
|
|
on a FreeBSD system, which typically means configuring your system to
|
|
automatically startup connections upon login for remote SLIP clients.
|
|
The author has written this document based on his experience;
|
|
however, as your system and needs may be different, this document may
|
|
not answer all of your questions, and the author cannot be responsible
|
|
if you damage your system or lose data due to attempting to follow the
|
|
suggestions here.
|
|
|
|
This guide was originally written for SLIP Server services on a
|
|
FreeBSD 1.x system. It has been modified to reflect changes in the
|
|
pathnames and the removal of the SLIP interface compression flags in
|
|
early versions of FreeBSD 2.X, which appear to be the only major
|
|
changes between FreeBSD versions. If you do encounter mistakes in
|
|
this document, please email the author with enough information to
|
|
help correct the problem.
|
|
|
|
<sect1><heading>Prerequisites<label id="slips:prereqs"></>
|
|
|
|
<p>
|
|
This document is very technical in nature, so background knowledge is
|
|
required. It is assumed that you are familiar with the TCP/IP network
|
|
protocol, and in particular, network and node addressing, network
|
|
address masks, subnetting, routing, and routing protocols, such as
|
|
RIP. Configuring SLIP services on a dial-up server requires a
|
|
knowledge of these concepts, and if you are not familiar with them,
|
|
please read a copy of either Craig Hunt's <em>TCP/IP Network
|
|
Administration</em> published by O'Reilly & Associates, Inc. (ISBN
|
|
Number 0-937175-82-X), or Douglas Comer's books on the TCP/IP
|
|
protocol.
|
|
|
|
It's further assumed that you have already setup your modem(s) and
|
|
configured the appropriate system files to allow logins through your
|
|
modems. If you haven't prepared your system for this yet, please see
|
|
the tutorial for configuring dialup services; if you have a World-Wide
|
|
Web browser available, browse the list of tutorials at
|
|
<tt>http://www.freebsd.org/</tt>; otherwise, check the place
|
|
where you found this document for a document named <tt/dialup.txt/ or
|
|
something similar. You may also want to check the manual pages for
|
|
<tt/sio(4)/ for information on the serial port device driver and
|
|
<tt/ttys(5)/, <tt/gettytab(5)/, <tt/getty(8)/, & <tt/init(8)/ for
|
|
information relevant to configuring the system to accept logins on
|
|
modems, and perhaps <tt/stty(1)/ for information on setting serial
|
|
port parameters [such as <tt/clocal/ for directly-connected
|
|
serial interfaces].
|
|
|
|
<sect1><heading>Quick Overview</heading>
|
|
<p>
|
|
|
|
In its typical configuration, using FreeBSD as a SLIP server works as
|
|
follows: a SLIP user dials up your FreeBSD SLIP Server system and logs
|
|
in with a special SLIP login ID that uses <tt>/usr/sbin/sliplogin</tt>
|
|
as the special user's shell. The <tt/sliplogin/ program browses the
|
|
file <tt>/etc/sliphome/slip.hosts</tt> to find a matching line for
|
|
the special user, and if it finds a match, connects the serial line to
|
|
an available SLIP interface and then runs the shell script
|
|
<tt>/etc/sliphome/slip.login</tt> to configure the SLIP interface.
|
|
|
|
<sect2><heading>An Example of a SLIP Server Login</heading>
|
|
<p>
|
|
|
|
For example, if a SLIP user ID were <tt>Shelmerg</tt>, <tt/Shelmerg/'s
|
|
entry in <tt>/etc/master.passwd</tt> would look something like this
|
|
(except it would be all on one line):
|
|
|
|
<tscreen><verb>
|
|
Shelmerg:password:1964:89::0:0:Guy Helmer - SLIP:
|
|
/usr/users/Shelmerg:/usr/sbin/sliplogin
|
|
</verb></tscreen>
|
|
|
|
and, when <tt/Shelmerg/ logs in, <tt>sliplogin</tt> will search
|
|
<tt>/etc/sliphome/slip.hosts</tt> for a line that had a matching user
|
|
ID; for example, there may be a line in
|
|
<tt>/etc/sliphome/slip.hosts</tt> that reads:
|
|
|
|
<tscreen><verb>
|
|
Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp
|
|
</verb></tscreen>
|
|
|
|
<tt/sliplogin/ will find that matching line, hook the serial line into
|
|
the next available SLIP interface, and then execute
|
|
<tt>/etc/sliphome/slip.login</tt> like this:
|
|
|
|
<tscreen><verb>
|
|
/etc/sliphome/slip.login 0 19200 Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp
|
|
</verb></tscreen>
|
|
|
|
If all goes well, <tt>/etc/sliphome/slip.login</tt> will issue an
|
|
<tt>ifconfig</tt> for the SLIP interface to which <tt/sliplogin/
|
|
attached itself (slip interface 0, in the above example, which was the
|
|
first parameter in the list given to <tt>slip.login</tt>) to set the
|
|
local IP address (<tt>dc-slip</tt>), remote IP address
|
|
(<tt>sl-helmer</tt>), network mask for the SLIP interface
|
|
(<tt>0xfffffc00</tt>), and any additional flags (<tt>autocomp</tt>).
|
|
If something goes wrong, <tt/sliplogin/ usually logs good
|
|
informational messages via the daemon syslog facility, which usually
|
|
goes into <tt>/var/log/messages</tt> (see the manual pages for
|
|
<tt>syslogd(8)</tt> and <tt>syslog.conf(5)</tt>, and perhaps check
|
|
<tt>/etc/syslog.conf</tt> to see to which files <tt>syslogd</tt> is
|
|
logging).
|
|
|
|
OK, enough of the examples -- let's dive into setting up the system.
|
|
|
|
<sect1><heading>Kernel Configuration</heading>
|
|
<p>
|
|
FreeBSD's default kernels usually come with two SLIP interfaces
|
|
defined (<tt>sl0</tt> and <tt>sl1</tt>); you can use <tt>netstat
|
|
-i</tt> to see whether these interfaces are defined in your kernel.
|
|
|
|
Sample output from <tt>netstat -i</tt>:
|
|
|
|
<tscreen><verb>
|
|
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
|
|
ed0 1500 <Link>0.0.c0.2c.5f.4a 291311 0 174209 0 133
|
|
ed0 1500 138.247.224 ivory 291311 0 174209 0 133
|
|
lo0 65535 <Link> 79 0 79 0 0
|
|
lo0 65535 loop localhost 79 0 79 0 0
|
|
sl0* 296 <Link> 0 0 0 0 0
|
|
sl1* 296 <Link> 0 0 0 0 0
|
|
</verb></tscreen>
|
|
|
|
The <tt>sl0</tt> and <tt>sl1</tt> interfaces shown in <tt>netstat
|
|
-i</tt>'s output indicate that there are two SLIP interfaces built
|
|
into the kernel. (The asterisks after the <tt>sl0</tt> and
|
|
<tt>sl1</tt> indicate that the interfaces are ``down''.)
|
|
|
|
However, FreeBSD's default kernels do not come configured to forward
|
|
packets (ie, your FreeBSD machine will not act as a router) due to
|
|
Internet RFC requirements for Internet hosts (see RFC's 1009
|
|
[Requirements for Internet Gateways], 1122
|
|
[Requirements for Internet Hosts -- Communication Layers],
|
|
and perhaps 1127 [A Perspective on the Host Requirements
|
|
RFCs]), so if you want your FreeBSD SLIP Server to act as a
|
|
router, you'll have to add the line
|
|
<verb>
|
|
sysctl -w net.inet.ip.forwarding = 0
|
|
</verb>
|
|
to your rc.local file.
|
|
|
|
You'll notice that near the end of the default kernel configuration
|
|
file (<tt>/sys/i386/conf/GENERIC</tt>) is a line that reads:
|
|
|
|
<tscreen><verb>
|
|
pseudo-device sl 2
|
|
</verb></tscreen>
|
|
|
|
which is the line that defines the number of SLIP devices available in
|
|
the kernel; the number at the end of the line is the maximum number of
|
|
SLIP connections that may be operating simultaneously.
|
|
|
|
Please refer to <ref id="kernelconfig" name="Configuring the FreeBSD Kernel">
|
|
for help in reconfiguring your kernel.
|
|
|
|
<sect1><heading>Sliplogin Configuration</heading>
|
|
|
|
<p>
|
|
|
|
As mentioned earlier, there are three files in the
|
|
<tt>/etc/sliphome</tt> directory that are part of the configuration
|
|
for <tt>/usr/sbin/sliplogin</tt> (see <tt>sliplogin(8)</tt> for the
|
|
actual manual page for <tt>sliplogin</tt>): <tt>slip.hosts</tt>, which
|
|
defines the SLIP users & their associated IP addresses;
|
|
<tt>slip.login</tt>, which usually just configures the SLIP interface;
|
|
and (optionally) <tt>slip.logout</tt>, which undoes
|
|
<tt>slip.login</tt>'s effects when the serial connection is
|
|
terminated.
|
|
|
|
<sect2><heading>slip.hosts Configuration</heading>
|
|
|
|
<p>
|
|
|
|
<tt>/etc/sliphome/slip.hosts</tt> contains lines which have at least
|
|
four items, separated by whitespace:
|
|
|
|
<itemize>
|
|
<item> SLIP user's login ID
|
|
<item> Local address (local to the SLIP server) of the SLIP link
|
|
<item> Remote address of the SLIP link
|
|
<item> Network mask
|
|
</itemize>
|
|
|
|
The local and remote addresses may be host names (resolved to IP
|
|
addresses by <tt>/etc/hosts</tt> or by the domain name service,
|
|
depending on your specifications in <tt>/etc/host.conf</tt>), and I
|
|
believe the network mask may be a name that can be resolved by a
|
|
lookup into <tt>/etc/networks</tt>. On a sample system,
|
|
<tt>/etc/sliphome/slip.hosts</tt> looks like this:
|
|
|
|
<tscreen><verb>
|
|
----- begin /etc/sliphome/slip.hosts -----
|
|
#
|
|
# login local-addr remote-addr mask opt1 opt2
|
|
# (normal,compress,noicmp)
|
|
#
|
|
Shelmerg dc-slip sl-helmerg 0xfffffc00 autocomp
|
|
----- end /etc/sliphome/slip.hosts ------
|
|
</verb></tscreen>
|
|
|
|
At the end of the line is one or more of the options.
|
|
|
|
<itemize>
|
|
<item> <tt>normal</tt> - no header compression
|
|
<item> <tt>compress</tt> - compress headers
|
|
<item> <tt>autocomp</tt> - compress headers if the remote end allows it
|
|
<item> <tt>noicmp</tt> - disable ICMP packets (so any ``ping'' packets will be
|
|
dropped instead of using up your bandwidth)
|
|
</itemize>
|
|
|
|
Note that <tt/sliplogin/ under early releases of FreeBSD 2 ignored
|
|
the options that FreeBSD 1.x recognized, so the options
|
|
<tt/normal/, <tt/compress/, <tt/autocomp/, and <tt/noicmp/ had no effect
|
|
until support was added in FreeBSD 2.2 (unless your <tt/slip.login/ script
|
|
included code to make use of the flags).
|
|
|
|
Your choice of local and remote addresses for your SLIP links depends
|
|
on whether you are going to dedicate a TCP/IP subnet or if you are
|
|
going to use ``proxy ARP'' on your SLIP server (it's not ``true''
|
|
proxy ARP, but that is the terminology used in this document to
|
|
describe it). If you're not sure which method to select or how to
|
|
assign IP addresses, please refer to the TCP/IP books referenced in
|
|
the <ref id="slips:prereqs"> section and/or consult your IP network manager.
|
|
|
|
If you are going to use a separate subnet for your SLIP clients, you
|
|
will need to allocate the subnet number out of your assigned IP
|
|
network number and assign each of your SLIP client's IP numbers out of
|
|
that subnet. Then, you will probably either need to configure a
|
|
static route to the SLIP subnet via your SLIP server on your nearest
|
|
IP router, or install <tt>gated</tt> on your FreeBSD SLIP server and
|
|
configure it to talk the appropriate routing protocols to your other
|
|
routers to inform them about your SLIP server's route to the SLIP
|
|
subnet.
|
|
|
|
Otherwise, if you will use the ``proxy ARP'' method, you will need to
|
|
assign your SLIP client's IP addresses out of your SLIP server's
|
|
Ethernet subnet, and you'll also need to adjust your
|
|
<tt>/etc/sliphome/slip.login</tt> and
|
|
<tt>/etc/sliphome/slip.logout</tt> scripts to use <tt>arp(8)</tt> to
|
|
manage the proxy-ARP entries in the SLIP server's ARP table.
|
|
|
|
<sect2><heading>slip.login Configuration</heading>
|
|
|
|
<p>
|
|
The typical <tt>/etc/sliphome/slip.login</tt> file looks like this:
|
|
|
|
<tscreen><verb>
|
|
----- begin /etc/sliphome/slip.login -----
|
|
#!/bin/sh -
|
|
#
|
|
# @(#)slip.login 5.1 (Berkeley) 7/1/90
|
|
|
|
#
|
|
# generic login file for a slip line. sliplogin invokes this with
|
|
# the parameters:
|
|
# 1 2 3 4 5 6 7-n
|
|
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
|
|
#
|
|
/sbin/ifconfig sl$1 inet $4 $5 netmask $6
|
|
----- end /etc/sliphome/slip.login -----
|
|
</verb></tscreen>
|
|
|
|
This <tt>slip.login</tt> file merely ifconfig's the appropriate SLIP
|
|
interface with the local and remote addresses and network mask of the
|
|
SLIP interface.
|
|
|
|
If you have decided to use the ``proxy ARP'' method (instead of using
|
|
a separate subnet for your SLIP clients), your
|
|
<tt>/etc/sliphome/slip.login</tt> file will need to look something
|
|
like this:
|
|
|
|
<tscreen><verb>
|
|
----- begin /etc/sliphome/slip.login for "proxy ARP" -----
|
|
#!/bin/sh -
|
|
#
|
|
# @(#)slip.login 5.1 (Berkeley) 7/1/90
|
|
|
|
#
|
|
# generic login file for a slip line. sliplogin invokes this with
|
|
# the parameters:
|
|
# 1 2 3 4 5 6 7-n
|
|
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
|
|
#
|
|
/sbin/ifconfig sl$1 inet $4 $5 netmask $6
|
|
# Answer ARP requests for the SLIP client with our Ethernet addr
|
|
/usr/sbin/arp -s $5 00:11:22:33:44:55 pub
|
|
----- end /etc/sliphome/slip.login for "proxy ARP" -----
|
|
</verb></tscreen>
|
|
|
|
The additional line in this <tt>slip.login</tt>, <tt>arp -s $5
|
|
00:11:22:33:44:55 pub</tt>, creates an ARP entry in the SLIP server's
|
|
ARP table. This ARP entry causes the SLIP server to respond with the
|
|
SLIP server's Ethernet MAC address whenever a another IP node on the
|
|
Ethernet asks to speak to the SLIP client's IP address.
|
|
|
|
When using the example above, be sure to replace the Ethernet MAC
|
|
address (<tt>00:11:22:33:44:55</tt>) with the MAC address of your
|
|
system's Ethernet card, or your ``proxy ARP'' will definitely not work!
|
|
You can discover your SLIP server's Ethernet MAC address by looking at
|
|
the results of running <tt>netstat -i</tt>; the second line of the output
|
|
should look something like:
|
|
|
|
<tscreen><verb>
|
|
ed0 1500 <Link>0.2.c1.28.5f.4a 191923 0 129457 0 116
|
|
^^^^^^^^^^^^^^^
|
|
</verb></tscreen>
|
|
|
|
which indicates that this particular system's Ethernet MAC address is
|
|
<tt>00:02:c1:28:5f:4a</tt> -- the periods in the Ethernet MAC address
|
|
given by <tt>netstat -i</tt> must be changed to colons and leading zeros
|
|
should be added to each single-digit hexadecimal number to convert the
|
|
address into the form that <tt>arp(8)</tt> desires; see the manual page on
|
|
<tt>arp(8)</tt> for complete information on usage.
|
|
|
|
Note that when you create <tt>/etc/sliphome/slip.login</tt> and
|
|
<tt>/etc/sliphome/slip.logout</tt>, the ``execute'' bit (ie,
|
|
<tt>chmod 755 /etc/sliphome/slip.login
|
|
/etc/sliphome/slip.logout</tt>) must be set, or <tt>sliplogin</tt>
|
|
will be unable to execute it.
|
|
|
|
<sect2><heading>slip.logout Configuration</heading>
|
|
|
|
<p>
|
|
|
|
<tt>/etc/sliphome/slip.logout</tt> isn't strictly needed (unless you
|
|
are implementing ``proxy ARP''), but if you decide to create it, this
|
|
is an example of a basic <tt>slip.logout</tt> script:
|
|
|
|
<tscreen><verb>
|
|
----- begin /etc/sliphome/slip.logout -----
|
|
#!/bin/sh -
|
|
#
|
|
# slip.logout
|
|
|
|
#
|
|
# logout file for a slip line. sliplogin invokes this with
|
|
# the parameters:
|
|
# 1 2 3 4 5 6 7-n
|
|
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
|
|
#
|
|
/sbin/ifconfig sl$1 down
|
|
----- end /etc/sliphome/slip.logout -----
|
|
</verb></tscreen>
|
|
|
|
If you are using ``proxy ARP'', you'll want to have
|
|
<tt>/etc/sliphome/slip.logout</tt> remove the ARP entry for the SLIP
|
|
client:
|
|
|
|
<tscreen><verb>
|
|
----- begin /etc/sliphome/slip.logout for "proxy ARP" -----
|
|
#!/bin/sh -
|
|
#
|
|
# @(#)slip.logout
|
|
|
|
#
|
|
# logout file for a slip line. sliplogin invokes this with
|
|
# the parameters:
|
|
# 1 2 3 4 5 6 7-n
|
|
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
|
|
#
|
|
/sbin/ifconfig sl$1 down
|
|
# Quit answering ARP requests for the SLIP client
|
|
/usr/sbin/arp -d $5
|
|
----- end /etc/sliphome/slip.logout for "proxy ARP" -----
|
|
</verb></tscreen>
|
|
|
|
The <tt>arp -d $5</tt> removes the ARP entry that the ``proxy ARP''
|
|
<tt>slip.login</tt> added when the SLIP client logged in.
|
|
|
|
It bears repeating: make sure <tt>/etc/sliphome/slip.logout</tt> has
|
|
the execute bit set for after you create it (ie, <tt>chmod 755
|
|
/etc/sliphome/slip.logout</tt>).
|
|
|
|
<sect1><heading>Routing Considerations</heading>
|
|
|
|
<p>
|
|
If you are not using the ``proxy ARP'' method for routing packets
|
|
between your SLIP clients and the rest of your network (and perhaps
|
|
the Internet), you will probably either have to add static routes to
|
|
your closest default router(s) to route your SLIP client subnet via
|
|
your SLIP server, or you will probably need to install and configure
|
|
<tt>gated</tt> on your FreeBSD SLIP server so that it will tell your
|
|
routers via appropriate routing protocols about your SLIP subnet.
|
|
|
|
<sect2><heading>Static Routes</heading>
|
|
|
|
<p>
|
|
Adding static routes to your nearest default routers can be
|
|
troublesome (or impossible, if you don't have authority to do so...).
|
|
If you have a multiple-router network in your organization, some
|
|
routers, such as Cisco and Proteon, may not only need to be configured
|
|
with the static route to the SLIP subnet, but also need to be told
|
|
which static routes to tell other routers about, so some expertise and
|
|
troubleshooting/tweaking may be necessary to get static-route-based
|
|
routing to work.
|
|
|
|
<sect2><heading>Running gated</heading>
|
|
|
|
<p>
|
|
An alternative to the headaches of static routes is to install
|
|
<tt>gated</tt> on your FreeBSD SLIP server and configure it to use the
|
|
appropriate routing protocols (RIP/OSPF/BGP/EGP) to tell other routers
|
|
about your SLIP subnet. <tt/gated/ is available via anonymous ftp
|
|
from <tt>ftp.gated.cornell.edu</tt> in the directory
|
|
<tt>/pub/gated</tt>; I believe the current version as of this writing
|
|
is <tt>gated-R3_5Alpha_8.tar.Z</tt>, which includes support for
|
|
FreeBSD ``out-of-the-box''. Complete information and documentation on
|
|
<tt>gated</tt> is available on the Web starting at
|
|
<tt>http://www.gated.cornell.edu/</tt>. Compile and install it, and
|
|
then write a <tt>/etc/gated.conf</tt> file to configure your gated;
|
|
here's a sample, similar to what the author used on a FreeBSD SLIP
|
|
server:
|
|
|
|
<tscreen><verb>
|
|
----- begin sample /etc/gated.conf for gated version 3.5Alpha5 -----
|
|
#
|
|
# gated configuration file for dc.dsu.edu; for gated version 3.5alpha5
|
|
# Only broadcast RIP information for xxx.xxx.yy out the ed Ethernet interface
|
|
#
|
|
#
|
|
# tracing options
|
|
#
|
|
traceoptions "/var/tmp/gated.output" replace size 100k files 2 general ;
|
|
|
|
rip yes {
|
|
interface sl noripout noripin ;
|
|
interface ed ripin ripout version 1 ;
|
|
traceoptions route ;
|
|
} ;
|
|
|
|
#
|
|
# Turn on a bunch of tracing info for the interface to the kernel:
|
|
kernel {
|
|
traceoptions remnants request routes info interface ;
|
|
} ;
|
|
|
|
#
|
|
# Propagate the route to xxx.xxx.yy out the Ethernet interface via RIP
|
|
#
|
|
|
|
export proto rip interface ed {
|
|
proto direct {
|
|
xxx.xxx.yy mask 255.255.252.0 metric 1; # SLIP connections
|
|
} ;
|
|
} ;
|
|
|
|
#
|
|
# Accept routes from RIP via ed Ethernet interfaces
|
|
|
|
import proto rip interface ed {
|
|
all ;
|
|
} ;
|
|
|
|
----- end sample /etc/gated.conf -----
|
|
</verb></tscreen>
|
|
|
|
The above sample <tt>gated.conf</tt> file broadcasts routing
|
|
information regarding the SLIP subnet <tt>xxx.xxx.yy</tt> via RIP onto
|
|
the Ethernet; if you are using a different Ethernet driver than the
|
|
<tt/ed/ driver, you'll need to change the references to the <tt/ed/
|
|
interface appropriately. This sample file also sets up tracing to
|
|
<tt>/var/tmp/gated.output</tt> for debugging <tt>gated</tt>'s
|
|
activity; you can certainly turn off the tracing options if
|
|
<tt>gated</tt> works OK for you. You'll need to change the
|
|
<tt>xxx.xxx.yy</tt>'s into the network address of your own SLIP subnet
|
|
(be sure to change the net mask in the <tt>proto direct</tt> clause as
|
|
well).
|
|
|
|
When you get <tt>gated</tt> built and installed and create a
|
|
configuration file for it, you'll need to run <tt>gated</tt> in place
|
|
of <tt>routed</tt> on your FreeBSD system; change the
|
|
<tt>routed/gated</tt> startup parameters in <tt>/etc/netstart</tt> as
|
|
appropriate for your system. Please see the manual page for
|
|
<tt>gated</tt> for information on <tt>gated</tt>'s command-line
|
|
parameters.
|
|
|
|
<sect1><heading>Acknowledgements</heading>
|
|
|
|
<p>
|
|
Thanks to these people for comments and advice regarding this tutorial:
|
|
|
|
<descrip>
|
|
<tag/Wilko Bulte/ <wilko@yedi.iaf.nl>
|
|
<tag/Piero Serini/ <Piero@Strider.Inet.IT>
|
|
</descrip>
|
|
|
|
<!-- </article> -->
|