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

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

?? gsn_vlan_dev.c

?? Linux下通過設計虛擬網卡來實現VLAN功能
?? C
字號:
#include <linux/module.h>#include <linux/mm.h>#include <linux/in.h>#include <linux/init.h>#include <asm/uaccess.h> /* for copy_from_user */#include <linux/skbuff.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <net/datalink.h>#include <net/p8022.h>#include <net/arp.h> #include "gsn_vlan.h"#include <linux/if_vlan.h>#include <net/ip.h>int vlan_dev_rebuild_header(struct sk_buff *skb){	struct net_device *dev = skb->dev;	struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data);	printk("%s:why I am called ???\n", __FUNCTION__);	dump_stack();	switch (veth->h_vlan_encapsulated_proto) {#ifdef CONFIG_INET		case __constant_htons(ETH_P_IP):			/* TODO:  Confirm this will work with VLAN headers... */			return arp_find(veth->h_dest, skb);#endif		default:			printk("%s: unable to resolve type %X addresses.\n",					dev->name, ntohs(veth->h_vlan_encapsulated_proto));			memcpy(veth->h_source, dev->dev_addr, ETH_ALEN);			break;	};	return 0;} int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,		          unsigned short type, void *daddr, void *saddr,					 unsigned len){	struct vlan_hdr *vhdr;	unsigned short veth_TCI = 0;	int rc = 0;	int build_vlan_header = 0;	struct net_device *vdev = dev; /* save this for the bottom of the method */	printk("%s: skb: %p type: %hx len: %x vlan_id: %hx, daddr: %p\n",			__FUNCTION__, skb, type, len, VLAN_DEV_INFO(dev)->vlan_id, daddr);	/* build vlan header only if re_order_header flag is NOT set.  This	 ** fixes some programs that get confused when they see a VLAN device	 ** sending a frame that is VLAN encoded (the consensus is that the VLAN	 ** device should look completely like an Ethernet device when the	 ** REORDER_HEADER flag is set)   The drawback to this is some extra	 ** header shuffling in the hard_start_xmit.  Users can turn off this	 ** REORDER behaviour with the vconfig tool.	 **/	build_vlan_header = ((VLAN_DEV_INFO(dev)->flags & 1) == 0);	if (build_vlan_header) {		printk("%s:why why ???\n", __FUNCTION__);		vhdr = (struct vlan_hdr *) skb_push(skb, VLAN_HLEN);		veth_TCI = VLAN_DEV_INFO(dev)->vlan_id;/*		veth_TCI |= vlan_dev_get_egress_qos_mask(dev, skb);  */		vhdr->h_vlan_TCI = htons(veth_TCI);		if (type != ETH_P_802_3) {			vhdr->h_vlan_encapsulated_proto = htons(type);		} else {			vhdr->h_vlan_encapsulated_proto = htons(len);		}		skb->protocol = htons(ETH_P_8021Q);		skb->nh.raw = skb->data;	}	/* Before delegating work to the lower layer, enter our MAC-address */	if (saddr == NULL)		saddr = dev->dev_addr;	dev = VLAN_DEV_INFO(dev)->real_dev;	if (skb_headroom(skb) < dev->hard_header_len) {		struct sk_buff *sk_tmp = skb;		printk("%s:should I do it???\n", __FUNCTION__);		skb = skb_realloc_headroom(sk_tmp, dev->hard_header_len);		kfree_skb(sk_tmp);		if (skb == NULL) {			struct net_device_stats *stats = vlan_dev_get_stats(vdev);			stats->tx_dropped++;			return -ENOMEM;		}		VLAN_DEV_INFO(vdev)->cnt_inc_headroom_on_tx++;		printk("%s: %s: had to grow skb.\n", __FUNCTION__, vdev->name);	}	if (build_vlan_header) {		/* Now make the underlying real hard header */		rc = dev->hard_header(skb, dev, ETH_P_8021Q, daddr, saddr, len + VLAN_HLEN);		if (rc > 0) {			rc += VLAN_HLEN;		} else if (rc < 0) {			rc -= VLAN_HLEN;		}	} else {		/* If here, then we'll just make a normal looking ethernet frame,		 ** but, the hard_start_xmit method will insert the tag (it has to		 ** be able to do this for bridged and other skbs that don't come		 ** down the protocol stack in an orderly manner.		 **/		rc = dev->hard_header(skb, dev, type, daddr, saddr, len);	}	return rc;}int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev){	struct net_device_stats *stats = vlan_dev_get_stats(dev);	struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data);	/* Handle non-VLAN frames if they are sent to us, for example by DHCP.	 *     *	 *         * NOTE: THIS ASSUMES DIX ETHERNET, SPECIFICALLY NOT SUPPORTING	 *             * OTHER THINGS LIKE FDDI/TokenRing/802.3 SNAPs...	 *                 */	if (veth->h_vlan_proto != __constant_htons(ETH_P_8021Q)) {		int orig_headroom = skb_headroom(skb);		unsigned short veth_TCI;		/* This is not a VLAN frame...but we can fix that! */		VLAN_DEV_INFO(dev)->cnt_encap_on_xmit++;		printk("%s: proto to encap: 0x%hx (hbo)\n",				__FUNCTION__, htons(veth->h_vlan_proto));		/* Construct the second two bytes. This field looks something		 *        * like:		 *               * usr_priority: 3 bits  (high bits)		 *                      * CFI       1 bit		 *                             * VLAN ID   12 bits (low bits)		 *                                    */		veth_TCI = VLAN_DEV_INFO(dev)->vlan_id;	/*	veth_TCI |= vlan_dev_get_egress_qos_mask(dev, skb); */		skb = __vlan_put_tag(skb, veth_TCI);		if (!skb) {			stats->tx_dropped++;			return 0;		}		if (orig_headroom < VLAN_HLEN) {			VLAN_DEV_INFO(dev)->cnt_inc_headroom_on_tx++;		}	}#ifdef VLAN_DEBUG	printk(VLAN_DBG "%s: about to send skb: %p to dev: %s\n",			__FUNCTION__, skb, skb->dev->name);	printk(VLAN_DBG "  %2hx.%2hx.%2hx.%2xh.%2hx.%2hx %2hx.%2hx.%2hx.%2hx.%2hx.%2hx %4hx %4hx %4hx\n",			veth->h_dest[0], veth->h_dest[1], veth->h_dest[2], veth->h_dest[3], veth->h_dest[4], veth->h_dest[5],			veth->h_source[0], veth->h_source[1], veth->h_source[2], veth->h_source[3], veth->h_source[4], veth->h_source[5],			veth->h_vlan_proto, veth->h_vlan_TCI, veth->h_vlan_encapsulated_proto);#endif	stats->tx_packets++; /* for statics only */	stats->tx_bytes += skb->len;	skb->dev = VLAN_DEV_INFO(dev)->real_dev;	dev_queue_xmit(skb);	return 0;}static inline void vlan_destroy_mc_list(struct dev_mc_list *mc_list){	struct dev_mc_list *dmi = mc_list;	struct dev_mc_list *next;	while(dmi) {		next = dmi->next;		kfree(dmi);		dmi = next;	}} static void vlan_flush_mc_list(struct net_device *dev){	struct dev_mc_list *dmi = dev->mc_list;	while (dmi) {		printk(KERN_DEBUG "%s: del %.2x:%.2x:%.2x:%.2x:%.2x:%.2x mcast address from vlan interface\n",				dev->name,				dmi->dmi_addr[0],				dmi->dmi_addr[1],				dmi->dmi_addr[2],				dmi->dmi_addr[3],				dmi->dmi_addr[4],				dmi->dmi_addr[5]);		dev_mc_delete(dev, dmi->dmi_addr, dmi->dmi_addrlen, 0);		dmi = dev->mc_list;	}	/* dev->mc_list is NULL by the time we get here. */	vlan_destroy_mc_list(VLAN_DEV_INFO(dev)->old_mc_list);	VLAN_DEV_INFO(dev)->old_mc_list = NULL;}int vlan_dev_open(struct net_device *dev){	   if (!(VLAN_DEV_INFO(dev)->real_dev->flags & IFF_UP))			      return -ENETDOWN;		 		   return 0;} int vlan_dev_stop(struct net_device *dev){	   vlan_flush_mc_list(dev);		   return 0;} int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd){	struct net_device *real_dev = VLAN_DEV_INFO(dev)->real_dev;	struct ifreq ifrr;	int err = -EOPNOTSUPP;	strncpy(ifrr.ifr_name, real_dev->name, IFNAMSIZ);	ifrr.ifr_ifru = ifr->ifr_ifru;	printk("%s: is called,the cmd is %d\n", __FUNCTION__, cmd);	switch(cmd) {		case SIOCGMIIPHY:		case SIOCGMIIREG:		case SIOCSMIIREG:			if (real_dev->do_ioctl && netif_device_present(real_dev))				err = real_dev->do_ioctl(real_dev, &ifrr, cmd);			break;		case SIOCETHTOOL:			err = dev_ethtool(&ifrr);	}	if (!err)		ifr->ifr_ifru = ifrr.ifr_ifru;	return err;}int vlan_dev_change_mtu(struct net_device *dev, int new_mtu){	/* the later can be added more */	if (VLAN_DEV_INFO(dev)->real_dev->mtu < new_mtu)		return -ERANGE;	dev->mtu = new_mtu;	return 0;}int vlan_dev_set_mac_address(struct net_device *dev, void *addr_struct_p){	/* the later can be added more */	printk("%s:I do nothing...\n", __FUNCTION__);	return 0;}void vlan_dev_set_multicast_list(struct net_device *vlan_dev){	/* the later can be added more */	printk("%s:I do nothing...\n", __FUNCTION__);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频全国免费看| 久久日韩精品一区二区五区| 日韩欧美一级特黄在线播放| 国产视频一区在线观看| 一二三四社区欧美黄| 韩国一区二区三区| 欧美日韩精品欧美日韩精品| 国产精品理伦片| 久久激情五月激情| 欧美无砖专区一中文字| 国产精品女上位| 精品一区二区免费在线观看| 欧美亚洲免费在线一区| 中文字幕在线一区免费| 毛片av中文字幕一区二区| 在线观看日产精品| |精品福利一区二区三区| 国产一区二区中文字幕| 91麻豆精品国产91久久久更新时间| 日本一区二区在线不卡| 国产原创一区二区| 欧美一区二区三区视频免费播放| 亚洲精品国产精品乱码不99| 9久草视频在线视频精品| 日本一区二区三区视频视频| 国产精品中文字幕欧美| 欧美sm美女调教| 秋霞午夜av一区二区三区| 欧美日韩亚洲综合在线| 亚洲第一久久影院| 欧美亚洲精品一区| 亚洲va欧美va天堂v国产综合| 色综合久久久网| 一区二区在线观看视频| 色婷婷综合久久| 亚洲理论在线观看| 在线免费观看一区| 亚洲午夜私人影院| 欧美性受极品xxxx喷水| 婷婷开心激情综合| 宅男在线国产精品| 久久国产精品第一页| 久久久久久久一区| 高清免费成人av| 国产精品美女久久久久久2018| 99久久精品一区二区| 亚洲激情一二三区| 日韩一区二区三区视频在线观看 | 日韩av在线发布| 日韩视频一区二区三区在线播放| 欧美a级理论片| 久久久久久久久久久黄色| 国产黄色精品视频| 亚洲视频一二区| 欧美日韩一区二区电影| 蜜桃视频在线观看一区| 精品福利一区二区三区免费视频| 国产·精品毛片| 一区二区三区精密机械公司| 在线不卡a资源高清| 韩国av一区二区三区在线观看| 国产精品美女久久久久久久久 | 亚洲一区影音先锋| 欧美亚洲一区二区在线| 久久精品国产网站| 日韩伦理av电影| 欧美日韩国产bt| 国产精品亚洲一区二区三区妖精| 国产精品剧情在线亚洲| 欧美精品第1页| 成人av网站大全| 亚洲成人www| 国产欧美久久久精品影院| 91传媒视频在线播放| 国产精品一级片| 午夜亚洲国产au精品一区二区| 337p粉嫩大胆噜噜噜噜噜91av | 亚洲一区二区三区四区在线免费观看 | 亚洲色大成网站www久久九九| 欧美年轻男男videosbes| 高清不卡在线观看| 丝袜美腿一区二区三区| 国产精品久久久久久一区二区三区| 欧美色男人天堂| 亚洲欧美日韩国产综合| 蜜桃久久久久久久| 亚洲一区二区五区| 国产日韩欧美不卡在线| 777xxx欧美| 91成人免费网站| 国产成人午夜精品5599| 日本视频一区二区三区| 亚洲免费在线视频| 国产精品久久99| 久久这里只有精品6| 日韩亚洲电影在线| 欧美日韩国产一级| 色婷婷亚洲精品| 成人午夜免费视频| 国产成人8x视频一区二区| 日本成人在线不卡视频| 亚洲一区二区在线免费观看视频| 国产精品视频一区二区三区不卡| 精品国产一区二区三区av性色| 精品视频1区2区3区| 在线视频你懂得一区二区三区| av爱爱亚洲一区| 99国产精品一区| 成人久久18免费网站麻豆| 国产又粗又猛又爽又黄91精品| 青椒成人免费视频| 日韩av在线发布| 老司机午夜精品99久久| 久久9热精品视频| 国产一区二区三区黄视频 | 欧美性极品少妇| 在线日韩国产精品| 91久久国产综合久久| 在线观看日韩精品| 欧美日韩三级在线| 欧美一区二区三区白人| 日韩欧美在线影院| 精品乱人伦小说| 中文字幕欧美三区| 国产精品不卡在线观看| 亚洲美女免费在线| 亚洲韩国一区二区三区| 亚洲成在人线在线播放| 人人狠狠综合久久亚洲| 美女视频黄a大片欧美| 精品一区精品二区高清| 国产电影一区在线| av午夜一区麻豆| 欧美性色欧美a在线播放| 欧美日韩午夜在线视频| 日韩欧美综合一区| 国产蜜臀av在线一区二区三区| 自拍偷拍欧美激情| 午夜影院久久久| 国产精品自拍网站| 91麻豆国产在线观看| 欧美精品欧美精品系列| 久久综合色天天久久综合图片| 久久久久久久久97黄色工厂| 成人免费一区二区三区在线观看| 亚洲午夜久久久久久久久电影网 | 成人综合激情网| 一本到一区二区三区| 欧美日产在线观看| 久久久久免费观看| 亚洲免费伊人电影| 麻豆成人久久精品二区三区小说| 国产成人鲁色资源国产91色综| av在线播放不卡| 欧美浪妇xxxx高跟鞋交| 久久天堂av综合合色蜜桃网| 亚洲老司机在线| 精一区二区三区| 91在线一区二区三区| 在线不卡免费欧美| 亚洲欧美一区二区视频| 婷婷六月综合亚洲| 99视频一区二区| 日韩欧美在线影院| 亚洲综合一区二区精品导航| 久久99在线观看| 91成人看片片| 久久精品在线免费观看| 亚洲不卡av一区二区三区| 风间由美一区二区av101| 欧美日韩三级视频| 亚洲欧洲日本在线| 国产乱码一区二区三区| 欧美日韩久久一区| 国产精品色噜噜| 国产在线精品免费| 91久久精品日日躁夜夜躁欧美| 国产精品久久久久影院亚瑟| 看电影不卡的网站| 欧美日韩免费一区二区三区| 国产精品日产欧美久久久久| 久久精品国产精品亚洲精品| 欧美调教femdomvk| 中文字幕亚洲不卡| 高清不卡在线观看av| 精品久久久久久久一区二区蜜臀| 亚洲专区一二三| eeuss鲁片一区二区三区在线看| 26uuu久久天堂性欧美| 日韩在线一区二区| 欧美性生活一区| 一区二区三国产精华液| 不卡的av电影| 国产精品毛片无遮挡高清| 国内外成人在线视频| 日韩片之四级片| 久久成人麻豆午夜电影| 欧美一区二区三区四区五区 | 亚洲色图欧洲色图| 不卡高清视频专区|