RP-PPPoE on Solaris

I was one of the lucky souls who managed to get PPPoE working on Solaris. I've decided to post about the woes I encountered for the benefit of others.

First off, here's what I've got:
Solaris 8 x86 (using a different version? read on)
PPPD 2.4.1
Roaring Pengiun PPPoE 3.0 and 3.3 (3.2 has issues with Solaris)
IPFilter 3.4.18

INSTALLING PPPD
The first step is to install PPPD. You have two options for this: The first method is what I suggest since you can get a much more up to date version. The second two methods are very self-explanitory, and since I haven't used those methods, I won't go into them here.

Installing from scratch takes some teaking though. For starters, read the README, you need to adjust all the Makedefs for both SYSV4 and Solaris2 directories if you are using gcc. Then, if you get an error such as:

   gcc: main.o: No such file or directory
   gcc: magic.o: No such file or directory
   gcc: fsm.o: No such file or directory
   gcc: lcp.o: No such file or directory
   gcc: ipcp.o: No such file or directory
   gcc: upap.o: No such file or directory
   gcc: chap.o: No such file or directory
   gcc: md5.o: No such file or directory
   gcc: ccp.o: No such file or directory
   gcc: auth.o: No such file or directory
   gcc: options.o: No such file or directory
   gcc: demand.o: No such file or directory
   gcc: utils.o: No such file or directory
   gcc: sys-svr4.o: No such file or directory
   make[1]: *** [pppd] Error 1
   make[1]: Leaving directory `/home/phil/pppd/ppp-2.3.11/pppd'
   make: *** [all] Error 2
The reason is that there is another change that has to be made; you need to Comment out COPT from ALL the Makefiles. Then it should compile fine.

INSTALLING PPPoE
Next, you need to install Roaring Penguin's PPPoE software. The install should be pretty painless:
1. ./configure
This is self-explanitory. Don't worry if it complains about not finding PPPD, just keep going.

2. make
If you get an error such as:

   In file included from pppoe.c:17:
   pppoe.h:207: field `ethHdr' has incomplete type
   pppoe.h:218: `ETHERMTU' undeclared here (not in a function)
   pppoe.h:232: `ETHERMTU' undeclared here (not in a function)
   pppoe.h:251: `ETHER_ADDR_LEN' undeclared here (not in a function)
   pppoe.h:264: `ETHER_ADDR_LEN' undeclared here (not in a function)
   pppoe.h:265: `ETHER_ADDR_LEN' undeclared here (not in a function)
   pppoe.c: In function `sendSessionPacket':
   pppoe.c:85: sizeof applied to an incomplete type
   pppoe.c: In function `session':
   pppoe.c:211: `ETHER_ADDR_LEN' undeclared (first use in this function)
   pppoe.c:211: (Each undeclared identifier is reported only once
   pppoe.c:211: for each function it appears in.)
   pppoe.c: In function `asyncReadFromEth':
   pppoe.c:642: sizeof applied to an incomplete type
   pppoe.c:676: `ETHER_ADDR_LEN' undeclared (first use in this function)
   pppoe.c:688: sizeof applied to an incomplete type
   pppoe.c:629: warning: `c' might be used uninitialized in this function
   pppoe.c: In function `syncReadFromEth':
   pppoe.c:766: sizeof applied to an incomplete type
   pppoe.c:800: `ETHER_ADDR_LEN' undeclared (first use in this function)
   pppoe.c:811: sizeof applied to an incomplete type
   make: *** [pppoe.o] Error 1
Then you are probably running Solaris 2.6. I started off trying to set this up on Solaris 2.6. Eventually I tried installing on one of the Solaris 8 x86 boxes at work and it worked like a charm. So I upgraded, and the install went flawlessly. In other words, if you're running 2.6 and you want PPPoE, my suggestion is to upgrade.

Update: Diego Urra emailed me to let me know that he was able to get rp-pppoe to compile on solaris 2.6 by installing gcc 2.8.1, libstdc++ 2.8.1 and make 3.76.1 from sunfreeware.com (although I might recommend blastwave.org these days). So perhaps it just needed compiler/library updates to work. Thanks Diego!

If you are running Solaris 8, and using SFW, try the following: Then 'make clean' and start fresh with 'configure'. After RP-PPPoE is installed, move this file back to its original place.

3. As root, do: make install
This will install everything in the right place. You should not have any errors here.

4. If RP-PPPoE was unable to find PPPD during install, then edit the /usr/sbin/adsl-setup. Change PPPD=UNKNOWN to PPPD=/usr/local/bin if you compiled PPPD yourself, or to PPPD=/opt/sfw/bin if you're using Sun's version of pppd. I tried setting this manually in the configure and makefiles, but it was never happy, so just fixing the adsl-setup file should solve the problem.

5. run /usr/sbin/adsl-setup. This should ask you a few questions and finish the setup for you.

Once that's done, if your Solaris box is the only machine on the network, you should be done. If you're the gateway for other machines edit the pppoe.conf file and make sure that CLAMPMSS is set:

CLAMPMSS=1412
NOTE: The above is ONLY if you are acting as a gateway/router for a LAN

At this point the adsl-start script should get your link up and running.

IP FILTER
If you're running IP FILTER (you are running SOME firewall, right?!?!), you'll want to change all your external interface rules to be on ppp0. For example:
block in quick on elxl0 proto tcp from any
should become:
block in quick on ppp0 proto tcp from any
where elxl0 is your external interface.

PROBLEMS
There's a nice debug option to PPPoE if you're still having trouble, which you can read about under doc/HOW-TO-CONNECT.
If that doesn't work, there is a message board for RP-PPPoE located here.

Last Updated: 09/24/01

This page is © Phil Dibowitz 2001 - 2004