Here I try to collect info about pppd 2.3.5 (both daemon and kernel part) compile problems and patches. That's info from newsgroups, mailing lists, private mail and other sources, also own experience. Here is running Debian Linux 2.0, so users of other distributions have to check placement of files, which can sometimes differ from Debian's one.
Table of Contents
ipxpc.c in pppd mainstream version 2.3.5 (and some earlyers, at least 2.3.3) has a bug, which causes dropping of ack-reply from remote peer in ipxcp negotiations. In this case in pppd logfiles with debug you can see messages like:
pppd[327]: rcvd[IPXCP ConfAck id=0x1 <network 88888><node 00000000b1cc>] pppd[327]: Received bad configure-ack: 01 06 00 08 88 88 02 (line continued)
Compile of 2.0.30 - 2.0.34 kernels with kernel part of pppd 2.3.5 stops with error message:
make[3]: Entering directory `/usr/src/linux-2.0.33/drivers/net' gcc -D__KERNEL__ -I/usr/src/linux-2.0.33/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce -pipe -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -DCPU=686 -DMODVERSIONS -DEXPORT_SYMTAB -c ppp.c ppp.c: In function `ppp_dev_xmit': ppp.c:3104: too few arguments to function `dev_kfree_skb' ppp.c:3115: too few arguments to function `dev_kfree_skb' ppp.c:3128: too few arguments to function `dev_kfree_skb' ppp.c:3169: too few arguments to function `dev_kfree_skb' ppp.c:3177: too few arguments to function `dev_kfree_skb' ppp.c:3182: too few arguments to function `dev_kfree_skb' make[3]: *** [ppp.o] Error 1
Reason: depending of kernel version, function dev_kfree_skb() has one or two arguments. There was some discussion about kernel version numbers, where number of arguments was changed. Finally it is clear, that all 2.0.x kernels and earlyer 2.1.x kernels has two arguments. Since kernel version 2.1.86 number of arguments was changed to one.
That gets simple patch:
--- ppp-2.3.5/linux/ppp.c.glibc Fri Jun 5 15:35:39 1998 +++ ppp-2.3.5/linux/ppp.c Fri Jun 5 16:06:36 1998 @@ -3079,1 +3079,1 @@ -#if LINUX_VERSION_CODE < VERSION(2,1,86) +#if LINUX_VERSION_CODE >= VERSION(2,1,86)
Compile of 2.0.34 kernel after a make kernel from ppp 2.3.5 stops with error messages:
make[3]: Entering directory `/usr/src/linux/drivers/net' gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce -pipe -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -DCPU=686 -DMODVERSIONS -DEXPORT_SYMTAB -c ppp.c ppp.c: In function `ppp_init_ctrl_blk': ppp.c:465: structure has no member named `ddinfo' ppp.c:466: structure has no member named `ddinfo' ppp.c: In function `ppp_changedmtu': ppp.c:585: cannot convert to a pointer type ppp.c: In function `ppp_release': ppp.c:700: cannot convert to a pointer type ppp.c: In function `ppp_tty_close_local': ppp.c:761: cannot convert to a pointer type (list of errors continued)
I puzzled too with this problem. 2.0.x kernels has kernel part of pppd 2.2.0. Up to 2.0.33 kernel make kernel in pppd 2.3.5 package installed all necessary filest to kernel source. PPP kernel part is modifyed since 2.0.34 kernel and ppp.c has later FILEVERSION than one in pppd 2.3.5 sources, so ppp.c isn't copied to kernel sources.
You can change FILEVERSION of ppp.c in kernel sources tree to be earlyer than in pppd 2.3.5 sources or copy it manually.
Check also if LINUX_VERSION_CODE problem is fixed in ppp.c. If not, you will get other errors.
Look also comments by Clifford Kite (from comp.protocols.ppp) and Donald Thompson (from linux-ppp mailing list).
Compile of pppd 2.3.5 stops with error messages:
[root@smash ppp-2.3.5-patched]# make cd chat; make all make[1]: Entering directory `/usr/local/src/ppp-2.3.5-patched/chat' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/usr/local/src/ppp-2.3.5-patched/chat' cd pppd; make all make[1]: Entering directory `/usr/local/src/ppp-2.3.5-patched/pppd' cc -O2 -pipe -Wall -g -D_linux_=1 -DHAVE_PATHS_H -DIPX_CHANGE -I../include -DCHAPMS=1 -DUSE_CRYPT=1 -DHAVE_CRYPT_H=1 -DHAS_SHADOW -c sys-linux.c -o sys-linux.o In file included from sys-linux.c:68: ../include/linux/ppp_defs.h:97: parse error before `ext_accm' ../include/linux/ppp_defs.h:97: warning: data definition has no type or storage class ../include/linux/ppp_defs.h:113: parse error before `__u32' ../include/linux/ppp_defs.h:113: warning: no semicolon at end of struct or union ../include/linux/ppp_defs.h:115: warning: data definition has no type or storage class (error listing continued)
This problem is fixed in Debian's pppd 2.3.5-2 package. Here is patch from linux-ppp mailing list.
Here is message from linux-ppp mailing list about compiling 2.1.x kernels with pppd 2.3.5. I haven't personal experience with 2.1.x kernels, but looks, like partially compile problems can be connected with move from libc5 to libc6, which needs sometimes different header files. I saw it clearly, when compiled Debian's IPX 1.0 package. By default there are used header files linux/if.h and linux/ipx.h and compile failed. But when I added compile flag -DGLIBC2 (with 2.0.34 kernel I moved to libc6) header files net/if.h and netipx/ipx.h was used instead, and compile went normally.
Client (pppd 2.3.5) and server (not NT) both agree with admin defined but don't stop negotiating this. Logfile with debug looks like
Sep 7 18:17:48 nirvana pppd[228]: rcvd [CBCP Request id=0x59 <AdminDefined delay = 0>] Sep 7 18:17:48 nirvana pppd[228]: length: 3 Sep 7 18:17:48 nirvana pppd[228]: user admin defined allowed Sep 7 18:17:48 nirvana pppd[228]: cbcp_resp cb_type=8 Sep 7 18:17:48 nirvana pppd[228]: cbcp_resp CONF_ADMIN Sep 7 18:17:48 nirvana pppd[228]: sent [CBCP Response id=0x59 <AdminDefined delay = 0 number = >] Sep 7 18:17:50 nirvana pppd[228]: rcvd [CBCP Request id=0x5a <AdminDefined delay = 0>] Sep 7 18:17:50 nirvana pppd[228]: length: 3 Sep 7 18:17:50 nirvana pppd[228]: user admin defined allowed Sep 7 18:17:50 nirvana pppd[228]: cbcp_resp cb_type=8 Sep 7 18:17:50 nirvana pppd[228]: cbcp_resp CONF_ADMIN Sep 7 18:17:50 nirvana pppd[228]: sent [CBCP Response id=0x5a <AdminDefined delay = 0 number = >]
Here is patch from linux-ppp mailing list by Urban Widmark.
I have strange error message in syslog and ppp.log, when IPX layer goes down:
pppd[4796]: ioctl(SIOCAIFADDR, IPX_DLTITF): Invalid argument(22)
This message don't affects normal work of Linux box and appears with all kernels (2.0.30 - 2.0.34, 2.2.1, 2.2.4) and ppp daemons (2.3.5 and 2.3.7alpha) I used.