On Fri, Nov 26, 2021 at 01:35:14PM +0100, Krzysztof Kanas wrote:
> Hi. When remote side in sppp doesn't reply for to PPP IPCP IP-Address 
> sppp will try to negotiate remote IP in endless loop. Instead use 
> 10.64.64.1 + if_index as remote IP.

Why add some arbitrary RFC 1918 IP if negotiation fails?  That's not
what users request or expect.

> While at it maybe it's worth to add that SPP is in RFC 1332 ?

sppp(4) STANDARDS mentions RFC 1332, if that's what you mean.

> Krzysztof Kanas
> 
> Index: share/man/man4/sppp.4
> ===================================================================
> RCS file: /home/cvs//src/share/man/man4/sppp.4,v
> retrieving revision 1.26
> diff -r1.26 sppp.4
> 284,285c284,285
> < Negotiation loop avoidance is not fully implemented.
> < If the negotiation doesn't converge, this can cause an endless loop.

Please send unified diffs, i.e. use `-u' with CVS diff(1).

> ---
> > In case when remote IP can't be negotiation after 10 retries pick 
> > 10.64.64.1 + if_index.
> Index: sys/net/if_sppp.h
> ===================================================================
> RCS file: /home/cvs//src/sys/net/if_sppp.h,v
> retrieving revision 1.30
> diff -r1.30 if_sppp.h
> 148a149,150
> > #define IPCP_HISADDR_COUNTER_MAX      10
> >     u_int8_t hisaddr_counter;    /* number of ipcp req for peer addr */
> Index: sys/net/if_spppsubr.c
> ===================================================================
> RCS file: /home/cvs//src/sys/net/if_spppsubr.c,v
> retrieving revision 1.190
> diff -r1.190 if_spppsubr.c
> 2466,2468c2466,2469
> <      * XXX This can result in an endless req - nak loop if peer
> <      * doesn't want to send us his address.  Q: What should we do
> <      * about it?  XXX  A: implement the max-failure counter.
> ---
> >      * This can result in an endless req - nak loop if peer
> >      * doesn't want to send us his address. Therefore we count
> >      * the number of request if it exceeds IPCP_HISADDR_COUNTER_MAX
> >      * assign remote address 10.64.64.1 + if_index.
> 2471,2479c2472,2492
> <             buf[0] = IPCP_OPT_ADDRESS;
> <             buf[1] = 6;
> <             buf[2] = hisaddr >> 24;
> <             buf[3] = hisaddr >> 16;
> <             buf[4] = hisaddr >> 8;
> <             buf[5] = hisaddr;
> <             rlen = 6;
> <             if (debug)
> <                     addlog("still need hisaddr ");
> ---
> >             if (sp->ipcp.hisaddr_counter++ > IPCP_HISADDR_COUNTER_MAX) {
> >                     sp->ipcp.hisaddr_counter = 0;
> >                     desiredaddr = 10 << 24 | 64 << 16 | 64 << 8 | 1;
> >                     desiredaddr += sp->pp_if.if_index;
> >                     hisaddr = desiredaddr;
> >                     sp->ipcp.req_hisaddr = desiredaddr;
> >                     sp->ipcp.flags |= IPCP_HISADDR_SEEN;
> >                     if (debug)
> >                             addlog("%s guess ",
> >                                     sppp_dotted_quad(desiredaddr));
> >             } else {
> >                     buf[0] = IPCP_OPT_ADDRESS;
> >                     buf[1] = 6;
> >                     buf[2] = hisaddr >> 24;
> >                     buf[3] = hisaddr >> 16;
> >                     buf[4] = hisaddr >> 8;
> >                     buf[5] = hisaddr;
> >                     rlen = 6;
> >                     if (debug)
> >                             addlog("still need hisaddr ");
> >             }
> 

Reply via email to