pppoe-discovery: add options to tune discovery timeout and attempts
[ppp.git] / README.sol2
1 This file describes the installation process for ppp-2.4 on systems
2 running Solaris.  The Solaris and SVR4 ports share a lot of code but
3 are not identical.  The STREAMS kernel modules and driver for Solaris
4 are in the solaris directory (and use some code from the modules
5 directory).
6
7 NOTE: Although the kernel driver and modules have been designed to
8 operate correctly on SMP systems, they have not been extensively
9 tested on SMP machines.  Some users of SMP Solaris x86 systems have
10 reported system problems apparently linked to the use of previous
11 versions of this software.  I believe these problems have been fixed.
12
13
14 Installation.
15 *************
16
17 1. Run the configure script and make the user-level programs and the
18    kernel modules.
19
20         ./configure
21         make
22
23     The configure script will automatically find Sun's cc if it's in
24     the standard location (/opt/SUNWspro/bin/cc).  If you do not have
25     Sun's WorkShop compiler, configure will attempt to use 'gcc'.  If
26     this is found and you have a 64 bit kernel, it will check that gcc
27     accepts the "-m64" option, which is required to build kernel
28     modules.
29
30     You should not have to edit the Makefiles for most ordinary cases.
31
32 2. Install the programs and kernel modules: as root, do
33
34         make install
35
36     This installs pppd, chat and pppstats in /usr/local/bin and the
37     kernel modules in /kernel/drv and /kernel/strmod, and creates the
38     /etc/ppp directory and populates it with default configuration
39     files.  You can change the installation directories by editing
40     solaris/Makedefs.  If you have a 64 bit kernel, the 64-bit drivers
41     are installed in /kernel/drv/sparcv9 and /kernel/strmod/sparcv9.
42
43     If your system normally has only one network interface at boot
44     time, the default Solaris system startup scripts will disable IP
45     forwarding in the IP kernel module.  This will prevent the remote
46     machine from using the local machine as a gateway to access other
47     hosts.  The solution is to create an /etc/ppp/ip-up script
48     containing something like this:
49
50         #!/bin/sh
51         /usr/sbin/ndd -set /dev/ip ip_forwarding 1
52
53     See the man page for ip(7p) for details.
54
55 Integrated pppd
56 ***************
57
58   Solaris 8 07/01 (Update 5) and later have an integrated version of
59   pppd, known as "Solaris PPP 4.0," and is based on ppp-2.4.0.  This
60   version comes with the standard Solaris software distribution and is
61   supported by Sun.  It is fully tested in 64-bit and SMP modes, and
62   with bundled and unbundled synchronous drivers.  Solaris 8 10/01
63   (Update 6) and later includes integrated PPPoE client and server
64   support, with kernel-resident data handling.  See pppd(1M).
65
66   The feature is part of the regular full installation, and is
67   provided by these packages:
68
69         SUNWpppd        - 32-bit mode kernel drivers
70         SUNWpppdr       - root-resident /etc/ppp config samples
71         SUNWpppdu       - /usr/bin/pppd itself, plus chat
72         SUNWpppdx       - 64-bit mode kernel drivers
73         SUNWpppdt       - PPPoE support
74         SUNWpppg        - GPL'd optional 'pppdump' and plugins
75         SUNWpppgS       - Source for GPL'd optional features
76
77   Use the open source version of pppd if you wish to recompile to add
78   new features or to experiment with the code.  Production systems,
79   however, should run the Sun-supplied version, if at all possible.
80
81   You can run both versions on a single system if you wish.  The
82   Solaris PPP 4.0 interfaces are named "spppN," while this open source
83   version names its interfaces as "pppN".  The STREAMS modules are
84   similarly separated.  The Sun-supplied pppd lives in /usr/bin/pppd,
85   while the open source version installs (by default) in
86   /usr/local/bin/pppd.
87
88 Dynamic STREAMS Re-Plumbing Support.
89 ************************************
90
91   Solaris 8 (and later) includes dynamic re-plumbing support.  With
92   this feature, modules below ip can be inserted, or removed, without
93   having the ip stream be unplumbed, and re-plumbed again.  All state
94   in ip for the interface will be preserved as modules are added or
95   removed.  Users can install (or upgrade) modules such as firewall,
96   bandwidth manager, cache manager, tunneling, etc., without shutting
97   the interface down.
98
99   To support this, ppp driver now uses /dev/udp instead of /dev/ip for
100   the ip stream. The interface stream (where ip module pushed on top
101   of ppp) is then I_PLINK'ed below the ip stream. /dev/udp is used
102   because STREAMS will not let a driver be PLINK'ed under itself, and
103   /dev/ip is typically the driver at the bottom of the tunneling
104   interfaces stream.  The mux ids of the ip streams are then added
105   using SIOCSxIFMUXID ioctl.
106
107   Users will be able to see the modules on the interface stream by,
108   for example:
109
110     pikapon# ifconfig ppp modlist
111     0 ip
112     1 ppp
113
114   Or arbitrarily if bandwidth manager and firewall modules are installed:
115
116     pikapon# ifconfig hme0 modlist
117     0 arp
118     1 ip
119     2 ipqos
120     3 firewall
121     4 hme
122
123 Snoop Support.
124 **************
125
126   This version includes support for /usr/sbin/snoop.  Tests have been
127   done on Solaris 7 through 9. Only IPv4 and IPv6 packets will be sent
128   up to stream(s) marked as promiscuous (i.e., those used by snoop).
129
130   Users will be able to see the packets on the ppp interface by, for
131   example:
132
133     snoop -d ppp0
134
135   See the man page for snoop(1M) for details.
136
137 IPv6 Support.
138 *************
139
140   This is for Solaris 8 and later.
141
142   This version has been tested under Solaris 8 and 9 running IPv6.
143   Interoperability testing has only been done between Solaris machines
144   in terms of the IPV6 NCP.  An additional command line option for the
145   pppd daemon has been added: ipv6cp-use-persistent.
146
147   By default, compilation for IPv6 support is not enabled.  Uncomment
148   the necessary lines in pppd/Makefile.sol2 to enable it.  Once done,
149   the quickest way to get IPv6 running is to add the following
150   somewhere in the command line option:
151
152         +ipv6 ipv6cp-use-persistent
153
154   The persistent id for the link-local address was added to conform to
155   RFC 2472; such that if there's an EUI-48 available, use that to make
156   up the EUI-64.  As of now, the Solaris implementation extracts the
157   EUI-48 id from the Ethernet's MAC address (the ethernet interface
158   needs to be up).  Future work might support other ways of obtaining
159   a unique yet persistent id, such as EEPROM serial numbers, etc.
160
161   There need not be any up/down scripts for ipv6,
162   e.g. /etc/ppp/ipv6-up or /etc/ppp/ipv6-down, to trigger IPv6
163   neighbor discovery for auto configuration and routing.  The in.ndpd
164   daemon will perform all of the necessary jobs in the
165   background. /etc/inet/ndpd.conf can be further customized to enable
166   the machine as an IPv6 router. See the man page for in.ndpd(1M) and
167   ndpd.conf(4) for details.
168
169   Below is a sample output of "ifconfig -a" with persistent link-local
170   address.  Note the UNNUMBERED flag is set because hme0 and ppp0 both
171   have identical link-local IPv6 addresses:
172
173 lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
174         inet 127.0.0.1 netmask ff000000 
175 hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
176         inet 129.146.86.248 netmask ffffff00 broadcast 129.146.86.255
177         ether 8:0:20:8d:38:c1 
178 lo0: flags=2000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1
179         inet6 ::1/128 
180 hme0: flags=2000841<UP,RUNNING,MULTICAST,IPv6> mtu 1500 index 2
181         ether 8:0:20:8d:38:c1 
182         inet6 fe80::a00:20ff:fe8d:38c1/10 
183 hme0:1: flags=2080841<UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
184         inet6 fec0::56:a00:20ff:fe8d:38c1/64 
185 hme0:2: flags=2080841<UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
186         inet6 2000::56:a00:20ff:fe8d:38c1/64 
187 hme0:3: flags=2080841<UP,RUNNING,MULTICAST,ADDRCONF,IPv6> mtu 1500 index 2
188         inet6 2::56:a00:20ff:fe8d:38c1/64 
189 ppp0: flags=10008d1<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST,IPv4> mtu 1500 index 12
190         inet 172.16.1.1 --> 172.16.1.2 netmask ffffff00 
191 ppp0: flags=2202851<UP,POINTOPOINT,RUNNING,MULTICAST,UNNUMBERED,NONUD,IPv6> mtu 1500 index 12
192         inet6 fe80::a00:20ff:fe8d:38c1/10 --> fe80::a00:20ff:fe7a:24fb
193
194   Note also that a plumbed ipv6 interface stream will exist throughout
195   the entire PPP session in the case where the peer rejects IPV6CP,
196   which further causes the interface state to stay down. Unplumbing
197   will happen when the daemon exits. This is done by design and is not
198   a bug.
199
200 64-bit Support.
201 ***************
202
203   This version has been tested under Solaris 7 through 9 in both 32-
204   and 64-bit environments (Ultra class machines).  Installing the
205   package by executing "make install" will result in additional files
206   residing in /kernel/drv/sparcv9 and /kernel/strmod/sparcv9
207   subdirectories.
208
209   64-bit modules and driver have been compiled and tested using Sun's
210   cc and gcc.
211
212 Synchronous Serial Support.
213 ***************************
214
215   This version has working but limited support for the on-board
216   synchronous HDLC interfaces.  It has been tested with the
217   /dev/se_hdlc, /dev/zsh, HSI/S, and HSI/P drivers.  Synchronous mode
218   was tested with a Cisco router.
219
220   The ppp daemon does not directly support controlling the serial
221   interface.  It relies on the /usr/sbin/syncinit command to
222   initialize HDLC mode and clocking.
223
224   There is a confirmed bug with NRZ/NRZI mode in the /dev/se_hdlc
225   driver, and Solaris patch 104596-11 is needed to correct it.
226   (However this patch seems to introduce other serial problems.  If
227   you don't apply the patch, the workaround is to change the nrzi mode
228   to yes or no, whichever works.)
229
230   How to start pppd with synchronous support:
231
232         #!/bin/sh
233
234         local=1.1.1.1   # your ip address here
235         baud=38400      # needed, but ignored by serial driver
236
237         # Change to the correct serial driver/port
238         #dev=/dev/zsh0
239         dev=/dev/se_hdlc0
240  
241         # Change the driver, nrzi mode, speed and clocking to match
242         # your setup.
243         # This configuration is for external clocking from the DCE
244         connect="syncinit se_hdlc0 nrzi=no speed=64000 txc=rxc rxc=rxc"
245  
246         /usr/sbin/pppd $dev sync $baud novj noauth $local: connect "$connect"
247
248   Sample Cisco router config excerpt:
249
250         !
251         ! Cisco router setup as DCE with RS-232 DCE cable
252         ! 
253         !         
254         interface Serial0
255          ip address 1.1.1.2 255.255.255.0
256          encapsulation ppp
257          clockrate 64000
258          no nrzi-encoding
259          no shutdown
260         !