diff options
Diffstat (limited to 'usr.sbin/ppp/cbcp.c')
-rw-r--r-- | usr.sbin/ppp/cbcp.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/usr.sbin/ppp/cbcp.c b/usr.sbin/ppp/cbcp.c index a901ef946a8a..bea92f394420 100644 --- a/usr.sbin/ppp/cbcp.c +++ b/usr.sbin/ppp/cbcp.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: cbcp.c,v 1.10 1999/02/26 21:28:07 brian Exp $ + * $Id: cbcp.c,v 1.11 1999/03/29 08:21:26 brian Exp $ */ #include <sys/param.h> @@ -33,6 +33,7 @@ #include <string.h> #include <termios.h> +#include "layer.h" #include "defs.h" #include "log.h" #include "timer.h" @@ -47,7 +48,7 @@ #include "link.h" #include "async.h" #include "physical.h" -#include "lcpproto.h" +#include "proto.h" #include "cbcp.h" #include "mp.h" #include "chat.h" @@ -201,7 +202,8 @@ cbcp_Output(struct cbcp *cbcp, u_char code, struct cbcp_data *data) head->length = htons(sizeof *head + data->length); memcpy(MBUF_CTOP(bp) + sizeof *head, data, data->length); log_DumpBp(LogDEBUG, "cbcp_Output", bp); - hdlc_Output(&cbcp->p->link, PRI_LINK, PROTO_CBCP, bp); + link_PushPacket(&cbcp->p->link, bp, cbcp->p->dl->bundle, + PRI_LINK, PROTO_CBCP); } static const char * @@ -600,26 +602,33 @@ cbcp_SendAck(struct cbcp *cbcp) cbcp_NewPhase(cbcp, CBCP_ACKSENT); /* Wait for an ACK */ } -void -cbcp_Input(struct physical *p, struct mbuf *bp) +extern struct mbuf * +cbcp_Input(struct bundle *bundle, struct link *l, struct mbuf *bp) { + struct physical *p = link2physical(l); struct cbcp_header *head; struct cbcp_data *data; struct cbcp *cbcp = &p->dl->cbcp; int len; + if (p == NULL) { + log_Printf(LogERROR, "cbcp_Input: Not a physical link - dropped\n"); + mbuf_Free(bp); + return NULL; + } + bp = mbuf_Contiguous(bp); len = mbuf_Length(bp); if (len < sizeof(struct cbcp_header)) { mbuf_Free(bp); - return; + return NULL; } head = (struct cbcp_header *)MBUF_CTOP(bp); if (ntohs(head->length) != len) { log_Printf(LogWARN, "Corrupt CBCP packet (code %d, length %d not %d)" " - ignored\n", head->code, ntohs(head->length), len); mbuf_Free(bp); - return; + return NULL; } /* XXX check the id */ @@ -706,6 +715,7 @@ cbcp_Input(struct physical *p, struct mbuf *bp) } mbuf_Free(bp); + return NULL; } void |