Hi!

I have a box with two external ISDN modems attached to it that acts as an
outgoing modem pool to a number of remote located ISDN routers (zyxel P-202H
Plus v2).

Recently I was given the go-ahead to upgrade this 3.6 box so I swapped the
disk with a new one with a fresh install of 4.1 (4.2 cds haven't yet arrived
then). Unfortuantely, this upgrade caused the outgoing ppp connections to
fail.

My initial investigation didn't show me a clear reason for this so I went
back to 3.6 and then upgraded version by version, until I found the moment
when the unchanged very simple ppp.conf (at the bottom of this mail) didn't
work anymore.

To cut a long story shirt, something happened between 3.8 and 3.9 that
changes the behaviour of the LCP negotiation protocol in my specific case:

3.8:
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP: deflink: LayerStart
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP: deflink: SendConfigReq(1)
state = Stopped
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  ACFCOMP[2]
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  PROTOCOMP[2]
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  ACCMAP[6] 0x00000000
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  MRU[4] 1500
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  MAGICNUM[6] 0x434b14d1
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP: deflink: State change Stopped
--> Req-Sent
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP: deflink: RecvConfigRej(1)
state = Req-Sent
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  PROTOCOMP[2]
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  ACFCOMP[2]
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP: deflink: SendConfigReq(2)
state = Req-Sent
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  ACCMAP[6] 0x00000000
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  MRU[4] 1500
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP:  MAGICNUM[6] 0x434b14d1
Oct 18 16:29:27 ringie ppp[11094]: tun0: LCP: deflink: RecvConfigAck(2)
state = Req-Sent

3.9:

Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP: deflink: LayerStart
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP: deflink: SendConfigReq(1) state
= Stopped
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  ACFCOMP[2]
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  PROTOCOMP[2]
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  ACCMAP[6] 0x00000000
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  MRU[4] 1500
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  MAGICNUM[6] 0x1c0be38b
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP: deflink: State change Stopped
--> Req-Sent
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP: deflink: RecvConfigReq(235)
state = Req-Sent
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  MRU[4] 1524
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  AUTHPROTO[5] 0xc223 (CHAP
0x05)
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  MAGICNUM[6] 0x4b27d550
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  ACFCOMP[2]
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  MRRU[4] 1524
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  ENDDISC[9] MAC
00:13:49:33:c8:84
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  LDBACP[4] 002b
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  ACCMAP[6] 0x00000000
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP: deflink: SendConfigRej(235)
state = Req-Sent
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  MRRU[4] 1524
Oct 18 16:28:45 ringie ppp[6602]: tun0: LCP:  LDBACP[4] 002b

Under 3.8, my end makes some proposals, the remote end rejects a couple of
them and eventually we reach an agreement. Under 3.9 and all the later
versions including -current, we send the exactly same proposals but the
remote end instead of replying to them, sends its own set of proposals -
which we ultimately find unnacceptable as we cannot grok LDBACP. 

Under 3.8 the flow goes: SendConfigReq ->  RecvConfigRej -> SendConfigReq ->
RecvConfigAck.
Under 3.9 the flow goes: SendConfigReq ->  RecvConfigReq -> SendConfigRej ->
RecvConfigReq -> SendConfigRej ...

The funny part is that our config file and proposal remain the same during
the OS version change, even the physical bits being pushed through the
serial port seem not to have changed except for MAGICNUM - so what makes the
remote router change its behaviour??? What makes Zyxel react differently?

cvs diff on /usr/src/usr.sbin/ppp/ppp between 3.8 and 3.9 shows a good 2k
lines have changed, but it seems to be mostly the inclusion of radius
support and some ipv6-related work, nothing that even remotely appears to be
involved in LCP.  Out of desperation I have tried to build 3.8's ppp sources
on a 3.9 system, but surprisingly the resulting ppp gave the 3.9 behaviour.
Could this mean that change was caused by kernel or other system components?


Regards, Mitja

-------------------
default:
 set log Phase Chat LCP IPCP CCP tun command
 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \"\" AT OK-AT-OK ATE1Q0
OK \\dATDT\\T TIMEOUT 40 CONNECT"
 disable ipv6cp
 enable mssfixup

stpn:
 set device /dev/cua03
 set phone 004912345678901
 set login
 set authname xxxxxx
 set authkey yyyyyy
 set ifaddr 0.0.0.0/16 10.32.0.1/0 255.255.0.0 0.0.0.0
 add! 10.32.0.0/16 HISADDR
------------------

Reply via email to