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

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

?? route.c

?? vxworks下的實現網絡TCPIP協議的原代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* route.c - packet routing routines *//* Copyright 1984 - 1999 Wind River Systems, Inc. */#include "copyright_wrs.h"/* * Copyright (c) 1980, 1986, 1991, 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. * *	@(#)route.c	8.3 (Berkeley) 1/9/95 *//*modification history--------------------01p,04apr00,pul  removing fastpath IP references01o,27mar00,pul  remove fastpath references01n,04jan00,pul  Fast Path IP modifications: call to fpDelRouteEntry01m,19oct99,pul  extending struct rtentry01l,04mar99,spm  fixed errors in SPR #23301 fix causing build failures01k,02mar99,spm  eliminated EEXIST error caused by ARP entries (SPR #23301)01j,26aug98,n_s  added return val check for mBufClGet in rtinit. spr #22238.01i,07jul97,rjc  newer version of rtentry incorporated.01h,01jul97,vin  added route socket message hooks for scalability, fixed		 warnings.01g,30jun97,rjc  restored old rtentry size.01f,03jun97,rjc  netmask with RTF_HOST set to 0.01e,13feb97,rjc  more changes for tos routing,01e,05feb97,rjc  changes for tos routing,01d,05dec96,vin  moved ifafree() to if.c01c,22nov96,vin  added cluster support replaced m_get(..) with mBufClGet(..).01b,24sep96,vin  rtioctl() fixed for multicast addresses.01a,03mar96,vin  created from BSD4.4 stuff. added rtioctl for backward		 compatibility. moved ifa_ifwithroute() to if.c.*/#include "vxWorks.h"#include "logLib.h"#include "net/mbuf.h"#include "net/domain.h"#include "net/protosw.h"#include "sys/socket.h"#include "sys/ioctl.h"#include "net/socketvar.h"#include "errno.h"#include "net/if.h"#include "net/route.h"#include "net/systm.h"#include "net/raw_cb.h"#include "routeEnhLib.h"#include "netinet/in.h"#include "netinet/in_var.h"#ifdef NS#include <netns/ns.h>#endif/* externs */int	tickGet();#define	SA(p) ((struct sockaddr *)(p))#define SOCKADDR_IN(s) (((struct sockaddr_in*)(s))->sin_addr.s_addr)struct	route_cb route_cb;struct	rtstat	rtstat;struct	radix_node_head *rt_tables[AF_MAX+1];int	rttrash;		/* routes not in table but not freed */int     rtmodified = 0;		/* route table modified */struct	sockaddr wildcard;	/* zero valued cookie for wildcard searches */struct radix_node * routeSwap (struct radix_node_head *, struct rtentry *,                               struct sockaddr *, struct sockaddr *);voidrtable_init(table)	void **table;{	struct domain *dom;	for (dom = domains; dom; dom = dom->dom_next)		if (dom->dom_rtattach)			dom->dom_rtattach(&table[dom->dom_family],			    dom->dom_rtoffset);}introute_init(){	rn_init();	/* initialize all zeroes, all ones, mask table */	rtable_init((void **)rt_tables);	return (OK);}/* * Packet routing routines. */voidrtalloc(ro)	register struct route *ro;{	if (ro->ro_rt && ro->ro_rt->rt_ifp && (ro->ro_rt->rt_flags & RTF_UP))		return;				 /* XXX */	ro->ro_rt = rtalloc1(&ro->ro_dst, 1);}struct rtentry* rtalloc1    (    struct sockaddr* dst,     int report    )    {        register struct radix_node_head *rnh = rt_tables[dst->sa_family];        register struct rtentry *rt;        register struct radix_node *rn;        struct rtentry *newrt = 0;        struct rt_addrinfo info;        int  s = splnet(), err = 0, msgtype = RTM_MISS;        struct rtentry *   tosRt = NULL;        uint16_t     savedTos;      /*       * save original tos since we overwrite it temporarily in the       * dst socketaddr       */       savedTos = TOS_GET (dst);match:        if (rnh && (rn = rnh->rnh_matchaddr((caddr_t)dst, rnh)) &&            ((rn->rn_flags & RNF_ROOT) == 0)) {                newrt = rt = (struct rtentry *)rn;                if (report && (rt->rt_flags & RTF_CLONING)) {                         err = rtrequest(RTM_RESOLVE, dst, SA(0),                                              SA(0), 0, &newrt);                        if (err) {                                newrt = rt;                                rt->rt_refcnt++;                                goto miss;                        }                        if ((rt = newrt) && (rt->rt_flags & RTF_XRESOLVE)) {                                msgtype = RTM_RESOLVE;                                goto miss;                        }                } else                        rt->rt_refcnt++;        } else {                rtstat.rts_unreach++;        miss:   if (report) {                        bzero((caddr_t)&info, sizeof(info));                        info.rti_info[RTAX_DST] = dst;                        if (_rtMissMsgHook)                            (*_rtMissMsgHook) (msgtype, &info, 0, err);                }        }       /* check to see if we retrieved a non default tos route        * and if yes then we also get the default tos route        * and then select the one with the longer netmask        * as required by the rfc        */       if (TOS_GET (dst) != 0)           {           TOS_SET (dst, 0);           tosRt = newrt;           newrt = NULL;           goto match;           }       if (tosRt != NULL)           {           /* select the route with longest netmask. we assume            * contiguous masks starting at the same bit position            */           if ((newrt != NULL) &&               ((((struct sockaddr_in *)rt_mask(tosRt))->sin_addr.s_addr -                ((struct sockaddr_in *)rt_mask(newrt))->sin_addr.s_addr) > 0))               {               RTFREE (newrt);               newrt = tosRt;               }           else               {               RTFREE (tosRt);               }           }       /*        * restore the saved tos. is redundant but harmless in case tos        * was default to  start with.        */       TOS_SET (dst, savedTos);       splx(s);       return (newrt);    }voidrtfree(rt)	register struct rtentry *rt;{	register struct ifaddr *ifa;	if (rt == 0)		panic("rtfree");	rt->rt_refcnt--;	if (rt->rt_refcnt <= 0 && (rt->rt_flags & RTF_UP) == 0) {		if (rt->rt_nodes->rn_flags & (RNF_ACTIVE | RNF_ROOT))			panic ("rtfree 2");		rttrash--;		if (rt->rt_refcnt < 0) {			logMsg("rtfree: %x not freed (neg refs)\n", (int)rt,			       0, 0, 0, 0, 0);			return;		}		ifa = rt->rt_ifa;		IFAFREE(ifa);		Free(rt_key(rt));		if(((ROUTE_ENTRY*)rt)->repNode==FALSE && 		   (!rt->rt_flags & RTF_LLINFO))		    routeEntryFree((ROUTE_ENTRY*)rt);                else		    Free((ROUTE_ENTRY*)rt);	}}/* * Force a routing table entry to the specified * destination to go through the given gateway. * Normally called as a result of a routing redirect * message from the network layer. * * N.B.: must be called at splnet * */intrtredirect(dst, gateway, netmask, flags, src, rtp)	struct sockaddr *dst, *gateway, *netmask, *src;	int flags;	struct rtentry **rtp;{	register struct rtentry *rt;	int error = 0;	short *stat = 0;	struct rt_addrinfo info;	struct ifaddr *ifa;	/* verify the gateway is directly reachable */	if ((ifa = ifa_ifwithnet(gateway)) == 0) {		error = ENETUNREACH;		goto out;	}	rt = rtalloc1(dst, 0);	/*	 * If the redirect isn't from our current router for this dst,	 * it's either old or wrong.  If it redirects us to ourselves,	 * we have a routing loop, perhaps as a result of an interface	 * going down recently.	 */#define	equal(a1, a2) (bcmp((caddr_t)(a1), (caddr_t)(a2), (a1)->sa_len) == 0)	if (!(flags & RTF_DONE) && rt &&	     (!equal(src, rt->rt_gateway) || rt->rt_ifa != ifa))		error = EINVAL;	else if (ifa_ifwithaddr(gateway))		error = EHOSTUNREACH;	if (error)		goto done;	/*	 * Create a new entry if we just got back a wildcard entry	 * or the the lookup failed.  This is necessary for hosts	 * which use routing redirects generated by smart gateways	 * to dynamically build the routing tables.	 */	if ((rt == 0) || (rt_mask(rt) && rt_mask(rt)->sa_len < 2))		goto create;	/*	 * Don't listen to the redirect if it's	 * for a route to an interface. 	 */	if (rt->rt_flags & RTF_GATEWAY) {		if (((rt->rt_flags & RTF_HOST) == 0) && (flags & RTF_HOST)) {			/*			 * Changing from route to net => route to host.			 * Create new route, rather than smashing route to net.			 */		create:			flags |=  RTF_GATEWAY | RTF_DYNAMIC;                         error = rtrequestAddEqui(dst, netmask, gateway,                                    flags, M2_ipRouteProto_local,                                    NULL);			/* error = rtrequest((int)RTM_ADD, dst, gateway,				    netmask, flags,				    (struct rtentry **)0);                        */			stat = &rtstat.rts_dynamic;		} else {			/*			 * Smash the current notion of the gateway to			 * this destination.  Should check about netmask!!!			 */			rt->rt_flags |= RTF_MODIFIED;			flags |= RTF_MODIFIED;			stat = &rtstat.rts_newgateway;			rt_setgate(rt, rt_key(rt), gateway);			rt->rt_mod = tickGet(); 	/* last modified */			rtmodified++; 		}	} else		error = EHOSTUNREACH;done:	if (rt) {		if (rtp && !error)			*rtp = rt;		else			rtfree(rt);	}out:	if (error)		rtstat.rts_badredirect++;	else if (stat != NULL)		(*stat)++;	bzero((caddr_t)&info, sizeof(info));	info.rti_info[RTAX_DST] = dst;	info.rti_info[RTAX_GATEWAY] = gateway;	info.rti_info[RTAX_NETMASK] = netmask;	info.rti_info[RTAX_AUTHOR] = src;        if (_rtMissMsgHook)            (*_rtMissMsgHook) (RTM_REDIRECT, &info, flags, error);	return (error); }/** Routing table ioctl interface.** WRS MODS support for this function is being for backward compatibility.* This function has be moved else where because the routing code has * nothing to do with internet specific addresses since routing is independent* of the sockaddress family.*/intrtioctl(req, data)	int req;	caddr_t data;{	struct ortentry * pORE = NULL;	struct sockaddr netMask;	struct sockaddr * pNetMask = &netMask; 	register u_long i; 	register u_long net;	register struct in_ifaddr *ia;        if (req != SIOCADDRT && req != SIOCDELRT)                return (EINVAL);	pORE = (struct ortentry *)data;	/* BSD4.3 to BSD4.4 conversion */	if (req == SIOCADDRT)	    req = RTM_ADD;	else	    req = RTM_DELETE;	/* 	 * Set the netmask to the netmask of the interface address.	 * This has to be removed if provision is made with routeAdd	 * to add the network mask. 	 */	bzero ((caddr_t)&netMask, sizeof (struct sockaddr));	/* check for default gateway address */	if (((struct sockaddr_in *)(&pORE->rt_dst))->sin_addr.s_addr 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图欧美激情| 美女网站在线免费欧美精品| 亚洲国产另类av| 国产91高潮流白浆在线麻豆| 欧美日韩国产影片| 欧美激情一二三区| 日本特黄久久久高潮| 在线观看亚洲精品| 国产精品久久久久久久蜜臀| 男女激情视频一区| 色就色 综合激情| 国产日韩精品一区二区三区| 久久国产精品免费| 欧美久久久久久蜜桃| 国产精品久久久99| 国产91色综合久久免费分享| 日韩美女视频在线| 日本不卡的三区四区五区| 色婷婷综合五月| 亚洲色大成网站www久久九九| 成人午夜伦理影院| 精品少妇一区二区| 蜜桃视频一区二区三区在线观看| 亚洲va欧美va人人爽午夜| 国产成人高清在线| 国产偷v国产偷v亚洲高清| 精品一区二区在线免费观看| 91精品国产综合久久福利软件| 7777精品伊人久久久大香线蕉完整版 | 欧美精品乱码久久久久久按摩| 欧美亚洲一区三区| 一区二区三区视频在线看| 国产丶欧美丶日本不卡视频| 亚洲精品一区二区在线观看| 精品在线你懂的| 久久精品网站免费观看| 国产精品主播直播| 国产精品女上位| 一道本成人在线| 午夜精品123| 欧美电影免费观看高清完整版在 | 婷婷久久综合九色国产成人 | 欧美韩国日本综合| 东方aⅴ免费观看久久av| 欧美激情在线观看视频免费| 成人精品一区二区三区中文字幕| 日本韩国欧美三级| 香蕉乱码成人久久天堂爱免费| 激情综合色丁香一区二区| 久久久精品黄色| 成人一区二区三区| 一区二区三区在线不卡| 欧美精品久久久久久久久老牛影院 | 九色porny丨国产精品| 精品播放一区二区| 国产成人av福利| 一区二区三区久久| 欧美一级日韩免费不卡| 国产丶欧美丶日本不卡视频| 亚洲欧美日韩电影| 日韩欧美国产精品一区| 成人福利视频网站| 亚洲va国产va欧美va观看| 精品国产百合女同互慰| 99久久婷婷国产综合精品电影 | 久久精品一区二区三区不卡牛牛| 一区2区3区在线看| 欧美tickling挠脚心丨vk| 丁香六月综合激情| 天天av天天翘天天综合网| 国产亚洲一区字幕| 91国偷自产一区二区三区成为亚洲经典 | 久久精品国产99| 日韩伦理av电影| 久久色.com| 日本福利一区二区| 国产一区二区精品久久99| 一区av在线播放| 国产精品视频在线看| 91精品麻豆日日躁夜夜躁| 99久久国产综合精品女不卡| 久久99久久99小草精品免视看| 日韩免费一区二区| 日本乱码高清不卡字幕| 国产原创一区二区三区| 亚洲不卡av一区二区三区| 欧美国产在线观看| 欧美一区二区三区啪啪| 欧亚洲嫩模精品一区三区| 成人av在线资源| 国产在线精品免费| 日韩成人精品在线| 夜夜嗨av一区二区三区中文字幕| 欧美午夜在线一二页| 成人午夜av在线| 国产一区二区在线免费观看| 日韩精品一级中文字幕精品视频免费观看 | 亚洲最色的网站| 精品国产91洋老外米糕| 欧美精品v日韩精品v韩国精品v| 日本女优在线视频一区二区| 亚洲黄色录像片| 日韩一区在线播放| 国产精品久久久久久久蜜臀 | 91精品国产综合久久精品图片 | 亚洲午夜激情av| 亚洲天堂中文字幕| 国产精品电影一区二区三区| 国产亚洲成aⅴ人片在线观看| 成人aa视频在线观看| 国产成人在线免费| 国产成人免费高清| 国产91色综合久久免费分享| 国内外成人在线| 狠狠色综合色综合网络| 久久精品国产第一区二区三区| 国产精品不卡一区二区三区| 中文字幕国产一区| 国产精品第四页| 国产精品第13页| 夜夜揉揉日日人人青青一国产精品| 日韩视频一区二区| 精品国产电影一区二区| 国产视频一区二区在线观看| 国产色一区二区| 中文字幕av在线一区二区三区| 精品视频1区2区| 欧美日韩国产在线播放网站| 欧美人体做爰大胆视频| 日韩一区二区在线看片| 久久综合久久综合亚洲| 国产日韩视频一区二区三区| 亚洲欧美在线另类| 亚洲国产精品精华液网站| 人妖欧美一区二区| 高清成人在线观看| 日本精品一区二区三区高清 | 国产精品美女视频| 亚洲激情五月婷婷| 日韩高清不卡一区| 国产麻豆精品在线| 91片在线免费观看| 91精品国产色综合久久ai换脸 | 一区二区三区在线视频免费| 日韩高清电影一区| 成人在线综合网站| 欧美日韩视频在线第一区| 日韩一区二区中文字幕| 国产精品色一区二区三区| 亚洲综合久久久| 久久精品国产亚洲高清剧情介绍| 亚洲码国产岛国毛片在线| 日韩国产一区二| 国产69精品久久久久毛片| 欧日韩精品视频| 久久综合给合久久狠狠狠97色69| 日韩一区二区三区免费观看| 中文字幕一区二区不卡| 日韩av高清在线观看| 成人国产精品视频| 91精品在线麻豆| 1024成人网| 国内精品视频666| 欧美日韩久久一区| 综合久久给合久久狠狠狠97色| 国产精品久久国产精麻豆99网站| 国产性做久久久久久| 日韩在线播放一区二区| 色偷偷一区二区三区| 久久久精品蜜桃| 久久99精品久久久| 欧美三级日本三级少妇99| 国产精品麻豆久久久| 国产又粗又猛又爽又黄91精品| 国产在线乱码一区二区三区| 欧美撒尿777hd撒尿| 亚洲色大成网站www久久九九| 日韩理论片中文av| 成人污视频在线观看| 日韩精品最新网址| 日本不卡一二三| 91麻豆精品国产91久久久资源速度 | 久久久久99精品一区| 美国三级日本三级久久99| 欧美性一级生活| 亚洲色图在线视频| av激情综合网| 国产欧美日韩久久| 精品亚洲国产成人av制服丝袜| 国产伦精品一区二区三区免费| 盗摄精品av一区二区三区| 久久综合久久99| 国产尤物一区二区| 欧美va亚洲va香蕉在线| 秋霞电影网一区二区| 91.麻豆视频| 免费成人在线观看视频| 欧美一区二区三区在线看| 日本成人在线视频网站| 欧美一级片免费看|