--- src/fsm.h.orig 2018-06-23 17:52:14.984221000 +0700 +++ src/fsm.h 2018-06-23 17:51:37.007775000 +0700 @@ -43,6 +43,7 @@ #define MODE_NAK 1 #define MODE_REJ 2 #define MODE_NOP 3 + #define MODE_ACK 4 /* Codes */ #define CODE_VENDOR 0 --- src/ccp.c.orig 2016-01-06 22:42:06.000000000 +0700 +++ src/ccp.c 2018-06-23 17:39:25.144177000 +0700 @@ -938,6 +938,7 @@ CcpDecodeConfig(Fsm fp, FsmOption list, CCP_PEER_REJ(ccp, index); break; + case MODE_ACK: case MODE_NAK: case MODE_NOP: (*ct->DecodeConfig)(fp, opt, mode); --- src/ecp.c.orig 2016-01-06 22:42:06.000000000 +0700 +++ src/ecp.c 2018-06-23 17:38:52.920025000 +0700 @@ -793,6 +793,7 @@ EcpDecodeConfig(Fsm fp, FsmOption list, ECP_PEER_REJ(ecp, index); break; + case MODE_ACK: case MODE_NOP: (*et->DecodeConfig)(fp, opt, mode); break; --- src/fsm.c.orig 2016-01-06 22:42:06.000000000 +0700 +++ src/fsm.c 2018-06-23 17:40:37.112129000 +0700 @@ -664,7 +664,7 @@ FsmRecvConfigAck(Fsm fp, FsmHeader lhp, /* XXX We should verify the contents are equal to our last sent config-req */ /* Decode packet */ - FsmDecodeBuffer(fp, MBDATA(bp), MBLEN(bp), MODE_NOP); + FsmDecodeBuffer(fp, MBDATA(bp), MBLEN(bp), MODE_ACK); /* Do whatever */ switch (fp->state) { --- src/lcp.c.orig 2016-01-06 22:42:06.000000000 +0700 +++ src/lcp.c 2018-06-23 17:48:20.968167000 +0700 @@ -843,6 +843,10 @@ LcpDecodeConfig(Fsm fp, FsmOption list, mru = ntohs(mru); Log(LG_LCP, ("[%s] %s %d", l->name, oi->name, mru)); switch (mode) { + case MODE_ACK: + if (mru == lcp->want_mru) + lcp->peer_mru = mru; + break; case MODE_REQ: if (mru < LCP_MIN_MRU) { mru = htons(LCP_MIN_MRU);