亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? netipcp.c

?? UCOS-ii對于網(wǎng)絡(luò)的支持代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*****************************************************************************
* netipcp.c - Network PPP IP Control Protocol program file.
*
* portions Copyright (c) 1997 by Global Election Systems Inc.
*
* The authors hereby grant permission to use, copy, modify, distribute,
* and license this software and its documentation for any purpose, provided
* that existing copyright notices are retained in all copies and that this
* notice and the following disclaimer are included verbatim in any 
* distributions. No written agreement, license, or royalty fee is required
* for any of the authorized uses.
*
* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS *AS IS* AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
* IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
* REVISION HISTORY
*
* 97-12-08 Guy Lancaster <lancasterg@acm.org>, Global Election Systems Inc.
*	Original.
*****************************************************************************/
/*
 * ipcp.c - PPP IP Control Protocol.
 *
 * Copyright (c) 1989 Carnegie Mellon University.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that the above copyright notice and this paragraph are
 * duplicated in all such forms and that any documentation,
 * advertising materials, and other materials related to such
 * distribution and use acknowledge that the software was developed
 * by Carnegie Mellon University.  The name of the
 * University may not be used to endorse or promote products derived
 * from this software without specific prior written permission.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 */

#include "typedefs.h"
#include "avconfig.h"
#include <string.h>
#include "stdio.h"
#include "time.h"
#include "netbuf.h"
#include "avos.h"

#include "net.h"
#include "netip.h"
#include "netppp.h"
#include "netauth.h"
#include "netfsm.h"
#include "netiphdr.h"		/* Required for netvj.h. */
#include "netvj.h"
#include "netipcp.h"

#include "debug.h"


/*************************/
/*** LOCAL DEFINITIONS ***/
/*************************/
/* #define OLD_CI_ADDRS 1 */	/* Support deprecated address negotiation. */

/*
 * Lengths of configuration options.
 */
#define CILEN_VOID	2
#define CILEN_COMPRESS	4	/* min length for compression protocol opt. */
#define CILEN_VJ	6	/* length for RFC1332 Van-Jacobson opt. */
#define CILEN_ADDR	6	/* new-style single address option */
#define CILEN_ADDRS	10	/* old-style dual address option */



/***********************************/
/*** LOCAL FUNCTION DECLARATIONS ***/
/***********************************/
/*
 * Callbacks for fsm code.  (CI = Configuration Information)
 */
static void ipcp_resetci __P((fsm *));	/* Reset our CI */
static int  ipcp_cilen __P((fsm *));	        /* Return length of our CI */
static void ipcp_addci __P((fsm *, u_char *, int *)); /* Add our CI */
static int  ipcp_ackci __P((fsm *, u_char *, int));	/* Peer ack'd our CI */
static int  ipcp_nakci __P((fsm *, u_char *, int));	/* Peer nak'd our CI */
static int  ipcp_rejci __P((fsm *, u_char *, int));	/* Peer rej'd our CI */
static int  ipcp_reqci __P((fsm *, u_char *, int *, int)); /* Rcv CI */
static void ipcp_up __P((fsm *));		/* We're UP */
static void ipcp_down __P((fsm *));		/* We're DOWN */
#ifdef XXX
static void ipcp_script __P((fsm *, char *)); /* Run an up/down script */
#endif
static void ipcp_finished __P((fsm *));	/* Don't need lower layer */

/*
 * Protocol entry points from main code.
 */
static void ipcp_init __P((int));
static void ipcp_open __P((int));
static void ipcp_close __P((int, char *));
static void ipcp_lowerup __P((int));
static void ipcp_lowerdown __P((int));
static void ipcp_input __P((int, u_char *, int));
static void ipcp_protrej __P((int));
static int  ipcp_printpkt __P((u_char *, int,
			       void (*) __P((void *, char *, ...)), void *));
static void ip_check_options __P((void));
static int  ip_active_pkt __P((u_char *, int));

static void ipcp_clear_addrs __P((int));

#define CODENAME(x)	((x) == CONFACK ? "ACK" : \
			 (x) == CONFNAK ? "NAK" : "REJ")



/******************************/
/*** PUBLIC DATA STRUCTURES ***/
/******************************/
/* global vars */
ipcp_options ipcp_wantoptions[NUM_PPP];	/* Options that we want to request */
ipcp_options ipcp_gotoptions[NUM_PPP];	/* Options that peer ack'd */
ipcp_options ipcp_allowoptions[NUM_PPP];	/* Options we allow peer to request */
ipcp_options ipcp_hisoptions[NUM_PPP];	/* Options that we ack'd */

fsm ipcp_fsm[NUM_PPP];		/* IPCP fsm structure */

struct protent ipcp_protent = {
    PPP_IPCP,
    ipcp_init,
    ipcp_input,
    ipcp_protrej,
    ipcp_lowerup,
    ipcp_lowerdown,
    ipcp_open,
    ipcp_close,
    ipcp_printpkt,
    NULL,
    1,
    "IPCP",
    ip_check_options,
    NULL,
    ip_active_pkt
};



/*****************************/
/*** LOCAL DATA STRUCTURES ***/
/*****************************/
/* local vars */
static int cis_received[NUM_PPP];		/* # Conf-Reqs received */
static int default_route_set[NUM_PPP];	/* Have set up a default route */

static fsm_callbacks ipcp_callbacks = { /* IPCP callback routines */
    ipcp_resetci,		/* Reset our Configuration Information */
    ipcp_cilen,			/* Length of our Configuration Information */
    ipcp_addci,			/* Add our Configuration Information */
    ipcp_ackci,			/* ACK our Configuration Information */
    ipcp_nakci,			/* NAK our Configuration Information */
    ipcp_rejci,			/* Reject our Configuration Information */
    ipcp_reqci,			/* Request peer's Configuration Information */
    ipcp_up,			/* Called when fsm reaches OPENED state */
    ipcp_down,			/* Called when fsm leaves OPENED state */
    NULL,				/* Called when we want the lower layer up */
    ipcp_finished,		/* Called when we want the lower layer down */
    NULL,				/* Called when Protocol-Reject received */
    NULL,				/* Retransmission is necessary */
    NULL,				/* Called to handle protocol-specific codes */
    "IPCP"				/* String name of protocol */
};



/**********************************/
/*** LOCAL FUNCTION DEFINITIONS ***/
/**********************************/

/*
 * ipcp_init - Initialize IPCP.
 */
static void ipcp_init(int unit)
{
	fsm *f = &ipcp_fsm[unit];
	ipcp_options *wo = &ipcp_wantoptions[unit];
	ipcp_options *ao = &ipcp_allowoptions[unit];
	
	f->unit = unit;
	f->protocol = PPP_IPCP;
	f->callbacks = &ipcp_callbacks;
	fsm_init(&ipcp_fsm[unit]);
	
	memset(wo, 0, sizeof(*wo));
	memset(ao, 0, sizeof(*ao));
	
	wo->neg_addr = 1;
	wo->ouraddr = 0;
#if VJ_SUPPORT > 0
	wo->neg_vj = 1;
#else
	wo->neg_vj = 0;
#endif
	wo->vj_protocol = IPCP_VJ_COMP;
	wo->maxslotindex = MAX_SLOTS - 1;
	wo->cflag = 0;
	
	wo->default_route = 1;
	
	ao->neg_addr = 1;
#if VJ_SUPPORT > 0
	ao->neg_vj = 1;
#else
	ao->neg_vj = 0;
#endif
	ao->maxslotindex = MAX_SLOTS - 1;
	ao->cflag = 1;
	
	ao->default_route = 1;
}


/*
 * ipcp_open - IPCP is allowed to come up.
 */
static void ipcp_open(int unit)
{
	fsm_open(&ipcp_fsm[unit]);
}


/*
 * ipcp_close - Take IPCP down.
 */
static void ipcp_close(int unit, char *reason)
{
	fsm_close(&ipcp_fsm[unit], reason);
}


/*
 * ipcp_lowerup - The lower layer is up.
 */
static void ipcp_lowerup(int unit)
{
	fsm_lowerup(&ipcp_fsm[unit]);
}


/*
 * ipcp_lowerdown - The lower layer is down.
 */
static void ipcp_lowerdown(int unit)
{
	fsm_lowerdown(&ipcp_fsm[unit]);
}


/*
 * ipcp_input - Input IPCP packet.
 */
static void ipcp_input(int unit, u_char *p, int len)
{
	fsm_input(&ipcp_fsm[unit], p, len);
}


/*
 * ipcp_protrej - A Protocol-Reject was received for IPCP.
 *
 * Pretend the lower layer went down, so we shut up.
 */
static void ipcp_protrej(int unit)
{
	fsm_lowerdown(&ipcp_fsm[unit]);
}


/*
 * ipcp_resetci - Reset our CI.
 */
static void ipcp_resetci(fsm *f)
{
	ipcp_options *wo = &ipcp_wantoptions[f->unit];
	
	wo->req_addr = wo->neg_addr && ipcp_allowoptions[f->unit].neg_addr;
	if (wo->ouraddr == 0)
		wo->accept_local = 1;
	if (wo->hisaddr == 0)
		wo->accept_remote = 1;
	ipcp_gotoptions[f->unit] = *wo;
	cis_received[f->unit] = 0;
}


/*
 * ipcp_cilen - Return length of our CI.
 */
static int ipcp_cilen(fsm *f)
{
	ipcp_options *go = &ipcp_gotoptions[f->unit];
	ipcp_options *wo = &ipcp_wantoptions[f->unit];
	ipcp_options *ho = &ipcp_hisoptions[f->unit];
	
#define LENCIVJ(neg, old)	(neg ? (old? CILEN_COMPRESS : CILEN_VJ) : 0)
#define LENCIADDR(neg, old)	(neg ? (old? CILEN_ADDRS : CILEN_ADDR) : 0)
	
	/*
	 * First see if we want to change our options to the old
	 * forms because we have received old forms from the peer.
	 */
	if (wo->neg_addr && !go->neg_addr && !go->old_addrs) {
		/* use the old style of address negotiation */
		go->neg_addr = 1;
		go->old_addrs = 1;
	}
	if (wo->neg_vj && !go->neg_vj && !go->old_vj) {
		/* try an older style of VJ negotiation */
		if (cis_received[f->unit] == 0) {
			/* keep trying the new style until we see some CI from the peer */
			go->neg_vj = 1;
		} else {
			/* use the old style only if the peer did */
			if (ho->neg_vj && ho->old_vj) {
				go->neg_vj = 1;
				go->old_vj = 1;
				go->vj_protocol = ho->vj_protocol;
			}
		}
	}
	
	return (LENCIADDR(go->neg_addr, go->old_addrs)
			+ LENCIVJ(go->neg_vj, go->old_vj));
}


/*
 * ipcp_addci - Add our desired CIs to a packet.
 */
static void ipcp_addci(fsm *f, u_char *ucp, int *lenp)
{
	ipcp_options *go = &ipcp_gotoptions[f->unit];
	int len = *lenp;
	
#define ADDCIVJ(opt, neg, val, old, maxslotindex, cflag) \
	if (neg) { \
		int vjlen = old? CILEN_COMPRESS : CILEN_VJ; \
		if (len >= vjlen) { \
			PUTCHAR(opt, ucp); \
			PUTCHAR(vjlen, ucp); \
			PUTSHORT(val, ucp); \
			if (!old) { \
				PUTCHAR(maxslotindex, ucp); \
				PUTCHAR(cflag, ucp); \
			} \
			len -= vjlen; \
		} else \
			neg = 0; \
	}
	
#define ADDCIADDR(opt, neg, old, val1, val2) \
	if (neg) { \
		int addrlen = (old? CILEN_ADDRS: CILEN_ADDR); \
		if (len >= addrlen) { \
			u_int32_t l; \
			PUTCHAR(opt, ucp); \
			PUTCHAR(addrlen, ucp); \
			l = ntohl(val1); \
			PUTLONG(l, ucp); \
			if (old) { \
				l = ntohl(val2); \
				PUTLONG(l, ucp); \
			} \
			len -= addrlen; \
		} else \
			neg = 0; \
	}
	
	ADDCIADDR((go->old_addrs? CI_ADDRS: CI_ADDR), go->neg_addr,
			  go->old_addrs, go->ouraddr, go->hisaddr);
	
	ADDCIVJ(CI_COMPRESSTYPE, go->neg_vj, go->vj_protocol, go->old_vj,
			go->maxslotindex, go->cflag);
	
	*lenp -= len;
}


/*
 * ipcp_ackci - Ack our CIs.
 *
 * Returns:
 *	0 - Ack was bad.
 *	1 - Ack was good.
 */
static int ipcp_ackci(fsm *f, u_char *p, int len)
{
	ipcp_options *go = &ipcp_gotoptions[f->unit];
	u_short cilen, citype, cishort;
	u_int32_t cilong;
	u_char cimaxslotindex, cicflag;
	
	/*
	 * CIs must be in exactly the same order that we sent...
	 * Check packet length and CI length at each step.
	 * If we find any deviations, then this packet is bad.
	 */
	
#define ACKCIVJ(opt, neg, val, old, maxslotindex, cflag) \
	if (neg) { \
		int vjlen = old? CILEN_COMPRESS : CILEN_VJ; \
		if ((len -= vjlen) < 0) \
			goto bad; \
		GETCHAR(citype, p); \
		GETCHAR(cilen, p); \
		if (cilen != vjlen || \

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产髙清在线看国产毛片| 久久午夜电影网| 久久老女人爱爱| 亚洲一区二区视频在线观看| 国产传媒一区在线| 欧美福利视频一区| 亚洲欧美日本在线| 国产1区2区3区精品美女| 91精品啪在线观看国产60岁| 日韩久久一区二区| 国产91综合一区在线观看| 欧美酷刑日本凌虐凌虐| 亚洲欧美激情在线| 丰满少妇久久久久久久| 精品免费一区二区三区| 免费在线一区观看| 欧美日韩精品专区| 一卡二卡三卡日韩欧美| 91在线视频在线| 亚洲国产高清在线| 国产69精品久久久久毛片| 久久只精品国产| 久久国产三级精品| 日韩欧美成人午夜| 日本成人在线电影网| 欧美日韩亚洲不卡| 亚洲午夜久久久久久久久久久 | 亚洲一区二区三区爽爽爽爽爽| 国产精品一区二区久久不卡| 欧美xingq一区二区| 久久er精品视频| 日韩精品一区二区在线观看| 九九**精品视频免费播放| 欧美一级生活片| 美女国产一区二区| 精品黑人一区二区三区久久| 久久机这里只有精品| 2014亚洲片线观看视频免费| 久久精品久久综合| 久久久国产精品不卡| 国产福利电影一区二区三区| 欧美韩日一区二区三区四区| 成人av综合一区| 亚洲狠狠丁香婷婷综合久久久| 91久久精品一区二区三区| 夜夜嗨av一区二区三区| 欧美电影在线免费观看| 麻豆精品久久精品色综合| 一区二区三区日本| 欧美色图第一页| 久久国产精品99精品国产| 精品av久久707| www.亚洲在线| 亚洲制服丝袜av| 欧美一级一区二区| 国产高清亚洲一区| 亚洲精品欧美专区| 91精品国产色综合久久ai换脸| 狠狠色伊人亚洲综合成人| 国产情人综合久久777777| 一本到高清视频免费精品| 午夜精品久久久久久久蜜桃app| 欧美一区二区黄| 成人激情免费网站| 亚洲成av人片在线| 欧美极品另类videosde| 欧美无乱码久久久免费午夜一区| 日本va欧美va精品发布| 国产午夜精品美女毛片视频| 欧洲精品一区二区| 国产一区二区三区精品视频| 悠悠色在线精品| 久久久久久日产精品| 欧美专区日韩专区| 国产成人在线看| 天天综合日日夜夜精品| 国产精品沙发午睡系列990531| 欧美日韩在线播放| 成人亚洲一区二区一| 视频一区欧美精品| 亚洲欧美视频一区| 国产日韩精品一区二区三区| 3atv在线一区二区三区| av不卡在线播放| 国产又黄又大久久| 日韩电影在线观看网站| 亚洲乱码国产乱码精品精98午夜 | 日本高清视频一区二区| 国产一区三区三区| 日韩经典中文字幕一区| 日韩美女视频一区二区| 久久久99久久精品欧美| 欧美日韩大陆在线| 欧美做爰猛烈大尺度电影无法无天| 国产乱人伦偷精品视频不卡| 日韩成人一级片| 一区二区三区视频在线观看| 国产精品超碰97尤物18| 久久久久国产免费免费| 精品国产一区二区三区久久影院 | 日韩免费高清电影| 欧美日韩国产另类一区| 91麻豆精品视频| 国产成a人亚洲精品| 激情欧美日韩一区二区| 久久精品国产免费| 免费成人av在线| 日韩va亚洲va欧美va久久| 亚洲国产一区二区三区青草影视| 亚洲特级片在线| 亚洲欧洲精品一区二区精品久久久 | 国产亚洲精品福利| 久久综合久久综合亚洲| 日韩美女一区二区三区四区| 日韩欧美综合一区| 日韩免费看网站| 欧美成人伊人久久综合网| 日韩免费在线观看| 亚洲精品在线电影| 久久久无码精品亚洲日韩按摩| 精品电影一区二区| 久久久久久夜精品精品免费| 国产日产欧美一区| 国产精品久久久久四虎| 亚洲欧美激情插| 亚洲国产精品一区二区久久恐怖片 | 欧美写真视频网站| 欧美色精品在线视频| 欧美电影一区二区| 欧美成人一区二区| 久久精品一区二区| 国产精品久久久久久久久图文区 | 91在线观看地址| 欧洲在线/亚洲| 日韩欧美久久久| 亚洲国产精品精华液ab| 亚洲精品伦理在线| 日韩福利电影在线| 国产一本一道久久香蕉| 99久久免费精品| 欧美精品日韩一区| 久久综合99re88久久爱| 亚洲色图在线播放| 日本三级韩国三级欧美三级| 国产精品一区二区视频| 99精品一区二区| 91麻豆精品国产自产在线观看一区| www激情久久| 一区二区三区在线观看视频| 久久国产三级精品| 色婷婷综合久久| 欧美videos中文字幕| 亚洲视频中文字幕| 麻豆成人久久精品二区三区红 | 国产日产精品1区| 亚洲影视在线观看| 国产美女精品人人做人人爽| 91日韩一区二区三区| 337p日本欧洲亚洲大胆精品| 中文字幕一区在线观看视频| 免费在线观看视频一区| 91小视频免费观看| 欧美mv日韩mv亚洲| 亚洲一区自拍偷拍| 成人激情黄色小说| 日韩欧美精品在线视频| 亚洲黄色免费网站| 丁香天五香天堂综合| 欧美一级精品在线| 艳妇臀荡乳欲伦亚洲一区| 国产曰批免费观看久久久| 国产日本亚洲高清| 天天综合网 天天综合色| 成人av电影在线网| 久久先锋影音av鲁色资源网| 亚洲国产va精品久久久不卡综合| 高清不卡在线观看| 欧美xfplay| 蜜桃久久久久久| 欧美日韩一二区| 一区二区三区蜜桃| 93久久精品日日躁夜夜躁欧美| 久久日韩粉嫩一区二区三区| 日韩av一二三| 欧美人xxxx| 午夜成人免费电影| 欧美自拍丝袜亚洲| 亚洲黄色尤物视频| 91美女精品福利| 18成人在线视频| 91香蕉视频mp4| 中文字幕一区二区三区视频 | 日韩二区三区在线观看| 欧美羞羞免费网站| 一区二区三区欧美| 色噜噜偷拍精品综合在线| 中文字幕亚洲区| 91免费在线播放| 一区二区三区**美女毛片| 色噜噜狠狠色综合中国|