-This file describes the installation process for ppp-2.3 on systems
-running Solaris 2. The Solaris 2 and SVR4 ports share a lot of code
-but are not identical. The STREAMS kernel modules and driver for
-Solaris 2 are in the svr4 directory (and use some code from the
-modules directory).
-
-This version has been tested under Solaris 7, and the upcoming
-Solaris 8. As of now, it will only work when the system is booted
-in 32-bit mode. 64-bit clean driver as well as IPv6 support for
-Solaris 8 are currently under development.
+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
*************
1. Run the configure script and make the user-level programs and the
-kernel modules.
+ kernel modules.
./configure
make
-If you wish to use gcc (or another compiler) instead of Sun's cc, edit
-the svr4/Makedefs file and uncomment the definition of CC. You can
-also change the options passed to the C compiler by editing the COPTS
-definition.
+ 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 svr4/Makedefs.
+ 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, the default
-Solaris 2 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:
+ 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.
+ 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 and /dev/zsh drivers.
-Synchronous mode was tested with a Cisco router.
+ 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.
-There ppp daemon does not directly support controlling the serial interface.
-It relies on the /usr/sbin/syncinit command to initialize HDLC mode and
-clocking.
+ 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.
-Some bugs remain: large sized frames are not sent/received properly, and
-may be related to the IP mtu. This
-may be due to bugs in pppd itself, bugs in Solaris or the serial drivers.
-The /dev/zsh driver seems more larger and can send/receive larger frames
-than the /dev/se_hdlc driver. 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)
+ 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:
+ How to start pppd with synchronous support:
-#!/bin/sh
+ #!/bin/sh
-local=1.1.1.1 # your ip address here
-baud=38400 # needed, but ignored by serial driver
+ 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 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"
+ # 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:
+ /usr/sbin/pppd $dev sync $baud novj noauth $local: connect "$connect"
-!
-! 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
-!
+ 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
+ !