mirror of
https://github.com/paulusmack/ppp.git
synced 2024-11-27 05:23:38 +08:00
261 lines
10 KiB
Plaintext
261 lines
10 KiB
Plaintext
This file describes the installation process for ppp-2.4 on systems
|
|
running Solaris. The Solaris and SVR4 ports share a lot of code but
|
|
are not identical. The STREAMS kernel modules and driver for Solaris
|
|
are in the solaris directory (and use some code from the modules
|
|
directory).
|
|
|
|
NOTE: Although the kernel driver and modules have been designed to
|
|
operate correctly on SMP systems, they have not been extensively
|
|
tested on SMP machines. Some users of SMP Solaris x86 systems have
|
|
reported system problems apparently linked to the use of previous
|
|
versions of this software. I believe these problems have been fixed.
|
|
|
|
|
|
Installation.
|
|
*************
|
|
|
|
1. Run the configure script and make the user-level programs and the
|
|
kernel modules.
|
|
|
|
./configure
|
|
make
|
|
|
|
The configure script will automatically find Sun's cc if it's in
|
|
the standard location (/opt/SUNWspro/bin/cc). If you do not have
|
|
Sun's WorkShop compiler, configure will attempt to use 'gcc'. If
|
|
this is found and you have a 64 bit kernel, it will check that gcc
|
|
accepts the "-m64" option, which is required to build kernel
|
|
modules.
|
|
|
|
You should not have to edit the Makefiles for most ordinary cases.
|
|
|
|
2. Install the programs and kernel modules: as root, do
|
|
|
|
make install
|
|
|
|
This installs pppd, chat and pppstats in /usr/local/bin and the
|
|
kernel modules in /kernel/drv and /kernel/strmod, and creates the
|
|
/etc/ppp directory and populates it with default configuration
|
|
files. You can change the installation directories by editing
|
|
solaris/Makedefs. If you have a 64 bit kernel, the 64-bit drivers
|
|
are installed in /kernel/drv/sparcv9 and /kernel/strmod/sparcv9.
|
|
|
|
If your system normally has only one network interface at boot
|
|
time, the default Solaris system startup scripts will disable IP
|
|
forwarding in the IP kernel module. This will prevent the remote
|
|
machine from using the local machine as a gateway to access other
|
|
hosts. The solution is to create an /etc/ppp/ip-up script
|
|
containing something like this:
|
|
|
|
#!/bin/sh
|
|
/usr/sbin/ndd -set /dev/ip ip_forwarding 1
|
|
|
|
See the man page for ip(7p) for details.
|
|
|
|
Integrated pppd
|
|
***************
|
|
|
|
Solaris 8 07/01 (Update 5) and later have an integrated version of
|
|
pppd, known as "Solaris PPP 4.0," and is based on ppp-2.4.0. This
|
|
version comes with the standard Solaris software distribution and is
|
|
supported by Sun. It is fully tested in 64-bit and SMP modes, and
|
|
with bundled and unbundled synchronous drivers. Solaris 8 10/01
|
|
(Update 6) and later includes integrated PPPoE client and server
|
|
support, with kernel-resident data handling. See pppd(1M).
|
|
|
|
The feature is part of the regular full installation, and is
|
|
provided by these packages:
|
|
|
|
SUNWpppd - 32-bit mode kernel drivers
|
|
SUNWpppdr - root-resident /etc/ppp config samples
|
|
SUNWpppdu - /usr/bin/pppd itself, plus chat
|
|
SUNWpppdx - 64-bit mode kernel drivers
|
|
SUNWpppdt - PPPoE support
|
|
SUNWpppg - GPL'd optional 'pppdump' and plugins
|
|
SUNWpppgS - Source for GPL'd optional features
|
|
|
|
Use the open source version of pppd if you wish to recompile to add
|
|
new features or to experiment with the code. Production systems,
|
|
however, should run the Sun-supplied version, if at all possible.
|
|
|
|
You can run both versions on a single system if you wish. The
|
|
Solaris PPP 4.0 interfaces are named "spppN," while this open source
|
|
version names its interfaces as "pppN". The STREAMS modules are
|
|
similarly separated. The Sun-supplied pppd lives in /usr/bin/pppd,
|
|
while the open source version installs (by default) in
|
|
/usr/local/bin/pppd.
|
|
|
|
Dynamic STREAMS Re-Plumbing Support.
|
|
************************************
|
|
|
|
Solaris 8 (and later) includes dynamic re-plumbing support. With
|
|
this feature, modules below ip can be inserted, or removed, without
|
|
having the ip stream be unplumbed, and re-plumbed again. All state
|
|
in ip for the interface will be preserved as modules are added or
|
|
removed. Users can install (or upgrade) modules such as firewall,
|
|
bandwidth manager, cache manager, tunneling, etc., without shutting
|
|
the interface down.
|
|
|
|
To support this, ppp driver now uses /dev/udp instead of /dev/ip for
|
|
the ip stream. The interface stream (where ip module pushed on top
|
|
of ppp) is then I_PLINK'ed below the ip stream. /dev/udp is used
|
|
because STREAMS will not let a driver be PLINK'ed under itself, and
|
|
/dev/ip is typically the driver at the bottom of the tunneling
|
|
interfaces stream. The mux ids of the ip streams are then added
|
|
using SIOCSxIFMUXID ioctl.
|
|
|
|
Users will be able to see the modules on the interface stream by,
|
|
for example:
|
|
|
|
pikapon# ifconfig ppp modlist
|
|
0 ip
|
|
1 ppp
|
|
|
|
Or arbitrarily if bandwidth manager and firewall modules are installed:
|
|
|
|
pikapon# ifconfig hme0 modlist
|
|
0 arp
|
|
1 ip
|
|
2 ipqos
|
|
3 firewall
|
|
4 hme
|
|
|
|
Snoop Support.
|
|
**************
|
|
|
|
This version includes support for /usr/sbin/snoop. Tests have been
|
|
done on Solaris 7 through 9. Only IPv4 and IPv6 packets will be sent
|
|
up to stream(s) marked as promiscuous (i.e., those used by snoop).
|
|
|
|
Users will be able to see the packets on the ppp interface by, for
|
|
example:
|
|
|
|
snoop -d ppp0
|
|
|
|
See the man page for snoop(1M) for details.
|
|
|
|
IPv6 Support.
|
|
*************
|
|
|
|
This is for Solaris 8 and later.
|
|
|
|
This version has been tested under Solaris 8 and 9 running IPv6.
|
|
Interoperability testing has only been done between Solaris machines
|
|
in terms of the IPV6 NCP. An additional command line option for the
|
|
pppd daemon has been added: ipv6cp-use-persistent.
|
|
|
|
By default, compilation for IPv6 support is not enabled. Uncomment
|
|
the necessary lines in pppd/Makefile.sol2 to enable it. Once done,
|
|
the quickest way to get IPv6 running is to add the following
|
|
somewhere in the command line option:
|
|
|
|
+ipv6 ipv6cp-use-persistent
|
|
|
|
The persistent id for the link-local address was added to conform to
|
|
RFC 2472; such that if there's an EUI-48 available, use that to make
|
|
up the EUI-64. As of now, the Solaris implementation extracts the
|
|
EUI-48 id from the Ethernet's MAC address (the ethernet interface
|
|
needs to be up). Future work might support other ways of obtaining
|
|
a unique yet persistent id, such as EEPROM serial numbers, etc.
|
|
|
|
There need not be any up/down scripts for ipv6,
|
|
e.g. /etc/ppp/ipv6-up or /etc/ppp/ipv6-down, to trigger IPv6
|
|
neighbor discovery for auto configuration and routing. The in.ndpd
|
|
daemon will perform all of the necessary jobs in the
|
|
background. /etc/inet/ndpd.conf can be further customized to enable
|
|
the machine as an IPv6 router. See the man page for in.ndpd(1M) and
|
|
ndpd.conf(4) for details.
|
|
|
|
Below is a sample output of "ifconfig -a" with persistent link-local
|
|
address. Note the UNNUMBERED flag is set because hme0 and ppp0 both
|
|
have identical link-local IPv6 addresses:
|
|
|
|
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
|
|
inet 127.0.0.1 netmask ff000000
|
|
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
|
|
inet 129.146.86.248 netmask ffffff00 broadcast 129.146.86.255
|
|
ether 8:0:20:8d:38:c1
|
|
lo0: flags=2000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1
|
|
inet6 ::1/128
|
|
hme0: flags=2000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2
|
|
ether 8:0:20:8d:38:c1
|
|
inet6 fe80::a00:20ff:fe8d:38c1/10
|
|
hme0:1: flags=2080841<UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
|
|
inet6 fec0::56:a00:20ff:fe8d:38c1/64
|
|
hme0:2: flags=2080841<UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
|
|
inet6 2000::56:a00:20ff:fe8d:38c1/64
|
|
hme0:3: flags=2080841<UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
|
|
inet6 2::56:a00:20ff:fe8d:38c1/64
|
|
ppp0: flags=10008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4> mtu 1500 index 12
|
|
inet 172.16.1.1 --> 172.16.1.2 netmask ffffff00
|
|
ppp0: flags=2202851<UP,POINTOPOINT,RUNNING,MULTICAST,UNNUMBERED,NONUD,IPv6> mtu 1500 index 12
|
|
inet6 fe80::a00:20ff:fe8d:38c1/10 --> fe80::a00:20ff:fe7a:24fb
|
|
|
|
Note also that a plumbed ipv6 interface stream will exist throughout
|
|
the entire PPP session in the case where the peer rejects IPV6CP,
|
|
which further causes the interface state to stay down. Unplumbing
|
|
will happen when the daemon exits. This is done by design and is not
|
|
a bug.
|
|
|
|
64-bit Support.
|
|
***************
|
|
|
|
This version has been tested under Solaris 7 through 9 in both 32-
|
|
and 64-bit environments (Ultra class machines). Installing the
|
|
package by executing "make install" will result in additional files
|
|
residing in /kernel/drv/sparcv9 and /kernel/strmod/sparcv9
|
|
subdirectories.
|
|
|
|
64-bit modules and driver have been compiled and tested using Sun's
|
|
cc and gcc.
|
|
|
|
Synchronous Serial Support.
|
|
***************************
|
|
|
|
This version has working but limited support for the on-board
|
|
synchronous HDLC interfaces. It has been tested with the
|
|
/dev/se_hdlc, /dev/zsh, HSI/S, and HSI/P drivers. Synchronous mode
|
|
was tested with a Cisco router.
|
|
|
|
The ppp daemon does not directly support controlling the serial
|
|
interface. It relies on the /usr/sbin/syncinit command to
|
|
initialize HDLC mode and clocking.
|
|
|
|
There is a confirmed bug with NRZ/NRZI mode in the /dev/se_hdlc
|
|
driver, and Solaris patch 104596-11 is needed to correct it.
|
|
(However this patch seems to introduce other serial problems. If
|
|
you don't apply the patch, the workaround is to change the nrzi mode
|
|
to yes or no, whichever works.)
|
|
|
|
How to start pppd with synchronous support:
|
|
|
|
#!/bin/sh
|
|
|
|
local=1.1.1.1 # your ip address here
|
|
baud=38400 # needed, but ignored by serial driver
|
|
|
|
# Change to the correct serial driver/port
|
|
#dev=/dev/zsh0
|
|
dev=/dev/se_hdlc0
|
|
|
|
# Change the driver, nrzi mode, speed and clocking to match
|
|
# your setup.
|
|
# This configuration is for external clocking from the DCE
|
|
connect="syncinit se_hdlc0 nrzi=no speed=64000 txc=rxc rxc=rxc"
|
|
|
|
/usr/sbin/pppd $dev sync $baud novj noauth $local: connect "$connect"
|
|
|
|
Sample Cisco router config excerpt:
|
|
|
|
!
|
|
! Cisco router setup as DCE with RS-232 DCE cable
|
|
!
|
|
!
|
|
interface Serial0
|
|
ip address 1.1.1.2 255.255.255.0
|
|
encapsulation ppp
|
|
clockrate 64000
|
|
no nrzi-encoding
|
|
no shutdown
|
|
!
|