See this question in the asnyc PPP; section: config_asyncppp_def .
To compile the kernel with syncPPP included in ISDN4Linux, you have to answer the appropriate questions with "yes". Don't forget to load the module slhc.o before isdn.o, if VJ compression is not compiled into the kernel e.g. if you have no PPP and no CSLIP in the kernel. (Note that the use of VJ is problematic and does not work reliably - however, the support should still be included in the kernel, since there can otherwise be side effects.)
The name of the network interface should always begin with "ippp", not with "syncppp" or "isdn"; otherwise the communication with ipppd will not work correctly.
Synchronous PPP is simply another encapsulation for ISDN4Linux. This encapsulation is called "syncppp". Here is an example to configure the link level device ippp0:
/sbin/isdnctrl addif ippp0 /sbin/isdnctrl encap ippp0 syncppp
To use these devices you need the program ipppd
, which you have to
configure. You have to start ipppd once after the modules are installed. ipppd
communicates with the isdn4linux link level devices through /dev/ippp0
to /dev/ippp63
. A single ipppd can handle all devices at once. If you
want two PPP connections at the same time, you need to bind ipppd to two devices,
etc. As a result, ipppd
provides the network device ippp0
,
which can be checked with ifconfig (even so it has the same name, the network
device ippp0
is not to be confused with /dev/ippp0
which is used
for communication between ipppd and link level.
ipppd has an additional option: "useifip" uses the IP address of the connected network interface (if it is not 0.0.0.0). (Even then, ipppd tries to use the pointopoint address as the remote IP.) For the beginning, disable all compression (lzs/stac, bsd, van jacobson), later you can try to enable it (see question cfg_general_compression ).
You can find an example configuration in the file etc/rc.isdn.syncppp
in the isdn4kernel-util package.
When giving the option ´defaultroute´, then you can wait a few seconds, then
check whether the default route exists. Another way, when giving option
useifip
is to check whether you find entries like "Local IP:
x.y.z.a"
and/or "Remote IP: x.y.z.a"
in syslog.
In either case, the connection is up.
You can write out a login session with ("Debug-Log"), and see which options the other computer is refusing. Next time, configure ipppd without these unused options. A further side effect is that such unused options increase the redundance (e.g. when the other computer has bugs and refuses the options incorrectly). To create a log file, see "How to I create a log for ipppd".
You must bind a network interface explicitly to an ippp device, where you can connect a (for this interface) individually configured ipppd. With the (unfortunately poorly documented) command
"isdnctrl pppbind interface Number"
You have to first know how ipppd gets its data. All data that come in over the ISDN line is received by the network devices (these are set up with isdnctrl). Then the data given to one of the /dev/ippp* devices - to one where a ipppd daemon is waiting for data.
To the network interfaces, all ipppd's appear to be able to handle the just-received data - therefore it is normally impossible to predict which ipppd will receive data from which network interface.
In practice, you usually install several ipppd's with differing configurations. Each of these should receive data exclusively from a certain network interface (that has also be specially configured). The "pppdbind" command serves just this purpose. With:
"isdnctrl pppbind interface number"
Example: To attach the interface "ippp5" to /dev/ippp2, the following configuration should be used:
"isdnctrl pppbind ippp5 2"
At least you must have a route, which forwards a packet to the ippp network interface to trigger dialing. A default route to the ippp interface will work. Now you must choose a dummy IP address for your interface. If for some reason you can't set the default route to the ippp interface, you may take any address of the subnet from which you expect your dynamic IP number and set a 'network route' for this subnet to the ippp interface. To allow overriding of the dummy address you must call the ipppd with the 'ipcp-accept-local' option. You must know how the ipppd gets the addresses it has to configure. If you don't give any option, the ipppd tries to negotiate the local host address! With the option 'noipdefault' it requests an address from the remote machine. With 'useifip' it gets the addresses from the net interface. You also can set the addresses in the option line with the a.b.c.d:e.f.g.h option. Note: the IP address of the remote machine must be configured locally, or the remote machine must send it in an IPCP request. If your side doesn't know the IP address after negotiation, it closes the connection! You must allow overriding of addresses with the 'ipcp-accept-*' options, if you have set your own or the remote address explicitly. Try these options, e.g.:
/sbin/ipppd :$REMOTE noipdefault /dev/ippp0
Give the option +ipx-protocol
to the ipppd.
You can establish more channels with MPPP (see the MPPP section). Another way is to use compression, see question cfg_general_compression .
Van Jacobson compression (header compression) is in experimental state. It works for some remote devices, but not for others. Check it out on your own risk, to be sure disable it. Lzs compression (sometimes also called Stac compression) works quite well. To enable it, some manual work has to be done to add the code to the ipppd (see the isdn4k-util package). Bsd compression also seems to work, but is in experimental stage. You find it in the CVS tree.