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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? netipcp.c

?? 一個(gè)tcp/ip協(xié)議棧,帶有PPP、IP、TCP、UDP等協(xié)議
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*****************************************************************************
* 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 "netconf.h"
#include <string.h>
#include "net.h"
#include "netbuf.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 <stdio.h>
#include "netdebug.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 || \
				citype != opt)  \
			goto bad; \
		GETSHORT(cishort, p); \

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美裸体bbwbbwbbw| 亚洲美女屁股眼交3| 日韩一二在线观看| 欧美日本精品一区二区三区| 91久久精品一区二区二区| 99re亚洲国产精品| 成人在线综合网站| 成人福利在线看| 本田岬高潮一区二区三区| 成人激情免费网站| 99精品偷自拍| 在线观看免费亚洲| 欧美在线免费观看亚洲| 欧美狂野另类xxxxoooo| 日韩一级黄色片| 久久综合久久99| 国产午夜精品一区二区三区视频 | 99v久久综合狠狠综合久久| 不卡的电视剧免费网站有什么| 成人午夜免费av| 97aⅴ精品视频一二三区| 在线观看亚洲一区| 欧美一区二区三区日韩视频| 精品久久一二三区| 日本一区二区三区在线观看| 中文字幕亚洲一区二区va在线| 亚洲欧美一区二区三区久本道91 | 久久精品国产99国产精品| 久久国产麻豆精品| 成人小视频免费观看| 欧美综合天天夜夜久久| 日韩亚洲欧美高清| 欧美国产日韩一二三区| 亚洲在线一区二区三区| 日韩精品电影在线观看| 国产麻豆欧美日韩一区| 91在线视频18| 91精品久久久久久久99蜜桃| 国产视频在线观看一区二区三区 | 亚洲免费视频成人| 五月天激情综合网| 国产激情一区二区三区桃花岛亚洲| 99久久精品免费看| 91精品啪在线观看国产60岁| 国产精品私人自拍| 丝袜国产日韩另类美女| 国产91精品入口| 欧美精品亚洲一区二区在线播放| 久久综合狠狠综合久久激情| 亚洲美女少妇撒尿| 国产在线国偷精品产拍免费yy| 91色乱码一区二区三区| 日韩视频在线永久播放| 日韩伦理av电影| 久久99久久久久| 色噜噜夜夜夜综合网| 日韩女优制服丝袜电影| 一区二区三区四区亚洲| 国产精品一区二区你懂的| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲久草在线视频| 国产原创一区二区| 欧美高清www午色夜在线视频| 久久久久久久免费视频了| 亚洲1区2区3区4区| 99精品视频在线观看| 久久影院视频免费| 午夜精品久久久久影视| 97se亚洲国产综合自在线观| 精品国产乱码久久久久久闺蜜 | 国产美女视频91| 欧美男同性恋视频网站| 亚洲日本在线看| 国产不卡免费视频| 日韩欧美国产一区二区三区 | 色综合久久综合网| 国产午夜精品一区二区| 蜜桃av噜噜一区| 欧美日韩的一区二区| 成人免费在线观看入口| 国产成人在线色| 精品久久久久99| 日韩电影在线看| 欧美色图第一页| 亚洲区小说区图片区qvod| 国产精品亚洲专一区二区三区| 91精品麻豆日日躁夜夜躁| 亚洲国产欧美日韩另类综合 | 国产精品女人毛片| 国产成人一区在线| 久久综合狠狠综合久久综合88| 日产国产欧美视频一区精品| 欧美吞精做爰啪啪高潮| 综合久久一区二区三区| eeuss国产一区二区三区| 国产欧美日韩亚州综合| 国产精品一二一区| 久久久亚洲精品石原莉奈| 免费的国产精品| 日韩一区二区电影在线| 日本午夜一区二区| 日韩一区二区三区四区五区六区| 天天综合天天综合色| 欧美精品在线观看播放| 男女男精品网站| 日韩女优视频免费观看| 国产永久精品大片wwwapp | 国产在线乱码一区二区三区| 日韩视频一区二区在线观看| 日韩电影在线观看网站| 欧美变态口味重另类| 国产精品一区专区| 日本一区二区高清| 91丨porny丨在线| 亚洲精品乱码久久久久久| 欧美三片在线视频观看| 天天操天天色综合| 欧美一级高清片| 狠狠色丁香婷婷综合| 国产欧美中文在线| 99久久er热在这里只有精品66| 亚洲精品久久7777| 欧美高清一级片在线| 国内精品伊人久久久久av影院| 国产三级精品三级| 色激情天天射综合网| 午夜精品福利一区二区蜜股av | 偷窥少妇高潮呻吟av久久免费| 91精品国产一区二区三区香蕉| 久热成人在线视频| 亚洲国产精品精华液2区45| 91片在线免费观看| 日韩国产高清在线| 久久久99久久| 日本韩国视频一区二区| 午夜av区久久| 久久中文字幕电影| 色综合久久久久久久久久久| 午夜精品视频在线观看| 久久精品视频网| 色88888久久久久久影院野外| 天天操天天色综合| 中文字幕av不卡| 欧美日本一区二区在线观看| 紧缚奴在线一区二区三区| 国产精品激情偷乱一区二区∴| 欧美狂野另类xxxxoooo| 福利视频网站一区二区三区| 亚洲一级二级三级在线免费观看| 欧美mv日韩mv国产| 色婷婷亚洲综合| 精品午夜一区二区三区在线观看| 中文字幕中文字幕中文字幕亚洲无线 | 色94色欧美sute亚洲线路一ni| 久久精品国内一区二区三区| 一色屋精品亚洲香蕉网站| 91精品欧美福利在线观看| 成人97人人超碰人人99| 蜜桃视频在线观看一区| 亚洲视频在线观看一区| 欧美成人精品二区三区99精品| 91视频一区二区三区| 久久精品国产精品亚洲精品| 亚洲欧美另类小说视频| 久久欧美中文字幕| 欧美日韩国产综合一区二区三区| 岛国一区二区三区| 免费的国产精品| 亚洲国产一区二区三区 | 久久精品国产99久久6| 亚洲小说欧美激情另类| 国产精品欧美极品| 亚洲精品一线二线三线| 欧美日韩激情一区二区三区| 成人高清视频免费观看| 国产原创一区二区| 久久精品国产澳门| 日韩电影在线观看电影| 一区二区三区欧美| 一区在线观看免费| 久久久精品欧美丰满| 日韩女优毛片在线| 欧美丰满嫩嫩电影| 欧美亚一区二区| 91丝袜美腿高跟国产极品老师| 国产·精品毛片| 久久9热精品视频| 蜜桃av噜噜一区| 免费人成精品欧美精品| 亚洲1区2区3区视频| 亚洲韩国一区二区三区| 亚洲三级电影网站| 亚洲欧美在线观看| 国产精品麻豆99久久久久久| 2021中文字幕一区亚洲| 日韩一区二区中文字幕| 91精品国产色综合久久不卡电影| 欧美日韩精品免费| 欧美挠脚心视频网站| 制服丝袜亚洲播放|