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

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

?? dvb_net.c

?? linux環(huán)境下的dvb驅(qū)動(dòng)程序
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/*  * dvb_net.c * * Copyright (C) 2001 Convergence integrated media GmbH *                    Ralph Metzler <ralph@convergence.de> * Copyright (C) 2002 Ralph Metzler <rjkm@metzlerbros.de> * * 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. *  * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. *  * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Or, point your browser to http://www.gnu.org/copyleft/gpl.html *  */#include <linux/dvb/net.h>#include <asm/uaccess.h>#include "dvb_demux.h"#include "dvb_net.h"#include "dvb_functions.h"#if 1#define dprintk(x...) printk(x)#else#define dprintk(x...)#endif#define DVB_NET_MULTICAST_MAX 10struct dvb_net_priv {	int in_use;        struct net_device_stats stats;        char name[6];	u16 pid;        struct dmx_demux *demux;	struct dmx_section_feed *secfeed;	struct dmx_section_filter *secfilter;	int multi_num;	struct dmx_section_filter *multi_secfilter[DVB_NET_MULTICAST_MAX];	unsigned char multi_macs[DVB_NET_MULTICAST_MAX][6];	int rx_mode;#define RX_MODE_UNI 0#define RX_MODE_MULTI 1#define RX_MODE_ALL_MULTI 2#define RX_MODE_PROMISC 3	struct work_struct set_multicast_list_wq;	struct work_struct restart_net_feed_wq;};/** *	Determine the packet's protocol ID. The rule here is that we  *	assume 802.3 if the type field is short enough to be a length. *	This is normal practice and works for any 'now in use' protocol. * *  stolen from eth.c out of the linux kernel, hacked for dvb-device *  by Michael Holzt <kju@debian.org> */static unsigned short dvb_net_eth_type_trans(struct sk_buff *skb,				      struct net_device *dev){	struct ethhdr *eth;	unsigned char *rawp;		skb->mac.raw=skb->data;	skb_pull(skb,dev->hard_header_len);	eth= skb->mac.ethernet;		if (*eth->h_dest & 1) {		if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0)			skb->pkt_type=PACKET_BROADCAST;		else			skb->pkt_type=PACKET_MULTICAST;	}		if (ntohs(eth->h_proto) >= 1536)		return eth->h_proto;			rawp = skb->data;		/**	 *	This is a magic hack to spot IPX packets. Older Novell breaks	 *	the protocol design and runs IPX over 802.3 without an 802.2 LLC	 *	layer. We look for FFFF which isn't a used 802.2 SSAP/DSAP. This	 *	won't work for fault tolerant netware but does for the rest.	 */	if (*(unsigned short *)rawp == 0xFFFF)		return htons(ETH_P_802_3);			/**	 *	Real 802.2 LLC	 */	return htons(ETH_P_802_2);}static void dvb_net_sec(struct net_device *dev, u8 *pkt, int pkt_len){        u8 *eth;        struct sk_buff *skb;	struct net_device_stats *stats = &(((struct dvb_net_priv *) dev->priv)->stats);	/* note: pkt_len includes a 32bit checksum */	if (pkt_len < 16) {		printk("%s: IP/MPE packet length = %d too small.\n",			dev->name, pkt_len);		stats->rx_errors++;		stats->rx_length_errors++;		return;	}/* it seems some ISPs manage to screw up here, so we have to * relax the error checks... */#if 0	if ((pkt[5] & 0xfd) != 0xc1) {		/* drop scrambled or broken packets */#else	if ((pkt[5] & 0x3c) != 0x00) {		/* drop scrambled */#endif		stats->rx_errors++;		stats->rx_crc_errors++;		return;	}	if (pkt[5] & 0x02) {		//FIXME: handle LLC/SNAP                stats->rx_dropped++;                return;        }	if (pkt[7]) {		/* FIXME: assemble datagram from multiple sections */		stats->rx_errors++;		stats->rx_frame_errors++;		return;	}	/* we have 14 byte ethernet header (ip header follows);	 * 12 byte MPE header; 4 byte checksum; + 2 byte alignment	 */	if (!(skb = dev_alloc_skb(pkt_len - 4 - 12 + 14 + 2))) {		//printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n", dev->name);		stats->rx_dropped++;		return;	}	skb_reserve(skb, 2);    /* longword align L3 header */	skb->dev = dev;	/* copy L3 payload */	eth = (u8 *) skb_put(skb, pkt_len - 12 - 4 + 14);	memcpy(eth + 14, pkt + 12, pkt_len - 12 - 4);	/* create ethernet header: */        eth[0]=pkt[0x0b];        eth[1]=pkt[0x0a];        eth[2]=pkt[0x09];        eth[3]=pkt[0x08];        eth[4]=pkt[0x04];        eth[5]=pkt[0x03];        eth[6]=eth[7]=eth[8]=eth[9]=eth[10]=eth[11]=0;	eth[12] = 0x08;	/* ETH_P_IP */	eth[13] = 0x00;	skb->protocol = dvb_net_eth_type_trans(skb, dev);	stats->rx_packets++;	stats->rx_bytes+=skb->len;        netif_rx(skb);}static int dvb_net_callback(const u8 *buffer1, size_t buffer1_len,		 const u8 *buffer2, size_t buffer2_len,		 struct dmx_section_filter *filter,		 enum dmx_success success){        struct net_device *dev=(struct net_device *) filter->priv;	/**	 * we rely on the DVB API definition where exactly one complete	 * section is delivered in buffer1	 */	dvb_net_sec (dev, (u8*) buffer1, buffer1_len);	return 0;}static int dvb_net_tx(struct sk_buff *skb, struct net_device *dev){	return 0;}static u8 mask_normal[6]={0xff, 0xff, 0xff, 0xff, 0xff, 0xff};static u8 mask_allmulti[6]={0xff, 0xff, 0xff, 0x00, 0x00, 0x00};static u8 mac_allmulti[6]={0x01, 0x00, 0x5e, 0x00, 0x00, 0x00};static u8 mask_promisc[6]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00};static int dvb_net_filter_set(struct net_device *dev, 		   struct dmx_section_filter **secfilter,		   u8 *mac, u8 *mac_mask){	struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;	int ret;	*secfilter=0;	ret = priv->secfeed->allocate_filter(priv->secfeed, secfilter);	if (ret<0) {		printk("%s: could not get filter\n", dev->name);		return ret;	}	(*secfilter)->priv=(void *) dev;	memset((*secfilter)->filter_value, 0x00, DMX_MAX_FILTER_SIZE);	memset((*secfilter)->filter_mask,  0x00, DMX_MAX_FILTER_SIZE);	memset((*secfilter)->filter_mode,  0xff, DMX_MAX_FILTER_SIZE);	(*secfilter)->filter_value[0]=0x3e;	(*secfilter)->filter_value[3]=mac[5];	(*secfilter)->filter_value[4]=mac[4];	(*secfilter)->filter_value[8]=mac[3];	(*secfilter)->filter_value[9]=mac[2];	(*secfilter)->filter_value[10]=mac[1];	(*secfilter)->filter_value[11]=mac[0];	(*secfilter)->filter_mask[0] = 0xff;	(*secfilter)->filter_mask[3] = mac_mask[5];	(*secfilter)->filter_mask[4] = mac_mask[4];	(*secfilter)->filter_mask[8] = mac_mask[3];	(*secfilter)->filter_mask[9] = mac_mask[2];	(*secfilter)->filter_mask[10] = mac_mask[1];	(*secfilter)->filter_mask[11]=mac_mask[0];	dprintk("%s: filter mac=%02x %02x %02x %02x %02x %02x\n",	       dev->name, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);	dprintk("%s: filter mask=%02x %02x %02x %02x %02x %02x\n",	       dev->name, mac_mask[0], mac_mask[1], mac_mask[2],	       mac_mask[3], mac_mask[4], mac_mask[5]);	return 0;}static int dvb_net_feed_start(struct net_device *dev){	int ret, i;	struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;        struct dmx_demux *demux = priv->demux;        unsigned char *mac = (unsigned char *) dev->dev_addr;			dprintk("%s: rx_mode %i\n", __FUNCTION__, priv->rx_mode);	if (priv->secfeed || priv->secfilter || priv->multi_secfilter[0])		printk("%s: BUG %d\n", __FUNCTION__, __LINE__);	priv->secfeed=0;	priv->secfilter=0;	dprintk("%s: alloc secfeed\n", __FUNCTION__);	ret=demux->allocate_section_feed(demux, &priv->secfeed, 					 dvb_net_callback);	if (ret<0) {		printk("%s: could not allocate section feed\n", dev->name);		return ret;	}	ret = priv->secfeed->set(priv->secfeed, priv->pid, 32768, 0, 1);	if (ret<0) {		printk("%s: could not set section feed\n", dev->name);		priv->demux->release_section_feed(priv->demux, priv->secfeed);		priv->secfeed=0;		return ret;	}	if (priv->rx_mode != RX_MODE_PROMISC) {		dprintk("%s: set secfilter\n", __FUNCTION__);		dvb_net_filter_set(dev, &priv->secfilter, mac, mask_normal);	}	switch (priv->rx_mode) {	case RX_MODE_MULTI:		for (i = 0; i < priv->multi_num; i++) {			dprintk("%s: set multi_secfilter[%d]\n", __FUNCTION__, i);			dvb_net_filter_set(dev, &priv->multi_secfilter[i],					   priv->multi_macs[i], mask_normal);		}		break;	case RX_MODE_ALL_MULTI:		priv->multi_num=1;		dprintk("%s: set multi_secfilter[0]\n", __FUNCTION__);		dvb_net_filter_set(dev, &priv->multi_secfilter[0],				   mac_allmulti, mask_allmulti);		break;	case RX_MODE_PROMISC:		priv->multi_num=0;		dprintk("%s: set secfilter\n", __FUNCTION__);		dvb_net_filter_set(dev, &priv->secfilter, mac, mask_promisc);		break;	}		dprintk("%s: start filtering\n", __FUNCTION__);	priv->secfeed->start_filtering(priv->secfeed);	return 0;}static void dvb_net_feed_stop(struct net_device *dev){	struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;	int i;	dprintk("%s\n", __FUNCTION__);        if (priv->secfeed) {		if (priv->secfeed->is_filtering) {			dprintk("%s: stop secfeed\n", __FUNCTION__);		        priv->secfeed->stop_filtering(priv->secfeed);		}		if (priv->secfilter) {			dprintk("%s: release secfilter\n", __FUNCTION__);			priv->secfeed->release_filter(priv->secfeed,					       priv->secfilter);		priv->secfilter=0;		}		for (i=0; i<priv->multi_num; i++) {			if (priv->multi_secfilter[i]) {				dprintk("%s: release multi_filter[%d]\n", __FUNCTION__, i);				priv->secfeed->release_filter(priv->secfeed,						       priv->multi_secfilter[i]);			priv->multi_secfilter[i]=0;		}		}		priv->demux->release_section_feed(priv->demux, priv->secfeed);		priv->secfeed=0;	} else		printk("%s: no feed to stop\n", dev->name);}static int dvb_set_mc_filter (struct net_device *dev, struct dev_mc_list *mc){	struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;	if (priv->multi_num == DVB_NET_MULTICAST_MAX)		return -ENOMEM;	memcpy(priv->multi_macs[priv->multi_num], mc->dmi_addr, 6);	priv->multi_num++;	return 0;}static void wq_set_multicast_list (void *data){	struct net_device *dev = data;	struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲精品资源在线26u| 国产精品一区二区免费不卡| 亚洲h精品动漫在线观看| 亚洲成人午夜影院| 日韩 欧美一区二区三区| 免费看日韩精品| 国产精品综合二区| av成人动漫在线观看| 色噜噜狠狠色综合中国| 91在线观看污| 91福利在线观看| 欧美一区二区三区免费视频| xfplay精品久久| 亚洲天堂免费在线观看视频| 午夜视频一区二区| 久久99久久99精品免视看婷婷| 国产精品一区二区视频| 一本到三区不卡视频| 欧美色中文字幕| 精品国产麻豆免费人成网站| 国产精品家庭影院| 亚洲福利视频三区| 老鸭窝一区二区久久精品| 国产成人精品影院| 欧美亚洲高清一区| 久久久精品影视| 一区二区三区免费看视频| 美女一区二区三区在线观看| 粉嫩aⅴ一区二区三区四区 | 奇米影视在线99精品| 国产一区二区成人久久免费影院| kk眼镜猥琐国模调教系列一区二区| 91久久精品日日躁夜夜躁欧美| 91麻豆精品国产自产在线| 欧美经典三级视频一区二区三区| 一区二区三区在线影院| 久久不见久久见免费视频7 | 国产欧美日韩综合| 亚洲国产日产av| 国产毛片精品一区| 色综合视频一区二区三区高清| 欧美一区二区三区四区五区| 国产精品久久福利| 久久成人免费网| 在线视频一区二区免费| 精品sm在线观看| 亚洲午夜激情av| 成人自拍视频在线观看| 91精品久久久久久久99蜜桃| 中文字幕一区在线观看视频| 捆绑变态av一区二区三区| 色偷偷久久一区二区三区| 欧美一级欧美一级在线播放| 国产欧美日韩精品在线| 男人的天堂久久精品| 91久久久免费一区二区| 国产欧美久久久精品影院| 青青青伊人色综合久久| 在线观看日韩精品| 国产精品久久久久久久久免费相片 | 色综合久久久久综合| 欧美精品一区二区不卡| 亚洲香肠在线观看| 99视频热这里只有精品免费| 久久久久综合网| 蜜乳av一区二区三区| 欧美日韩中文字幕一区二区| √…a在线天堂一区| 国产成人激情av| 欧美va亚洲va香蕉在线| 午夜精品一区二区三区电影天堂 | 在线观看亚洲精品视频| 国产精品久久久久一区二区三区共 | 国产精品99久久久久久宅男| 日韩欧美色综合网站| 日日摸夜夜添夜夜添国产精品| 一本色道久久综合精品竹菊| 国产精品国产三级国产普通话三级 | 在线播放欧美女士性生活| 一区二区三区不卡视频在线观看| 成人激情电影免费在线观看| 久久影院视频免费| 久88久久88久久久| 日韩美一区二区三区| 日本成人中文字幕在线视频| 欧美日韩精品欧美日韩精品| 亚洲在线观看免费视频| 91久久精品一区二区| 夜夜嗨av一区二区三区网页| 色综合久久综合| 亚洲乱码中文字幕| 色偷偷久久人人79超碰人人澡| 国产精品成人免费在线| 99久久精品国产导航| 中文字幕亚洲电影| 91小视频在线| 一区二区三区中文免费| hitomi一区二区三区精品| 中文字幕在线不卡一区二区三区 | 久久久.com| 国内精品久久久久影院一蜜桃| 精品1区2区在线观看| 国产精品18久久久| 国产精品久久久久永久免费观看| 国v精品久久久网| 中文字幕电影一区| 91蜜桃婷婷狠狠久久综合9色| 亚洲一线二线三线视频| 在线不卡一区二区| 精品一区二区三区在线观看国产| 久久久久久久久岛国免费| 丁香天五香天堂综合| 亚洲欧美日韩成人高清在线一区| 色婷婷综合激情| 日韩av在线免费观看不卡| 欧美精品一区二区三区视频| 成人性生交大合| 一区二区三区在线观看国产| 精品视频在线看| 蜜桃91丨九色丨蝌蚪91桃色| 久久精品网站免费观看| 91视视频在线观看入口直接观看www | 国产精品2024| 亚洲人成人一区二区在线观看| 欧美午夜一区二区| 狠狠色综合日日| 亚洲免费在线看| 欧美视频一区二区在线观看| 日韩二区三区四区| 欧美高清一级片在线观看| 欧美在线观看一区| 精品在线播放午夜| 综合av第一页| 日韩免费看的电影| 91日韩在线专区| 国产一区二区免费在线| 亚洲国产精品久久久久秋霞影院| 久久九九影视网| 欧美一区二区成人6969| 91在线精品秘密一区二区| 国产一区二区三区电影在线观看 | 成人99免费视频| 久久99热狠狠色一区二区| 一区二区三区四区国产精品| 久久综合九色综合97婷婷| 欧美日韩一区高清| 波多野结衣在线一区| 经典一区二区三区| 香蕉久久夜色精品国产使用方法| 国产精品网站在线| 精品国产免费人成在线观看| 欧美精品一级二级| 91麻豆国产自产在线观看| 国产一区二区日韩精品| 蜜臀av国产精品久久久久| 亚洲一级二级在线| 亚洲视频在线一区观看| 欧美激情综合五月色丁香小说| 日韩精品最新网址| 69堂成人精品免费视频| 91极品视觉盛宴| 91亚洲精品久久久蜜桃| 成人开心网精品视频| 国产毛片精品一区| 激情文学综合插| 看国产成人h片视频| 日韩高清不卡一区二区| 五月婷婷激情综合网| 亚洲国产视频网站| 一区二区三区四区视频精品免费 | 成人一区二区视频| 国产美女娇喘av呻吟久久| 精品一区二区三区在线播放视频 | 精品国产成人系列| 日韩欧美成人一区二区| 日韩一区二区高清| 91精品国产免费久久综合| 欧美日韩国产影片| 精品视频在线免费| 欧美精品在线观看一区二区| 欧美日韩高清一区二区不卡 | 日韩高清不卡一区二区| 五月天一区二区| 日韩成人一区二区| 免费一区二区视频| 蜜桃传媒麻豆第一区在线观看| 日本不卡的三区四区五区| 日本麻豆一区二区三区视频| 日本欧美加勒比视频| 美女www一区二区| 狠狠色丁香久久婷婷综合_中| 国模套图日韩精品一区二区| 国产剧情一区二区| 成人妖精视频yjsp地址| 99这里只有精品| 在线观看国产91| 欧美久久一二区| 精品国产精品网麻豆系列| 国产视频一区二区在线| 国产精品嫩草影院av蜜臀|