⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 if_vnet.h

📁 嵌入式系统的网络仿真
💻 H
字号:
/* *  Universal Virtual Net Switch device driver. *  Copyright (C) 1999-2003  Chen Yu <chenyu@hpclab.cs.tsinghua.edu.cn> * *  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. * *  $Id: if_vnet.h,v 1.4 2003/06/06 13:50:14 chenyu Exp $ */#ifndef __IF_VNET_H#define __IF_VNET_H/* Uncomment to enable debugging *//* #define VNET_DEBUG 1 */#ifdef __KERNEL__#define VNET_DEBUG#ifdef VNET_DEBUG#define DBG  if(1)printk#define DBG1 if(1)printk#else#define DBG( a... )#define DBG1( a... )#endif#define VNET_MAJOR 11#define VNET_MINOR 201struct vnet_struct {	char 			*name;	unsigned long 		flags;	int			attached;	uid_t			owner;	wait_queue_head_t	read_wait;	struct sk_buff_head	readq;	struct net_device	dev;	struct net_device_stats	stats;	struct fasync_struct    *fasync;#ifdef VNET_DEBUG		int debug;#endif  };#ifndef MIN#define MIN(a,b) ( (a)<(b) ? (a):(b) ) #endif#endif /* __KERNEL__ *//* Read queue size */#define VNET_READQ_SIZE	10/* VNET device flags */#define VNET_VNET_DEV 	0x0001	#define VNET_TAP_DEV	0x0002#define VNET_TYPE_MASK   0x000f#define VNET_FASYNC	0x0010#define VNET_NOCHECKSUM	0x0020#define VNET_NO_PI	0x0040#define VNET_ONE_QUEUE	0x0080#define VNET_PERSIST 	0x0100	/* Ioctl defines */#define VNETSETNOCSUM   _IOW('T', 200, int) #define VNETSETDEBUG    _IOW('T', 201, int) #define VNETSETIFF      _IOW('T', 202, int) #define VNETSETPERSIST  _IOW('T', 203, int) #define VNETSETOWNER    _IOW('T', 204, int)#define VNETSHOWINFO    _IOW('T', 205, int)#define VNETUNSETIFF    _IOW('T', 206, int) /* VNETSETIFF ifr flags */#define IFF_VNET		0x0001#define IFF_TAP		0x0002#define IFF_NO_PI	0x1000#define IFF_ONE_QUEUE	0x2000#define VNET_PKT_STRIP	0x0001#define VNET_NUM_HUBS  		8#define NUM_NUTS_PER_HUB 	32#define VNET_MAX_NUT_NAME_LEN 	16#define VNET_MAX_QLEN		128typedef u_char uint8;typedef u_short uint16;typedef u_long uint32;typedef long int32;typedef char Bool;#define VNET_MAC_EQ(_a, _b)         !memcmp((_a), (_b), ETH_ALEN)#define VNET_SKB_2_DESTMAC(_skb)    (((struct ethhdr *)(_skb)->data)->h_dest)#define VNET_SKB_2_SRCMAC(_skb)     (((struct ethhdr *)(_skb)->data)->h_source)#define VNET_UP_AND_RUNNING(_flags) (((_flags) & (IFF_RUNNING|IFF_UP)) == (IFF_RUNNING|IFF_UP))#define TRUE  1#define FALSE 0typedef enum {	VNET_GUESTIF_NUT,	VNET_HOSTIF_NUT,	VNET_HUB_NUT	} vnet_nuttype;typedef enum {	VNET_HUB,	VNET_SWITCH} vnet_hubtype;struct vnet_pi {	unsigned short flags;	unsigned short proto;};#ifdef __KERNEL__/* *  The net is the basic mechanism for connecting to objects *  that send packet between them. */struct vnet_nut {   struct vnet_nut  *peer;   vnet_nuttype      type; 		//maybe guestif or hostif or hub   int               numbolts;   char              name[VNET_MAX_NUT_NAME_LEN];   int               refCount;   Bool              connected;   // could be a generic state variable if needed   void             *private;     // private field for containing object   int               index;       // private field for containing object   struct proc_dir_entry    *procEntry;   // private field for containing object   wait_queue_head_t waitQueue;   // used to wait for other threads to release the jack      void         (*free)(struct vnet_nut *this);   void         (*rcv)(struct vnet_nut *this, struct sk_buff *skb);   Bool         (*cycleDetect)(struct vnet_nut *this, int generation);   void         (*boltsChanged)(struct vnet_nut *this);   int          (*isBridged)(struct vnet_nut *this);};struct vnet_bolt {   struct vnet_nut      nut;     // must be first   unsigned    		id;   uint32      		flags;   struct vnet_bolt	*next;   uint8       		paddr[ETH_ALEN];   uint8       		ladrf[8];   int (*fileOpRead)(struct vnet_bolt *this, struct file *filp, char *buf, size_t count);   int (*fileOpWrite)(struct vnet_bolt *this, struct file *filp, const char *buf, size_t count);   int (*fileOpIoctl)(struct vnet_bolt *this, struct file *filp, unsigned int iocmd, unsigned long ioarg);      int (*fileOpSelect)(struct vnet_bolt *this, struct file *filp, poll_table *wait);};struct vnet_hub {   int           	num;   vnet_hubtype 	type; //hub or switch			   struct vnet_nut      nut[NUM_NUTS_PER_HUB];   int		 	stats[NUM_NUTS_PER_HUB];   int           	totalbolts;   int           	mygeneration;};struct vnet_guestif_stats {   unsigned    read;   unsigned    written;   unsigned    queued;   unsigned    droppedDown;   unsigned    droppedMismatch;   unsigned    droppedOverflow;};struct vnet_guestif {   struct vnet_bolt       bolt;   struct sk_buff_head    packetQueue;   uint32*                pollPtr;   struct page*           pollPage;   uint32                 pollMask;   uint32                 clusterCount;   wait_queue_head_t      waitQueue;   struct vnet_guestif_stats        stats;};struct vnet_hostif {   struct vnet_bolt        bolt;   unsigned long 	   flags;   int			   attached;   uid_t	   	   owner;   wait_queue_head_t	   read_wait;   struct sk_buff_head	   readq;   struct net_device       dev;   //char                    devName[8];   struct net_device_stats stats;   struct fasync_struct    *fasync;};#endif /*__KERNEL__*/#endif /* __IF_VNET_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -