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)
Roaring Pengiun PPPoE 3.0 and 3.3 (3.2 has issues with Solaris)
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: *** [pppd] Error 1
make: 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.
Next, you need to install Roaring Penguin's PPPoE software. The install should be pretty painless:
This is self-explanitory. Don't worry if it complains about not finding PPPD, just keep going.
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.
- mv /opt/sfw/include/net/bpf.h /opt/sfw/include/net/by.bpf.h
3. As root, do:
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
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.
/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:
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.
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
block in quick on ppp0 proto tcp from any
where elxl0 is your external interface.
There's a nice debug option to PPPoE if you're still having trouble, which you can read about under
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