On 30/09/15(Wed) 00:36, Stuart Henderson wrote:
> The last diff only had +'s, so restore the balance. Since the sad
> demise of art, san, and lmc, there is some crisco that can be flensed.
> The diff has ^L's in so there's a risk it may get mangled with
> quoted-unreadable encoding, so I've put a copy at
> http://junkpile.org/sppp-decisco.diff

ok mpi@

> 
> Index: if_sppp.h
> ===================================================================
> RCS file: /cvs/src/sys/net/if_sppp.h,v
> retrieving revision 1.20
> diff -u -p -r1.20 if_sppp.h
> --- if_sppp.h 20 Nov 2013 08:21:33 -0000      1.20
> +++ if_sppp.h 29 Sep 2015 23:31:45 -0000
> @@ -2,7 +2,7 @@
>  /*   $NetBSD: if_sppp.h,v 1.2.2.1 1999/04/04 06:57:39 explorer Exp $ */
>  
>  /*
> - * Defines for synchronous PPP/Cisco link level subroutines.
> + * Defines for synchronous PPP link level subroutines.
>   *
>   * Copyright (C) 1994 Cronyx Ltd.
>   * Author: Serge Vakulenko, <[email protected]>
> @@ -156,7 +156,7 @@ struct sppp {
>       struct  ifnet pp_if;    /* network interface data */
>       struct  ifqueue pp_cpq; /* PPP control protocol queue */
>       struct  sppp *pp_next;  /* next interface in keepalive list */
> -     u_int   pp_flags;       /* use Cisco protocol instead of PPP */
> +     u_int   pp_flags;
>       u_int   pp_framebytes;  /* number of bytes added by hardware framing */
>       u_short pp_alivecnt;    /* keepalive packets counter */
>       u_short pp_loopcnt;     /* loopback detection counter */
> @@ -208,7 +208,7 @@ struct sppp {
>  };
>  
>  #define PP_KEEPALIVE    0x01    /* use keepalive protocol */
> -#define PP_CISCO        0x02    /* use Cisco protocol instead of PPP */
> +                             /* 0x02 was PP_CISCO */
>                               /* 0x04 was PP_TIMO */
>  #define PP_CALLIN    0x08    /* we are being called */
>  #define PP_NEEDAUTH  0x10    /* remote requested authentication */
> Index: if_spppsubr.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if_spppsubr.c,v
> retrieving revision 1.137
> diff -u -p -r1.137 if_spppsubr.c
> --- if_spppsubr.c     24 Aug 2015 15:58:35 -0000      1.137
> +++ if_spppsubr.c     29 Sep 2015 23:31:45 -0000
> @@ -1,7 +1,6 @@
>  /*   $OpenBSD: if_spppsubr.c,v 1.137 2015/08/24 15:58:35 mpi Exp $   */
>  /*
> - * Synchronous PPP/Cisco link level subroutines.
> - * Keepalive protocol implemented in both Cisco and PPP modes.
> + * Synchronous PPP link level subroutines.
>   *
>   * Copyright (C) 1994-1996 Cronyx Engineering Ltd.
>   * Author: Serge Vakulenko, <[email protected]>
> @@ -93,7 +92,7 @@
>   *   <if-name><unit>: <proto-name> <additional info...>
>   *
>   * with <if-name><unit> being something like "bppp0", and <proto-name>
> - * being one of "lcp", "ipcp", "cisco", "chap", "pap", etc.
> + * being one of "lcp", "ipcp", "chap", "pap", etc.
>   */
>  
>  #define IFF_PASSIVE  IFF_LINK0       /* wait passively for connection */
> @@ -151,13 +150,6 @@
>  
>  #define CHAP_MD5             5       /* hash algorithm - MD5 */
>  
> -#define CISCO_MULTICAST              0x8f    /* Cisco multicast address */
> -#define CISCO_UNICAST                0x0f    /* Cisco unicast address */
> -#define CISCO_KEEPALIVE              0x8035  /* Cisco keepalive protocol */
> -#define CISCO_ADDR_REQ               0       /* Cisco address request */
> -#define CISCO_ADDR_REPLY     1       /* Cisco address reply */
> -#define CISCO_KEEPALIVE_REQ  2       /* Cisco keepalive request */
> -
>  /* states are named and numbered according to RFC 1661 */
>  #define STATE_INITIAL        0
>  #define STATE_STARTING       1
> @@ -184,16 +176,6 @@ struct lcp_header {
>  };
>  #define LCP_HEADER_LEN          sizeof (struct lcp_header)
>  
> -struct cisco_packet {
> -     u_int32_t type;
> -     u_int32_t par1;
> -     u_int32_t par2;
> -     u_short rel;
> -     u_short time0;
> -     u_short time1;
> -};
> -#define CISCO_PACKET_LEN 18
> -
>  /*
>   * We follow the spelling and capitalization of RFC 1661 here, to make
>   * it easier comparing with the standard.  Please refer to this RFC in
> @@ -240,9 +222,6 @@ static struct timeout keepalive_ch;
>  int sppp_output(struct ifnet *ifp, struct mbuf *m,
>                      struct sockaddr *dst, struct rtentry *rt);
>  
> -void sppp_cisco_send(struct sppp *sp, u_int32_t type, u_int32_t par1, 
> u_int32_t par2);
> -void sppp_cisco_input(struct sppp *sp, struct mbuf *m);
> -
>  void sppp_cp_input(const struct cp *cp, struct sppp *sp,
>                         struct mbuf *m);
>  void sppp_cp_send(struct sppp *sp, u_short proto, u_char type,
> @@ -495,15 +474,6 @@ sppp_input(struct ifnet *ifp, struct mbu
>       case PPP_ALLSTATIONS:
>               if (ht.control != PPP_UI)
>                       goto invalid;
> -             if (sp->pp_flags & PP_CISCO) {
> -                     if (debug)
> -                             log(LOG_DEBUG,
> -                                 SPP_FMT "PPP packet in Cisco mode "
> -                                 "<addr=0x%x ctrl=0x%x proto=0x%x>\n",
> -                                 SPP_ARGS(ifp),
> -                                 ht.address, ht.control, ntohs(ht.protocol));
> -                     goto drop;
> -             }
>               switch (ntohs (ht.protocol)) {
>               default:
>                       if (sp->state[IDX_LCP] == STATE_OPENED)
> @@ -557,36 +527,6 @@ sppp_input(struct ifnet *ifp, struct mbu
>  #endif
>               }
>               break;
> -     case CISCO_MULTICAST:
> -     case CISCO_UNICAST:
> -             /* Don't check the control field here (RFC 1547). */
> -             if (! (sp->pp_flags & PP_CISCO)) {
> -                     if (debug)
> -                             log(LOG_DEBUG,
> -                                 SPP_FMT "Cisco packet in PPP mode "
> -                                 "<addr=0x%x ctrl=0x%x proto=0x%x>\n",
> -                                 SPP_ARGS(ifp),
> -                                 ht.address, ht.control, ntohs(ht.protocol));
> -                     goto drop;
> -             }
> -             switch (ntohs (ht.protocol)) {
> -             default:
> -                     ++ifp->if_noproto;
> -                     goto invalid;
> -             case CISCO_KEEPALIVE:
> -                     sppp_cisco_input ((struct sppp*) ifp, m);
> -                     m_freem (m);
> -                     return;
> -             case ETHERTYPE_IP:
> -                     inq = &ipintrq;
> -                     break;
> -#ifdef INET6
> -             case ETHERTYPE_IPV6:
> -                     inq = &ip6intrq;
> -                     break;
> -#endif
> -             }
> -             break;
>       default:        /* Invalid PPP packet. */
>         invalid:
>               if (debug)
> @@ -714,52 +654,39 @@ sppp_output(struct ifnet *ifp, struct mb
>        * (albeit due to the implementation it's always enough)
>        */
>       h = mtod (m, struct ppp_header*);
> -     if (sp->pp_flags & PP_CISCO) {
> -             h->address = CISCO_UNICAST;        /* unicast address */
> -             h->control = 0;
> -     } else {
> -             h->address = PPP_ALLSTATIONS;        /* broadcast address */
> -             h->control = PPP_UI;                 /* Unnumbered Info */
> -     }
> +     h->address = PPP_ALLSTATIONS;        /* broadcast address */
> +     h->control = PPP_UI;                 /* Unnumbered Info */
>  
>   skip_header:
>       switch (dst->sa_family) {
>       case AF_INET:   /* Internet Protocol */
> -             if (sp->pp_flags & PP_CISCO)
> -                     protocol = htons (ETHERTYPE_IP);
> -             else {
> -                     /*
> -                      * Don't choke with an ENETDOWN early.  It's
> -                      * possible that we just started dialing out,
> -                      * so don't drop the packet immediately.  If
> -                      * we notice that we run out of buffer space
> -                      * below, we will however remember that we are
> -                      * not ready to carry IP packets, and return
> -                      * ENETDOWN, as opposed to ENOBUFS.
> -                      */
> -                     protocol = htons(PPP_IP);
> -                     if (sp->state[IDX_IPCP] != STATE_OPENED)
> -                             rv = ENETDOWN;
> -             }
> +             /*
> +              * Don't choke with an ENETDOWN early.  It's
> +              * possible that we just started dialing out,
> +              * so don't drop the packet immediately.  If
> +              * we notice that we run out of buffer space
> +              * below, we will however remember that we are
> +              * not ready to carry IP packets, and return
> +              * ENETDOWN, as opposed to ENOBUFS.
> +              */
> +             protocol = htons(PPP_IP);
> +             if (sp->state[IDX_IPCP] != STATE_OPENED)
> +                     rv = ENETDOWN;
>               break;
>  #ifdef INET6
>       case AF_INET6:   /* Internet Protocol v6 */
> -             if (sp->pp_flags & PP_CISCO)
> -                     protocol = htons (ETHERTYPE_IPV6);
> -             else {
> -                     /*
> -                      * Don't choke with an ENETDOWN early.  It's
> -                      * possible that we just started dialing out,
> -                      * so don't drop the packet immediately.  If
> -                      * we notice that we run out of buffer space
> -                      * below, we will however remember that we are
> -                      * not ready to carry IPv6 packets, and return
> -                      * ENETDOWN, as opposed to ENOBUFS.
> -                      */
> -                     protocol = htons(PPP_IPV6);
> -                     if (sp->state[IDX_IPV6CP] != STATE_OPENED)
> -                             rv = ENETDOWN;
> -             }
> +             /*
> +              * Don't choke with an ENETDOWN early.  It's
> +              * possible that we just started dialing out,
> +              * so don't drop the packet immediately.  If
> +              * we notice that we run out of buffer space
> +              * below, we will however remember that we are
> +              * not ready to carry IPv6 packets, and return
> +              * ENETDOWN, as opposed to ENOBUFS.
> +              */
> +             protocol = htons(PPP_IPV6);
> +             if (sp->state[IDX_IPV6CP] != STATE_OPENED)
> +                     rv = ENETDOWN;
>               break;
>  #endif
>       default:
> @@ -922,12 +849,9 @@ sppp_dequeue(struct ifnet *ifp)
>       /*
>        * Process only the control protocol queue until we have at
>        * least one NCP open.
> -      *
> -      * Do always serve all queues in Cisco mode.
>        */
>       IF_DEQUEUE(&sp->pp_cpq, m);
> -     if (m == NULL &&
> -         (sppp_ncp_check(sp) || (sp->pp_flags & PP_CISCO) != 0)) {
> +     if (m == NULL && sppp_ncp_check(sp)) {
>               IFQ_DEQUEUE (&sp->pp_if.if_snd, m);
>       }
>       splx(s);
> @@ -947,8 +871,7 @@ sppp_pick(struct ifnet *ifp)
>       s = splnet();
>       IF_POLL(&sp->pp_cpq, m);
>       if (m == NULL &&
> -         (sp->pp_phase == PHASE_NETWORK ||
> -          (sp->pp_flags & PP_CISCO) != 0)) {
> +         (sp->pp_phase == PHASE_NETWORK)) {
>               IFQ_POLL(&sp->pp_if.if_snd, m);
>       }
>       splx (s);
> @@ -991,14 +914,12 @@ sppp_ioctl(struct ifnet *ifp, u_long cmd
>               }
>  
>               if (going_up || going_down)
> -                     if (!(sp->pp_flags & PP_CISCO))
> -                             lcp.Close(sp);
> +                     lcp.Close(sp);
>  
>               if (going_up && newmode == 0) {
>                       /* neither auto-dial nor passive */
>                       ifp->if_flags |= IFF_RUNNING;
> -                     if (!(sp->pp_flags & PP_CISCO))
> -                             lcp.Open(sp);
> +                     lcp.Open(sp);
>               } else if (going_down) {
>                       sppp_flush(ifp);
>                       ifp->if_flags &= ~IFF_RUNNING;
> @@ -1061,134 +982,6 @@ sppp_ioctl(struct ifnet *ifp, u_long cmd
>       return rv;
>  }
>  
> -
> -/*
> - * Cisco framing implementation.
> - */
> -
> -/*
> - * Handle incoming Cisco keepalive protocol packets.
> - */
> -void
> -sppp_cisco_input(struct sppp *sp, struct mbuf *m)
> -{
> -     STDDCL;
> -     struct cisco_packet *h;
> -     u_int32_t me, mymask;
> -
> -     if (m->m_pkthdr.len < CISCO_PACKET_LEN) {
> -             if (debug)
> -                     log(LOG_DEBUG,
> -                         SPP_FMT "cisco invalid packet length: %d bytes\n",
> -                         SPP_ARGS(ifp), m->m_pkthdr.len);
> -             return;
> -     }
> -     h = mtod (m, struct cisco_packet*);
> -     if (debug)
> -             log(LOG_DEBUG,
> -                 SPP_FMT "cisco input: %d bytes "
> -                 "<0x%x 0x%x 0x%x 0x%x 0x%x-0x%x>\n",
> -                 SPP_ARGS(ifp), m->m_pkthdr.len,
> -                 ntohl(h->type), h->par1, h->par2, (u_int)h->rel,
> -                 (u_int)h->time0, (u_int)h->time1);
> -     switch (ntohl (h->type)) {
> -     default:
> -             if (debug)
> -                     addlog(SPP_FMT "cisco unknown packet type: 0x%x\n",
> -                            SPP_ARGS(ifp), ntohl(h->type));
> -             break;
> -     case CISCO_ADDR_REPLY:
> -             /* Reply on address request, ignore */
> -             break;
> -     case CISCO_KEEPALIVE_REQ:
> -             sp->pp_alivecnt = 0;
> -             sp->pp_rseq = ntohl (h->par1);
> -             if (sp->pp_seq == sp->pp_rseq) {
> -                     /* Local and remote sequence numbers are equal.
> -                      * Probably, the line is in loopback mode. */
> -                     if (sp->pp_loopcnt >= LOOPALIVECNT) {
> -                             log(LOG_INFO, SPP_FMT "loopback\n",
> -                                     SPP_ARGS(ifp));
> -                             sp->pp_loopcnt = 0;
> -                             if (ifp->if_flags & IFF_UP) {
> -                                     if_down (ifp);
> -                                     sppp_qflush (&sp->pp_cpq);
> -                             }
> -                     }
> -                     ++sp->pp_loopcnt;
> -
> -                     /* Generate new local sequence number */
> -                     sp->pp_seq = arc4random();
> -                     break;
> -             }
> -             sp->pp_loopcnt = 0;
> -             if (! (ifp->if_flags & IFF_UP) &&
> -                 (ifp->if_flags & IFF_RUNNING)) {
> -                     if_up(ifp);
> -                     if (debug)
> -                             log(LOG_INFO, SPP_FMT "up\n", SPP_ARGS(ifp));
> -             }
> -             break;
> -     case CISCO_ADDR_REQ:
> -             sppp_get_ip_addrs(sp, &me, 0, &mymask);
> -             if (me != 0)
> -                     sppp_cisco_send(sp, CISCO_ADDR_REPLY, me, mymask);
> -             break;
> -     }
> -}
> -
> -/*
> - * Send Cisco keepalive packet.
> - */
> -void
> -sppp_cisco_send(struct sppp *sp, u_int32_t type, u_int32_t par1, u_int32_t 
> par2)
> -{
> -     STDDCL;
> -     struct ppp_header *h;
> -     struct cisco_packet *ch;
> -     struct mbuf *m;
> -     struct timeval tv;      
> -
> -     getmicrouptime(&tv);
> -
> -     MGETHDR (m, M_DONTWAIT, MT_DATA);
> -     if (! m)
> -             return;
> -     m->m_pkthdr.len = m->m_len = PPP_HEADER_LEN + CISCO_PACKET_LEN;
> -     m->m_pkthdr.ph_ifidx = 0;
> -
> -     h = mtod (m, struct ppp_header*);
> -     h->address = CISCO_MULTICAST;
> -     h->control = 0;
> -     h->protocol = htons (CISCO_KEEPALIVE);
> -
> -     ch = (struct cisco_packet*) (h + 1);
> -     ch->type = htonl (type);
> -     ch->par1 = htonl (par1);
> -     ch->par2 = htonl (par2);
> -     ch->rel = -1;
> -
> -     ch->time0 = htons ((u_short) (tv.tv_sec >> 16));
> -     ch->time1 = htons ((u_short) tv.tv_sec);
> -
> -     if (debug)
> -             log(LOG_DEBUG, SPP_FMT
> -                 "cisco output: <0x%x 0x%x 0x%x 0x%x 0x%x-0x%x>\n",
> -                     SPP_ARGS(ifp), ntohl(ch->type), ch->par1, ch->par2,
> -                     (u_int)ch->rel, (u_int)ch->time0, (u_int)ch->time1);
> -
> -     if (IF_QFULL (&sp->pp_cpq)) {
> -             IF_DROP (&ifp->if_snd);
> -             m_freem (m);
> -             m = NULL;
> -     } else
> -             IF_ENQUEUE (&sp->pp_cpq, m);
> -     if (! (ifp->if_flags & IFF_OACTIVE))
> -             (*ifp->if_start) (ifp);
> -     if (m != NULL)
> -             ifp->if_obytes += m->m_pkthdr.len + sp->pp_framebytes;
> -}
> -
>  /*
>   * PPP protocol implementation.
>   */
> @@ -1936,14 +1729,6 @@ sppp_lcp_up(struct sppp *sp)
>       STDDCL;
>       struct timeval tv;
>  
> -     if (sp->pp_flags & PP_CISCO) {
> -             int s = splsoftnet();
> -             sp->pp_if.if_link_state = LINK_STATE_UP;
> -             if_link_state_change(&sp->pp_if);
> -             splx(s);
> -             return;
> -     }
> -
>       sp->pp_alivecnt = 0;
>       sp->lcp.opts = (1 << LCP_OPT_MAGIC);
>       sp->lcp.magic = 0;
> @@ -1989,14 +1774,6 @@ sppp_lcp_down(struct sppp *sp)
>  {
>       STDDCL;
>  
> -     if (sp->pp_flags & PP_CISCO) {
> -             int s = splsoftnet();
> -             sp->pp_if.if_link_state = LINK_STATE_DOWN;
> -             if_link_state_change(&sp->pp_if);
> -             splx(s);
> -             return;
> -     }
> -
>       sppp_down_event(&lcp, sp);
>  
>       /*
> @@ -4407,14 +4184,12 @@ sppp_keepalive(void *dummy)
>                   ! (ifp->if_flags & IFF_RUNNING))
>                       continue;
>  
> -             /* No keepalive in PPP mode if LCP not opened yet. */
> -             if (! (sp->pp_flags & PP_CISCO) &&
> -                 sp->pp_phase < PHASE_AUTHENTICATE)
> +             /* No keepalive if LCP not opened yet. */
> +             if (sp->pp_phase < PHASE_AUTHENTICATE)
>                       continue;
>  
>               /* No echo reply, but maybe user data passed through? */
> -             if (!(sp->pp_flags & PP_CISCO) &&
> -                 (tv.tv_sec - sp->pp_last_receive) < NORECV_TIME) {
> +             if ((tv.tv_sec - sp->pp_last_receive) < NORECV_TIME) {
>                       sp->pp_alivecnt = 0;
>                       continue;
>               }
> @@ -4423,29 +4198,25 @@ sppp_keepalive(void *dummy)
>                       /* No keepalive packets got.  Stop the interface. */
>                       if_down (ifp);
>                       sppp_qflush (&sp->pp_cpq);
> -                     if (! (sp->pp_flags & PP_CISCO)) {
> -                             log(LOG_INFO, SPP_FMT "LCP keepalive timeout\n",
> -                                 SPP_ARGS(ifp));
> -                             sp->pp_alivecnt = 0;
> -
> -                             /* we are down, close all open protocols */
> -                             lcp.Close(sp);
> +                     log(LOG_INFO, SPP_FMT "LCP keepalive timeout\n",
> +                         SPP_ARGS(ifp));
> +                     sp->pp_alivecnt = 0;
>  
> -                             /* And now prepare LCP to reestablish the link, 
> if configured to do so. */
> -                             sppp_cp_change_state(&lcp, sp, STATE_STOPPED);
> +                     /* we are down, close all open protocols */
> +                     lcp.Close(sp);
>  
> -                             /* Close connection immediately, completition 
> of this
> -                              * will summon the magic needed to reestablish 
> it. */
> -                             if (sp->pp_tlf)
> -                                     sp->pp_tlf(sp);
> -                             continue;
> -                     }
> +                     /* And now prepare LCP to reestablish the link,
> +                      * if configured to do so. */
> +                     sppp_cp_change_state(&lcp, sp, STATE_STOPPED);
> +
> +                     /* Close connection immediately, completion of this
> +                      * will summon the magic needed to reestablish it. */
> +                     if (sp->pp_tlf)
> +                             sp->pp_tlf(sp);
> +                     continue;
>               }
>               if (sp->pp_alivecnt < MAXALIVECNT)
>                       ++sp->pp_alivecnt;
> -             if (sp->pp_flags & PP_CISCO)
> -                     sppp_cisco_send (sp, CISCO_KEEPALIVE_REQ, ++sp->pp_seq,
> -                             sp->pp_rseq);
>               else if (sp->pp_phase >= PHASE_AUTHENTICATE) {
>                       u_int32_t nmagic = htonl(sp->lcp.magic);
>                       sp->lcp.echoid = ++sp->pp_seq;
> 
> 
> 
> 
> 
> * ok, maybe not so sad.
> 

Reply via email to