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

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

?? cfparse.y

?? IPv6環(huán)境下的DHCP實現(xiàn)
?? Y
字號:
/*	$KAME: cfparse.y,v 1.15 2002/06/14 15:32:55 jinmei Exp $	*//* * Copyright (C) 2002 WIDE Project. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the project nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND 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 PROJECT OR 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. */%{#include <sys/types.h>#include <sys/socket.h>#include <sys/queue.h>#include <netinet/in.h>#include "dhcp6.h"#include "config.h"#include "common.h"extern int lineno;extern int cfdebug;#define MAKE_NAMELIST(l, n, p) do { \	(l) = (struct cf_namelist *)malloc(sizeof(*(l))); \	if ((l) == NULL) { \		yywarn("can't allocate memory"); \		if (p) cleanup_cflist(p); \		return(-1); \	} \	memset((l), 0, sizeof(*(l))); \	l->line = lineno; \	l->name = (n); \	l->params = (p); \	} while (0)#define MAKE_CFLIST(l, t, pp, pl) do { \	(l) = (struct cf_list *)malloc(sizeof(*(l))); \	if ((l) == NULL) { \		yywarn("can't allocate memory"); \		if (pp) free(pp); \		if (pl) cleanup_cflist(pl); \		return(-1); \	} \	memset((l), 0, sizeof(*(l))); \	l->line = lineno; \	l->type = (t); \	l->ptr = (pp); \	l->list = (pl); \	} while (0)static struct cf_namelist *iflist_head, *piflist_head, *hostlist_head; struct cf_list *cf_dns_list;extern int yylex __P((void));static void cleanup __P((void));static void cleanup_namelist __P((struct cf_namelist *));static void cleanup_cflist __P((struct cf_list *));%}%token INTERFACE IFNAME%token PREFIX_INTERFACE SLA_ID SLA_LEN DUID_ID%token REQUEST SEND ALLOW PREFERENCE%token HOST HOSTNAME DUID%token OPTION RAPID_COMMIT PREFIX_DELEGATION DNS_SERVERS%token INFO_ONLY%token NUMBER SLASH EOS BCL ECL STRING PREFIX INFINITY%token COMMA%union {	long long num;	char* str;	struct cf_list *list;	struct dhcp6_prefix *prefix;}%type <str> IFNAME HOSTNAME DUID_ID STRING%type <num> NUMBER duration%type <list> declaration declarations dhcpoption ifparam ifparams%type <list> address_list address_list_ent%type <prefix> prefixparam%%statements:		/* empty */	|	statements statement	;statement:		interface_statement	|	prefix_interface_statement	|	host_statement	|	option_statement	;interface_statement:	INTERFACE IFNAME BCL declarations ECL EOS 	{		struct cf_namelist *ifl;		MAKE_NAMELIST(ifl, $2, $4);		if (add_namelist(ifl, &iflist_head))			return(-1);	}	;prefix_interface_statement:	PREFIX_INTERFACE IFNAME BCL ifparams ECL EOS	{		struct cf_namelist *ifl;		MAKE_NAMELIST(ifl, $2, $4);		if (add_namelist(ifl, &piflist_head))			return(-1);	}	;host_statement:	HOST HOSTNAME BCL declarations ECL EOS	{		struct cf_namelist *host;		MAKE_NAMELIST(host, $2, $4);		if (add_namelist(host, &hostlist_head))			return(-1);	}	;option_statement:	OPTION DNS_SERVERS address_list EOS	{		if (cf_dns_list == NULL)			cf_dns_list = $3;		else {			cf_dns_list->tail->next = $3;			cf_dns_list->tail = $3->next;		}	}	;address_list:		{ $$ = NULL; }	|	address_list address_list_ent		{			struct cf_list *head;			if ((head = $1) == NULL) {				$2->next = NULL;				$2->tail = $2;				head = $2;			} else {				head->tail->next = $2;				head->tail = $2;			}			$$ = head;		}	;address_list_ent:	STRING	{		struct cf_list *l;		struct in6_addr a0, *a;		if (inet_pton(AF_INET6, $1, &a0) != 1) {			yywarn("invalid IPv6 address: %s", $1);			free($1);			return(-1);		}		if ((a = malloc(sizeof(*a))) == NULL) {			yywarn("can't allocate memory");			return(-1);		}		*a = a0;		MAKE_CFLIST(l, ADDRESS_LIST_ENT, a, NULL);		$$ = l;	}declarations:		{ $$ = NULL; }	|	declarations declaration		{			struct cf_list *head;			if ((head = $1) == NULL) {				$2->next = NULL;				$2->tail = $2;				head = $2;			} else {				head->tail->next = $2;				head->tail = $2;			}			$$ = head;		}	;	declaration:		SEND dhcpoption EOS		{			struct cf_list *l;			MAKE_CFLIST(l, DECL_SEND, NULL, $2);			$$ = l;		}	|	REQUEST dhcpoption EOS		{			struct cf_list *l;			MAKE_CFLIST(l, DECL_REQUEST, NULL, $2);			$$ = l;		}	|	INFO_ONLY EOS		{			struct cf_list *l;			MAKE_CFLIST(l, DECL_INFO_ONLY, NULL, NULL);			/* no value */			$$ = l;		}	|	ALLOW dhcpoption EOS		{			struct cf_list *l;			MAKE_CFLIST(l, DECL_ALLOW, NULL, $2);			$$ = l;		}	|	DUID DUID_ID EOS		{			struct cf_list *l;			MAKE_CFLIST(l, DECL_DUID, $2, NULL);			$$ = l;		}	|	PREFIX prefixparam EOS		{			struct cf_list *l;			MAKE_CFLIST(l, DECL_PREFIX, $2, NULL);			$$ = l;		}	|	PREFERENCE NUMBER EOS		{			struct cf_list *l;			MAKE_CFLIST(l, DECL_PREFERENCE, NULL, NULL);			l->num = $2;			$$ = l;		}	;dhcpoption:		RAPID_COMMIT		{			struct cf_list *l;			MAKE_CFLIST(l, DHCPOPT_RAPID_COMMIT, NULL, NULL);			/* no value */			$$ = l;		}	|	PREFIX_DELEGATION			{			struct cf_list *l;			MAKE_CFLIST(l, DHCPOPT_PREFIX_DELEGATION, NULL, NULL);			/* currently no value */			$$ = l;		}	|	DNS_SERVERS			{			struct cf_list *l;			MAKE_CFLIST(l, DHCPOPT_DNS, NULL, NULL);			/* currently no value */			$$ = l;		}	;ifparams:		{ $$ = NULL; }	|	ifparams ifparam		{			struct cf_list *head;			if ((head = $1) == NULL) {				$2->next = NULL;				$2->tail = $2;				head = $2;			} else {				head->tail->next = $2;				head->tail = $2;			}			$$ = head;		}	;ifparam:		SLA_ID NUMBER EOS		{			struct cf_list *l;			MAKE_CFLIST(l, IFPARAM_SLA_ID, NULL, NULL);			l->num = $2;			$$ = l;		}	|	SLA_LEN NUMBER EOS		{			struct cf_list *l;			MAKE_CFLIST(l, IFPARAM_SLA_LEN, NULL, NULL);			l->num = $2;			$$ = l;		}	;prefixparam:	STRING SLASH NUMBER duration	{		struct dhcp6_prefix pconf0, *pconf;				memset(&pconf0, 0, sizeof(pconf0));		if (inet_pton(AF_INET6, $1, &pconf0.addr) != 1) {			yywarn("invalid IPv6 address: %s", $1);			free($1);			return(-1);		}		free($1);		/* validate other parameters later */		pconf0.plen = $3;		if ($4 < 0)			pconf0.duration = DHCP6_DURATITION_INFINITE;		else			pconf0.duration = (u_int32_t)$4;		if ((pconf = malloc(sizeof(*pconf))) == NULL) {			yywarn("can't allocate memory");			return(-1);		}		*pconf = pconf0;		$$ = pconf;	}duration:		INFINITY		{			$$ = -1;		}	|	NUMBER		{			$$ = $1;		}	;%%/* supplement routines for configuration */static intadd_namelist(new, headp)	struct cf_namelist *new, **headp;{	struct cf_namelist *ifp;	/* check for duplicated configuration */	for (ifp = *headp; ifp; ifp = ifp->next) {		if (strcmp(ifp->name, new->name) == 0) {			yywarn("duplicated interface: %s (ignored)",			       new->name);			cleanup_namelist(new);			return(0);		}	}	new->next = *headp;	*headp = new;	return(0);}/* free temporary resources */static voidcleanup(){	cleanup_namelist(iflist_head);	cleanup_namelist(piflist_head);	cleanup_namelist(hostlist_head);	cleanup_cflist(cf_dns_list);}static voidcleanup_namelist(head)	struct cf_namelist *head;{	struct cf_namelist *ifp, *ifp_next;	for (ifp = head; ifp; ifp = ifp_next) {		ifp_next = ifp->next;		cleanup_cflist(ifp->params);		free(ifp->name);		free(ifp);	}}static voidcleanup_cflist(p)	struct cf_list *p;{	struct cf_list *n;	if (p == NULL)		return;	n = p->next;	if (p->ptr)		free(p->ptr);	if (p->list)		cleanup_cflist(p->list);	free(p);	cleanup_cflist(n);}#define config_fail() \	do { cleanup(); configure_cleanup(); return(-1); } while(0)intcf_post_config(){	if (configure_interface(iflist_head))		config_fail();	if (configure_prefix_interface(piflist_head))		config_fail();	if (configure_host(hostlist_head))		config_fail();	if (configure_global_option())		config_fail();	configure_commit();	cleanup();	return(0);}#undef config_failvoidcf_init(){	iflist_head = NULL;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品视频| 欧美高清视频一二三区 | 欧美aaa在线| 制服丝袜中文字幕亚洲| 免费av成人在线| 久久综合久久99| 成人在线一区二区三区| 亚洲乱码日产精品bd| 欧美色手机在线观看| 日一区二区三区| www一区二区| 97se亚洲国产综合自在线不卡| 伊人色综合久久天天| 欧美日本精品一区二区三区| 久久成人免费网站| 最新成人av在线| 欧美日韩亚洲不卡| 国产在线精品一区二区不卡了| 国产精品三级视频| 欧美亚洲另类激情小说| 蜜臀久久久久久久| 国产精品视频第一区| 欧美日精品一区视频| 麻豆精品在线播放| 中文字幕第一区| 欧美亚男人的天堂| 国产一区二区在线电影| 亚洲精品免费播放| 日韩欧美中文字幕一区| 一本一道久久a久久精品综合蜜臀| 一区二区三区中文字幕电影 | 欧美zozo另类异族| 成人av在线资源| 天天综合日日夜夜精品| 久久午夜羞羞影院免费观看| 色悠悠久久综合| 久久成人精品无人区| 中文字幕亚洲区| 欧美成人vr18sexvr| 91蜜桃婷婷狠狠久久综合9色| 日本亚洲电影天堂| 亚洲三级小视频| 精品剧情在线观看| 欧美少妇一区二区| 高清不卡在线观看| 免费高清视频精品| 一区二区三区视频在线看| 精品精品国产高清一毛片一天堂| 91麻豆免费观看| 国产成人在线视频网站| 日韩精品视频网站| 亚洲一卡二卡三卡四卡| 亚洲国产精品成人综合色在线婷婷 | 91精品国产综合久久精品app| www.亚洲人| 国产在线国偷精品免费看| 日韩激情一二三区| 亚洲午夜精品网| 亚洲欧美国产77777| 国产午夜亚洲精品不卡| 精品免费99久久| 欧美一二三区在线| 欧美日韩三级在线| 在线观看av不卡| 91美女视频网站| av一本久道久久综合久久鬼色| 国模套图日韩精品一区二区| 天堂蜜桃91精品| 午夜精品久久久久久久99水蜜桃| 一区二区三区在线视频免费| 国产精品久久午夜夜伦鲁鲁| 久久嫩草精品久久久久| 欧美成人女星排名| 欧美大片在线观看| 欧美tickling挠脚心丨vk| 日本一区二区在线不卡| 日韩欧美国产一区在线观看| 91精品一区二区三区在线观看| 欧美午夜精品免费| 欧美日韩一本到| 在线播放中文字幕一区| 欧美情侣在线播放| 日韩三级视频在线看| 91精品国产手机| 欧美精品一区二区三区很污很色的| 日韩免费视频线观看| 精品免费99久久| 国产视频一区在线观看| 国产精品三级电影| 中文字幕视频一区| 亚洲综合999| 日本亚洲三级在线| 久久国产综合精品| 国产99久久精品| 91视频观看免费| 91福利资源站| 日韩一区二区三区电影| 久久久精品黄色| 国产精品乱码妇女bbbb| 亚洲乱码国产乱码精品精小说 | 国产欧美日韩亚州综合| 国产精品乱子久久久久| 一区二区三区四区av| 日韩精品成人一区二区在线| 久久99国产精品麻豆| 成人黄页在线观看| 日本大香伊一区二区三区| 欧美一区二区视频免费观看| 国产日韩欧美精品在线| 亚洲乱码日产精品bd| 奇米色一区二区三区四区| 国产成人高清视频| 欧美三片在线视频观看| 精品少妇一区二区三区视频免付费 | 国产成人av福利| 欧美视频一区在线观看| 精品国产露脸精彩对白| 亚洲私人黄色宅男| 美女脱光内衣内裤视频久久影院| 福利一区二区在线| 欧美久久久久久蜜桃| 国产日产精品1区| 午夜亚洲国产au精品一区二区| 国产寡妇亲子伦一区二区| 91成人免费网站| 国产午夜亚洲精品理论片色戒| 亚洲一区二区在线免费观看视频| 国产一区在线精品| 欧美视频完全免费看| 国产欧美精品一区二区色综合| 亚洲午夜激情av| 成人黄色一级视频| 欧美sm极限捆绑bd| 亚洲一区二区三区在线看 | 99re66热这里只有精品3直播| 欧美一区永久视频免费观看| 自拍av一区二区三区| 韩国精品在线观看| 欧美久久久久免费| 亚洲美女区一区| 国产a精品视频| 日韩欧美一区二区免费| 亚洲一区二区三区四区不卡| 高清在线成人网| 亚洲精品一区二区三区福利 | 视频在线观看91| 一本大道久久a久久精二百| 久久午夜国产精品| 日韩国产欧美在线观看| 欧美在线视频你懂得| 国产精品国模大尺度视频| 国产资源精品在线观看| 日韩欧美中文字幕公布| 午夜国产不卡在线观看视频| 91成人在线免费观看| 亚洲欧美一区二区在线观看| 国产一区二区不卡在线| 日韩三级精品电影久久久 | 日韩精品一卡二卡三卡四卡无卡| 色综合天天天天做夜夜夜夜做| 国产视频一区二区在线观看| 国产麻豆视频精品| 欧美成人精品高清在线播放 | 日韩精品自拍偷拍| 日本sm残虐另类| 日韩三级高清在线| 蜜桃av一区二区在线观看 | 欧洲一区二区三区免费视频| 亚洲欧美另类图片小说| 91激情五月电影| 亚洲欧美日韩国产综合| 色婷婷激情一区二区三区| 亚洲精品水蜜桃| 在线观看视频91| 亚洲图片有声小说| 奇米色一区二区三区四区| 91在线观看美女| 亚洲电影一级黄| 欧美日韩卡一卡二| 国产a精品视频| 欧美v国产在线一区二区三区| 日韩av二区在线播放| 51久久夜色精品国产麻豆| 香蕉成人啪国产精品视频综合网| 欧美亚洲国产一区二区三区va| 亚洲欧美另类在线| 欧美日韩一二区| 日本sm残虐另类| 日韩欧美中文字幕制服| 国产大片一区二区| 国产亚洲一本大道中文在线| 国产精品亚洲一区二区三区妖精| 日本一区二区综合亚洲| 不卡一卡二卡三乱码免费网站| 一区精品在线播放| 在线免费不卡电影| 紧缚捆绑精品一区二区| 久久久99精品免费观看不卡| 成年人午夜久久久| 日产欧产美韩系列久久99|