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

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

?? radix.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* radix.c - common routines for routing engine *//* Copyright 1990 - 2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/* * Copyright (c) 1988, 1989, 1993 *	The Regents of the University of California.  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. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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. * *	@(#)radix.c	8.5 (Berkeley) 5/19/95 *//*modification history--------------------01d,05nov01,vvv  fixed compilation warning01c,12oct01,rae  merge from truestack ver 01f, base 01b01b,02jul97,vin  fixed warnings.01a,03mar96,vin  created from BSD4.4lite2.*//* * Routines to build and maintain radix trees for routing lookups. */#include "vxWorks.h"#include "stdlib.h"#include "logLib.h"#include "string.h"#include "net/domain.h"#include "net/systm.h"#include "net/radix.h"#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET#include "wvNetLib.h"#endif#endif#ifdef VIRTUAL_STACK#include "netinet/vsLib.h"#elseint	max_keylen;struct radix_mask *rn_mkfreelist;struct radix_node_head *mask_rnhead;static char *addmask_key;static char *rn_zeros, *rn_ones;#endif#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* Set common fields of event identifiers for this module. */LOCAL UCHAR wvNetModuleId = WV_NET_RADIX_MODULE;   /* Value for radix.c */LOCAL UCHAR wvNetLocalFilter = WV_NET_NONE;     /* Available event filter */LOCAL ULONG wvNetEventId;       /* Event identifier: see wvNetLib.h */#endif    /* INCLUDE_WVNET */#endifstatic char normal_chars[] = {0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, -1};#define rn_masktop (mask_rnhead->rnh_treetop)#undef Bcmp#define Bcmp(a, b, l) (l == 0 ? 0 : bcmp((caddr_t)(a), (caddr_t)(b), (u_long)l))/* * The data structure for the keys is a radix tree with one way * branching removed.  The index rn_b at an internal node n represents a bit * position to be tested.  The tree is arranged so that all descendants * of a node n have keys whose bits all agree up to position rn_b - 1. * (We say the index of n is rn_b.) * * There is at least one descendant which has a one bit at position rn_b, * and at least one with a zero there. * * A route is determined by a pair of key and mask.  We require that the * bit-wise logical and of the key and mask to be the key. * We define the index of a route to associated with the mask to be * the first bit number in the mask where 0 occurs (with bit number 0 * representing the highest order bit). *  * We say a mask is normal if every bit is 0, past the index of the mask. * If a node n has a descendant (k, m) with index(m) == index(n) == rn_b, * and m is a normal mask, then the route applies to every descendant of n. * If the index(m) < rn_b, this implies the trailing last few bits of k * before bit b are all 0, (and hence consequently true of every descendant * of n), so the route applies to all descendants of the node as well. *  * Similar logic shows that a non-normal mask m such that * index(m) <= index(n) could potentially apply to many children of n. * Thus, for each non-host route, we attach its mask to a list at an internal * node as high in the tree as we can go.  * * The present version of the code makes use of normal routes in short- * circuiting an explict mask and compare operation when testing whether * a key satisfies a normal route, and also in remembering the unique leaf * that governs a subtree. */struct radix_node *rn_search(v_arg, head)	void *v_arg;	struct radix_node *head;{	register struct radix_node *x;	register caddr_t v;	for (x = head, v = v_arg; x->rn_b >= 0;) {		if (x->rn_bmask & v[x->rn_off])			x = x->rn_r;		else			x = x->rn_l;	}	return (x);}struct radix_node *rn_search_m(v_arg, head, m_arg)	struct radix_node *head;	void *v_arg, *m_arg;{	register struct radix_node *x;	register caddr_t v = v_arg, m = m_arg;	for (x = head; x->rn_b >= 0;) {		if ((x->rn_bmask & m[x->rn_off]) &&		    (x->rn_bmask & v[x->rn_off]))			x = x->rn_r;		else			x = x->rn_l;	}	return x;}intrn_refines(m_arg, n_arg)	void *m_arg, *n_arg;{	register caddr_t m = m_arg, n = n_arg;	register caddr_t lim, lim2 = lim = n + *(u_char *)n;	int longer = (*(u_char *)n++) - (int)(*(u_char *)m++);	int masks_are_equal = 1;	if (longer > 0)		lim -= longer;	while (n < lim) {		if (*n & ~(*m))			return 0;		if (*n++ != *m++)			masks_are_equal = 0;	}	while (n < lim2)		if (*n++)			return 0;	if (masks_are_equal && (longer < 0))		for (lim2 = m - longer; m < lim2; )			if (*m++)				return 1;	return (!masks_are_equal);}struct radix_node *rn_lookup(v_arg, m_arg, head)	void *v_arg, *m_arg;	struct radix_node_head *head;{	register struct radix_node *x;	caddr_t netmask = 0;	if (m_arg) {		if ((x = rn_addmask(m_arg, 1, head->rnh_treetop->rn_off)) == 0)			return (0);		netmask = x->rn_key;	}	x = rn_match(v_arg, head);	if (x && netmask) {		while (x && x->rn_mask != netmask)			x = x->rn_dupedkey;	}	return x;}static intrn_satsifies_leaf(trial, leaf, skip)	char *trial;	register struct radix_node *leaf;	int skip;{	register char *cp = trial, *cp2 = leaf->rn_key, *cp3 = leaf->rn_mask;	char *cplim;	int length = min(*(u_char *)cp, *(u_char *)cp2);	if (cp3 == 0)		cp3 = rn_ones;	else		length = min(length, *(u_char *)cp3);	cplim = cp + length; cp3 += skip; cp2 += skip;	for (cp += skip; cp < cplim; cp++, cp2++, cp3++)		if ((*cp ^ *cp2) & *cp3)			return 0;	return 1;}struct radix_node *rn_match(v_arg, head)	void *v_arg;	struct radix_node_head *head;{	caddr_t v = v_arg;	register struct radix_node *t = head->rnh_treetop, *x;	register caddr_t cp = v, cp2;	caddr_t cplim;	struct radix_node *saved_t, *top = t;	int off = t->rn_off, vlen = *(u_char *)cp, matched_off;	register int test, b, rn_b;	/*	 * Open code rn_search(v, top) to avoid overhead of extra	 * subroutine call.	 */	for (; t->rn_b >= 0; ) {		if (t->rn_bmask & cp[t->rn_off])			t = t->rn_r;		else			t = t->rn_l;	}	/*	 * See if we match exactly as a host destination	 * or at least learn how many bits match, for normal mask finesse.	 *	 * It doesn't hurt us to limit how many bytes to check	 * to the length of the mask, since if it matches we had a genuine	 * match and the leaf we have is the most specific one anyway;	 * if it didn't match with a shorter length it would fail	 * with a long one.  This wins big for class B&C netmasks which	 * are probably the most common case...	 */	if (t->rn_mask)		vlen = *(u_char *)t->rn_mask;	cp += off; cp2 = t->rn_key + off; cplim = v + vlen;	for (; cp < cplim; cp++, cp2++)		if (*cp != *cp2)			goto on1;	/*	 * This extra grot is in case we are explicitly asked	 * to look up the default.  Ugh!	 */	if ((t->rn_flags & RNF_ROOT) && t->rn_dupedkey)		t = t->rn_dupedkey;	return t;on1:	test = (*cp ^ *cp2) & 0xff; /* find first bit that differs */	for (b = 7; (test >>= 1) > 0;)		b--;	matched_off = cp - v;	b += matched_off << 3;	rn_b = -1 - b;	/*	 * If there is a host route in a duped-key chain, it will be first.	 */	if ((saved_t = t)->rn_mask == 0)		t = t->rn_dupedkey;	for (; t; t = t->rn_dupedkey)		/*		 * Even if we don't match exactly as a host,		 * we may match if the leaf we wound up at is		 * a route to a net.		 */		if (t->rn_flags & RNF_NORMAL) {			if (rn_b <= t->rn_b)				return t;		} else if (rn_satsifies_leaf(v, t, matched_off))				return t;	t = saved_t;	/* start searching up the tree */	do {		register struct radix_mask *m;		t = t->rn_p;		m = t->rn_mklist;		if (m) {			/*			 * If non-contiguous masks ever become important			 * we can restore the masking and open coding of			 * the search and satisfaction test and put the			 * calculation of "off" back before the "do".			 */			do {				if (m->rm_flags & RNF_NORMAL) {					if (rn_b <= m->rm_b)						return (m->rm_leaf);				} else {					off = min(t->rn_off, matched_off);					x = rn_search_m(v, t, m->rm_mask);					while (x && x->rn_mask != m->rm_mask)						x = x->rn_dupedkey;					if (x && rn_satsifies_leaf(v, x, off))						    return x;				}			m = m->rm_mklist;			} while (m);		}	} while (t != top);	return 0;}		#ifdef RN_DEBUGint	rn_nodenum;struct	radix_node *rn_clist;int	rn_saveinfo;int	rn_debug =  1;#endifstruct radix_node *rn_newpair(v, b, nodes)	void *v;	int b;	struct radix_node nodes[2];{	register struct radix_node *tt = nodes, *t = tt + 1;	t->rn_b = b; t->rn_bmask = 0x80 >> (b & 7);	t->rn_l = tt; t->rn_off = b >> 3;	tt->rn_b = -1; tt->rn_key = (caddr_t)v; tt->rn_p = t;	tt->rn_flags = t->rn_flags = RNF_ACTIVE;#ifdef RN_DEBUG	tt->rn_info = rn_nodenum++; t->rn_info = rn_nodenum++;	tt->rn_twin = t; tt->rn_ybro = rn_clist; rn_clist = tt;#endif	return t;}struct radix_node *rn_insert(v_arg, head, dupentry, nodes)	void *v_arg;	struct radix_node_head *head;	int *dupentry;	struct radix_node nodes[2];{	caddr_t v = v_arg;	struct radix_node *top = head->rnh_treetop;	int head_off = top->rn_off, vlen = (int)*((u_char *)v);	register struct radix_node *t = rn_search(v_arg, top);	register caddr_t cp = v + head_off;	register int b;	struct radix_node *tt;    	/*	 * Find first bit at which v and t->rn_key differ	 */    {	register caddr_t cp2 = t->rn_key + head_off;	register int cmp_res;	caddr_t cplim = v + vlen;	while (cp < cplim)		if (*cp2++ != *cp++)			goto on1;	*dupentry = 1;	return t;on1:	*dupentry = 0;	cmp_res = (cp[-1] ^ cp2[-1]) & 0xff;	for (b = (cp - v) << 3; cmp_res; b--)		cmp_res >>= 1;    }    {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久aⅴ国产欧美74aaa| 久久这里只有精品视频网| 中文字幕一区二区5566日韩| 国产一区二区导航在线播放| 欧美精品一区二区三区视频| 福利一区二区在线| 亚洲人成网站影音先锋播放| 在线观看成人免费视频| 亚洲成av人片在线观看| 精品日韩成人av| 丁香六月综合激情| 一区二区三区不卡在线观看| 日韩三级电影网址| 成人国产精品视频| 亚洲午夜国产一区99re久久| 欧美日韩国产三级| 国产伦精品一区二区三区免费| 亚洲欧洲成人精品av97| 欧美日韩免费观看一区三区| 韩日欧美一区二区三区| 亚洲色欲色欲www在线观看| 欧美日韩亚洲不卡| 国产一区高清在线| 亚洲综合在线第一页| 欧美mv日韩mv国产| 97成人超碰视| 久久黄色级2电影| 亚洲视频中文字幕| 精品免费日韩av| 色噜噜狠狠色综合中国| 久久精品国内一区二区三区| 中文字幕在线观看不卡视频| 欧美一区二区精美| 91麻豆精品秘密| 国产专区综合网| 亚洲国产一区二区在线播放| 久久久久久电影| 欧美精品久久一区| 91在线国产观看| 国产一二三精品| 日本不卡视频在线| 一区二区成人在线| 国产精品无人区| 欧美电影免费观看高清完整版| 色狠狠一区二区三区香蕉| 国内不卡的二区三区中文字幕 | 欧美变态tickling挠脚心| 99免费精品在线| 国产自产v一区二区三区c| 亚洲不卡一区二区三区| 亚洲人xxxx| 国产欧美一区二区三区网站 | 国产精品一区二区无线| 日韩精品一二三| 亚洲免费观看高清完整版在线观看熊| 精品国产凹凸成av人导航| 欧美久久高跟鞋激| 在线观看av不卡| www.欧美日韩| 国产黄色精品网站| 精品一区二区三区免费| 视频一区在线播放| 亚洲v日本v欧美v久久精品| ●精品国产综合乱码久久久久 | 精品久久国产字幕高潮| 欧美日韩免费观看一区二区三区 | 国产一区二区中文字幕| 麻豆精品国产传媒mv男同| 午夜精品久久久久久不卡8050| 一区二区三区高清| 亚洲综合一区二区三区| 一区二区三区国产豹纹内裤在线 | 18成人在线观看| 国产欧美精品一区二区三区四区| 久久蜜桃一区二区| 国产欧美视频在线观看| 一本大道久久a久久综合婷婷| 欧美综合在线视频| 成人app网站| 北条麻妃国产九九精品视频| 不卡的看片网站| 一本色道久久综合亚洲aⅴ蜜桃| 91在线视频播放地址| 色婷婷久久综合| 欧美三日本三级三级在线播放| 精品视频一区二区不卡| 555www色欧美视频| 欧美一级在线观看| 亚洲精品一区二区在线观看| 精品福利一二区| 国产精品久久网站| 亚洲高清在线视频| 美女www一区二区| 成人综合在线网站| 欧美午夜在线观看| 91精品国产色综合久久ai换脸 | 久久久亚洲欧洲日产国码αv| 国产欧美精品一区二区色综合| 亚洲婷婷综合色高清在线| 亚洲一区欧美一区| 久久精品免费观看| av激情亚洲男人天堂| 欧美日韩一区成人| 精品国产乱码久久久久久免费| 国产日产欧美一区二区三区 | 在线播放国产精品二区一二区四区| 欧美久久久久久蜜桃| 精品剧情v国产在线观看在线| 中文字幕av不卡| 亚洲不卡一区二区三区| 国产美女av一区二区三区| 色综合久久88色综合天天免费| 日韩亚洲欧美中文三级| 亚洲色图在线视频| 日本亚洲欧美天堂免费| 成人国产视频在线观看| 欧美一区二区免费| 亚洲天堂2016| 精品一区二区三区不卡| 色婷婷综合在线| 亚洲精品一区二区三区在线观看 | 午夜视频一区二区三区| 国产精品一二三四五| 精品视频全国免费看| 国产无人区一区二区三区| 亚洲国产欧美另类丝袜| 国产91丝袜在线播放九色| 欧美一三区三区四区免费在线看 | 亚洲国产精品精华液网站| 精品无人码麻豆乱码1区2区| 欧美午夜一区二区三区 | 日韩女优av电影| 亚洲综合一二区| 成+人+亚洲+综合天堂| 2021中文字幕一区亚洲| 日日夜夜精品视频免费| 91一区二区三区在线观看| 国产女人18毛片水真多成人如厕| 热久久久久久久| 欧洲色大大久久| 中文字幕日本乱码精品影院| 久久福利资源站| 欧美电影一区二区| 中文字幕第一页久久| 韩国精品在线观看| 日韩一区二区在线观看| 亚洲gay无套男同| 色网站国产精品| 国产精品二三区| 国产精品白丝jk黑袜喷水| 精品国产免费人成在线观看| 日韩影院在线观看| 欧美在线一区二区三区| 国产欧美一区二区三区鸳鸯浴| 激情综合亚洲精品| 日韩免费在线观看| 午夜视频在线观看一区二区三区| 在线国产亚洲欧美| 亚洲免费成人av| 色偷偷88欧美精品久久久| 中文字幕中文字幕一区| 成人午夜视频在线| 国产偷国产偷精品高清尤物| 久久99深爱久久99精品| 欧美sm极限捆绑bd| 精品一区在线看| 精品va天堂亚洲国产| 精品一区二区三区视频在线观看| 精品国产在天天线2019| 狠狠色综合播放一区二区| xnxx国产精品| 国产成人啪午夜精品网站男同| 国产人成亚洲第一网站在线播放| 成人午夜在线播放| 亚洲色欲色欲www| 欧美日韩在线综合| 日韩国产高清影视| 欧美mv日韩mv国产网站| 国产激情精品久久久第一区二区| 国产色产综合色产在线视频| 国产白丝精品91爽爽久久| 国产精品色婷婷久久58| 成人福利视频在线看| 亚洲久草在线视频| 欧美丝袜丝交足nylons| 奇米影视在线99精品| 欧美日韩中文字幕一区二区| 免费看黄色91| 久久综合九色综合97_久久久| 成人午夜在线免费| 一区二区三区**美女毛片| 3d成人h动漫网站入口| 裸体在线国模精品偷拍| 欧美高清在线精品一区| 91福利在线播放| 久草这里只有精品视频| 国产精品国产自产拍高清av王其| 欧美日韩中文一区| 国产毛片精品一区| 一区二区三区免费观看|