1. Introduction
2. Installing the PPP over Ethernet Protocol
3. Creating PPP over Ethernet Dial-up Connections
4. Removing the PPP over Ethernet Protocol
5. Advanced Protocol Features
6. Troubleshooting
7. Known Issues
8. Revision History
9. Contacting the Author
Welcome to my implementation of a PPP over Ethernet (short: PPPoE) client according to RFC 2516 for Windows 98/SE/2000. I started writing this protocol implementation in October 1999 with no prior experience in NDIS programming, simply because I could not find any implementation for Windows 2000 at that time, and because my ADSL provider, Deutsche Telekom, is using PPPoE for their DSL service. Although there are other PPPoE clients for Windows 98/SE/2000, this one still has its unmatched strong points:
If this convinced you to try my implementation, please read the installation instructions carefully. If you have problems running this protocol, see Troubleshooting for help. If you are already successfully using this protocol, you can check if you find any of the advanced features useful. You may also want to know about the known issues. Suggestions from developers on how to fix these would be very welcome. Users upgrading from a previous version of this protocol should check the Revision History to find out what changed. If you want to get in touch with me, see Contacting the Author.
- Robert Schlabbach
This driver, installation files and documentation is all Copyright (C) 2000 by Robert Schlabbach. All rights reserved. It is distributed without any warranty. Use at your own risk. You may use and copy it complete and unmodified free of charge for non-commercial purposes only. Commercial exploitation, redistribution for commercial purposes, especially redistribution by DSL service providers as "their" service to their customers, is strictly prohibited. Service providers are free to provide a link to the RASPPPOE Home Page for their customers.
Though the same driver binary runs in Windows 98/SE and Windows 2000, the installation steps are quite different. Windows 98/SE users should follow the instructions right below, while Windows 2000 users find the installation instructions further below.
2.1 Installation in Windows 98/SE
- WARNING: You are about to install a driver. Since any driver installation requires a reboot of Windows 98/SE, you are advised to save your work and close all running applications before proceeding.
- If there is already a different PPPoE implementation installed on your machine, it might get confused by the PPPoE traffic generated by this protocol. This protocol was written to peacefully coexist with other PPPoE implementations on the same machine, but other programmers may not have been as thoughtful. Thus, it is recommended that you uninstall any other PPPoE implementations and reboot your machine before proceeding.
- If you already have a previous version of this PPP over Ethernet Protocol installed, you must first remove the old version. See Removing the PPP over Ethernet Protocol for details.
- Unpack the downloaded archive to a temporary installation directory. Make sure that the following files are correctly extracted: README.HTM, NETPPPOE.INF, RASPPPOE.INF, WINPPPOE.INF, WINPPPOE.DLL, RASPPPOE.DLL, RASPPPOE.EXE and RASPPPOE.SYS.
- Right-click the Network Neighborhood icon on your desktop and select Properties to bring up the Network Configuration window.
- Click the Add... button.
- In the Select Network Component Type window, select Protocol and click the Add... button. (Note: It could take a few seconds for the following window to come up.)
- In the Select Network Protocol window, click the Have Disk... button.
- In the Install From Disk window, either type the name of your temporary installation directory or click the Browse... button to navigate to it (it doesn't matter which of the three INF files you select, Windows will automatically pick the right one later). Then click the OK button to start installing the PPP over Ethernet Protocol.
- If you have more than one network adapter in your system, you may want to remove the PPP over Ethernet Protocol for all adapters but the one your DSL modem is actually connected to. To do this, locate all unneeded PPP over Ethernet Protocol -> Adapter Name entries in the Network Configuration window, select them one by one and click the Remove button. (Note: For each adapter the protocol is operating on, you will see two additional bindings: PPP over Ethernet Miniport -> PPP over Ethernet Protocol and NDISWAN -> PPP over Ethernet Miniport.)
- Click the OK button to close the Network Configuration window and allow to reboot.
- After the reboot, the protocol is fully functional, but you still need to create a dial-up connection to use it. See the next section for details.
2.2 Installation in Windows 2000
- WARNING: You are about to install a driver. Since any driver installation poses a non-zero risk of crashing your operating system, you are advised to save your work and close all running applications before proceeding. Note that this driver is known to crash Windows 2000 under certain (rare) circumstances.
- Since you are about to install a driver, you need administrative privileges to perform the installation. If you are logged on to a user account, log off and log on to an account with administrative privileges before proceeding.
- If there is already a different PPPoE implementation installed on your machine, it might get confused by the PPPoE traffic generated by this protocol. This protocol was written to peacefully coexist with other PPPoE implementations on the same machine, but other programmers may not have been as thoughtful. Thus, it is recommended that you uninstall any other PPPoE implementations and reboot your machine before proceeding.
- If you already have a previous version of this PPP over Ethernet Protocol installed, you must first remove the old version and REBOOT. See Removing the PPP over Ethernet Protocol for details. If you don't reboot, the installation will work, but you'll still be running the old version of the protocol driver until you reboot (see Known Issues). Due to possible conflicts between older and newer components, it is STRONGLY recommended that you reboot after uninstalling and before installing the new version.
- Unpack the downloaded archive to a temporary installation directory. Make sure that the following files are correctly extracted: README.HTM, NETPPPOE.INF, RASPPPOE.INF, WINPPPOE.INF, WINPPPOE.DLL, RASPPPOE.DLL, RASPPPOE.EXE and RASPPPOE.SYS.
- Right-click the My Network Places icon on your desktop and select Properties to bring up the Network and Dial-up Connections window.
- Go to the menu and select View then Details to bring up a detailed view of the network connections on your machine.
- You should find one or more Local Area Connection objects. Locate the one going through the network adapter connected to your DSL modem (you should be able to tell by the name in the Device Name column), right-click it and select Properties.
- In the properties dialog box, click the Install... button.
- In the Select Network Component Type window, select Protocol and click the Add... button. (Note: It could take a few seconds for the following window to come up.)
- In the Select Network Protocol window, click the Have Disk... button.
- In the Install From Disk window, either type the name of your temporary installation directory or click the Browse... button to navigate to it (it doesn't matter which of the three INF files you select, Windows 2000 will automatically pick the right one later). Then click the OK button to start installing the PPP over Ethernet Protocol.
- During installation, a window titled Digital Signature Not Found may come up several times (it is no less than four times per installed network adapter on my machine, no idea why Windows 2000 is doing this), warning you that the driver has no digital signature. Microsoft doesn't give digital signatures away for free (as far as I know), so free software like this is unlikely to get a digital signature. If you still want to install this protocol, you need to click Yes several times to allow installation to continue.
- Back at the Local Area Connection Properties window, click Close to close the window. Note: If you have a dedicated network adapter which is only connected to your DSL modem, it is recommended that you first clear the checkboxes for all other components listed and leave only PPP over Ethernet Protocol checked.
- If you have more than one network adapter in your system, you may want to disable the PPP over Ethernet Protocol for all adapters but the one your DSL modem is actually connected to. To do this, bring up the properties of each network adapter to want to disable the protocol for and clear the checkbox next to PPP over Ethernet Protocol in the listed components. BEWARE: If you accidentally disable the protocol for the adapter you want to connect through, simply re-checking the checkbox, even if you do so immediately, is not enough to make the protocol functional on that adapter again. See Known Issues for a more detailed explanation and possible workarounds.
- The protocol is now fully functional, but you still need to create a dial-up connection to use it. See the next section for details.
PPP over Ethernet dial-up connections can be most conveniently created with the Dial-Up Connection Setup application provided with the protocol, which creates dial-up connections with all the correct settings at the click of a button.
The removal steps are again quite different between Windows 98/SE and Windows 2000. Windows 98/SE users should follow the instructions right below, while Windows 2000 users find the removal instructions further below.
4.1 Removal from Windows 98/SE
- WARNING: You are about to remove a driver. Since any driver removal requires a reboot of Windows 98/SE, you are advised to save your work and close all running applications before proceeding.
- First, you may want to remove all dial-up connections you created for connecting through this protocol. To do so, double-click the My Computer icon on your desktop, then double-click the Dial-Up Networking icon in the opened window. In the Dial-Up Networking window, right-click each of the dial-up connections you created for this protocol and select Delete. If you had created any shortcuts to these dial-up connections on your desktop, right-click them and select Delete as well.
- Right-click the Network Neighborhood icon on your desktop and select Properties to bring up the Network Configuration window.
- For each adapter the protocol is operating on, you will find three bindings in this window:
- NDISWAN -> PPP over Ethernet Miniport.
- PPP over Ethernet Miniport -> PPP over Ethernet Protocol
- PPP over Ethernet Protocol -> Adapter Name
- Locate all PPP over Ethernet Protocol -> Adapter Name entries in this window, select them one by one and click the Remove button. The other two bindings belonging to this one will be automatically removed. If you accidentally remove one of the other bindings, no harm is done - you only need to remove the other two manually in this case.
- Once you have removed all protocol instances, click the OK button to close the Network Configuration window and allow to reboot.
- After the reboot, the protocol is usually completely removed from your machine. Only in some cases, Windows 98/SE keeps a copy of the INF file in the \WINDOWS\INF\OTHER directory, named as Robert SchlabbachWINPPPOE.INF. You can safely delete this file after removal.
4.2 Removal from Windows 2000
- WARNING: You are about to remove a driver. Since any driver removal poses a non-zero risk of crashing your operating system, you are advised to save your work and close all running applications before proceeding. Note that this driver is known to crash the operating system under certain (rare) circumstances.
- Since you are about to remove a driver, you need administrative privileges to perform the removal. If you are logged on to a user account, log off and log on to an account with administrative privileges before proceeding.
- Right-click the My Network Places icon on your desktop and select Properties to bring up the Network and Dial-up Connections window.
- First, you may want to remove all dial-up connections you created for connecting through this protocol. To do so, right-click each of the dial-up connections you created for this protocol and select Delete. If you had created any shortcuts to these dial-up connections on your desktop, right-click them and select Delete as well.
- Locate the Local Area Connection you installed the PPP over Ethernet Protocol on, right-click it and select Properties.
- In the list of components, select PPP over Ethernet Protocol and click Uninstall.
- A dialog box comes up warning you about the removal. Make sure that you are really about the uninstall the PPP over Ethernet Protocol and click Yes.
- Back at the Local Area Connection Properties window, click Close to close the window.
Note: The protocol is not completely removed from your machine at this point. Although I have tried my best to make the protocol remove itself completely clean, there are issues beyond my control that make this impossible (see Known Issues). The pieces that are left behind do not do any harm, but if you want to get rid of every little bit of this protocol, here is what's left behind:
- In your \WINNT\SYSTEM32 directory, the protocol's Notify Object DLL, named RASPPPOE.DLL, is left behind. You can safely delete it at this point. Automatic deletion fails due to a bug in Windows 2000.
- In your \WINNT\INF directory, the protocol's INF file and it's precompiled version is left behind, named oem#.inf and oem#.pnf, respectively. "#" stands for a number that varies with the number of third party drivers you installed on your machine. This means you'll have to identify the INF manually, by loading each of your oem#.inf files into a text editor, e.g. NOTEPAD. The PPP over Ethernet Protocol INF identifies itself as such right in the second line of the file. You can't miss it. Once you've found the INF, delete it and the corresponding PNF file as well. This is not a bug, but Microsoft's design. Those files can't be removed automatically due to the varying name.
- All the files are now removed, the registry is cleared of every trace of this protocol - but it is still lingering on in your machine's system memory. The only way to get it out of your memory is to reboot the machine. This is yet another bug in Windows 2000 (as of the original Windows 2000 release version). Once Microsoft fixes this, the driver's cleanup should improve automatically - all the driver unloading routines are there, only Windows 2000 never calls them.
This section covers the advanced features of the protocol. Average users should be perfectly happy with the default settings, although specifying the link speed to display may be of interest. Users having problems with VPN software might try if overriding the MTU reported by the protocol helps. Advanced Windows 2000 users with flat rate Internet access may be interested in making the connection "always on".
To bring up the protocol settings for an adapter in Windows 98/SE:
To bring up the protocol settings for an adapter in Windows 2000:
The General tab offers the following settings:
5.1 Limit TCP MSS Maximum Segment Size (MSS) Option
When using Internet Connection Sharing, the client machines are completely unaware of the packet size restrictions imposed by the nature of PPP over Ethernet (in contrast to e.g. modem or ISDN connections, which allow passing arbitrarily sized packets). Typically, a client assumes that packets of up to 1500 bytes can be passed and thus indicates a Maximum Segment Size of 1460 bytes (1500 bytes minus 40 bytes for the TCP and IP headers) when opening a TCP session, resulting in either side of the connection sending packets up to 1500 bytes in size, too large to pass through a PPP over Ethernet connection, which can only pass packets up to 1492 bytes in size. These oversized packets are then often silently dropped at either side of the PPP over Ethernet connection, leading to delays or hangs when accessing the Internet from the client.
To work around this problem, this option makes the protocol scan all network packets it sends and receives for the TCP Maximum Segment Size (MSS) option and, if a value greater than either the default (1492) or the overridden MTU minus 40 for the IP and TCP headers (i.e. 1452 in case of the default MTU) is found, change it to this value, recalculate the TCP checksum and pass the modified packet. This option is enabled by default. If you are not using Internet Connection Sharing, you can disable this option to save a little (very little) CPU power, although leaving it enabled has no negative side effects.
5.2 Override Maximum Transfer Unit
By default, the protocol will report an MTU of 1492 bytes, the maximum possible for PPP over Ethernet. However, you can use this option to override the MTU initially reported by the protocol. Making the protocol initially report a lower MTU was found to help with certain VPN software packages which "blindly" add their own overhead without paying any respect to the MTU reported by the driver, making the network packets too large to pass through a PPP over Ethernet connection. Check the Override Maximum Transfer Unit checkbox and type the MTU the protocol should report in the Maximum Transfer Unit (MTU) edit box. The valid range is 576 through 1492 bytes. Reducing the MTU by 32 bytes to 1460 should generally suffice to make misbehaved VPN software work. Note: Regardless of this setting, the protocol will always send and receive packets of up to 1492 bytes. Only the MTU initially reported by the protocol (the MaxFrameSize value in response to the OID_WAN_GET_INFO request) and, if enabled, the TCP MSS option limit are affected by this setting.
In Windows 98/SE, the Dial-up Adapter's IPMTU registry parameter is also set to the override value, since the Dial-Up Adapter ignores the MaxFrameSize returned by the driver. Note that this means that this option will affect the MTU of all dial-up connections in Windows 98/SE, and that the use of any other MTU adjustment tool will possibly conflict with this option, altering it.
For any changes to this setting to take effect in Windows 2000, you need to disable and re-enable the Local Area Connection for the adapter you are connecting through once, or reboot.
5.3 Number of lines (WAN endpoints)
The protocol is capable of running several simultaneous PPP over Ethernet sessions through one adapter. This feature will probably be very rarely - if ever - needed. To allow this, you can configure the number of WAN endpoints (dial-up devices) the protocol exposes for a network adapter. The default is 1, and up to 10 WAN endpoints can be configured. This setting requires a reboot to take effect.
The Advanced tab offers the following settings:
5.4 Specify Link Speed
By default, the protocol will report the speed of the network adapter you are connecting through as the speed of a dial-up connection you make through it, as it can't find out the actual speed of your DSL modem. However, you can specify the connection speed the protocol should report for connections through a specific adapter. To do this, check the Specify Link Speed checkbox and type the link speed the protocol should report in the Link Speed (kbps) edit box, in kilobits per second. If you want to revert to displaying the adapter's link speed, clear the Specify Link Speed checkbox. Note: This setting has absolutely no effect on the network traffic through this adapter, it is purely a cosmetic setting. This setting takes effect the next time you establish a PPP over Ethernet connection.
5.5 Event Logging options (Windows 2000 only)
The protocol can inform you about informational events, warnings and errors during operation by logging events to the System event log. By default, the protocol logs all types of events, which should result in no log entries during flawless operation. If you find the event log flooded with repeated entries despite flawless operation, you can disable logging that type of event by clearing the corresponding checkbox. Clearing all checkboxes prevents the protocol from logging any events.
- Log Informational Events will log any vendor-specific information received.
- Log Warnings will log non-fatal warnings that do not necessarily prevent successful operation.
- Log Errors will log fatal errors that prevent correct function of the protocol.
You use Event Viewer to view any events logged by this protocol:
- Right-click the My Computer icon on your desktop and select Manage to bring up the Computer Management window.
- In the tree on the left-hand side, expand the Event Viewer branch, select the System sub branch and press F5 to refresh the view on the right-hand side. Look for log entries from source RASPPPOE there.
- To get a detailed description of a logged event, double click the event in the view on the right-hand side.
Beyond these settings, the protocol offers the following possibilities:
5.6 Making a dial-up connection "always on" (Windows 2000 only)
Users who enjoy flat rate Internet access may find it desirable to turn their connection into an "always on" connection that is established once when the machine boots (before any user logs in) and kept until the machine is shut down. Windows 98/SE appears to lack the functionality to make a connection without any user intervention, but Windows 2000 offers the required functionality:
- If your ISP requires a username and password, make sure you have saved the password by checking the Save Password checkbox in the Connect Connection Name window and connecting at least once.
- Right-click the My Network Places icon on your desktop and select Properties to bring up the Network and Dial-up Connections window.
- Locate the Dial-up connection you created for PPP over Ethernet, right-click it and select Properties.
- Select the Options tab and clear all checkboxes under Dialing options.
- Under Redialing options, set Idle time before hanging up: to never and check the Redial if line is dropped checkbox.
- Click OK to save the changes.
- Now click the Start button, select Settings then Control Panel to open the Control Panel window.
- In the Control Panel window, double-click Scheduled Tasks.
- In the Scheduled Tasks window, double-click Add Scheduled Task.
- On the welcome screen of the Scheduled Task Wizard, click Next.
- At the program selection step, click Browse... and browse to your WINNT\System32 directory.
- Type RASPHONE.EXE in the File name: edit box or locate it in the directory and select it and click Open.
- Make up a name for this task and under Perform this task: select When my computer starts. Click Next.
- Enter your password. Note: The task must be run under the same account which the dial-up entry was created under.
- At the final step, make sure that Open advanced properties for this task when I click finish is checked and click Finish.
- In the advanced properties, edit the Run: edit box and append the command-line parameters " -d "Connection Name"".
- Go to the Settings tab and clear all checkboxes on that page.
- Click OK to close the task's properties.
- Finally, you need to make a little registry change to prevent Windows 2000 from disconnecting when a user logs on and off again:
Run REGEDIT and navigate to:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
then right-click right-hand pane, select New -> String Value, name the value KeepRasConnections and set it to 1.
- Reboot. Windows 2000 will establish the connection automatically and keep it until you shut the machine down.
5.7 Addressing a specific Service and/or Access Concentrator
In most cases, there is no need to address a specific Service or Access Concentrator. But should you have a need to do so, you can use the phone number field of your dial-up connection to specify a Service, Access Concentrator or both. The following phone number formats are possible:
- Blank or "0": The protocol will connect to the default Service of the first Access Concentrator that replies to the connection request.
- "Service-Name": The protocol will connect to the first Access Concentrator that replies offering the requested Service.
- "Access-Concentrator\": The protocol will connect to the default Service of the named Access Concentrator.
- "Access-Concentrator\Service-Name": The protocol will connect to the requested Service of the named Access Concentrator.
The RASPPPOE application uses format A for the phone number if you create a connection for an adapter and format C or D if you create a connection for a specific service.
This section helps you with possible problems you might encounter during the installation and use of the protocol.
6.1 Windows 2000: Right after installation of the protocol, the Local Area Connection properties window lists no components
This is the result when the protocol could not be properly installed and appears to be a bug in Windows 2000. Clicking the OK button at this point gives an error message that no components are installed. Click the Cancel button to close the properties dialog, then re-open it again to get the list of components back. Select PPP over Ethernet Protocol in the list, click the Uninstall button and confirm to remove the bad installation. Before you make another installation attempt, make sure that Windows 2000 is not set to block the installation of unsigned drivers:
- Right-click the My Computer icon on your desktop and select Properties.
- Select the Hardware tab and click the Driver Signing... button.
- Make sure that File signature verification is not set to Block - Prevent installation of unsigned files.
- Change the setting if required and click OK to put the change into effect.
If File Signature verification is set to Warn - Display a message before installing an unsigned file, make sure you click Yes every time the driver signature warning dialog box that comes up during the protocol installation. Clicking No even just once will prevent proper installation and result in the same problem.
If you still cannot install the protocol properly, do the following: Locate the file SETUPAPI.LOG in your WINNT directory and delete it. Make another installation attempt (which will probably fail as well). Then check your WINNT directory again for the file SETUPAPI.LOG and load it into a text editor, e.g. NOTEPAD. The contents of this file should give you some hints abut the cause of the installation failure.
6.2 RASPPPOE application does not list the desired adapter
First, be aware that you can use this protocol only through Ethernet adapters. As PPP over Ethernet only works over Ethernet, the protocol will only bind itself to Ethernet adapters (NdisMedium802_3). Adapters that don't support this medium type (e.g. internal or USB DSL modems with drivers that don't expose a standard Ethernet interface) are not supported by this protocol.
If you are running Windows 98/SE, check in Device Manager whether the network adapter connected to your DSL modem is enabled and working properly. If it is, try rebooting the machine. If that doesn't help, try uninstalling the protocol, rebooting, re-installing and rebooting again. Your adapter should be listed now.
If you are running Windows 2000, you should make sure that the Local Area Connection for the adapter in question is enabled:
- Right-click the My Network Places icon on your desktop and select Properties to bring up the Network and Dial-up Connections window.
- Go to the menu and select View then Details to bring up a detailed view of the network connections on your machine.
- You should find one or more Local Area Connection objects. Locate the one for the network adapter in question, and check the Status column.
- If the Status is disabled, right-click the Local Area Connection and select Enable.
- If enabling fails, check the Windows 2000 Device Manager for possible problems with this adapter.
- If you successfully enabled the adapter, re-run the RASPPPOE application and check whether the adapter is listed now.
If the adapter still does not show up, make sure that the protocol is enabled for the adapter in question:
- Right-click the Local Area Connection of the adapter in question and select Properties.
- In the properties dialog box, check the list of installed components. Make sure that the checkbox next to PPP over Ethernet Protocol is checked.
- If the checkbox is clear, check it. You may be prompted about the digital signature again. Make sure you click Yes every time you are prompted.
- If the Local Area Connection properties dialog box lists no components now, see above.
- Click OK to close the Local Area Connection properties dialog box.
- Right-click the Local Area Connection in the Network Connections window and select Disable.
- Right-click the Local Area Connection again and select Enable.
- Re-run the RASPPPOE application and check if the adapter is listed now.
If the adapter still does not show up, try the following:
- Right-click the Local Area Connection in the Network Connections window and select Disable.
- Right-click the Local Area Connection again and select Enable.
- The RASPPPOE application should list the desired adapter now.
6.3 RASPPPOE application reports "RASPPPOE - No Service Offers Received" when querying available services
This error message means that the protocol did not receive any response from your service provider. You should check the following things in order:
- Check if your DSL modem has successfully established a link with its counterpart at the switch. Most DSL modems have a Sync LED on them which indicates this status. If your modem has such an LED and it indicates that the link is down, contact your service provider for assistance.
- Check in Device Manager if the network adapter your DSL modem is connected to is enabled and working properly.
- Check if your network adapter is correctly configured:
- In Windows 98/SE, bring up the Network Configuration window, select the network adapter your DSL modem is connected to and click Properties.
- In Windows 2000, bring up Device Manager, select the network adapter your DSL modem is connected to and click Properties.
In the Properties window, select the Advanced tab, look through the options and make sure that the correct Line Speed and duplex mode is selected (most DSL modems only support 10Mbps half duplex mode). If your network adapter has several connectors at the back, make sure the correct connector is selected, which is most likely Twisted Pair (TP).
- Check that the cable connecting your DSL modem to your network adapter is properly attached and of the correct type. Note that most DSL modems have a "crossed" connector on them, so you'll need a straight cable to connect it directly to a network adapter, while you need to use a crossed cable or use an uplink port to connect it to a hub or switch.
- Check with your service provider whether they currently have a service outage.
6.4 Windows 2000: Connection attempt fails with "Error 797: The connection failed because the modem (or other connecting device) was not found."
This can be the result of unbinding the protocol from an adapter and then re-binding it, which does not take effect immediately (see Known Issues). Follow these steps to put the change into effect:
- Right-click the My Network Places icon on your desktop and select Properties to bring up the Network and Dial-up Connections window.
- Go to the menu and select View then Details to bring up a detailed view of the network connections on your machine.
- You should find one or more Local Area Connection objects. Locate the one for the network adapter in question, right-click it and select Disable.
- Right-click the Local Area Connection again and select Enable.
- Make another connection attempt and see if it works.
If that did not help, the dial-up connection you created may be configured to connect through a "ghost" dial-up device that no longer exists. Do the following to remedy this:
- Right-click the dial-up connection that failed and select Properties.
- In the Connect using: list view, take a close look at the name of the dial-up device that is checked. A "ghost" dial-up device has the name format ISDN channel - Adapter Name (xx), while a correct entry is of the format ISDN channel - Adapter Name, i.e. the extra (xx) identifies a "ghost" device.
- If the checked device is indeed a "ghost" device, clear it, look through the list for the correct dial-up device and check that one instead.
- Make another connection attempt.
6.5 Connection attempt fails with "Error 638: The request has timed out."
First, you should check whether you get any reply from your service provider with the Dial-Up Connection Setup application provided with the protocol:
- Click the Start button on the taskbar and select Run... to bring up the Run dialog box.
- Type RASPPPOE in the edit field and click the OK button to run the Dial-Up Connection Setup application.
- If the application quits with an error message, follow the advice it gives.
- A dialog box comes up with a combo box labeled Query available PPP over Ethernet Services through Adapter: at the top. Select the network adapter your DSL modem is connected to from the list. If the protocol is only operating on one network adapter, the box will be grayed out as there is no choice to make.
- Click the Query Available Services button. If an error message is displayed, continue here for further help.
- If the list view shows one or more offered services and you had tried to connect to a specific Service and/or Access Concentrator, make sure the one you had tried to connect to is listed. If you find your provider has changed the Service Name and/or the Access Concentrator name, simply create a new connection with the new name(s) or edit the Phone number field in your existing dial-up connection accordingly.
- Click the Exit button to quit the application.
If you do not want to connect to a specific Service and/or Access Concentrator, make sure the Phone number field of your dial-up connection is really either completely blank (only allowed in Windows 2000) or only contains a single zero digit (Windows 98/SE).
In Windows 2000, you can tell if the phone number is blank during a connection attempt by the text in the Connecting Connection Name dialog box: If the phone number is really blank, the text in the dialog box will say "Connecting through Adapter Name..." instead of "Connecting to Phone Number...". If it says the latter, there are still (possibly invisible) characters in the Phone number entry field. Try selecting the entire field and pressing the Del key to clear it.
6.6 Windows 2000: Connection attempt fails with "Error 651: The Modem (or other connecting device) has reported an error."
If you haven't rebooted since the installation of the protocol and the machine was in Standby mode since, this is a known issue. Simply click the Redial button. The second connection attempt will proceed without this error. You'll get it once each time after waking the machine from Standby until you reboot the machine. Then the protocol will work flawlessly even right after waking the machine.
6.7 Connection is successfully established, but some Internet websites do not load properly
This is usually a sign of an MTU problem. If you are running Windows 98/SE, a possible cause for this could be that the dial-up adapter's common IP MTU setting was altered to a value too high for PPP over Ethernet. This setting is altered e.g. when you change the IP Packet Size value on the Advanced tab of the Dial-up Adapter Properties and by some MTU tools. You should not touch this setting, nor use any tools that alter it when using PPP over Ethernet. To ensure this setting is correct do the following:
- Right-click the Network Neighborhood icon on your desktop and select Properties to bring up the Network Configuration window.
- Locate any PPP over Ethernet Protocol -> Adapter Name entry, select it and click the Properties button.
- Close the properties window with the Cancel button.
- Close the Network Configuration window with the OK button. If Windows 98/SE prompts you for a restart, the IP MTU setting had to be corrected. Allow the restart and try if the connection works properly.
If that did not help, or if you are running Windows 2000, you should determine the Path MTU to the problem site(s) (Note: The method described here does not work with all servers. If you get no reply at all from a server or a number below 548, you cannot determine the Path MTU to this server):
Connect, open an MS-DOS Prompt (Windows 98/SE) or a Command Prompt (Windows 2000) and run
ping -f -l xxxx Address
where Address is the name or IP address of the server you have problems accessing. For xxxx, start with 1464 and lower the number until you get a reply. Then add 28 to the highest number at which you get a reply. The result is the Path MTU.
Example: You start getting replies at ping -f -l 1372 Address. The Path MTU is 1372 + 28 = 1400 bytes in this case.
Normally, the Path MTU to all servers should be 1492. However, some ISPs appear to have a configuration problem which reduces the Path MTU. If you determine a Path MTU lower than 1492 to several (or all) servers on the Internet, you should enable the MTU override option and set it to the Path MTU you determined. After that setting has taken effect, all sites with a Path MTU greater than or equal to the value you set should load properly.
6.8 Can't "dial in" through PPP over Ethernet
Despite the fact that the dial-up devices exposed by this protocol will also show up in the list of dial-in devices when configuring the computer to Accept incoming connections, this protocol does not support incoming connections.
There are currently no known issues in Windows 98/SE. All the known issues revolve around the dynamic protocol installation and removal in Windows 2000 that should not require a reboot, but unfortunately due to Windows 2000 bugs in some cases still does. Windows 98/SE always requires you to reboot anyway, thus these issues don't apply. I have come to the conclusion that Microsoft would have to fix several bugs in Windows 2000 to allow a better solution of these issues. If you know any better solution(s), please contact me.
7.1 Unbinding the protocol from a network adapter can crash the operating system
Under some circumstances, unbinding the protocol from a network adapter by clearing the checkbox next to PPP over Ethernet Protocol in the Properties of its Local Area Connection can CRASH the operating system with a blue screen, stating that RASPPPOE.SYS unloaded without canceling pending operations. I have not yet found the exact circumstances which cause this, but it seems to be a bad idea to unbind the protocol from all adapters instead of uninstalling it. Thus, you should always make sure that the protocol is still bound to at least one other adapter before unbinding it from an adapter. If the protocol is no longer bound to any other adapter, use the Uninstall button instead of clearing the checkbox next to the protocol.
Background: No idea what exactly is going wrong here. All I found out so far that the crash address given seems to be the return instruction from my ProtocolCloseAdapterComplete() function. I suspect that NDIS detects that the protocol closed the last adapter and spontaneously "decides" to unload the driver without letting the ProtocolUnbindAdapter() function complete the unbinding. At least that sort of totally broken behavior on behalf of Windows 2000 would fit in with the other known uninstalling/unloading issues.
7.2 Binding/unbinding the protocol from a network adapter in its connection's properties take effect immediately and cannot be cancelled
When you bring up the Properties of a Local Area Connection and toggle the checkbox next to the PPP over Ethernet Protocol, the change takes place immediately, i.e. it is not deferred until you click OK or Cancel, and you cannot cancel the change you made. This is merely annoying when accidentally checking the checkbox, as you can clear it again with no harm done. However, if you accidentally clear the checkbox, simply re-checking the checkbox is not sufficient to make the protocol work on that adapter again, due to this known issue.
Background: This protocol is implemented as an NDIS intermediate driver with a different upper edge (ndiswan) than lower edge (ndis4, ndis5). As such, it does not qualify as a filter driver and thus requires its own Notify Object (implemented in RASPPPOE.DLL) to install and remove miniport instances for the bound adapters and communicate the name of the installed device instances to the protocol portion of the driver via the registry. When the user brings up the connection properties dialog box, the only way for the Notify Object to tell whether the user clicked OK or Cancel is that its ApplyRegistryChanges() and ApplyPnpChanges() member functions are only called in the former case, but not in the latter. So the right thing to do would be install and remove the miniport instance(s) in one of these functions - but that does not work, since a reentrancy check in the Windows 2000 network configuration library blocks all calls to INetCfgClassSetup::Install() and INetCfgClassSetup::DeInstall() at that point for fear the developer might have overlooked the possibility that these calls could lead to another invocation of the Notify Object's member functions that requested the installation or removal, which could lead to endless installation loops if the writer of the Notify Object wasn't smart enough to set a flag to prevent this. This makes it impossible to install and remove miniport instances from these Notify Object member functions. To work around this problem, the PPP over Ethernet Protocol does all installation and removal in the Notify Object's NotifyBindingPath() member function, which is unfortunately called immediately when the user toggles the checkbox. Thus, the change takes effect immediately and cannot be cancelled.
7.3 After initial installation, binding the protocol to a network adapter does not take effect
Once you have unbound the protocol from an adapter by clearing the checkbox next to the PPP over Ethernet Protocol in the Properties of a Local Area Connection, binding the protocol to the adapter by checking the checkbox again does not take effect, although you get no notification of this. There are three possible solutions in this situation:
- Locate the Local Area Connection of the adapter in question, right-click it and select Disable. Then, right-click it again and select Enable. This will make the protocol work again. Note, though, that this temporarily disrupts any other network traffic you might run through this adapter.
- Click the Uninstall button to remove the protocol completely and then click the Install button to re-install it. After re-installation, you will be able to use the protocol over that adapter immediately without a reboot, but you will see "ghost" dial-up devices in your dial-up connection properties. These will go away when you reboot. See this known issue.
- Reboot. After the reboot, the protocol will work on this adapter again.
Background: After the initial installation, the protocol driver is already running in memory. When the user checks the checkbox next to PPP over Ethernet Protocol, the Notify Object receives notification of a new adapter to bind to and calls INetCfgClassSetup::Install() to install a corresponding miniport device instance - and the Windows 2000 network configuration library makes the bad mistake of invoking the protocol driver's ProtocolBindAdapter() function before returning control to the Notify Object. This creates a semi-deadlock situation: ProtocolBindAdapter() needs the name of the installed miniport device instance before exiting, but only the Notify Object can provide that information, and the Notify Object can't find out the name before the INetCfgClassSetup::Install() function returns control - and that won't return control until ProtocolBindAdapter() exits. Thus, the ProtocolBindAdapter() function fails to initialize the miniport device instance and the protocol won't work on the adapter. The Notify Object will still create the required registry values afterwards, and when re-initializing the adapter by disabling and re-enabling its Local Area Connection or upon the next reboot, ProtocolBindAdapter() will successfully initialize the miniport device instance and the protocol will work on the adapter.
7.4 The protocol's dial-up devices show up as ISDN channels and a meaningless ISDN Configuration is offered
When you open the properties of a dial-up connection, you will find the PPP over Ethernet dial-up devices listed as "ISDN channel - Adapter Name". Selecting a dial-up device and clicking the Configure... button brings up an ISDN Configuration window with settings that are meaningless to PPP over Ethernet. The reason for this is that the dial-up devices are declared as ISDN devices to the system to make on-demand dialing work. While the incorrect display can be confusing, it does no harm.
Background: It was found that Windows 2000 will only use modems, ISDN and X.25 devices for on-demand dialing, but not "generic" devices, as this protocol's dial-up devices were formerly declared. This is apparently a flaw in Windows 2000.
7.5 After uninstalling the protocol or unbinding it from a network adapter, the protocol's dial-up devices are still shown until you reboot
When you unbind the protocol from an adapter or even completely uninstall the protocol, the dial-up devices it created are still shown in a dial-up connection's Properties box and will not go away until you reboot. When you re-bind to an adapter or re-install the protocol without rebooting, you will see double entries per adapter, with one having an additional number in brackets in the name. This appears to be a bug in the Windows 2000 Network Connections manager, as even WAN miniports shipping with the operating system exhibit this behavior. While the additional entries do no harm, they can be confusing. They will be gone after a reboot.
Background: This issue is known to Microsoft and currently intended behavior. They found that TAPI is leaking memory when a line device is removed and thus temporarily "fixed" this by simply blocking line device removal. Microsoft is supposedly working on a fix.
7.6 Uninstalling the protocol leaves files behind and the driver is never unloaded from memory
When you uninstall the protocol, the protocol's Notify Object DLL, RASPPPOE.DLL is left behind in your \WINNT\SYSTEM32 directory and the driver remains loaded in memory until you reboot. The latter issue poses a problem should you upgrade to a newer version of this protocol. Although the installation will put the new driver file on the hard disk, Windows 2000 will continue to use the old driver version still resident in memory instead of loading the new version from hard disk. You will have to reboot for the new driver file to be actually used. It is thus recommended that you reboot after uninstalling a previous version and before installing a new version. The DLL left behind can be safely deleted after uninstalling the protocol.
Background: Although there is a DelFiles directive in the protocol's INF file to delete RASPPPOE.DLL, the DLL is still locked in memory at the time the directive is supposed to be carried out. Microsoft has already acknowledged that this is a bug in the Windows 2000 binding engine which they need to fix. The driver unloading issue occurs with Microsoft's PASSTHRU DDK sample as well and has been acknowledged by Microsoft. They are supposedly working on a fix.
7.7 If there was no reboot since installation, the first connection attempt after waking the machine from Standby fails immediately with error 651
When the machine hasn't been rebooted since installation and is waked from Standby, the first connection attempt through this protocol fails immediately with "Error 651: The Modem (or other connecting device) has reported an error." Any further connection attempts proceed without this problem. If the machine is rebooted, the problem goes away entirely.
Background: No idea what exactly is going wrong here. My protocol receives the same TAPI OIDs as for any other (successful) connection attempt and handles them just the same, but just at the point where the OID_TAPI_MAKE_CALL request would have to come, this error message comes up instead. My protocol didn't show any extraordinary failures, so the error must occur within NDISTAPI itself. I figure this is another Windows 2000 bug.
- First release with Windows 98/SE support! No thanks to Microsoft's complete lack of documentation on NDIS intermediate drivers in Windows 98/SE.
- Added: Windows 98/SE support. Figured out the INF format for NDIS intermediate drivers in Windows 98/SE and where WAN.TSP expects an NDIS intermediate driver's TAPI subkey to be located in the registry. Added a 16-bit Windows DLL (WINPPPOE.DLL) with an NDI procedure to create that registry subkey upon installation, set the Dial-up Adapter's IPMTU registry parameter to the MTU for PPP over Ethernet (Windows 98/SE was found to ignore the maximum frame size returned by the driver) and offer the protocol properties GUI. Changed the driver unload function to ProtocolUnload(), since NdisMRegisterUnloadHandler() is not supported in Windows 98/SE. Removed the NdisIMAssociateMiniport() call from the DriverEntry() function, since that call is not supported in Windows 98.
- Added: RASPPPOE.EXE user-mode application for easy dial-up connection setup.
- Added: Limit TCP MSS Option to make MTU changes on Internet Connection Sharing client machines unnecessary. A new function scans all incoming and outgoing packets for the TCP Maximum Segment Size (MSS) option and, if necessary, limits it to either the default (1492) or the overridden MTU (see below) minus 40 for the IP and TCP headers (i.e. 1452 in case of the default MTU) and recalculates the TCP checksum.
- Added: MTU Override option to override the MTU initially reported by the driver. If an override value is specified, it will be reported as the MaxFrameSize in response to the OID_WAN_GET_INFO request. In Windows 98/SE, the Dial-up Adapter's IPMTU registry parameter is also set to the override value. It will furthermore be taken into account when limiting the TCP MSS option. Making the protocol initially report a lower MTU was found to help with certain VPN software packages which "blindly" add their own overhead without paying any respect to the MTU reported by the driver.
- Added: WAN Endpoints GUI option to easily change the number of dial-up devices exposed for a network adapter.
- Fixed: Dial on demand in Windows 2000 never triggered a connection. Windows 2000 apparently only dials modems, ISDN and X.25 devices on demand. Changed the device type of the dial-up devices exposed by the protocol to ISDN to work around this bug.
- Fixed: The protocol could lose one of its internal packets each time an NdisTransferData() call failed, until it would eventually be unable to receive any data. It appears that never actually happened to anyone, though.
- Fixed: The PPPoE version and type fields were reversed in the declaration. As the current PPPoE version and type are both 1, this bug went unnoticed.
- Changed: The protocol will now no longer log a warning to the event log if it receives a PADT packet for a session that does not exist (or no longer does).
- Changed: The Event Logging Options now default to logging all types of events. This should now produce no log entries during flawless operation.
- Fixed: No data transfer possible after successfully establishing a connection. The protocol was corrupting data packets it had to retrieve through NdisTransferData(). I had made the incorrect assumption that NdisTransferData() would use the ByteOffset parameter on the destination buffer as well, but instead it just starts at offset zero in the first buffer chained to the passed packet. Fixed this by chaining an additional buffer descriptor pointing to the desired destination location to the front of the packet before calling NdisTransferData().
- Fixed: Connection Error "Opening port... Error 797: The connection failed because the modem (or other connecting device) was not found." after waking the machine from Standby. There were no OID_PNP_XXX handlers in the protocol. Additionally, it turned out that TAPI requests OID_TAPI_PROVIDER_INITIALIZE after returning from Standby, although it never shuts the provider down with OID_TAPI_PROVIDER_SHUTDOWN. The protocol did not allow re-initialization without shutdown. Fixed this by adding the missing OID_PNP_XXX handlers and allowing TAPI provider re-initialization without a prior shutdown.
- First release that actually works! A wholehearted Thank You! to Jerome Whelan who invested so much time to provide me with the comprehensive feedback that I needed to make this protocol functional.
- Fixed: Installation Error "Could not add the requested component. The error is: Invalid access to memory location." on some machines. On those, the loader crashed when loading RASPPPOE.DLL, because I had linked it with the /align:16 linker switch. Removed the switch from the build settings.
- Fixed: Connection Error "Disconnected. Error 619: The specified port is not connected." on all connection attempts. NDISWAN failed to recognize the PPP frames within the complete received Ethernet frames the protocol passed to it, although I had specified the HeaderPadding correctly as outlined in the DDK documentation. Fixed this by setting the HeaderPadding to zero and only passing the portion of the buffer with the actual PPP frame to NDISWAN.
- Fixed: Ping Timeouts with certain packet sizes. NDISWAN passes up to four bytes more to a WAN miniport's send handler than the WAN miniport indicated as its MaxFrameSize. Apparently a WAN miniport driver writer is expected to make assumptions about the PPP HDLC overhead NDISWAN adds before passing a packet to the miniport - four bytes of simple PPP HDLC framing (Address and Control fields and Protocol Identifier). Fixed this by adjusting the maximum frame and total sizes accordingly and changing the size limit comparisons.
- Initial public release
Before contacting me, please bear in mind that I have been programming this piece of software in my spare time and that I'm giving it away for free. You cannot expect me to spend my time providing "tech support". If you have a problem that you cannot resolve after reading above documentation thoroughly, please do the following:
Of course, developer suggestions for fixing the known issues, success stories (please mention your DSL service provider, so that I know which ones this protocol works with) or just "thank you" notes are always welcome.
You can contact me via the e-mail address normanb@cs.TU-Berlin.DE.
*EOF*