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

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

?? ip_mroute.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* ip_mroute.c - internet multicast routing routines *//* Copyright 1984-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/* * IP multicast forwarding procedures * * Written by David Waitzman, BBN Labs, August 1988. * Modified by Steve Deering, Stanford, February 1989. * Modified by Mark J. Steiglitz, Stanford, May, 1991 * Modified by Van Jacobson, LBL, January 1993 * Modified by Ajit Thyagarajan, PARC, August 1993 * Modified by Bill Fenner, PARC, April 1995 * * MROUTING Revision: 3.5 * $Id: ip_mroute.c,v 1.53 1999/01/18 02:06:57 fenner Exp $ *//*modification history--------------------01i,16jul02,gls  removed include of igmpRouterLib.h01h,25oct01,rae  _mCastRouteFwdHook must be IMPORT01g,12oct01,rae  merge from truestack ver 01x, base 01e (SPRs 70325,                 69594, 69643, upgrade to MROUTE 3.5, etc).01f,24sep01,gls  removed definition and use of __P() macro (SPR #28330)01e,21aug98,n_s  fixed add_lgrp () call to MALLOC(). spr20595.01d,08apr97,vin  added mCastRouteFwdHook deleted ip_mrouter.01c,05dec96,vin  changed malloc(..) to MALLOC(..) to use only network buffers,		 changed free(..) to FREE(..).01b,22nov96,vin  added cluster support replaced m_gethdr(..) with mHdrClGet(..)01a,03mar96,vin  created from BSD4.4 stuff.*/#include "vxWorks.h"/* mandatory vxWorks header */#include "errno.h"#include "timers.h"#include "net/mbuf.h"#include "sys/socket.h"#include "sys/times.h"#include "net/socketvar.h"#include "net/protosw.h"#include "sys/times.h"#include "net/route.h"#include "net/mbuf.h"#include "netinet/in.h"#include "netinet/in_systm.h"#include "netinet/ip.h"#include "netinet/ip_var.h"#include "netinet/in_var.h"#include "netinet/igmp.h"#include "netinet/igmp_var.h"#include "memPartLib.h"#include "tickLib.h"#include "wdLib.h"#include "sockLib.h"#include "timers.h"#include "net/mbuf.h"#include "wdLib.h"#include "netinet/ip_mroute.h"#include "netinet/udp.h"#include "netLib.h"#include "net/systm.h"#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET#include "wvNetLib.h"#endif#endif#ifdef VIRTUAL_STACK#include "netinet/vsLib.h"#include "netinet/vsIgmp.h"#include "netinet/vsMcast.h"#endif /* VIRTUAL_STACK */#ifndef NTOHL#if BYTE_ORDER != BIG_ENDIAN#define NTOHL(d) ((d) = ntohl((d)))#define NTOHS(d) ((d) = ntohs((u_short)(d)))#define HTONL(d) ((d) = htonl((d)))#define HTONS(d) ((d) = htons((u_short)(d)))#else#define NTOHL(d)#define NTOHS(d)#define HTONL(d)#define HTONS(d)#endif#endif/* * Macros for handling bitmaps with one bit per virtual interface. */#define ALL_VIFS (vifi_t)-1#define	VIFM_SET(n, m)		((m) |= (1 << (n)))#define	VIFM_CLR(n, m)		((m) &= ~(1 << (n)))#define	VIFM_ISSET(n, m)	((m) & (1 << (n)))#define	VIFM_CLRALL(m)		((m) = 0x00000000)#define	VIFM_COPY(mfrom, mto)	((mto) = (mfrom))#define	VIFM_SAME(m1, m2)	((m1) == (m2))/* * Globals.  All but ip_mrouter and ip_mrtproto could be static, * except for netstat or debugging purposes. */#ifndef VIRTUAL_STACKextern USHORT ip_id;struct socket * ip_mrouter = 0;IMPORT FUNCPTR _mCastRouteFwdHook;FUNCPTR _pimCacheMissSendHook;static struct mrtstat	mrtstat;/* table of mfc entries */static struct mfc	*mfctable[MFCTBLSIZ];static u_char		nexpire[MFCTBLSIZ];/* table of virtual interfaces */static struct vif	viftable[MAXVIFS];static u_int	mrtdebug = 0;	  /* debug level 	*/static u_int  	tbfdebug = 0;     /* tbf debug level 	*/struct mroute_timer_struct*  expire_upcalls_ch;/* * Define the token bucket filter structures * tbftable -> each vif has one of these for storing info  */static struct tbf tbftable[MAXVIFS];/* * 'Interfaces' associated with decapsulator (so we can tell * packets that went through it from ones that get reflected * by a broken gateway).  These interfaces are never linked into * the system ifnet list & no routes point to them.  I.e., packets * can't be sent this way.  They only exist as a placeholder for * multicast source verification. */static struct ifnet multicast_decap_if[MAXVIFS];/* * Private variables. */static vifi_t	   numvifs = 0;static int have_encap_tunnel = 0;/* * one-back cache used by ipip_input to locate a tunnel's vif * given a datagram's src ip address. */static u_long last_encap_src;static struct vif *last_encap_vif;int pim_assert;#endif /* VIRTUAL_STACK */#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* Set common fields of event identifiers for this module. */LOCAL UCHAR wvNetModuleId = WV_NET_IPMROUTE_MODULE; /* Value for ip_mroute.c */LOCAL UCHAR wvNetLocalFilter = WV_NET_NONE;     /* Available event filter */LOCAL ULONG wvNetEventId;       /* Event identifier: see wvNetLib.h */#endif    /* INCLUDE_WVNET */#endif/* prototype IP hdr for encapsulated packets */static struct ip multicast_encap_iphdr	= {#if BYTE_ORDER == LITTLE_ENDIAN	sizeof(struct ip) >> 2, IPVERSION,#else	IPVERSION, sizeof(struct ip) >> 2,#endif	0,				/* tos */	sizeof(struct ip),		/* total length */	0,				/* id */	0,				/* frag offset */	ENCAP_TTL, ENCAP_PROTO,		0,				/* checksum */};/*  * The timer is a wrapper for watchdog timers... functionality from the net/3 release of the bsd code.   */enum sopt_dir { SOPT_GET, SOPT_SET };struct sockopt {	enum	sopt_dir sopt_dir; /* is this a get or a set? */	int	sopt_level;	/* second arg of [gs]etsockopt */	int	sopt_name;	/* third arg of [gs]etsockopt */	void   *sopt_val;	/* fourth arg of [gs]etsockopt */	size_t	sopt_valsize;	/* (almost) fifth arg of [gs]etsockopt */	struct	proc *sopt_p;	/* calling process or null if kernel */};/* timer struct here enables */typedef struct mroute_timer_struct{	WDOG_ID watchdog_id;	VOIDFUNCPTR expire_routine;	void* argument;} MROUTE_TIMER_STRUCT;static u_long	X_ip_mcast_src __P((int vifi));static int	X_ip_mforward __P(( struct mbuf *m, struct ifnet *ifp, struct ip *ip, struct ip_moptions *imo) );static int	X_ip_mrouter_done __P((void));static int	X_ip_mrouter_get __P((struct socket *so, struct sockopt *m));static int	X_ip_mrouter_set __P((struct socket *so, struct sockopt *m));static int	X_legal_vif_num __P((int vif));static int	X_mrt_ioctl __P((int cmd, caddr_t data));static int get_sg_cnt(struct sioc_sg_req *);static int get_vif_cnt(struct sioc_vif_req *);static int ip_mrouter_init(struct socket *, int);static int add_vif(struct vifctl *);static int del_vif(vifi_t);static int add_mfc(struct mfcctl *);static int del_mfc(struct mfcctl *);static int set_assert(FUNCPTR);static int setDebug(int);static void expire_upcalls(void *);static int ip_mdq(struct mbuf *, struct ifnet *, struct mfc *,		  vifi_t);static void phyint_send(struct ip *, struct vif *, struct mbuf *);static void encap_send(struct ip *, struct vif *, struct mbuf *);static void tbf_control(struct vif *, struct mbuf *, struct ip *, u_long);static void tbf_queue(struct vif *, struct mbuf *);static void tbf_process_q(struct vif *);static void tbf_reprocess_q(void *);static int tbf_dq_sel(struct vif *, struct ip *);static void tbf_send_packet(struct vif *, struct mbuf *);static void tbf_update_tokens(struct vif *);static int priority(struct vif *, struct ip *);void multiencap_decap(struct mbuf *);static void mRouteDumpMfctable();static BOOL oifListIsEmpty(struct mfc* rt);static int mRouteOifsAdd(struct mfc* rt, int oif, int ttl);static int mRouteOifsRemove(struct mfc* rt, int oif);static int mRouteGroupLoopRemove(struct mfc* rt, struct mfc* root);int (*ip_mrouter_done)(void) = X_ip_mrouter_done;u_long (*ip_mcast_src)(int) = X_ip_mcast_src;/* From other BSD code that has yet to be ported */static intsooptcopyin(struct sockopt *, void	*, size_t, size_t);static intsooptcopyout(struct sockopt *, void	*, size_t);static intif_allmulti(struct ifnet *, int);/* wrappers for timers in mroute */static void mRouteNetJobAdd(MROUTE_TIMER_STRUCT* p_timer_struct_object);static MROUTE_TIMER_STRUCT* mRouteTimeout(VOIDFUNCPTR expire_routine, void* argument, int number_of_ticks);static void mRouteUntimeOut(MROUTE_TIMER_STRUCT*  p_timer_struct);#define timeout mRouteTimeout#define untimeout mRouteUntimeOut/* vxWorks wrapper for tickGet */#define GET_TIME(t)	t = tickGet(); #ifdef  _WRS_VXWORKS_5_X#define mRouteNameToPort(ignore, both)  1#else#define mRouteNameToPort igmpNameToPort#endif#ifndef MRT_ALLOC#define MRT_ALLOC KHEAP_ALLOC#endif#ifndef MRT_FREE #define MRT_FREE  KHEAP_FREE#endif/* wrapper for header length */#define	MLEN		(MSIZE - sizeof(M_BLK_HDR))	/* normal data len */#define	MHLEN		(MLEN - sizeof(M_PKT_HDR))	/* data len w/pkthdr */#define MRTDEBUG(printThis, string, param1, param2, param3, param4, param5, param6) \   {\   if ( (_func_logMsg != NULL) && (printThis) )\      (* _func_logMsg) (string, param1, param2, param3, param4, param5, param6);\   }/* bsd function wrapper */#define	MGETHDR(m, how, type) {\		m = mHdrClGet(M_DONTWAIT, MT_DATA, sizeof(*m), TRUE);\		}/* * Hash function for a source, group entry */#define MFCHASH(a, g) MFCHASHMOD(((a) >> 20) ^ ((a) >> 10) ^ (a) ^ \			((g) >> 20) ^ ((g) >> 10) ^ (g))/* * Find a route for a given origin IP address and Multicast group address * Type of service parameter to be added in the future!!! */#define MFCFIND(o, g, rt) { \	struct mfc *_rt = mfctable[MFCHASH(o,g)]; \	rt = NULL; \	++mrtstat.mrts_mfc_lookups; \	while (_rt) { \		if ((_rt->mfc_origin.s_addr == o) && \		    (_rt->mfc_mcastgrp.s_addr == g) && \		    (_rt->mfc_stall == NULL)) { \			rt = _rt; \			break; \		} \		_rt = _rt->mfc_next; \	} \	if (rt == NULL) { \		++mrtstat.mrts_mfc_misses; \	} \}/* * Macros to compute elapsed time efficiently * Borrowed from Van Jacobson's scheduling code */#define TV_DELTA(a, b, delta)  delta = (a) - (b);#define TV_LT(a, b) (((a).tv_usec < (b).tv_usec && \	      (a).tv_sec <= (b).tv_sec) || (a).tv_sec < (b).tv_sec)/* The net/3 code uses the X_ip_mrouter_set command to handle socket options in * a slightly different format.  X_ip_mrouter_cmd reformats the parameters */int X_ip_mrouter_cmd(cmd, so, m)int cmd;struct socket* so;struct mbuf* m;{ 		struct sockopt socket_option; 	int result;	socket_option.sopt_name = cmd;	if (m == NULL) 	{		return (ERROR);	}	else 	{			socket_option.sopt_val = m->m_data; 		socket_option.sopt_valsize = m->mBlkHdr.mLen; 	}	result = X_ip_mrouter_set(so, &socket_option); 	return (0);}int ip_mrouter_cmd (int cmd, struct socket* so, struct mbuf* m) {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_INFO event */    WV_NET_MARKER_2 (NET_AUX_EVENT, WV_NET_INFO, 10, 12,                     WV_NETEVENT_IPMRT_START, so->so_fd, cmd)#endif  /* INCLUDE_WVNET */#endif	return X_ip_mrouter_cmd(cmd, so, m);}/* * Handle MRT setsockopt commands to modify the multicast routing tables. */static intX_ip_mrouter_set(so, sopt)	struct socket *so;	struct sockopt *sopt;{	int	error, optval;	vifi_t	vifi;	struct	vifctl vifc;	struct	mfcctl mfc;	error = 0;	optval = 0;	switch (sopt->sopt_name) {	case MRT_INIT:		error = sooptcopyin(sopt, &optval, sizeof (optval), 				    sizeof (optval) );		optval = (int)(sopt->sopt_val);		if (error)			break;            MRTDEBUG            (                (mrtdebug &DEBUG_MFC),                "MROUTE: IP_MROUTER received ip_mrouter init so=%p, optval=%i.\n",                 (int)so,                 optval,3,4,5,6            );		error = ip_mrouter_init(so, optval);		break;	case MRT_DONE:            MRTDEBUG            (                (mrtdebug &DEBUG_MFC),			    "MROUTE: IP_MROUTER received MRT_DONE.\n",                1,2,3,4,5,6            );		error = ip_mrouter_done();		break;	case MRT_ADD_VIF:			MRTDEBUG            (                (mrtdebug &DEBUG_MFC),			    "MROUTE: IP_MROUTER received MRT_ADD_VIF.\n",                1,2,3,4,5,6            );		error = sooptcopyin(sopt, &vifc, sizeof vifc, sizeof vifc);		if (error)			break;		error = add_vif(&vifc);		break;	case MRT_DEL_VIF:			MRTDEBUG            (                (mrtdebug &DEBUG_MFC),    			"MROUTE: IP_MROUTER received MRT_DEL_VIF.\n",                1,2,3,4,5,6            );		error = sooptcopyin(sopt, &vifi, sizeof (vifi), sizeof (vifi));		if (error)			break;		error = del_vif(vifi);		break;	case MRT_ADD_MFC:	case MRT_DEL_MFC:            MRTDEBUG            (                (mrtdebug &DEBUG_MFC),                "MROUTE: IP_MROUTER received MRT_ADD/DEL_MFC.\n",                1,2,3,4,5,6            );		error = sooptcopyin(sopt, &mfc, sizeof mfc, sizeof mfc);		if (error){					MRTDEBUG(mrtdebug,"MROUTE: I am not dqing...  sooptcopyin error.\n",1,2,3,4,5,6);					break;                   }		if (sopt->sopt_name == MRT_ADD_MFC)			error = add_mfc(&mfc);		else			error = del_mfc(&mfc);		break;	case MRT_ASSERT:			MRTDEBUG            (                (mrtdebug &DEBUG_MFC),			    "MROUTE: IP_MROUTER received MRT_ASSERT.\n",                1,2,3,4,5,6            );		error = sooptcopyin(sopt, &optval, sizeof optval, 				    sizeof optval);		if (error)			break;		set_assert( (FUNCPTR) optval);		break;	case MRT_DEBUG:		MRTDEBUG        (            (mrtdebug &DEBUG_MFC),            "MROUTE: IP_MROUTER received MRT_DEBUG.\n",            1,2,3,4,5,6        );		error = sooptcopyin(sopt, &optval, sizeof optval, 				    sizeof optval);		if (error)			break;		setDebug(optval);		break;	default:#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_ERROR event */            WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_ERROR, 23, 3,                             WV_NETEVENT_IPMRT_BADCMD, sopt->sopt_name)#endif  /* INCLUDE_WVNET */#endif		error = EOPNOTSUPP;		break;	}	return (error);}int (*ip_mrouter_set)(struct socket *, struct sockopt *) = X_ip_mrouter_set;/* * Handle MRT getsockopt commands */static intX_ip_mrouter_get(so, sopt)	struct socket *so;	struct sockopt *sopt;{	int error;	static int version = 0x0305; /* !!! why is this here? XXX */	switch (sopt->sopt_name) {	case MRT_VERSION:		error = sooptcopyout(sopt, &version, sizeof version);		break;	case MRT_ASSERT:		error = sooptcopyout(sopt, &pim_assert, sizeof pim_assert);		break;	default:		error = EOPNOTSUPP;		break;	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道久久综合亚洲aⅴ蜜桃 | 91免费视频观看| 欧美高清性hdvideosex| 亚洲综合自拍偷拍| 91在线视频网址| 国产精品动漫网站| 成人教育av在线| 亚洲欧美日韩中文字幕一区二区三区| 国产成人亚洲综合a∨婷婷| 欧美一区二区三区性视频| 亚洲一区二三区| 欧美午夜精品一区二区三区| 1024成人网| 欧美优质美女网站| 日韩精彩视频在线观看| 日韩一区二区视频| 精品一区中文字幕| 国产网站一区二区| 在线观看一区不卡| 日本va欧美va瓶| 337p亚洲精品色噜噜噜| 精品无人区卡一卡二卡三乱码免费卡| 精品理论电影在线| 99精品视频中文字幕| 亚洲高清在线视频| 欧美精品一区二区高清在线观看| 国产高清不卡一区| 亚洲日本va在线观看| 欧美一区二区免费| 成人aa视频在线观看| 日韩激情一二三区| 亚洲欧洲日产国产综合网| 欧美精品一二三四| 成人丝袜18视频在线观看| 亚洲成人自拍一区| 最新不卡av在线| 久久久99免费| 日韩一级二级三级| 欧美性色黄大片| 色婷婷香蕉在线一区二区| 国产在线视视频有精品| 日韩和欧美一区二区三区| 综合久久给合久久狠狠狠97色| 精品精品国产高清a毛片牛牛| 在线观看不卡视频| 国产欧美精品一区二区三区四区| av电影在线观看完整版一区二区| 成人福利视频网站| 日本韩国精品在线| 日韩黄色小视频| 亚洲国产精品嫩草影院| 亚洲欧美综合另类在线卡通| 久久婷婷色综合| 欧美mv和日韩mv的网站| 日韩欧美一二三四区| 欧美色倩网站大全免费| 91久久精品午夜一区二区| 成a人片国产精品| 色综合久久久久久久| 欧美在线视频你懂得| 欧美日韩国产小视频| 精品视频资源站| 欧美大尺度电影在线| 欧美电影免费提供在线观看| 国产性做久久久久久| 综合电影一区二区三区| 亚洲一区免费视频| 狂野欧美性猛交blacked| 国产一区二区免费视频| 99久久久久久99| 欧美日韩国产高清一区二区三区| 91精品黄色片免费大全| 2023国产一二三区日本精品2022| 精品国产凹凸成av人网站| 亚洲日穴在线视频| 水野朝阳av一区二区三区| 国产成人在线视频网站| 91成人在线精品| 国产日韩亚洲欧美综合| 亚洲成av人片在线| 成人手机电影网| 久久影院视频免费| 日韩电影在线免费| 91视频免费观看| 26uuu欧美| 久久国产免费看| 欧美日韩精品一区二区在线播放 | 欧美麻豆精品久久久久久| 国产亚洲欧美日韩在线一区| 亚洲成人tv网| 欧美精品久久久久久久多人混战| 国产精品午夜在线| 韩国av一区二区三区| 91精品国产一区二区三区| 一区二区三区高清| 一本大道久久a久久精品综合| 久久久久久久久一| 国产精品99久| 国产精品污网站| 国产成a人无v码亚洲福利| 久久嫩草精品久久久精品| 久久国产乱子精品免费女| 欧美日韩国产精品自在自线| 亚洲大片在线观看| 欧美日韩国产一区二区三区地区| 日韩一区在线看| 色婷婷精品大视频在线蜜桃视频| 亚洲日本乱码在线观看| 色综合天天在线| 亚洲电影视频在线| 欧美一区二区日韩一区二区| 久久99久久久欧美国产| 久久男人中文字幕资源站| 成人97人人超碰人人99| 亚洲乱码国产乱码精品精小说| 在线一区二区视频| 免费欧美高清视频| 国产精品少妇自拍| 精品视频一区三区九区| 韩国av一区二区三区| 欧美成人在线直播| 色偷偷成人一区二区三区91| 亚洲桃色在线一区| 91精品国产福利在线观看| 国产盗摄一区二区| 亚洲成av人片在线观看| 国产欧美日本一区视频| 51精品秘密在线观看| 国产成人在线视频网站| 日本强好片久久久久久aaa| 久久久一区二区三区| 欧美日韩大陆在线| 国产麻豆成人传媒免费观看| 一区二区在线观看视频 | www.在线成人| 精品一区二区免费视频| 午夜久久久久久| 亚洲欧美中日韩| 国产色爱av资源综合区| 欧美一级免费大片| 欧美三级一区二区| 色吧成人激情小说| 不卡免费追剧大全电视剧网站| 老司机免费视频一区二区三区| 亚洲免费毛片网站| 中文字幕综合网| 最新日韩av在线| 中文字幕第一区| 国产精品美女一区二区三区| 精品国产乱码久久久久久老虎| 在线观看91av| 在线成人av网站| 欧美日本一区二区三区四区| 欧美在线免费观看视频| 欧美性色欧美a在线播放| 日本精品免费观看高清观看| 欧美日韩一区二区三区视频| 欧美日韩一区小说| 欧美高清你懂得| 久久综合视频网| 亚洲精品日韩综合观看成人91| 综合激情成人伊人| 亚洲成人综合网站| 麻豆免费精品视频| 成人黄页在线观看| 91视频一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | 欧美午夜精品久久久久久超碰| 欧美美女一区二区在线观看| 欧美一区二区免费视频| 日本一区二区三区视频视频| 亚洲天堂成人在线观看| 蜜桃视频在线观看一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲日本韩国一区| 看电影不卡的网站| 97久久精品人人做人人爽| 日韩欧美的一区| 亚洲一区在线观看视频| 成人美女视频在线观看18| 777xxx欧美| 亚洲人成在线观看一区二区| 精品一区二区三区在线观看| 日本乱人伦aⅴ精品| 久久精品亚洲精品国产欧美kt∨| 亚洲一区自拍偷拍| 国产69精品一区二区亚洲孕妇| 欧美一区二区美女| 亚洲国产一区在线观看| 91毛片在线观看| 中日韩av电影| 成人性视频网站| 久久精品综合网| 国产91精品久久久久久久网曝门 | 欧美α欧美αv大片| 日本在线播放一区二区三区| 一本一道久久a久久精品| 亚洲另类在线制服丝袜| 久久99国产精品成人| 在线看不卡av|