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

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

?? igmp.c

?? vxwork源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#ifdef INCLUDE_WVNET    /* WV_NET_WARNING event */            WV_NET_DSTADDRIN_EVENT_3 (NET_CORE_EVENT, WV_NET_WARNING, 5, 4,                                        ip->ip_dst.s_addr,                                      WV_NETEVENT_IGMPIN_BADADDR, WV_NET_RECV,                                      igmp->igmp_type, ip->ip_dst.s_addr, 0)#endif  /* INCLUDE_WVNET */#endif				return;			}		}		/*		 * - Start the timers in all of our membership records		 *   that the query applies to for the interface on		 *   which the query arrived excl. those that belong		 *   to the "all-hosts" group (224.0.0.1).		 * - Restart any timer that is already running but has		 *   a value longer than the requested timeout.		 * - Use the value specified in the query message as		 *   the maximum timeout.		 */                {                IN_MULTI_HEAD * inMultiHead;                int		ix;                for (ix = 0; ix <= mCastHashInfo.hashMask; ix++)                    {                    inMultiHead = &mCastHashInfo.hashBase [ix];                    if (inMultiHead != NULL)                        {                        for (inm = inMultiHead->lh_first;                             inm != NULL;                             inm = inm->inm_hash.le_next)                            {                            if (inm->inm_ifp == ifp &&                                inm->inm_addr.s_addr != igmp_all_hosts_group &&                                (igmp->igmp_group.s_addr == 0 ||                                 igmp->igmp_group.s_addr == inm->inm_addr.s_addr))                                {                                if (inm->inm_timer == 0 ||                                    inm->inm_timer > timer)                                    {                                    inm->inm_timer =                                        IGMP_RANDOM_DELAY(timer);                                    igmp_timers_are_running = 1;                                    }                                }                                                        }                        }                    }                }        		break;	case IGMP_V1_MEMBERSHIP_REPORT:	case IGMP_V2_MEMBERSHIP_REPORT:		/*		 * For fast leave to work, we have to know that we are the		 * last person to send a report for this group.  Reports		 * can potentially get looped back if we are a multicast		 * router, so discard reports sourced by me.		 */		IFP_TO_IA(ifp, ia);		if (ia && ip->ip_src.s_addr == IA_SIN(ia)->sin_addr.s_addr)			break;		++igmpstat.igps_rcv_reports;		if (ifp->if_flags & IFF_LOOPBACK)			break;		if (!IN_MULTICAST(ntohl(igmp->igmp_group.s_addr))) {			++igmpstat.igps_rcv_badreports;			m_freem(m);#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_WARNING event */            WV_NET_DSTADDRIN_EVENT_3 (NET_CORE_EVENT, WV_NET_WARNING, 5, 4,                                        ip->ip_dst.s_addr,                                      WV_NETEVENT_IGMPIN_BADADDR, WV_NET_RECV,                                      igmp->igmp_type, ip->ip_dst.s_addr,                                      igmp->igmp_group.s_addr)#endif  /* INCLUDE_WVNET */#endif			return;		}		/*		 * KLUDGE: if the IP source address of the report has an		 * unspecified (i.e., zero) subnet number, as is allowed for		 * a booting host, replace it with the correct subnet number		 * so that a process-level multicast routing demon can		 * determine which subnet it arrived from.  This is necessary		 * to compensate for the lack of any way for a process to		 * determine the arrival interface of an incoming packet.		 */		if ((ntohl(ip->ip_src.s_addr) & IN_CLASSA_NET) == 0)			if (ia) ip->ip_src.s_addr = htonl(ia->ia_subnet);		/*		 * If we belong to the group being reported, stop		 * our timer for that group.		 */		IN_LOOKUP_MULTI(igmp->igmp_group, ifp, inm);		if (inm != NULL) {			inm->inm_timer = 0;			++igmpstat.igps_rcv_ourreports;			inm->inm_state = IGMP_OTHERMEMBER;		}		break;	}	/*	 * Pass all valid IGMP packets up to any process(es) listening	 * on a raw IGMP socket.	 */#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_NOTICE event */        WV_NET_ADDRIN_EVENT_2 (NET_CORE_EVENT, WV_NET_NOTICE, 5, 5,                               ip->ip_src.s_addr, ip->ip_dst.s_addr,                            WV_NETEVENT_IGMPIN_FINISH, WV_NET_RECV,                               ip->ip_src.s_addr, ip->ip_dst.s_addr)#endif  /* INCLUDE_WVNET */#endif        if (_igmpMessageHook) /* if IGMP routing is on */            {            _igmpMessageHook (m->m_pkthdr.rcvif->if_index,                         &(ip->ip_src), igmp);            m_freem(m);            }        else            rip_input(m);}voidigmp_joingroup(inm)struct in_multi *inm;{int s = splnet();    #ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_VERBOSE event */    WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_VERBOSE, 16, 9,                     WV_NETEVENT_IGMPJOIN_START, inm->inm_addr.s_addr)#endif  /* INCLUDE_WVNET */#endif            if (_igmpJoinAlertHook != NULL)            _igmpJoinAlertHook(inm->inm_ifp->if_index);    if (inm->inm_addr.s_addr == igmp_all_hosts_group        || inm->inm_ifp->if_flags & IFF_LOOPBACK) {    inm->inm_timer = 0;    inm->inm_state = IGMP_OTHERMEMBER;    } else {    inm->inm_rti = find_rti(inm->inm_ifp);    igmp_sendpkt(inm, inm->inm_rti->rti_type, 0);		inm->inm_timer = IGMP_RANDOM_DELAY(IGMP_MAX_HOST_REPORT_DELAY *                                                             PR_FASTHZ);		inm->inm_state = IGMP_IREPORTEDLAST;		igmp_timers_are_running = 1;	}    splx(s);    }voidigmp_leavegroup(inm)struct in_multi *inm;{#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_VERBOSE event */         WV_NET_MARKER_1 (NET_AUX_EVENT, WV_NET_VERBOSE, 17, 10,                             WV_NETEVENT_IGMPLEAVE_START, inm->inm_addr.s_addr)#endif  /* INCLUDE_WVNET */#endif	 if (_igmpLeaveAlertHook != NULL)            _igmpLeaveAlertHook(inm->inm_ifp->if_index);         if (inm->inm_state == IGMP_IREPORTEDLAST &&	    inm->inm_addr.s_addr != igmp_all_hosts_group &&	    !(inm->inm_ifp->if_flags & IFF_LOOPBACK) &&	    inm->inm_rti->rti_type != IGMP_V1_ROUTER)		igmp_sendpkt(inm, IGMP_V2_LEAVE_GROUP, igmp_all_rtrs_group);}voidigmp_fasttimo(){	register struct in_multi *inm;	int s;	#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_INFO event */        WV_NET_MARKER_0 (NET_AUX_EVENT, WV_NET_INFO, 4, 7,                         WV_NETEVENT_IGMPFASTTIMER_START)#endif  /* INCLUDE_WVNET */#endif	/*	 * Quick check to see if any work needs to be done, in order	 * to minimize the overhead of fasttimo processing.	 */	if (!igmp_timers_are_running)		return;	s = splnet();	igmp_timers_are_running = 0;        {        IN_MULTI_HEAD * inMultiHead;        int		ix;        for (ix = 0; ix <= mCastHashInfo.hashMask; ix++)            {            inMultiHead = &mCastHashInfo.hashBase [ix];            if (inMultiHead != NULL)                {                for (inm = inMultiHead->lh_first;                     inm != NULL;                     inm = inm->inm_hash.le_next)                    {                    if (inm->inm_timer == 0)                        {                        /* do nothing */                        }                    else if (--inm->inm_timer == 0)                        {			igmp_sendpkt(inm, inm->inm_rti->rti_type, 0);			inm->inm_state = IGMP_IREPORTEDLAST;			}                    else                        {                        igmp_timers_are_running = 1;                        }                    }                }            }    }	splx(s);}voidigmp_slowtimo(){	int s = splnet();	register struct router_info *rti =  Head;#ifdef IGMP_DEBUG_XXX	printf("[igmp.c,_slowtimo] -- > entering \n");#endif	while (rti) {	    if (rti->rti_type == IGMP_V1_ROUTER) {		rti->rti_time++;                if(_igmpQuerierTimeUpdateHook != NULL)                            _igmpQuerierTimeUpdateHook(rti->rti_ifp->if_index, rti->rti_time);		if (rti->rti_time >= IGMP_AGE_THRESHOLD) {			rti->rti_type = IGMP_V2_ROUTER;		}	    }	    rti = rti->rti_next;	}#ifdef IGMP_DEBUG_XXX	printf("[igmp.c,_slowtimo] -- > exiting \n");#endif	splx(s);}static struct route igmprt;static voidigmp_sendpkt(inm, type, addr)	struct in_multi *inm;	int type;	unsigned long addr;{        struct mbuf *m;        struct igmp *igmp;        struct ip *ip;        struct ip_moptions imo;        m = mHdrClGet(M_DONTWAIT, MT_HEADER, CL_SIZE_128, TRUE);	if (m == NULL)            {#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_EMERGENCY event */            WV_NET_MARKER_0 (NET_AUX_EVENT, WV_NET_EMERGENCY, 8, 1,                            WV_NETEVENT_IGMPSENDREP_NOBUFS)#endif  /* INCLUDE_WVNET */#endif            return;            }	m->m_pkthdr.rcvif = loif;	m->m_pkthdr.len = sizeof(struct ip) + IGMP_MINLEN;	MH_ALIGN(m, IGMP_MINLEN + sizeof(struct ip));	m->m_data += sizeof(struct ip);        m->m_len = IGMP_MINLEN;        igmp = mtod(m, struct igmp *);        igmp->igmp_type   = type;        igmp->igmp_code   = 0;        igmp->igmp_group  = inm->inm_addr;        igmp->igmp_cksum  = 0;        igmp->igmp_cksum  = in_cksum(m, IGMP_MINLEN);        m->m_data -= sizeof(struct ip);        m->m_len += sizeof(struct ip);        ip = mtod(m, struct ip *);        ip->ip_tos        = 0;        ip->ip_len        = sizeof(struct ip) + IGMP_MINLEN;        ip->ip_off        = 0;        ip->ip_p          = IPPROTO_IGMP;        ip->ip_src.s_addr = INADDR_ANY;        ip->ip_dst.s_addr = addr ? addr : igmp->igmp_group.s_addr;        imo.imo_multicast_ifp  = inm->inm_ifp;        imo.imo_multicast_ttl  = 1;	/*	imo.imo_multicast_vif  = -1; */        /*         * Request loopback of the report if we are acting as a multicast         * router, so that the process-level routing demon can hear it.         */       imo.imo_multicast_loop = (_mCastRouteFwdHook != NULL);#ifdef WV_INSTRUMENTATION#ifdef INCLUDE_WVNET    /* WV_NET_NOTICE event */        WV_NET_DSTADDROUT_EVENT_1 (NET_CORE_EVENT, WV_NET_NOTICE, 6, 6,                                   ip->ip_dst.s_addr,                                   WV_NETEVENT_IGMPSENDREP_FINISH, WV_NET_SEND,                                   ip->ip_dst.s_addr)#endif  /* INCLUDE_WVNET */#endif	/*	 * XXX	 * Do we have to worry about reentrancy here?  Don't think so.	 */        ip_output(m, router_alert, &igmprt, 0, &imo);        ++igmpstat.igps_snd_reports;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区日本| 日韩黄色一级片| 成人性生交大片免费看中文网站| 欧美大度的电影原声| 日韩专区一卡二卡| 欧美无砖专区一中文字| 亚洲自拍欧美精品| 91黄色在线观看| 一区二区三区中文字幕精品精品 | 91蜜桃视频在线| 亚洲天堂精品在线观看| 91在线国内视频| 18成人在线观看| 色综合久久99| 亚洲在线中文字幕| 欧美人体做爰大胆视频| 日韩国产在线观看一区| 日韩亚洲欧美在线| 黄色资源网久久资源365| 久久亚洲捆绑美女| 高清国产一区二区| 国产精品国产三级国产有无不卡 | 97久久超碰精品国产| 日韩毛片视频在线看| 91丝袜美女网| 一区二区三区色| 欧美精品第1页| 免费视频最近日韩| 久久九九全国免费| 99精品国产一区二区三区不卡| 亚洲欧美成人一区二区三区| 在线日韩av片| 日韩av网站免费在线| 精品成人一区二区| 成人福利视频在线看| 一区二区三区波多野结衣在线观看| 欧洲亚洲精品在线| 免费观看一级特黄欧美大片| 久久久综合网站| 99国内精品久久| 亚洲电影在线免费观看| 精品蜜桃在线看| 成人午夜又粗又硬又大| 一区二区成人在线观看| 91麻豆精品国产91久久久久| 国产一区二三区| 1区2区3区国产精品| 欧美日韩高清影院| 国产精品99久久久| 亚洲综合av网| 精品久久久久久久久久久院品网 | 欧美视频一区二| 奇米精品一区二区三区在线观看 | 久久疯狂做爰流白浆xx| 欧美国产日韩精品免费观看| 欧美综合视频在线观看| 美日韩一区二区三区| 中文幕一区二区三区久久蜜桃| 一本高清dvd不卡在线观看| 精品国产乱码久久久久久图片 | 色综合天天综合网天天看片| 午夜精品福利久久久| 国产亚洲成av人在线观看导航| 在线亚洲精品福利网址导航| 久久99精品一区二区三区| 亚洲视频免费观看| 欧美大度的电影原声| 91欧美一区二区| 六月婷婷色综合| 亚洲男人天堂av| 精品国产麻豆免费人成网站| 一本大道久久精品懂色aⅴ | 日本不卡视频在线| 国产精品久久影院| 欧美一区二区日韩一区二区| 波多野结衣在线一区| 日韩av电影一区| 亚洲人妖av一区二区| 欧美va天堂va视频va在线| 91色视频在线| 国产精品91xxx| 精品不卡在线视频| 在线观看日韩电影| 成人免费视频免费观看| 蜜臀久久99精品久久久久久9| 亚洲视频免费看| 久久精品夜色噜噜亚洲aⅴ| 欧美日韩国产大片| 91色porny| 国产.欧美.日韩| 久久国产综合精品| 亚洲妇熟xx妇色黄| 亚洲色图视频网| 欧美国产成人在线| 精品久久久久久久久久久久久久久久久 | 狠狠色综合日日| 图片区小说区区亚洲影院| 自拍偷拍亚洲激情| 国产欧美精品一区二区色综合朱莉| 91麻豆精品国产91久久久久久 | 日韩欧美国产三级电影视频| 色综合网色综合| 成人免费av资源| 久久草av在线| 美女脱光内衣内裤视频久久影院| 亚洲国产一区二区在线播放| 亚洲欧美日韩国产手机在线| 国产农村妇女精品| 久久夜色精品国产噜噜av| 日韩一区二区在线观看| 欧美日韩色一区| 色婷婷亚洲婷婷| 99久久精品免费看| 国产高清成人在线| 国产一区欧美一区| 精品在线视频一区| 美女性感视频久久| 日本免费在线视频不卡一不卡二| 亚洲mv在线观看| 亚洲午夜激情av| 亚洲午夜精品网| 亚洲国产毛片aaaaa无费看| 夜夜精品视频一区二区 | 日韩在线播放一区二区| 亚洲成人你懂的| 亚洲成人一二三| 五月婷婷激情综合| 肉丝袜脚交视频一区二区| 日韩精品视频网站| 蜜桃免费网站一区二区三区| 青青草91视频| 久久99热这里只有精品| 精品一区二区三区免费观看 | 国产成人一区二区精品非洲| 国产精品一区在线| 国产91在线|亚洲| 成人免费观看男女羞羞视频| av一区二区三区四区| 色噜噜狠狠一区二区三区果冻| 99re热视频精品| 色婷婷久久久亚洲一区二区三区| 一本在线高清不卡dvd| 欧洲一区在线观看| 欧美精品777| 精品国产乱码久久久久久浪潮| 精品成人一区二区| 中文字幕第一区第二区| 亚洲美女免费视频| 午夜精品久久久久久久99水蜜桃 | 久久综合九色欧美综合狠狠| 欧美精品一区男女天堂| 国产午夜精品久久久久久免费视| 中文字幕av一区二区三区免费看 | 欧美午夜精品电影| 欧美一三区三区四区免费在线看| 91精品午夜视频| 久久久久久久一区| 在线一区二区三区四区五区| 欧美精品久久久久久久多人混战| 日韩一区二区视频在线观看| 久久久久久夜精品精品免费| 中文字幕一区av| 亚洲高清一区二区三区| 精品综合免费视频观看| 成人免费毛片a| 精品污污网站免费看| 日韩欧美一区二区视频| 欧美激情一区二区三区| 亚洲精品高清在线观看| 青娱乐精品在线视频| 国产盗摄女厕一区二区三区| 一本色道a无线码一区v| 51午夜精品国产| 国产欧美日韩亚州综合| 亚洲一区二区三区四区在线免费观看 | 欧美日韩在线三级| 日韩欧美成人一区| 中文字幕日韩精品一区| 亚洲va国产天堂va久久en| 国产在线精品免费| 91成人网在线| 精品国产污网站| 亚洲黄色小说网站| 麻豆高清免费国产一区| eeuss影院一区二区三区| 51久久夜色精品国产麻豆| 日本一区二区三区免费乱视频| 亚洲无线码一区二区三区| 中文字幕一区二区三区av| 日本怡春院一区二区| 99精品久久99久久久久| 日韩欧美一区中文| 亚洲欧美视频在线观看视频| 另类调教123区 | 欧美性猛交一区二区三区精品| 久久综合五月天婷婷伊人| 亚洲午夜一二三区视频| 国产精品亚洲一区二区三区在线 | 七七婷婷婷婷精品国产| 成人动漫视频在线|