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

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

?? dhcp6c.c

?? IPv6環境下的DHCP實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*	$KAME: dhcp6c.c,v 1.96 2002/06/28 07:30:35 jinmei Exp $	*//* * Copyright (C) 1998 and 1999 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/sockio.h>#include <sys/uio.h>#include <sys/queue.h>#include <errno.h>#if TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h>#else# if HAVE_SYS_TIME_H#  include <sys/time.h># else#  include <time.h># endif#endif#include <net/if.h>#if defined(__FreeBSD__) && __FreeBSD__ >= 3#include <net/if_var.h>#endif#include <net/if_dl.h>#include <netinet/in.h>#include <netinet6/in6_var.h>#include <arpa/inet.h>#include <netdb.h>#include <signal.h>#include <stdio.h>#include <stdarg.h>#include <syslog.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <err.h>#include <ifaddrs.h>#include <dhcp6.h>#include <config.h>#include <common.h>#include <timer.h>#include <prefixconf.h>static int debug = 0;static u_long sig_flags = 0;#define SIGF_TERM 0x1#define SIGF_HUP 0x2const dhcp6_mode_t dhcp6_mode = DHCP6_MODE_CLIENT;char *device = NULL;int insock;	/* inbound udp port */int outsock;	/* outbound udp port */int rtsock;	/* routing socket */static const struct sockaddr_in6 *sa6_allagent;static struct duid client_duid;static void usage __P((void));static void client6_init __P((void));static void client6_ifinit __P((void));static void free_resources __P((void));static void client6_mainloop __P((void));static void process_signals __P((void));static struct dhcp6_serverinfo *find_server __P((struct dhcp6_if *,						 struct duid *));static struct dhcp6_serverinfo *select_server __P((struct dhcp6_if *));static void client6_send __P((struct dhcp6_event *));static int client6_recv __P((void));static int client6_recvadvert __P((struct dhcp6_if *, struct dhcp6 *,				   ssize_t, struct dhcp6_optinfo *));static int client6_recvreply __P((struct dhcp6_if *, struct dhcp6 *,				  ssize_t, struct dhcp6_optinfo *));static void client6_signal __P((int));static struct dhcp6_event *find_event_withid __P((struct dhcp6_if *,						  u_int32_t));static int sa2plen __P((struct sockaddr_in6 *));struct dhcp6_timer *client6_timo __P((void *));void client6_send_renew __P((struct dhcp6_event *));void client6_send_rebind __P((struct dhcp6_event *));#define DHCP6C_CONF "/usr/local/v6/etc/dhcp6c.conf"#define DHCP6C_PIDFILE "/var/run/dhcp6c.pid"#define DUID_FILE "/etc/dhcp6c_duid"intmain(argc, argv)	int argc;	char **argv;{	int ch, pid;	char *progname, *conffile = DHCP6C_CONF;	FILE *pidfp;#ifndef HAVE_ARC4RANDOM	srandom(time(NULL) & getpid());#endif	if ((progname = strrchr(*argv, '/')) == NULL)		progname = *argv;	else		progname++;	while ((ch = getopt(argc, argv, "c:dDf")) != -1) {		switch (ch) {		case 'c':			conffile = optarg;			break;		case 'd':			debug = 1;			break;		case 'D':			debug = 2;			break;		case 'f':			foreground++;			break;		default:			usage();			exit(0);		}	}	argc -= optind;	argv += optind;	if (argc != 1) {		usage();		exit(0);	}	device = argv[0];	if (foreground == 0) {		if (daemon(0, 0) < 0)			err(1, "daemon");		openlog(progname, LOG_NDELAY|LOG_PID, LOG_DAEMON);	}	setloglevel(debug);	/* dump current PID */	pid = getpid();	if ((pidfp = fopen(DHCP6C_PIDFILE, "w")) != NULL) {		fprintf(pidfp, "%d\n", pid);		fclose(pidfp);	}	ifinit(device);	if ((cfparse(conffile)) != 0) {		dprintf(LOG_ERR, "%s" "failed to parse configuration file",			FNAME);		exit(1);	}	client6_init();	client6_ifinit();	client6_mainloop();	exit(0);}static voidusage(){	fprintf(stderr, "usage: dhcpc [-c configfile] [-dDf] intface\n");}/*------------------------------------------------------------*/voidclient6_init(){	struct addrinfo hints, *res;	static struct sockaddr_in6 sa6_allagent_storage;	int error, on = 1;	struct dhcp6_if *ifp;	struct dhcp6_event *ev;	int ifidx;	ifidx = if_nametoindex(device);	if (ifidx == 0) {		dprintf(LOG_ERR, "if_nametoindex(%s)");		exit(1);	}	/* get our DUID */	if (get_duid(DUID_FILE, &client_duid)) {		dprintf(LOG_ERR, "%s" "failed to get a DUID", FNAME);		exit(1);	}	memset(&hints, 0, sizeof(hints));	hints.ai_family = PF_INET6;	hints.ai_socktype = SOCK_DGRAM;	hints.ai_protocol = IPPROTO_UDP;	hints.ai_flags = AI_PASSIVE;	error = getaddrinfo(NULL, DH6PORT_DOWNSTREAM, &hints, &res);	if (error) {		dprintf(LOG_ERR, "%s" "getaddrinfo: %s",			FNAME, gai_strerror(error));		exit(1);	}	insock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);	if (insock < 0) {		dprintf(LOG_ERR, "%s" "socket(inbound)", FNAME);		exit(1);	}	if (setsockopt(insock, SOL_SOCKET, SO_REUSEPORT,		       &on, sizeof(on)) < 0) {		dprintf(LOG_ERR, "%s" "setsockopt(inbound, SO_REUSEPORT): %s",			FNAME, strerror(errno));		exit(1);	}#ifdef IPV6_RECVPKTINFO	if (setsockopt(insock, IPPROTO_IPV6, IPV6_RECVPKTINFO, &on,		       sizeof(on)) < 0) {		dprintf(LOG_ERR, "%s"			"setsockopt(inbound, IPV6_RECVPKTINFO): %s",			FNAME, strerror(errno));		exit(1);	}#else	if (setsockopt(insock, IPPROTO_IPV6, IPV6_PKTINFO, &on,		       sizeof(on)) < 0) {		dprintf(LOG_ERR, "%s"			"setsockopt(inbound, IPV6_PKTINFO): %s",			FNAME, strerror(errno));		exit(1);	}#endif	if (bind(insock, res->ai_addr, res->ai_addrlen) < 0) {		dprintf(LOG_ERR, "%s" "bind(inbonud): %s",			FNAME, strerror(errno));		exit(1);	}	freeaddrinfo(res);	hints.ai_flags = 0;	error = getaddrinfo(NULL, DH6PORT_UPSTREAM, &hints, &res);	if (error) {		dprintf(LOG_ERR, "%s" "getaddrinfo: %s",			FNAME, gai_strerror(error));		exit(1);	}	outsock = socket(res->ai_family, res->ai_socktype, res->ai_protocol);	if (outsock < 0) {		dprintf(LOG_ERR, "%s" "socket(outbound): %s",			FNAME, strerror(errno));		exit(1);	}	if (setsockopt(outsock, IPPROTO_IPV6, IPV6_MULTICAST_IF,			&ifidx, sizeof(ifidx)) < 0) {		dprintf(LOG_ERR, "%s"			"setsockopt(outbound, IPV6_MULTICAST_IF): %s",			FNAME, strerror(errno));		exit(1);	}	if (setsockopt(outsock, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, &on,		       sizeof(on)) < 0) {		dprintf(LOG_ERR, "%s"			"setsockopt(outsock, IPV6_MULTICAST_LOOP): %s",			FNAME, strerror(errno));		exit(1);	}	/* make the socket write-only */	if (shutdown(outsock, 0)) {		dprintf(LOG_ERR, "%s" "shutdown(outbound, 0): %s",			FNAME, strerror(errno));		exit(1);	}	freeaddrinfo(res);	/*	 * bind the well-known incoming port to the outgoing socket	 * for interoperability with some servers.	 */	memset(&hints, 0, sizeof(hints));	hints.ai_family = PF_INET6;	hints.ai_socktype = SOCK_DGRAM;	hints.ai_protocol = IPPROTO_UDP;	hints.ai_flags = AI_PASSIVE;	error = getaddrinfo(NULL, DH6PORT_DOWNSTREAM, &hints, &res);	if (error) {		dprintf(LOG_ERR, "%s" "getaddrinfo: %s",			FNAME, gai_strerror(error));		exit(1);	}	if (setsockopt(outsock, SOL_SOCKET, SO_REUSEPORT,		       &on, sizeof(on)) < 0) {		dprintf(LOG_ERR, "%s" "setsockopt(inbound, SO_REUSEPORT): %s",			FNAME, strerror(errno));		exit(1);	}	if (bind(outsock, res->ai_addr, res->ai_addrlen) < 0) {		dprintf(LOG_ERR, "%s" "bind(inbonud): %s",			FNAME, strerror(errno));		exit(1);	}	freeaddrinfo(res);	/* open a routing socket to watch the routing table */	if ((rtsock = socket(PF_ROUTE, SOCK_RAW, 0)) < 0) {		dprintf(LOG_ERR, "%s" "open a routing socket: %s",			FNAME, strerror(errno));		exit(1);	}	memset(&hints, 0, sizeof(hints));	hints.ai_family = PF_INET6;	hints.ai_socktype = SOCK_DGRAM;	hints.ai_protocol = IPPROTO_UDP;	error = getaddrinfo(DH6ADDR_ALLAGENT, DH6PORT_UPSTREAM, &hints, &res);	if (error) {		dprintf(LOG_ERR, "%s" "getaddrinfo: %s",			FNAME, gai_strerror(error));		exit(1);	}	memcpy(&sa6_allagent_storage, res->ai_addr, res->ai_addrlen);	sa6_allagent = (const struct sockaddr_in6 *)&sa6_allagent_storage;	freeaddrinfo(res);	/* client interface configuration */	if ((ifp = find_ifconfbyname(device)) == NULL) {		dprintf(LOG_ERR, "%s" "interface %s not configured",			FNAME, device);		exit(1);	}	ifp->outsock = outsock;	prefix6_init();	if (signal(SIGHUP, client6_signal) == SIG_ERR) {		dprintf(LOG_WARNING, "%s" "failed to set signal: %s",			FNAME, strerror(errno));		exit(1);	}	if (signal(SIGTERM, client6_signal) == SIG_ERR) {		dprintf(LOG_WARNING, "%s" "failed to set signal: %s",			FNAME, strerror(errno));		exit(1);	}}static voidclient6_ifinit(){	struct dhcp6_if *ifp;	struct dhcp6_event *ev;	for (ifp = dhcp6_if; ifp; ifp = ifp->next) {		/* create an event for the initial delay */		if ((ev = dhcp6_create_event(ifp, DHCP6S_INIT)) == NULL) {			dprintf(LOG_ERR, "%s" "failed to create an event",				FNAME);			exit(1);		}		TAILQ_INSERT_TAIL(&ifp->event_list, ev, link);		if ((ev->timer = dhcp6_add_timer(client6_timo, ev)) == NULL) {			dprintf(LOG_ERR, "%s" "failed to add a timer for %s",				FNAME, ifp->ifname);			exit(1);		}		dhcp6_reset_timer(ev);	}}static voidfree_resources(){	struct dhcp6_if *ifp;	/* release delegated prefixes (should send DHCPv6 release?) */	prefix6_remove_all();	for (ifp = dhcp6_if; ifp; ifp = ifp->next) {		struct dhcp6_event *ev, *ev_next;		struct dhcp6_serverinfo *sp, *sp_next;		/* cancel all outstanding events for each interface */		for (ev = TAILQ_FIRST(&ifp->event_list); ev; ev = ev_next) {			ev_next = TAILQ_NEXT(ev, link);			dhcp6_remove_event(ev);		}		/* free all servers we've seen so far */		for (sp = ifp->servers; sp; sp = sp_next) {			sp_next = sp->next;			dprintf(LOG_DEBUG, "%s" "removing server (ID: %s)",			    FNAME, duidstr(&sp->optinfo.serverID));			dhcp6_clear_options(&sp->optinfo);			free(sp);		}		ifp->servers = NULL;		ifp->current_server = NULL;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青娱乐精品在线视频| 亚洲已满18点击进入久久| 欧美日韩久久一区二区| 99精品久久久久久| 99在线精品一区二区三区| 韩国av一区二区三区| 蜜桃精品视频在线观看| 日本欧美大码aⅴ在线播放| 天天色 色综合| 三级久久三级久久久| 日本最新不卡在线| 久草这里只有精品视频| 韩国在线一区二区| 国产综合久久久久影院| 黄色小说综合网站| 九一久久久久久| 国产资源精品在线观看| 激情五月激情综合网| 99久久精品国产导航| 成人免费毛片aaaaa**| 不卡的看片网站| 91免费观看视频在线| 日本国产一区二区| 欧美福利电影网| 91精品国产综合久久久久久漫画 | 久久国产免费看| 国产一区在线不卡| 91亚洲精品久久久蜜桃网站| 在线影院国内精品| 制服丝袜亚洲色图| 久久精品一区二区三区av| 亚洲欧美综合色| 午夜视频久久久久久| 国内国产精品久久| 色综合久久久久综合体桃花网| 欧美亚洲自拍偷拍| 久久久精品黄色| 亚洲一区二区三区四区的| 免费看欧美美女黄的网站| 懂色av噜噜一区二区三区av| 在线观看av一区| 久久久亚洲欧洲日产国码αv| ㊣最新国产の精品bt伙计久久| 午夜a成v人精品| 成人av网站在线观看| 在线综合视频播放| 亚洲女同ⅹxx女同tv| 成人av在线观| 欧美理论在线播放| 国产日本欧洲亚洲| 奇米一区二区三区av| 色综合久久综合网| 国产亚洲精品7777| 奇米一区二区三区| 色老综合老女人久久久| 久久精品人人做人人爽人人| 亚洲一二三区不卡| 色综合夜色一区| 中文字幕精品在线不卡| 麻豆91精品91久久久的内涵| 精品1区2区3区| 国产精品乱码妇女bbbb| 久久av老司机精品网站导航| 欧美视频自拍偷拍| 亚洲欧美另类图片小说| 成人网在线播放| 久久视频一区二区| 美女视频黄频大全不卡视频在线播放| 色综合网色综合| 中文字幕av一区二区三区| 激情综合色综合久久综合| 欧美一区二区三区四区视频 | 国产精品久久久久久福利一牛影视| 三级久久三级久久| 欧美日韩在线精品一区二区三区激情| 国产精品欧美精品| 成人午夜激情片| **网站欧美大片在线观看| 不卡一卡二卡三乱码免费网站| 久久精品一区二区三区四区| 国产制服丝袜一区| 久久久久久久久99精品| 久久精品国产精品亚洲红杏| 欧美一区二区三区电影| 日本不卡123| 欧美大尺度电影在线| 激情综合亚洲精品| 久久精品男人天堂av| 岛国精品在线观看| 中文字幕在线一区| 精品视频123区在线观看| 日韩影院精彩在线| 欧美成va人片在线观看| 国产九色精品成人porny| 久久久久久久av麻豆果冻| 岛国精品在线观看| 亚洲精品乱码久久久久| 欧美精品国产精品| 极品瑜伽女神91| 国产精品国产三级国产三级人妇| 91女厕偷拍女厕偷拍高清| 亚洲一区二区欧美| 精品久久久久久久久久久久包黑料 | 精品免费一区二区三区| 国产一区二区导航在线播放| 欧美国产乱子伦 | 欧洲国产伦久久久久久久| 日本麻豆一区二区三区视频| 精品福利一区二区三区| 成人视屏免费看| 亚洲免费三区一区二区| 日韩欧美一区二区免费| 波多野结衣中文一区| 一区二区三区四区亚洲| 精品欧美久久久| 日本精品一区二区三区四区的功能| 五月天丁香久久| 久久久久久久精| 欧美日韩国产精品成人| 国产精品88av| 亚洲 欧美综合在线网络| 26uuu国产一区二区三区| 在线免费观看日韩欧美| 韩国视频一区二区| 亚洲一区二区三区四区五区黄| 日韩欧美一卡二卡| 欧洲精品在线观看| 成人一区在线观看| 日本三级亚洲精品| 一区二区三区 在线观看视频| 精品精品国产高清a毛片牛牛 | 欧洲av在线精品| 国产成人午夜高潮毛片| 国产一区二区三区美女| 一区二区三区欧美在线观看| 久久精品亚洲一区二区三区浴池| 欧美中文一区二区三区| va亚洲va日韩不卡在线观看| 久久精品国产澳门| 亚洲成av人**亚洲成av**| 一区二区中文视频| 国产午夜精品美女毛片视频| 欧美一区二区三区电影| 欧美三级电影在线看| 97久久精品人人做人人爽 | 国产欧美日韩在线| 精品国产一区二区亚洲人成毛片| 欧美日本不卡视频| 色噜噜狠狠色综合欧洲selulu| 成人黄色小视频| 国产福利一区二区三区在线视频| 另类调教123区| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲高清免费一级二级三级| 亚洲黄色免费网站| 一级做a爱片久久| 亚洲人123区| 亚洲精品欧美专区| 亚洲欧美激情插| 亚洲精品久久久蜜桃| 夜夜揉揉日日人人青青一国产精品| 国产精品久久久久aaaa| 综合久久久久综合| 亚洲欧美一区二区三区孕妇| 日韩美女久久久| 亚洲免费观看在线观看| 夜夜嗨av一区二区三区网页| 亚洲成a天堂v人片| 婷婷夜色潮精品综合在线| 午夜视频在线观看一区| 免费观看日韩av| 国产精品香蕉一区二区三区| 国产suv一区二区三区88区| www.日韩av| 欧美影视一区在线| 日韩欧美在线网站| 欧美—级在线免费片| 亚洲欧洲综合另类在线| 亚洲韩国一区二区三区| 久久精品国产秦先生| 夫妻av一区二区| 在线精品国精品国产尤物884a| 26uuu另类欧美| 国产精品伦一区二区三级视频| 亚洲靠逼com| 乱一区二区av| 91色九色蝌蚪| 91麻豆精品国产自产在线| 精品久久国产老人久久综合| 国产精品人人做人人爽人人添| 亚洲精品乱码久久久久久黑人| 秋霞午夜av一区二区三区| 国产福利精品导航| 欧美性三三影院| 久久精品一二三| 五月综合激情网| 高潮精品一区videoshd| 91精品欧美福利在线观看| 国产精品久久久一本精品| 天天色图综合网|