diff options
author | Stuart Henderson <sthen@cvs.openbsd.org> | 2015-09-30 09:45:21 +0000 |
---|---|---|
committer | Stuart Henderson <sthen@cvs.openbsd.org> | 2015-09-30 09:45:21 +0000 |
commit | 6e00f8ac71fb0efd0436b8852429d7a94ce6075b (patch) | |
tree | f063a46761a7bf977b416f129e58e34545f68b3e /sys | |
parent | 962e91823107ca66a8101a571b049a2b8283c507 (diff) |
remove cisco hdlc code from sppp(4), it's no longer used - pppoe(4) only uses
ppp framing, and the drivers for sync serial cards have been removed so the
sppp code is now only used to support pppoe(4). ok mpi@, kill it chris@
Diffstat (limited to 'sys')
-rw-r--r-- | sys/net/if_sppp.h | 8 | ||||
-rw-r--r-- | sys/net/if_spppsubr.c | 327 |
2 files changed, 53 insertions, 282 deletions
diff --git a/sys/net/if_sppp.h b/sys/net/if_sppp.h index 8dd9594f552..368f89fcf42 100644 --- a/sys/net/if_sppp.h +++ b/sys/net/if_sppp.h @@ -1,8 +1,8 @@ -/* $OpenBSD: if_sppp.h,v 1.20 2013/11/20 08:21:33 stsp Exp $ */ +/* $OpenBSD: if_sppp.h,v 1.21 2015/09/30 09:45:20 sthen Exp $ */ /* $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, <vak@cronyx.ru> @@ -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 */ diff --git a/sys/net/if_spppsubr.c b/sys/net/if_spppsubr.c index 9d937b08e0c..e8fc9ec5c75 100644 --- a/sys/net/if_spppsubr.c +++ b/sys/net/if_spppsubr.c @@ -1,7 +1,6 @@ -/* $OpenBSD: if_spppsubr.c,v 1.137 2015/08/24 15:58:35 mpi Exp $ */ +/* $OpenBSD: if_spppsubr.c,v 1.138 2015/09/30 09:45:20 sthen 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, <vak@cronyx.ru> @@ -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 mbuf *m) 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 mbuf *m) #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 mbuf *m, * (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, void *data) } 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, void *data) 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; + 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); + /* we are down, close all open protocols */ + lcp.Close(sp); - /* And now prepare LCP to reestablish the link, if configured to do so. */ - sppp_cp_change_state(&lcp, sp, STATE_STOPPED); + /* And now prepare LCP to reestablish the link, + * if configured to do so. */ + sppp_cp_change_state(&lcp, sp, STATE_STOPPED); - /* Close connection immediately, completition of this - * will summon the magic needed to reestablish it. */ - if (sp->pp_tlf) - sp->pp_tlf(sp); - continue; - } + /* 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; |