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

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

?? config.c

?? IPv6環境下的DHCP實現
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*	$KAME: config.c,v 1.20 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 <net/if_dl.h>#include <netinet/in.h>#include <syslog.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <ifaddrs.h>#include <dhcp6.h>#include <config.h>#include <common.h>extern int errno;struct dhcp6_if *dhcp6_if;struct prefix_ifconf *prefix_ifconflist;struct dhcp6_list dnslist;static struct dhcp6_ifconf *dhcp6_ifconflist;static struct prefix_ifconf *prefix_ifconflist0;static struct host_conf *host_conflist0, *host_conflist;static struct dhcp6_list dnslist0; enum { DHCPOPTCODE_SEND, DHCPOPTCODE_REQUEST, DHCPOPTCODE_ALLOW };extern struct cf_list *cf_dns_list;extern char *configfilename;static int add_options __P((int, struct dhcp6_ifconf *, struct cf_list *));static int add_prefix __P((struct host_conf *, struct dhcp6_prefix *));static void clear_ifconf __P((struct dhcp6_ifconf *));static void clear_prefixifconf __P((struct prefix_ifconf *));static void clear_hostconf __P((struct host_conf *));static void clear_options __P((struct dhcp6_optconf *));static int configure_duid __P((char *, struct duid *));static int get_default_ifid __P((struct prefix_ifconf *));voidifinit(ifname)	char *ifname;{	struct dhcp6_if *ifp;	if ((ifp = find_ifconfbyname(ifname)) != NULL) {		dprintf(LOG_NOTICE, "%s" "duplicated interface: %s",			FNAME, ifname);		return;	}	if ((ifp = malloc(sizeof(*ifp))) == NULL) {		dprintf(LOG_ERR, "%s" "malloc failed", FNAME);		goto die;	}	memset(ifp, 0, sizeof(*ifp));	TAILQ_INIT(&ifp->event_list);	if ((ifp->ifname = strdup(ifname)) == NULL) {		dprintf(LOG_ERR, "%s" "failed to copy ifname", FNAME);		goto die;	}	if ((ifp->ifid = if_nametoindex(ifname)) == 0) {		dprintf(LOG_ERR, "%s" "invalid interface(%s): %s", FNAME,			ifname, strerror(errno));		goto die;	}#ifdef HAVE_SCOPELIB	if (inet_zoneid(AF_INET6, 2, ifname, &ifp->linkid)) {		dprintf(LOG_ERR, "%s" "failed to get link ID for %s",			FNAME, ifname);		goto die;	}#else	ifp->linkid = ifp->ifid; /* XXX */#endif	ifp->next = dhcp6_if;	dhcp6_if = ifp;	return;  die:	exit(1);}intconfigure_interface(iflist)	struct cf_namelist *iflist;{	struct cf_namelist *ifp;	struct dhcp6_ifconf *ifc;	for (ifp = iflist; ifp; ifp = ifp->next) {		struct cf_list *cfl;		if ((ifc = malloc(sizeof(*ifc))) == NULL) {			dprintf(LOG_ERR, "%s"				"memory allocation for %s failed", FNAME,				ifp->name);			goto bad;		}		memset(ifc, 0, sizeof(*ifc));		ifc->next = dhcp6_ifconflist;		dhcp6_ifconflist = ifc;		if ((ifc->ifname = strdup(ifp->name)) == NULL) {			dprintf(LOG_ERR, "%s" "failed to copy ifname", FNAME);			goto bad;		}		ifc->server_pref = DH6OPT_PREF_UNDEF;		TAILQ_INIT(&ifc->reqopt_list);		for (cfl = ifp->params; cfl; cfl = cfl->next) {			switch(cfl->type) {			case DECL_REQUEST:				if (dhcp6_mode != DHCP6_MODE_CLIENT) {					dprintf(LOG_INFO, "%s" "%s:%d "						"client-only configuration",						FNAME, configfilename,						cfl->line);					goto bad;				}				if (add_options(DHCPOPTCODE_REQUEST,						ifc, cfl->list)) {					goto bad;				}				break;			case DECL_SEND:				if (add_options(DHCPOPTCODE_SEND,						ifc, cfl->list)) {					goto bad;				}				break;			case DECL_ALLOW:				if (add_options(DHCPOPTCODE_ALLOW,						ifc, cfl->list)) {					goto bad;				}				break;			case DECL_INFO_ONLY:				if (dhcp6_mode != DHCP6_MODE_CLIENT) {					dprintf(LOG_INFO, "%s" "%s:%d "						"client-only configuration",						FNAME, configfilename,						cfl->line);					goto bad;				}				ifc->send_flags |= DHCIFF_INFO_ONLY;				break;			case DECL_PREFERENCE:				if (dhcp6_mode != DHCP6_MODE_SERVER) {					dprintf(LOG_INFO, "%s" "%s:%d "						"server-only configuration",						FNAME, configfilename,						cfl->line);					goto bad;				}				ifc->server_pref = (int)cfl->num;				if (ifc->server_pref < 0 ||				    ifc->server_pref > 255) {					dprintf(LOG_INFO, "%s" "%s:%d "						"bad value: %d", FNAME,						configfilename, cfl->line,						ifc->server_pref);					goto bad;				}				break;			default:				dprintf(LOG_ERR, "%s" "%s:%d "					"invalid interface configuration",					FNAME, configfilename, cfl->line);				goto bad;			}		}	}		return(0);  bad:	clear_ifconf(dhcp6_ifconflist);	dhcp6_ifconflist = NULL;	return(-1);}intconfigure_prefix_interface(iflist)	struct cf_namelist *iflist;{	struct cf_namelist *ifp;	struct prefix_ifconf *pif;	for (ifp = iflist; ifp; ifp = ifp->next) {		struct cf_list *cfl;		if ((pif = malloc(sizeof(*pif))) == NULL) {			dprintf(LOG_ERR, "%s"				"memory allocation for %s failed", FNAME,				ifp->name);			goto bad;		}		memset(pif, 0, sizeof(*pif));		pif->next = prefix_ifconflist0;		prefix_ifconflist0 = pif;		/* validate and copy ifname */		if (if_nametoindex(ifp->name) == 0) {			dprintf(LOG_ERR, "%s" "invalid interface (%s): %s",				FNAME, ifp->name, strerror(errno));			goto bad;		}		if ((pif->ifname = strdup(ifp->name)) == NULL) {			dprintf(LOG_ERR, "%s" "failed to copy ifname", FNAME);			goto bad;		}		pif->ifid_len = IFID_LEN_DEFAULT;		pif->sla_len = SLA_LEN_DEFAULT;		if (get_default_ifid(pif)) {			dprintf(LOG_NOTICE, "%s"				"failed to get default IF ID for %s",				FNAME, pif->ifname);			goto bad;		}		for (cfl = ifp->params; cfl; cfl = cfl->next) {			switch(cfl->type) {			case IFPARAM_SLA_ID:				pif->sla_id = (u_int32_t)cfl->num;				break;			case IFPARAM_SLA_LEN:				pif->sla_len = (int)cfl->num;				if (pif->sla_len < 0 || pif->sla_len > 128) {					dprintf(LOG_ERR, "%s"					    "invalid SLA length: %d", FNAME,					    pif->sla_len);					goto bad;				}				break;			default:				dprintf(LOG_ERR, "%s" "%s:%d "					"invalid configuration", FNAME,					configfilename, cfl->line);				goto bad;			}		}	}		return(0);  bad:	/* there is currently nothing special to recover the error */	return(-1);}intconfigure_host(hostlist)	struct cf_namelist *hostlist;{	struct cf_namelist *host;	struct host_conf *hconf;	for (host = hostlist; host; host = host->next) {		struct cf_list *cfl;		if ((hconf = malloc(sizeof(*hconf))) == NULL) {			dprintf(LOG_ERR, "%s" "memory allocation failed "				"for host %s", FNAME, host->name);			goto bad;		}		memset(hconf, 0, sizeof(*hconf));		TAILQ_INIT(&hconf->prefix_list);		TAILQ_INIT(&hconf->prefix_binding_list);		hconf->next = host_conflist0;		host_conflist0 = hconf;		if ((hconf->name = strdup(host->name)) == NULL) {			dprintf(LOG_ERR, "%s" "failed to copy host name: %s",				FNAME, host->name);			goto bad;		}		for (cfl = host->params; cfl; cfl = cfl->next) {			switch(cfl->type) {			case DECL_DUID:				if (hconf->duid.duid_id) {					dprintf(LOG_ERR, "%s" "%s:%d "						"duplicated DUID for %s",						FNAME, configfilename,						cfl->line, host->name);					goto bad;				}				if ((configure_duid((char *)cfl->ptr,						    &hconf->duid)) != 0) {					dprintf(LOG_ERR, "%s" "%s:%d "						"failed to configure "						"DUID for %s", FNAME,						configfilename, cfl->line,						host->name);					goto bad;				}				dprintf(LOG_DEBUG, "%s"					"configure DUID for %s: %s", FNAME,					host->name, duidstr(&hconf->duid));				break;			case DECL_PREFIX:				if (add_prefix(hconf, cfl->ptr)) {					dprintf(LOG_ERR, "%s" "failed "						"to configure prefix for %s",						FNAME, host->name);					goto bad;				}				break;			default:				dprintf(LOG_ERR, "%s" "%s:%d "					"invalid host configuration for %s"					FNAME, configfilename, cfl->line,					host->name);				goto bad;			}		}	}	return(0);  bad:	/* there is currently nothing special to recover the error */	return(-1);}intconfigure_global_option(){	struct cf_list *cl;	/* DNS servers */	if (cf_dns_list && dhcp6_mode != DHCP6_MODE_SERVER) {		dprintf(LOG_INFO, "%s" "%s:%d server-only configuration",		    FNAME, configfilename, cf_dns_list->line);		goto bad;	}	TAILQ_INIT(&dnslist0);	for (cl = cf_dns_list; cl; cl = cl->next) {		/* duplication check */		if (dhcp6_find_listval(&dnslist0, cl->ptr,		    DHCP6_LISTVAL_ADDR6)) {			dprintf(LOG_INFO, "%s"			    "%s:%d duplicated DNS server: %s", FNAME,			    configfilename, cl->line,			    in6addr2str((struct in6_addr *)cl->ptr, 0));			goto bad;		}		if (dhcp6_add_listval(&dnslist0, cl->ptr,		    DHCP6_LISTVAL_ADDR6) == NULL) {			dprintf(LOG_ERR, "%s" "failed to add a DNS server");			goto bad;		}	}	return 0;  bad:	return -1;}static intconfigure_duid(str, duid)	char *str;		/* this is a valid DUID string */	struct duid *duid;{	char *cp, *bp;	char *idbuf = NULL;	int duidlen, slen;	/* calculate DUID len */	slen = strlen(str);	if (slen < 2)		goto bad;	duidlen = 1;	slen -= 2;	if ((slen % 3) != 0)		goto bad;	duidlen += (slen / 3);	if (duidlen > 256) {		dprintf(LOG_ERR, "%s" "too long DUID (%d)", FNAME, duidlen);		return(-1);	}	if ((idbuf = malloc(sizeof(duidlen))) == NULL) {		dprintf(LOG_ERR, "%s" "memory allocation failed", FNAME);		return(-1);	}	for (cp = str, bp = idbuf; *cp;) {		if (*cp == ':') {			cp++;			continue;		}		if (sscanf(cp, "%02x", bp) != 1)			goto bad;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品资源在线看| 制服视频三区第一页精品| 色伊人久久综合中文字幕| 欧美久久久久久蜜桃| 国产精品美女久久久久久久久| 午夜视黄欧洲亚洲| 成人美女视频在线观看| 日韩你懂的在线播放| 亚洲免费在线观看| 国产精品99久久久久久似苏梦涵 | 欧美一区三区二区| 亚洲欧美在线高清| 国产呦精品一区二区三区网站| 欧美亚洲一区二区在线| 中文乱码免费一区二区| 老汉av免费一区二区三区| 欧美日韩大陆在线| 亚洲蜜桃精久久久久久久| 国产成人av资源| 久久久久99精品国产片| 麻豆91在线观看| 91麻豆精品国产自产在线观看一区| 亚洲欧美日韩精品久久久久| 成人免费不卡视频| 国产日韩欧美一区二区三区综合| 老司机精品视频一区二区三区| 51久久夜色精品国产麻豆| 一区二区三区四区av| caoporn国产精品| 国产精品视频一二| 高清在线成人网| 国产人成亚洲第一网站在线播放| 激情综合网天天干| 精品国产一区二区精华| 久草这里只有精品视频| 久久综合久久综合久久综合| 久久爱www久久做| 欧美成人在线直播| 老汉av免费一区二区三区| 日韩精品一区二区三区蜜臀 | 国产iv一区二区三区| 久久久久国产精品人| 国产精品一区2区| 久久久国产精华| 成人精品高清在线| 国产精品国产三级国产a| 91麻豆国产香蕉久久精品| 国产精品国产三级国产aⅴ中文| fc2成人免费人成在线观看播放| 国产精品蜜臀在线观看| 不卡在线视频中文字幕| 有坂深雪av一区二区精品| 欧美午夜精品免费| 另类小说欧美激情| 国产午夜精品久久久久久久| 成人一二三区视频| 亚洲最新视频在线观看| 69p69国产精品| 国产美女精品在线| 日韩久久一区二区| 欧美高清性hdvideosex| 精品制服美女久久| 中文字幕欧美一| 欧美精选一区二区| 国产在线国偷精品免费看| 国产精品美女久久久久久久久| 91蜜桃视频在线| 免费视频最近日韩| 国产精品视频九色porn| 欧美亚洲国产一区二区三区va| 日韩影院免费视频| 欧美国产精品专区| 欧美性高清videossexo| 国产一区二区三区黄视频| 最新国产の精品合集bt伙计| 91麻豆精品国产91久久久久| 国产精品一二三四区| 亚洲一区二区欧美日韩| 欧美精品一区二区精品网| 91美女在线看| 国内精品久久久久影院薰衣草 | 欧美日韩高清在线| 国产精品1区2区3区| 亚洲国产一区二区三区| 中文字幕精品综合| 欧美一级国产精品| 日本高清不卡视频| 国产成人免费在线视频| 日韩中文字幕av电影| 亚洲区小说区图片区qvod| 久久久久久久网| 欧美欧美欧美欧美首页| 99免费精品视频| 国产乱色国产精品免费视频| 亚洲国产精品影院| 国产精品久久久久久福利一牛影视| 欧美电视剧免费观看| 欧美色图天堂网| 波多野结衣91| 国产99久久久国产精品 | 17c精品麻豆一区二区免费| 日韩精品一区二区在线观看| 精品污污网站免费看| 色综合久久88色综合天天| 国产电影精品久久禁18| 九一久久久久久| 日韩av在线发布| 亚洲sss视频在线视频| 亚洲美女屁股眼交| 中文字幕亚洲电影| 国产精品视频一二三区| 国产日韩欧美电影| 久久精品亚洲麻豆av一区二区| 欧美一区二区美女| 91麻豆精品国产91久久久资源速度 | 污片在线观看一区二区| 亚洲美女免费视频| 亚洲欧洲一区二区在线播放| 中文字幕欧美激情一区| 国产日产欧产精品推荐色| 久久久久97国产精华液好用吗| 欧美xxxx在线观看| 欧美精品一区二区三区四区| 精品免费日韩av| 精品国产伦一区二区三区观看方式 | 中文字幕一区二区三区蜜月| 中文字幕av一区 二区| 亚洲国产精品av| 国产网红主播福利一区二区| 国产偷国产偷精品高清尤物| 中文字幕av不卡| 亚洲日韩欧美一区二区在线| 亚洲免费资源在线播放| 午夜一区二区三区在线观看| 首页国产欧美久久| 久久99精品国产91久久来源| 国模大尺度一区二区三区| 成人一区二区三区| www.亚洲人| 色综合久久中文字幕综合网| 在线观看日韩av先锋影音电影院| 在线观看亚洲一区| 91精品国模一区二区三区| 精品福利在线导航| 亚洲欧洲韩国日本视频| 尤物av一区二区| 美女视频黄 久久| 国产成人在线看| 91久久精品一区二区三| 3d成人h动漫网站入口| 久久久午夜电影| 一区二区三区在线观看动漫| 青青青爽久久午夜综合久久午夜| 精品一区二区三区免费播放| 成人av网站免费| 88在线观看91蜜桃国自产| 久久久久九九视频| 亚洲一区二区中文在线| 国内精品在线播放| 在线观看国产精品网站| 2024国产精品| 亚洲一二三专区| 国产成人av一区二区| 欧美影院一区二区| 久久嫩草精品久久久久| 亚洲国产中文字幕| 成人深夜视频在线观看| 欧美一区二区三区在| 国产精品久久久久久户外露出 | 久久久久久久久伊人| 亚洲午夜电影网| 国产成人免费视频一区| 日韩亚洲欧美成人一区| 自拍偷拍欧美精品| 国产高清精品久久久久| 91精品麻豆日日躁夜夜躁| 亚洲男人天堂一区| 国产成人在线网站| 日韩欧美一级精品久久| 亚洲综合丝袜美腿| 99精品在线观看视频| 久久亚洲二区三区| 日韩国产欧美在线播放| 91免费视频网址| 国产精品久久久久久亚洲毛片| 秋霞成人午夜伦在线观看| 欧美在线制服丝袜| 亚洲人成网站影音先锋播放| 国产成人免费视频网站| 精品国产髙清在线看国产毛片 | 在线观看免费亚洲| 国产精品久久久久久久久晋中| 国产做a爰片久久毛片| 欧美大胆一级视频| 男女性色大片免费观看一区二区| 色哟哟精品一区| 一区二区三区中文字幕电影| av成人免费在线| 国产精品你懂的在线欣赏| 成人精品亚洲人成在线|