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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? netipcp.c

?? UCOS-ii對于網絡的支持代碼
?? 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一区二区三区免费野_久草精品视频
精品久久人人做人人爰| 亚洲精品免费在线播放| 亚洲欧美韩国综合色| 国产午夜久久久久| 久久久久国产精品人| 欧美日韩在线一区二区| 91蜜桃免费观看视频| 亚洲色图欧洲色图婷婷| 亚洲超碰精品一区二区| 不卡视频一二三四| 久久综合九色综合欧美98| 亚洲国产毛片aaaaa无费看| 丁香啪啪综合成人亚洲小说| 欧美一级国产精品| 亚洲成人av电影在线| 91精品国产入口| 亚洲狠狠丁香婷婷综合久久久| 久久精品国产一区二区| 欧美天堂一区二区三区| 中文字幕视频一区| 国产成人精品影视| 91精品国产91热久久久做人人| 亚洲一区中文日韩| 99九九99九九九视频精品| 日本一区二区三区四区| 国产一区二区成人久久免费影院| 在线播放视频一区| 婷婷六月综合网| 欧美日本在线一区| 亚洲小少妇裸体bbw| 色婷婷av久久久久久久| 亚洲另类中文字| 色婷婷精品久久二区二区蜜臀av| 中文字幕一区在线观看视频| 成人sese在线| 亚洲丝袜美腿综合| 色综合咪咪久久| 一区二区高清免费观看影视大全| 色综合久久久久久久久久久| 亚洲欧美视频在线观看视频| 91社区在线播放| 亚洲黄网站在线观看| 欧美午夜视频网站| 丝袜美腿一区二区三区| 欧美一级二级在线观看| 精品一区二区影视| 久久久99精品免费观看不卡| 国产 日韩 欧美大片| 国产精品大尺度| 一本色道a无线码一区v| 亚洲图片有声小说| 精品国产一区二区三区四区四| 黄色日韩网站视频| 日韩美女啊v在线免费观看| 色欧美片视频在线观看在线视频| 一区二区三区四区在线| 在线91免费看| 国产精品一区三区| 一区二区三区在线视频观看| 欧美日韩一二三| 久久99最新地址| 最新国产精品久久精品| 欧美日韩国产欧美日美国产精品| 久久精品国产99国产| 久久久久久97三级| 在线日韩一区二区| 国模套图日韩精品一区二区| 中文字幕一区二区不卡| 欧美视频一区二区三区在线观看| 久久成人av少妇免费| 亚洲欧洲国产日韩| 日韩一区二区三区观看| 成人h版在线观看| 日韩高清电影一区| 亚洲欧美综合色| 日韩三级.com| 色狠狠av一区二区三区| 精品一区二区av| 亚洲国产一区视频| 欧美激情在线一区二区| 91精品久久久久久久91蜜桃| eeuss鲁一区二区三区| 美女一区二区久久| 亚洲一二三四久久| 国产精品视频一二三区| 欧美大片在线观看| 欧美三级资源在线| 99国产精品99久久久久久| 国内久久精品视频| 日精品一区二区| 亚洲综合男人的天堂| 国产精品久久久久aaaa| 精品免费国产二区三区| 欧美日韩夫妻久久| 日本大香伊一区二区三区| 不卡视频一二三| 国产高清不卡二三区| 理论电影国产精品| 午夜精品久久久久久久| 一区二区三区在线观看动漫| 国产一区二区视频在线播放| 污片在线观看一区二区| 亚洲精品视频免费观看| 国产欧美视频在线观看| 精品99一区二区| 欧美一区在线视频| 欧美一二三区精品| 欧美欧美欧美欧美| 欧美精品一二三| 在线观看av一区| 日本久久精品电影| 色婷婷久久久久swag精品| 91啪亚洲精品| 色综合中文字幕国产 | 久久99国内精品| 婷婷六月综合网| 日韩电影免费在线看| 五月天激情综合| 水野朝阳av一区二区三区| 亚洲国产综合色| 日本欧美久久久久免费播放网| 亚洲国产成人91porn| 亚洲亚洲人成综合网络| 婷婷综合久久一区二区三区| 五月婷婷色综合| 日本欧美一区二区三区乱码| 免费在线看一区| 国内精品自线一区二区三区视频| 精品一区二区三区久久| 国产精品资源在线| 成人亚洲一区二区一| 91美女在线视频| 欧美男生操女生| 精品欧美久久久| 国产三级欧美三级| 亚洲精品中文在线影院| 午夜久久福利影院| 国产精品自在在线| www.成人在线| 欧美三级一区二区| 精品区一区二区| 日韩伦理免费电影| 日韩制服丝袜先锋影音| 国产一区二区三区| yourporn久久国产精品| 欧美综合在线视频| 欧美成va人片在线观看| 国产精品毛片久久久久久 | 精品粉嫩aⅴ一区二区三区四区| 精品国产一区二区三区忘忧草 | 中文字幕不卡在线| 亚洲一区二区偷拍精品| 激情都市一区二区| 欧美在线观看一区| 国产亚洲一区二区三区在线观看| 亚洲欧洲www| 韩国精品主播一区二区在线观看 | 亚洲成人www| 国产酒店精品激情| 欧美性大战久久久久久久| 精品动漫一区二区三区在线观看| 亚洲日本丝袜连裤袜办公室| 日韩**一区毛片| 99久久久国产精品| 欧美大尺度电影在线| 亚洲人成网站在线| 激情久久五月天| 精品视频资源站| 日本一区免费视频| 奇米色一区二区三区四区| 不卡欧美aaaaa| 26uuu久久综合| 日韩福利电影在线| 91日韩在线专区| 国产三级一区二区三区| 日本女人一区二区三区| 91麻豆蜜桃一区二区三区| 久久久久久久综合日本| 日韩高清一区二区| 欧美综合在线视频| 亚洲精选视频免费看| 白白色 亚洲乱淫| 日本一区二区三级电影在线观看| 欧美a级一区二区| 欧美日韩成人综合天天影院| 最近中文字幕一区二区三区| 国模大尺度一区二区三区| 欧美一区二区三区免费大片| 亚洲一区二区在线免费观看视频 | 美女在线一区二区| 在线成人免费视频| 亚洲成a人v欧美综合天堂下载| 99精品视频一区| 中文字幕在线观看一区| 国产成a人无v码亚洲福利| 久久天堂av综合合色蜜桃网| 免费的成人av| 精品区一区二区| 国产一级精品在线| 国产亚洲一区二区三区|