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

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

?? dvb_net.c

?? linux環(huán)境下的dvb驅(qū)動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*  * 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
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜亚洲精品午夜鲁丝片| 久久精品国产**网站演员| 国产精品一区二区三区四区| 欧美一区二区三区公司| 亚洲高清视频在线| 欧美综合视频在线观看| 亚洲三级视频在线观看| 99久久精品免费看国产免费软件| 日韩欧美在线不卡| 五月天亚洲婷婷| 欧美日韩久久久一区| 亚洲一区二区美女| 欧美日韩在线综合| 亚洲综合免费观看高清完整版| 色婷婷狠狠综合| 一区二区视频免费在线观看| 日本久久一区二区三区| 亚洲免费观看在线视频| 欧美主播一区二区三区| 亚洲一区二区在线视频| 日韩一区二区在线观看| 久色婷婷小香蕉久久| 久久久国产综合精品女国产盗摄| 国产精品亚洲午夜一区二区三区 | 精品一区二区日韩| 91精品国产乱| 麻豆一区二区三| 欧美主播一区二区三区美女| 亚洲国产精品一区二区尤物区| 在线成人免费观看| 国模大尺度一区二区三区| 日韩视频一区二区在线观看| 麻豆91在线观看| 欧美国产欧美亚州国产日韩mv天天看完整| 国产suv精品一区二区三区| 精品国产亚洲在线| 日韩一区二区在线看| 黄色日韩三级电影| 国产精品丝袜91| 色综合久久久久综合99| 亚洲国产一区二区三区| 精品国产免费人成电影在线观看四季| 国产精品一区二区免费不卡 | 日韩精品一区二区三区视频| 精品一区二区三区av| 亚洲三级在线播放| 日韩女优毛片在线| 色婷婷综合久久久久中文一区二区 | 中文字幕一区二区在线观看| 色网站国产精品| 久久激情五月激情| 亚洲免费在线视频一区 二区| 91精品国产一区二区人妖| 大胆亚洲人体视频| 青青草原综合久久大伊人精品优势 | 日韩欧美黄色影院| 91首页免费视频| 经典一区二区三区| 一区二区三区精密机械公司| 日韩精品一区二区三区四区视频| 不卡的看片网站| 日本午夜精品一区二区三区电影| 国产精品免费aⅴ片在线观看| 欧美乱妇20p| 97久久精品人人做人人爽| 捆绑紧缚一区二区三区视频| 亚洲国产岛国毛片在线| 日韩欧美国产综合| 日本道色综合久久| 国产成人精品三级麻豆| 日本欧美肥老太交大片| 亚洲激情图片qvod| 欧美激情自拍偷拍| 久久蜜桃香蕉精品一区二区三区| 欧美日韩在线播| 99精品国产热久久91蜜凸| 国产美女精品在线| 蜜桃av噜噜一区二区三区小说| 亚洲免费成人av| 国产欧美一区二区精品久导航| 日韩三级免费观看| 欧美放荡的少妇| 欧美日韩日日骚| 岛国精品在线播放| 国产成人免费在线观看| 国产一区二区在线电影| 精品一区二区免费在线观看| 蜜臀av一区二区在线免费观看| 日韩高清电影一区| 日本少妇一区二区| 丝袜诱惑制服诱惑色一区在线观看| 国产精品毛片a∨一区二区三区| 久久人人97超碰com| 欧美tk—视频vk| 久久色.com| 久久久久国产精品麻豆| 国产免费成人在线视频| 久久久久9999亚洲精品| 日韩视频免费直播| 日韩欧美中文一区二区| 欧美一区二视频| 欧美大片在线观看一区| 精品国产一区久久| 国产日韩欧美电影| 亚洲欧洲99久久| 亚洲免费观看高清完整版在线观看熊| 亚洲色图.com| 亚洲小少妇裸体bbw| 日韩国产精品91| 免费在线观看成人| 国产久卡久卡久卡久卡视频精品| 国产在线一区观看| 久久成人免费网| 九九**精品视频免费播放| 韩国欧美国产1区| 国产成人免费网站| 91视频91自| 精品播放一区二区| 欧美一卡二卡在线| 精品精品国产高清一毛片一天堂| 国产欧美一区二区精品性色 | 日韩欧美一区二区久久婷婷| 91麻豆精品国产自产在线| 男女性色大片免费观看一区二区 | 成人免费毛片app| 一本色道亚洲精品aⅴ| 日韩无一区二区| 亚洲一区在线观看视频| 国产成人在线观看| 欧美精品v国产精品v日韩精品| 国产欧美久久久精品影院 | 婷婷亚洲久悠悠色悠在线播放| 日产国产欧美视频一区精品| 91麻豆免费在线观看| 精品国产三级电影在线观看| 亚洲一区二区三区四区的 | 成人av网站在线| 欧美日韩一区二区三区高清| 中文字幕精品一区二区精品绿巨人| 日韩精品午夜视频| 91久久精品一区二区| 国产精品视频yy9299一区| 国内久久婷婷综合| 日韩欧美一级二级三级| 亚洲午夜电影在线| 91麻豆国产在线观看| 欧美高清在线视频| 国产精品一色哟哟哟| 欧美一区二区大片| 视频一区中文字幕| 色综合久久天天| 亚洲人成在线观看一区二区| 国产suv精品一区二区三区| 精品国精品自拍自在线| 久久精品久久综合| 欧美一区二区三区爱爱| 天天色综合天天| 欧美肥妇bbw| 免费在线观看不卡| 欧美一区二区二区| 久久精品噜噜噜成人88aⅴ| 欧美一区二区三区电影| 青娱乐精品在线视频| 日韩一区二区免费电影| 美女一区二区视频| 日韩欧美黄色影院| 久久国产麻豆精品| 精品少妇一区二区| 国产一区二区三区精品欧美日韩一区二区三区 | 国产一区二区视频在线播放| 精品国产在天天线2019| 国产一区二区三区四区五区美女| 久久一区二区三区四区| 国产精品99久久久| 国产欧美日本一区二区三区| 成人av电影在线观看| 国产精品久久毛片av大全日韩| 盗摄精品av一区二区三区| **欧美大码日韩| 欧美性大战久久久| 日韩精品免费视频人成| 精品国产乱码久久久久久久| 国产九色精品成人porny | 亚洲日本在线天堂| 久久精品一区二区三区不卡| 国产在线国偷精品产拍免费yy| 国产亚洲人成网站| 99视频精品在线| 亚洲国产精品一区二区久久 | 日韩精品视频网站| 欧美成人video| 国产成人激情av| 亚洲欧美日韩电影| 欧美精品自拍偷拍| 国产一区二区精品久久| 中文字幕在线不卡一区二区三区| 在线观看成人小视频| 美女视频黄 久久| 国产精品人妖ts系列视频| 色乱码一区二区三区88|