skb_reserve(skb, - skb_headroom(skb)); } 
process_input_packet(struct asyncppp *ap){	struct sk_buff *skb;	unsigned char *p;	unsigned int len, fcs, proto;	skb = ap->rpkt;	if (ap->state & (SC_TOSS | SC_ESCAPE))		goto err;	if (skb == NULL)		return;		/* 0-length packet */	/* check the FCS */	p = skb->data;	len = skb->len;	if (len < 3)		goto err;	/* too short */	fcs = PPP_INITFCS;	for (; len > 0; --len)		fcs = PPP_FCS(fcs, *p++);	if (fcs != PPP_GOODFCS)		goto err;	/* bad FCS */	skb_trim(skb, skb->len - 2);	/* check for address/control and protocol compression */	p = skb->data;	if (p[0] == PPP_ALLSTATIONS && p[1] == PPP_UI) {		/* chop off address/control */		if (skb->len < 3)			goto err;		p = skb_pull(skb, 2);	}	proto = p[0];	if (proto & 1) {		/* protocol is compressed */		skb_push(skb, 1)[0] = 0;	} else {		if (skb->len < 2)			goto err;		proto = (proto << 8) + p[1];		if (proto == PPP_LCP)			async_lcp_peek(ap, p, skb->len, 1);	}	/* queue the frame to be processed */	skb->cb[0] = ap->state;	skb_queue_tail(&ap->rqueue, skb);	ap->rpkt = NULL;	ap->state = 0;	return; err:	/* frame had an error, remember that, reset SC_TOSS & SC_ESCAPE */	ap->state = SC_PREV_ERROR;	if (skb)		skb_trim(skb, 0);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/6722e78c90054101e6797d5944cdc81af9897a0a/ppp_async.c/clean/drivers/net/ppp_async.c