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

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

?? police.c

?? 嵌入式系統設計與實例開發源碼
?? C
字號:
/* * net/sched/police.c	Input police filter. * *		This program is free software; you can redistribute it and/or *		modify it under the terms of the GNU General Public License *		as published by the Free Software Foundation; either version *		2 of the License, or (at your option) any later version. * * Authors:	Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru> */#include <asm/uaccess.h>#include <asm/system.h>#include <asm/bitops.h>#include <linux/config.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/string.h>#include <linux/mm.h>#include <linux/socket.h>#include <linux/sockios.h>#include <linux/in.h>#include <linux/errno.h>#include <linux/interrupt.h>#include <linux/netdevice.h>#include <linux/skbuff.h>#include <linux/rtnetlink.h>#include <linux/init.h>#include <linux/proc_fs.h>#include <net/sock.h>#include <net/pkt_sched.h>#define L2T(p,L)   ((p)->R_tab->data[(L)>>(p)->R_tab->rate.cell_log])#define L2T_P(p,L) ((p)->P_tab->data[(L)>>(p)->P_tab->rate.cell_log])static u32 idx_gen;static struct tcf_police *tcf_police_ht[16];/* Policer hash table lock */static rwlock_t police_lock = RW_LOCK_UNLOCKED;/* Each policer is serialized by its individual spinlock */static __inline__ unsigned tcf_police_hash(u32 index){	return index&0xF;}static __inline__ struct tcf_police * tcf_police_lookup(u32 index){	struct tcf_police *p;	read_lock(&police_lock);	for (p = tcf_police_ht[tcf_police_hash(index)]; p; p = p->next) {		if (p->index == index)			break;	}	read_unlock(&police_lock);	return p;}static __inline__ u32 tcf_police_new_index(void){	do {		if (++idx_gen == 0)			idx_gen = 1;	} while (tcf_police_lookup(idx_gen));	return idx_gen;}void tcf_police_destroy(struct tcf_police *p){	unsigned h = tcf_police_hash(p->index);	struct tcf_police **p1p;		for (p1p = &tcf_police_ht[h]; *p1p; p1p = &(*p1p)->next) {		if (*p1p == p) {			write_lock_bh(&police_lock);			*p1p = p->next;			write_unlock_bh(&police_lock);#ifdef CONFIG_NET_ESTIMATOR			qdisc_kill_estimator(&p->stats);#endif			if (p->R_tab)				qdisc_put_rtab(p->R_tab);			if (p->P_tab)				qdisc_put_rtab(p->P_tab);			kfree(p);			return;		}	}	BUG_TRAP(0);}struct tcf_police * tcf_police_locate(struct rtattr *rta, struct rtattr *est){	unsigned h;	struct tcf_police *p;	struct rtattr *tb[TCA_POLICE_MAX];	struct tc_police *parm;	if (rtattr_parse(tb, TCA_POLICE_MAX, RTA_DATA(rta), RTA_PAYLOAD(rta)) < 0)		return NULL;	if (tb[TCA_POLICE_TBF-1] == NULL)		return NULL;	parm = RTA_DATA(tb[TCA_POLICE_TBF-1]);	if (parm->index && (p = tcf_police_lookup(parm->index)) != NULL) {		p->refcnt++;		return p;	}	p = kmalloc(sizeof(*p), GFP_KERNEL);	if (p == NULL)		return NULL;	memset(p, 0, sizeof(*p));	p->refcnt = 1;	spin_lock_init(&p->lock);	p->stats.lock = &p->lock;	if (parm->rate.rate) {		if ((p->R_tab = qdisc_get_rtab(&parm->rate, tb[TCA_POLICE_RATE-1])) == NULL)			goto failure;		if (parm->peakrate.rate &&		    (p->P_tab = qdisc_get_rtab(&parm->peakrate, tb[TCA_POLICE_PEAKRATE-1])) == NULL)			goto failure;	}	if (tb[TCA_POLICE_RESULT-1])		p->result = *(int*)RTA_DATA(tb[TCA_POLICE_RESULT-1]);#ifdef CONFIG_NET_ESTIMATOR	if (tb[TCA_POLICE_AVRATE-1])		p->ewma_rate = *(u32*)RTA_DATA(tb[TCA_POLICE_AVRATE-1]);#endif	p->toks = p->burst = parm->burst;	p->mtu = parm->mtu;	if (p->mtu == 0) {		p->mtu = ~0;		if (p->R_tab)			p->mtu = 255<<p->R_tab->rate.cell_log;	}	if (p->P_tab)		p->ptoks = L2T_P(p, p->mtu);	PSCHED_GET_TIME(p->t_c);	p->index = parm->index ? : tcf_police_new_index();	p->action = parm->action;#ifdef CONFIG_NET_ESTIMATOR	if (est)		qdisc_new_estimator(&p->stats, est);#endif	h = tcf_police_hash(p->index);	write_lock_bh(&police_lock);	p->next = tcf_police_ht[h];	tcf_police_ht[h] = p;	write_unlock_bh(&police_lock);	return p;failure:	if (p->R_tab)		qdisc_put_rtab(p->R_tab);	kfree(p);	return NULL;}int tcf_police(struct sk_buff *skb, struct tcf_police *p){	psched_time_t now;	long toks;	long ptoks = 0;	spin_lock(&p->lock);	p->stats.bytes += skb->len;	p->stats.packets++;#ifdef CONFIG_NET_ESTIMATOR	if (p->ewma_rate && p->stats.bps >= p->ewma_rate) {		p->stats.overlimits++;		spin_unlock(&p->lock);		return p->action;	}#endif	if (skb->len <= p->mtu) {		if (p->R_tab == NULL) {			spin_unlock(&p->lock);			return p->result;		}		PSCHED_GET_TIME(now);		toks = PSCHED_TDIFF_SAFE(now, p->t_c, p->burst, 0);		if (p->P_tab) {			ptoks = toks + p->ptoks;			if (ptoks > (long)L2T_P(p, p->mtu))				ptoks = (long)L2T_P(p, p->mtu);			ptoks -= L2T_P(p, skb->len);		}		toks += p->toks;		if (toks > (long)p->burst)			toks = p->burst;		toks -= L2T(p, skb->len);		if ((toks|ptoks) >= 0) {			p->t_c = now;			p->toks = toks;			p->ptoks = ptoks;			spin_unlock(&p->lock);			return p->result;		}	}	p->stats.overlimits++;	spin_unlock(&p->lock);	return p->action;}int tcf_police_dump(struct sk_buff *skb, struct tcf_police *p){	unsigned char	 *b = skb->tail;	struct tc_police opt;	opt.index = p->index;	opt.action = p->action;	opt.mtu = p->mtu;	opt.burst = p->burst;	if (p->R_tab)		opt.rate = p->R_tab->rate;	else		memset(&opt.rate, 0, sizeof(opt.rate));	if (p->P_tab)		opt.peakrate = p->P_tab->rate;	else		memset(&opt.peakrate, 0, sizeof(opt.peakrate));	RTA_PUT(skb, TCA_POLICE_TBF, sizeof(opt), &opt);	if (p->result)		RTA_PUT(skb, TCA_POLICE_RESULT, sizeof(int), &p->result);#ifdef CONFIG_NET_ESTIMATOR	if (p->ewma_rate)		RTA_PUT(skb, TCA_POLICE_AVRATE, 4, &p->ewma_rate);#endif	return skb->len;rtattr_failure:	skb_trim(skb, b - skb->data);	return -1;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲无人区一区| aaa亚洲精品一二三区| 粉嫩久久99精品久久久久久夜| 色婷婷精品久久二区二区蜜臂av | 欧美网站大全在线观看| 欧美精品一区二区三| 亚洲一区二区三区影院| 成人免费高清在线观看| 久久一区二区三区国产精品| 午夜伦欧美伦电影理论片| 成人福利在线看| 国产午夜一区二区三区| 久久精品av麻豆的观看方式| 欧美羞羞免费网站| 亚洲黄色av一区| 97国产精品videossex| 中文字幕精品综合| 国产剧情一区在线| 久久美女艺术照精彩视频福利播放 | 亚洲一区二区三区不卡国产欧美| 国产99久久久久久免费看农村| 欧美一级理论片| 五月天亚洲婷婷| 91成人在线观看喷潮| 综合久久久久综合| 91视频精品在这里| 亚洲男人天堂一区| 91免费版pro下载短视频| 国产精品久久毛片av大全日韩| 国产成人av电影在线观看| 久久久另类综合| 国产成人在线网站| 国产精品丝袜91| 成人高清视频在线| 亚洲欧美电影一区二区| 一本色道a无线码一区v| 亚洲电影一级片| 欧美精品日韩一区| 久色婷婷小香蕉久久| 精品对白一区国产伦| 国产专区欧美精品| 国产精品欧美精品| 色婷婷综合视频在线观看| 亚洲妇女屁股眼交7| 欧美日本不卡视频| 麻豆精品蜜桃视频网站| 欧美激情在线观看视频免费| 成人avav影音| 亚洲电影激情视频网站| 91精品国产色综合久久不卡蜜臀| 蜜桃精品视频在线| 国产亚洲一区二区三区在线观看 | 韩国中文字幕2020精品| 国产欧美精品一区| 欧洲国内综合视频| 久久精品免费观看| 中文字幕欧美日本乱码一线二线| 色噜噜狠狠色综合中国| 蜜桃av一区二区三区电影| 欧美激情一区二区三区蜜桃视频| 91久久精品网| 国产一区在线不卡| 亚洲一区在线观看免费| 日韩精品一区二区三区在线观看| 成人一区二区在线观看| 日韩黄色免费电影| 国产精品久久免费看| 欧美女孩性生活视频| 国产美女一区二区| 亚洲国产精品一区二区www| 精品乱人伦小说| 在线精品视频免费播放| 国产一区二区免费在线| 亚洲午夜免费福利视频| 亚洲国产成人午夜在线一区| 91国内精品野花午夜精品| 国产一区在线观看视频| 日韩综合小视频| 日韩毛片高清在线播放| 精品久久人人做人人爽| 欧美三级午夜理伦三级中视频| 国产99精品国产| 久久精品国产精品亚洲红杏| 亚洲一二三四区不卡| 国产精品乱码妇女bbbb| 精品国产91久久久久久久妲己| 91电影在线观看| 成人h精品动漫一区二区三区| 九色综合狠狠综合久久| 天堂一区二区在线免费观看| 亚洲色大成网站www久久九九| 久久久久久久久99精品| 日韩精品一区二区三区四区| 欧美探花视频资源| 91视频.com| 97久久久精品综合88久久| 国产成人精品亚洲午夜麻豆| 久久99精品国产麻豆婷婷洗澡| 丝袜美腿亚洲色图| 亚洲va国产va欧美va观看| 亚洲欧美精品午睡沙发| 国产精品国产精品国产专区不片| 久久久夜色精品亚洲| 久久久无码精品亚洲日韩按摩| 欧美一区二区日韩一区二区| 欧美日韩午夜在线| 欧美视频在线播放| 欧美美女bb生活片| 欧美日韩国产bt| 欧美二区三区91| 日韩视频在线永久播放| 日韩亚洲欧美一区| 欧美成人三级电影在线| 日韩片之四级片| 欧美mv日韩mv| 久久久久国色av免费看影院| 中文乱码免费一区二区| 中文字幕av不卡| 国产精品国产三级国产普通话99 | 91一区一区三区| 91麻豆福利精品推荐| 色妹子一区二区| 欧美日韩在线观看一区二区 | 国产精品丝袜一区| 中文字幕一区视频| 17c精品麻豆一区二区免费| 亚洲丝袜制服诱惑| 夜夜嗨av一区二区三区四季av| 亚洲一线二线三线视频| 日产欧产美韩系列久久99| 久久精品国产秦先生| 国产精品综合av一区二区国产馆| 成人黄色片在线观看| 在线视频一区二区三| 欧美一区二区三区日韩| 久久久精品2019中文字幕之3| 中文字幕视频一区| 午夜av一区二区| 国产一区二区伦理片| 色老汉一区二区三区| 欧美精选一区二区| 欧美国产一区在线| 亚洲丰满少妇videoshd| 国产真实乱对白精彩久久| 91丨九色丨蝌蚪富婆spa| 69堂成人精品免费视频| 国产婷婷一区二区| 亚洲综合免费观看高清在线观看| 毛片av一区二区| 91麻豆自制传媒国产之光| 欧美一级久久久| 亚洲人成小说网站色在线| 蜜臀久久99精品久久久画质超高清| 国产91精品入口| 777a∨成人精品桃花网| 国产精品美女久久久久久久久久久| 亚洲高清视频在线| 国产99久久久国产精品免费看| 欧美日韩一级二级| 一色桃子久久精品亚洲| 久久国产乱子精品免费女| 色综合色综合色综合色综合色综合 | 久久久久青草大香线综合精品| 亚洲精品乱码久久久久| 国产综合久久久久久鬼色| 欧美日韩黄色影视| 18成人在线观看| 国产激情视频一区二区三区欧美 | 日韩一区二区三区三四区视频在线观看| 2024国产精品视频| 亚洲国产日韩a在线播放| 高清shemale亚洲人妖| 日韩欧美一区中文| 亚洲国产精品一区二区久久恐怖片| 国产成人综合亚洲网站| 精品国产一区二区精华| 午夜久久久久久| 欧美图片一区二区三区| 亚洲欧洲www| 成人av资源在线| 久久久国产精华| 国产一区二区在线观看视频| 91精品国产91久久综合桃花| 亚洲精品欧美在线| 色综合色综合色综合| 18欧美亚洲精品| 99精品国产热久久91蜜凸| 欧美国产精品中文字幕| 国产高清视频一区| 久久久午夜精品| 福利视频网站一区二区三区| 久久久久久久综合狠狠综合| 国产一区二区网址| 久久久久久久久岛国免费| 国产伦精品一区二区三区在线观看| 欧美大度的电影原声| 极品尤物av久久免费看| 精品国产乱子伦一区| 九九**精品视频免费播放| 久久久美女艺术照精彩视频福利播放|