Some DSL providers seem to use non-standard frame types for PPPoE frames, and/or require a certain value in the Service-Name field. It is often easier to sniff those values from a machine which can successfully connect rather than try to pry them out of the DSL provider.
To use pppoe-sniff, you need two computers, a DSL modem and an Ethernet hub (not an Ethernet switch.)
If the DSL modem normally connects directly to your computer's Ethernet card, connect it to the "uplink" port on the Ethernet hub. Plug two computers into normal ports on the hub. On one computer, run whatever software the DSL provider gave you on whatever operating system the DSL provider supports. On the other computer, run Linux and log in as root.
On the Linux machine, put the Ethernet interface into promiscuous mode and start pppoe-sniff. If the ethernet interface is eth0, for example, type these commands:
ifconfig eth0 promisc pppoe-sniff -I eth0
On the other machine, start your DSL connection as usual. After a short time, pppoe-sniff should print recommendations for the value of PPPOE_EXTRA. Set this value in /etc/ppp/pppoe.conf. If pppoe-sniff indicates that something special is required in PPPOE_EXTRA, please e-mail this to email@example.com along with the name of your ISP and the manufacturer and model number of your DSL modem. This information will be collated and provided on the PPPoE web page for users who do not have two computers.
After pppoe-sniff finishes (or you stop it if it seems hung), remember to turn off promiscuous mode:
ifconfig eth0 -promisc
The pppoe home page is http://www.roaringpenguin.com/pppoe/.