医院网络设备方案_第1页
医院网络设备方案_第2页
医院网络设备方案_第3页
医院网络设备方案_第4页
医院网络设备方案_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

枣矿集团中心医院新院网络设备方案1.数据网络设计方案用性原则:以现行需求为基础,充分考虑发展的需要来确定系统规模,满足数字化医院建设需求。技术先进性和实用性:保证满足医院应用系统业务及三级医院等级评审要求的同2.交换机等网络设备配置清单2.1核心交换机(内网)pps支持二层交换的常见基本特性,如支持端口广播/多播/未知单播风暴抑制、支持基于端口、协议、子网和MAC的VLAN(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提千兆光口(SFP)数量≥24口;以上接口不可采用引擎自带集成接口数量:2.2核心交换机(外网)配置要求:同内网核心2.3汇聚交换机(内网)交换容量≥192Gbps;包转发率≥96Mpps;业务板支持物理堆叠和虚拟堆叠; TP支持基于端口、协议、子网和MAC的VLAN划分、支持技术指标:具备三层功能,支持静态路由,并支持RIP、OSPF等动态路全面兼容ipv4、ipv6;提供技术培训(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提与核心交换机同一品牌;2.4楼宇汇集交换机数量:技术指标:配置要求: 背板带宽≥48Gbps;包转发率≥35Mpps;支持基于模块化的堆叠技术,支持万兆堆叠模块;支持端口汇聚、端口镜像;支持广播风暴抑制;提供技术培训(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提千兆光口(可复用SFP)数量≥2个;与核心交换机同一品牌;2.5楼层接入交换机(内网)背板带宽≥19Gbps;包转发率≥6Mpps;支持基于端口带宽百分比的广播风暴抑制;支持端口汇聚、端口镜像,支持物理堆叠;支持基于端口、协议的VLAN,支持组播VLAN;提供技术培训(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提千兆以太网电口数量≥2个千兆光口(可复用SFP)数量≥2个;与核心交换机同一品牌;数量:2.6楼层接入交换机(外网)量:32台(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提配置要求:2.7安全管理系统(内网)支持软件分发功能:自动给指定的或全部终端计算机分发及于最佳工作状态。支持补丁管理功能:自动下载并安装补丁、及时更新病毒库洞而导致损失。;自动反馈计算机的硬件变化和软件安装、卸载状况,建立资统计软硬件的数量和型号等。支持应用程序管理功能:实时汇总网络内所有曾经运行过的应用程序名称;可制定运行策略,如禁止某些计算机运行指查询和统计应用程序的使用记录。数量:支持外设管理功能:可以允许或禁止客户端计算机的USB接支持远程管理功能:可在管理端直接遥控和操作任何一台电脑;可远程获取客户机的应用程序、网络连接、进程、系统支持日志功能:根据管理员预先定义的违规行为,记录内网务器数量数量6结构服务器机柜量1输入电压380V功率因数>0.9频率范围输出电压切换时间0后备时间售后服务3年当日4小时内响应7*24小时免人工、配件、交通费枣矿集团中心医院新院网络设备方案1.数据网络设计方案用性原则:以现行需求为基础,充分考虑发展的需要来确定系统规模,满足数字化医院建设需求。技术先进性和实用性:保证满足医院应用系统业务及三级医院等级评审要求的同2.交换机等网络设备配置清单2.1核心交换机(内网)pps支持二层交换的常见基本特性,如支持端口广播/多播/未知单播风暴抑制、支持基于端口、协议、子网和MAC的VLAN(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提千兆光口(SFP)数量≥24口;以上接口不可采用引擎自带集成接口数量:2.2核心交换机(外网)配置要求:同内网核心2.3汇聚交换机(内网)交换容量≥192Gbps;包转发率≥96Mpps;业务板支持物理堆叠和虚拟堆叠; TP支持基于端口、协议、子网和MAC的VLAN划分、支持技术指标:具备三层功能,支持静态路由,并支持RIP、OSPF等动态路全面兼容ipv4、ipv6;提供技术培训(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提与核心交换机同一品牌;2.4楼宇汇集交换机数量:技术指标:配置要求: 背板带宽≥48Gbps;包转发率≥35Mpps;支持基于模块化的堆叠技术,支持万兆堆叠模块;支持端口汇聚、端口镜像;支持广播风暴抑制;提供技术培训(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提千兆光口(可复用SFP)数量≥2个;与核心交换机同一品牌;2.5楼层接入交换机(内网)背板带宽≥19Gbps;包转发率≥6Mpps;支持基于端口带宽百分比的广播风暴抑制;支持端口汇聚、端口镜像,支持物理堆叠;支持基于端口、协议的VLAN,支持组播VLAN;提供技术培训(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提千兆以太网电口数量≥2个千兆光口(可复用SFP)数量≥2个;与核心交换机同一品牌;数量:2.6楼层接入交换机(外网)量:32台(培训时间由甲方安排),提供三年原厂7×24小时硬件保修服务,能提供快速本地化现场技术支持,能提配置要求:2.7安全管理系统(内网)支持软件分发功能:自动给指定的或全部终端计算机分发及于最佳工作状态。支持补丁管理功能:自动下载并安装补丁、及时更新病毒库洞而导致损失。;自动反馈计算机的硬件变化和软件安装、卸载状况,建立资统计软硬件的数量和型号等。支持应用程序管理功能:实时汇总网络内所有曾经运行过的应用程序名称;可制定运行策略,如禁止某些计算机运行指查询和统计应用程序的使用记录。数量:支持外设管理功能:可以允许或禁止客户端计算机的USB接支持远程管理功能:可在管理端直接遥控和操作任何一台电脑;可远程获取客户机的应用程序、网络连接、进程、系统支持日志功能:根据管理员预先定义的违规行为,记录内网务器数量数量6结构服务器机柜量1输入电压380V功率因数>0.9频率范围输出电压切换时间0后备时间售后服务3年当日4小时内响应7*24小时免人工、配件、交通费Linux网络设备分析[摘要]在本文中,首先概括了网络设备总体特征和工作原理,接着在分析了一个重要的数据结构device后,重点剖析了网络设备的整个初始化工作过程;简单地分析了设备的打开和关闭的操作后,是有关数据包的传输和接收的分析;在最后,本文对写网络设备驱动程序做了一个总符设备驱动程序以及写这个程序的体会,该程序已成功使用过,它是在网络设备分析之前本人小的试验。在LINUX中,为了简化对设备的管理,所有外围的硬件设备被归结为三类:字符设备(如如以太网卡。在本文中,我们将等效使用“网络设备”和“网络接口”这两个概念,而对某个为了屏蔽网络环境中物理网络设备的多样性,LINUX对所有的物理设备进行抽象并定义了一个统一的概念,称之为接口(Interface)。所有对网络硬件的访问都是通过接口进行的,接口提供了一个对所有类型的硬件一致化的操作集合来处理基本数据的发送和接收。一个网络接口被看作是一个发送和接收数据包(packets)的实体。对于每个网络接口,都用一个device的数据结构表示,有关该数据结构的具体内容,将在本文的后面详细介绍。通常,网络设备是一个物理设备如以太网卡,但软件也可以作为网络设备,如回送设备(loopback)。在内核启动时,通过网络设备驱动程序,将登记存在的网络设备。设备用标准的支持网络的机制来转递收到的数据到相应的网络层。所有被发送和接收的包都用数据结构sk_buff表示。这是一个具有很好的网络设备作为其中的三类设备之一,它有其非常特殊的地方。它与字符设备及块设备都有很大的不同:e每一个字符设备或块设备则在文件系统中都存在一个相应的特殊设备文件来表示该设过接口访问,不需要进行文件的操作;而对字符设备和块设备的访问都需通过文件操作界面。网络接口是在系统初始化时实时生成的,对于核心支持的但不存在的物理网络设备,存在,在/dev下也必定有相应的特殊文件与之相对应。且在系统初始化时,核心将会对所有内核支持的字符设备和块设备进行登记,初始化该设备的文件操作界面(struct以上两点是网络设备与其他设备之间存在的最主要的不同。然而,它们之间又有一些共同blk_dev数组及“接收”数据块。相似地,为了能与外面世界进行数据交流,一个网络接口也必须在一个特殊的数据结构中登记自己。file_operations结构的指针的设备管理表,分别用来描述各种字符驱动程序和块设备驱动程序。表中,其中每一个链表单元表示一个存在的物理网络设备。当要发送数据时,网络子系统将根据系统路由表选择相应的网络接口进行数据传输,而当接收到数据包时,通过驱动程序登记的中断服务程序进行数据的接收处理(软件网络接口除外)。以下是网络设备工作原理图:DEVICE结构的变量和方法(设备接口)(中断服务程序)从硬件接收数据网络物理设备和媒介初始化程序图一Linux网络设备工作原理图每一个具体的网络接口都应该有一个名字,以在系统中能唯一标识一个网络接口。通常一trNplipN割为两个部分:可见部分和隐藏部分。可见部分是由外部赋值;隐藏部分的域段仅面向系统内部,它们可以随时被改变。下面我们将对之进行详细的分析和解剖。/*frominclude/linux/netdevice.h*/{会赋给它一个n最小的可用网络设备名ethn。这些域段标识被设备使用的共享内存的首地址及尾地址。如果设备用来接收和发送的内存块不同,则mem域段用来标识发送的内存位置,rmem用来标识接收的内存位置。rmem的程序所引用。传入(如传给LILO)。ifconfig命令可显示及修改他们的当前值。/*interruptarrived*/interrupt。标识“发送忙”。在驱动程序不能接受一个新的需传输的包时,该域段应该为非零。指向下一个网络设备,用于维护链表。A一些设备可能需要以上两个域段,但非必需的。x上次传输的时间点(injiffies)上次接收的时间点(injiffies)。如trans_start可用来帮助内核检测数据传输的死锁(lockup)。表示接口在运行中。当接口被激活时,内核将置该标志位。表示设备中的广播地址时有效的。以太网支持广播。调试模式,表示设备调试打开。当想控制printk及其他一些基于调试目的的信息显示时,可利用这个标志位。虽然当前没有正式的驱动程序使用它,但它可以在程序中通表示这是一个回送(loopback)设备,回送接口应该置该标志位。核心是通过检查此标志位来判断设备是否是回送设备的,而不是看设备的名字是否是lo。r此两个标志位在装入平等化中要用到。ARP。全局接受模式。在该模式下,设备将接受所有的包,而不关这些包是发给谁的。在缺省情况下,以太网接口会使用硬件过滤,以保证只接受广播包及发给本网络接口的包。Sniff的原理就是通过设置网络接口为全局接受模式,接受所有到达本接口媒介的包,来“偷听”本子网的“秘密”。若不想支持多点传送,必须在初始化时清除该标志位。IFF_ALLMULTI/*无网络TRAILER*//*资源被分配*/本设备支持的协议地址簇。大部分为AF_INET(英特网IP协议),接口通常不需要用这个域段或赋值给它。不包括数据链路层帧首帧尾的最大传输单位(MaximumTransferUnit)。网络层在包传输时要用到。对以太网而言,该域段为1500,不包括MAC帧的帧首和帧尾(MAC帧格式。接口的硬件类型,描述了与该网络接口绑在一起的媒介类型。Linux网络设备支持许多在被传送的包中IP头之前的字节数。对于以太网接口,该域段为14(ETH_HLEN,MAC帧格式:目的地址(6字节)+源地址(6字节)+数据长度(2字节)+数据(46~~1500)+FCSvoidprivpointertoprivatedata因为该指针指向的内容包括设备接口的统计数据,而这些数据即使在接口卸下(down)时也应可以得到的,如用户通过ifconfig查看。设备的物理地址。当包传送给驱动程序传输时,要用物理地址来产生正确的帧首。物理地址的长度。以太网网卡的物理地址为6字节(ETH_ALEN)。点对点协议接口(如SLIP、PPP)用这个域记录连接另一边的IP值。intlist指向网络接口缓冲区的指针。服务处理程序以下是一些对网络接口的操作,类似与字符设备和块设备。网络接口操作可以分为两部分,一部分为基本操作,即每个网络接口都必须有的操作;另一部分是可选操作。/*基本操作*/e初始化函数的指针,仅被调用一次。当登记一个设备时,核心一般会让驱动程序初始始化失败,该设备的device结构就不会被链接到全局的网络设备表上。在系统启动时,每个驱动程序都试图登记自己,当只有那些实际存在的设备才会登记成功。这与用主设备号及次设备号索引的字符设备和块设备不同。打开网络接口。每当接口被ifconfig激活时,网络接口都要被打开。Open操作做以下硬件开始传输。这个操作请求对一个包的传输,这个包原保存在一个socket缓冲区结构中(sk_buff)。在一个包被发送之前重建硬件头。对于以太网设备,若有未知的信息,缺省函数将使当一个应用程序需要知道网络接口的一些统计数据时,可调用该函数,如ifconfig、/*可选操作*/设置多点传输的地址链表(*mc_list)。改变硬件的物理地址。如果网络接口支持改变它的硬件物理地址,就可用这个操作。多硬件不支持该功能。改变接口配置。设备的I/O地址和中断号可以通过该函数进行实时修改。这个函数负责使接口MTU改变后生效。如果当MTU改变时驱动程序要作一些特殊的事情,就应该写这个函数。};vice际上是一条device结构链表的表头,在系统初始化完成以后,系统检测到的网络设备将自动地保存在这张链表中,其中每一个链表单元表示一个存在的物理网络设备。登记成功的网络设备程序(module),只有模块化的网络设备驱动程序才能用这种方式对设备进行初始化,称为“模另一类是系统驱动时由核心自动检测网络设备并进行初始化,我们称为“启动始化模式”。显然,这两种初始化模式存在许多不同之处,以下我们对两者分别进行分析。初始化模式”的分析概述函数指针后,将调用register_netdev()在系统登记该设备。若登记成功,则模块装载成功,否则返回出错信息。register_netdev首先检查设备名是否已确定,若没赋值则给它一个缺省的值中赋值的dev->init,将被调用,用来实现对网络接口的实际的初始化工作。若初始化成功,则devbase尾部。整个函数调用关系图如下所示。下面我们图二“模块初始化模式”的函数调用关系图init_module2.对dev->init函数指针进行赋值,对于任何网络设备这一步必不可少!!因为在ec{测并试图去登记,MAX_NE_CARDS为4,ifregisternetdevdev登记该设备*/ipforii<3;i++){/*fromdrivers/net/plip.c*/}}/*设备登记成功,继续登记下一个设备*//*第一次发生登记不成功事件*/if(found!=0)/*在这之前没有成功登记NE2000接口,返回*//*显示出错信息*/or该函数实现对网络接口的登记功能。其实现步骤如下:1.首先检查设备名是否已确定,若没赋值则以以太网设备待之并给它一个缺省的值调用,用来实现对网络接口的实际的初始化工作。/*fromdrivers/net/net_init.c*/{eif(dev&&dev->init){/*若设备名字没确定,则将之看作是以太网设备!!*//*找到下一个最小的空闲可用以太网设备名字*/XETHCARDSiif(ethdev_index[i]==NULL){}}/*调用初始化函数进行设备的初始化*/ifdevinitdev=0){/*将设备加到网络设备管理表中,加在最后*//*找到链表尾部*/}init_function当系统登记一个网络设备时,核心一般会请求该设备的驱动程序初始化自己。初始化函数对于可以与其他共享中断号的设备,我们应尽量避免在初始化函数中登记I/O地址和(driver/net/net_init.c)统一来设置的,因为以太网卡有很好的共性。对于非以太网接e每个驱动程序都试图登记自己,当只有那些实际存在的设备才会登记成功。这与用主设备号及次设备号索引的字符设备和块设备不同。ec{ifbaseaddrxff/*I/O地址有指定值*/*//*检测到一个I/O端口地址*/ec{IO址;初始化8390*/ifdevirq2){outb_p(0x00,ioaddr+EN0_IMR);/*屏蔽中断*/devirqautoirqreport/*获得刚才产生的中断号*/if(irqval){}if(ethdev_init(dev)){/*该函数下面将分析*/free_irq(dev->irq,NULL);/*初始化不成功,释放登记的中断号!*/}/*向系统登记I/O地址*/foriiETHERADDRLENi++){}/*向dev结构登记设备打开和关闭函数*//*fromdrivers/net/8390.c*/{if(dev->priv==NULL){/*申请私有数据结构空间,用于记录设备的状态等*/ether_setup是一个通用于以太网接口的网络接口设置函数。由于以太网卡有很好的共性,up看看它到底会缺省设哪些域段及设为什么值。若你满意这些缺省设置,那么在写驱动程序时只之不理了”☺,否则,也可在调用该函数{inti;/*初始化缓冲队列链表,这是一个双向链表*/foriiDEVNUMBUFFSiDEVNUMBUFFS3*//*一些处理函数的初始化,驱动程序可以不写这些函数了*/s/*MAC层协议头的大小14*//*最大传输单位*//*协议地址长度4*//*传输队列的长度*//*广播地址有效及支持多点传输*/=AF_INET;/*英特网IP协议簇*/议地址长度4*/}/*以后用ifconfig命令设置*//*以后用ifconfig命令设置*//*协device结构至此模块化网络设备的初始化就完成2.“启动初始化模式”的分析初始化策略“plip0”plip_initplip_init()块初始化模“eht7”init()式”不同,前者要对所有内核支持的网络设备进行检测和初始化,而后者仅需检测和初始化被装载模块的网络设备。为了实现在启动时对所有可能存在的设备进行初始化,系统在启动之前将所有内核支持的网络设备的名字及相应的初始化函数都挂在网络设备管理表(dev_base)上。devbase设备管理表中剩下的网络接口都是存在的,显然也已是图三网络设备表的初始化后的示意图/*网络设备管理表的初始化*/O*只能自动检测到一块eth网卡,就是这个原因*/vicedevbaseloopbackdev函数调用关系进行所有尚未初始化的设备(有一些设备如内存、PCI等系统已先于此进行了初始化)。支持的且实际存在的网络设备。net_dev_init会对每个内核支持的网络设备调用该设备的init_functions进行具体的物理设备的初始化工作。整个函数调用关系图如下:elnetnet_dev_init()dev->init()图四“启动初始化模式”的函数调用关系图具体流程LINUX启动时,完成了实模式下的系统初始化(arch/i386/boot/setup.S)与保护模式下的核start_kernel启动核心(init/main.c)后,将继续各方面的初始化工作,其中与网络子系统有关的sock_init()函数主要做以下动作:①初始状态设为不支持任何网络协议:LL②调用init_netlink(),登记一个网络字符设备(即把netlink看作一种字符设备),主设for(ct=0;ct<MAX_LINKS;ct++){}oinitvoid协议在net/protocols.c中定义*/LLo}}⑥调用export_net_symbols(),向系统登记发布networksymbols,以供系统的模块etsymsc{/*该函数为宏,定义在(include/linux/module.h)*/}};至此,系统完成了一些有关网络模块的初始化工作。但请注意,目前系统还没涉及任何有关网络设备的初始化内容(别急☺)。有些特别:网络协议的初始化竟是在网络设备的初始化协议(如TCP/IP、SOCKET等)和网络设备之间的缝合未作深入的代码级分析,望能有后来者弥补这方面的工作(?)。题外话了,言归正传。括所有设备的初始化工作)。/*frominit/main.c*/{/*创建后台进程kswapd,专门处理页面换出工作*//*哈哈,原来在这里!终于逮到了!!setup以前和调用之后,*启动时能输出信息)后,重新编译内核。发现用新的内核后,通过。(?)*/}对所有的设备进行初始化工作。/*fromfs/filesystems.c*/{callable=0;/*通过静态变量,限制该函数最多只能被调用一次*/}fromdriversblock/genhd.c*/chrdevinitdriverschamemc*/}/*块设备的初始化drivers/block/ll_rw_blk.c*/redevc/*初始化数据包接收队列*//*网桥必须在其他设备之前初始化*/br_init();/*以下进行网络设备初始化检测,如果dev->init初始化失败(大多数是*并已初始化为核心支持的所有网络设备的链表,其中包括每个设备的probedpNULL{inti;}if(dev->init&&dev->init(dev))/*初始化失败,将该设备从链表中删除,并准备初始化下一个*/dp=&dev->next;/*成功,准备初始化下一个*/}至此,通过分析我们知道了一个网络接口是如何在模块装载或内核启动时被检测和初始化的。为了使用网络设备,下一步就是解决如何激活(打开)初始化好了的接口这个问题了。打e作接口的打开和关闭的功能。要释放接口所有的sk_buff空间。{if(ret==0)/*接口打开成功*/{/*初始化有关多点传输的一些状态*/}}1.若没有在初始化函数中登记中断号和I/O地址,则在设备打开时要进行登记分别用p断号直接索引到相应的设备了;{MODINCUSE_COUNT;/*对应于第7项内容*/}{closedevMOD_DEC_USE_COUNT;/*对应于第7项内容*/}/*fromdrivers/net/8390.c*/{if(ei_local==NULL){/*只有没调用ethdev_init(),才会出现以下的错误*/}devmapdevirqdevtUPeilocalirqlock;/*对应于第5项*/}{}/*对应于第6项内容,表示接口DOWN*/{寄存器的状态*//*对应于第6项内容*/}/*对应于第5项内容*/ioctlSIGNAL:读取和修改接口网络地址(对TCP/IP就是IP地址)、读取是通过该文件提供的函数实现的。当物理网络设备接收到数据时,系统是如何知道并读取数据的呢?当前可通过两种途径解决这个问题。一种方法是轮询方式,系统每隔一定的时间间隔就去检查一次物理设备,若设备“报告”说有数据到达,就调用读取数据的程序。在Linux中,轮询方式可通过定时器实现,但该方法存在一个明显的缺点:不管设备是否有数据,系统总是要固定地花CPU时间去查看设U是从效率上看,这种方法都不是最优的。另一种方法是中断方式,中断方式利用硬件体系结构的中断机制实现设备和系统的应答对话,即当物理设备需要CPU处理数据时,设备就发一个中断信号给系统,系统则在收到信号后调用相应的中断服务程序响应对设备中断的处理。中断方式有效地解决了设备与CPU的对话交流问题,并将CPU从繁重的设备轮询中解脱出来,大大乎都是使用中断方式的。故在此我们主要讨论基于中断方式的网络设备驱动程序。在收到数据包时则要将本层的协议头和协议尾从数据包中去掉。这使得在不同层协议间传输时,每层都需要知道自己这一层的协议头和协议尾在数据包的哪里。一种解决方法是在每层都复制缓冲区,但显然效率太低。Linux的做法是用一种数据结构sk_buff在不同协议层及网络设备驱动程序之间传送数据。sk_buff包括指针和长度域段,允许每个协议层通过标准的函数操作传送的数据包。该数据结构在整个Linux的网络子系统包括网络设备中扮演了一个十分重要的角色,相关操作。因为对该数据结构的了解将大大有助于对Linux整个网络子系统的理解。与块设备的缓冲区处理方式不同,网络设备发送与接收数据包用的缓冲区是一个统一的数skbuffincludelinuxskbuffh数,从而使该数据结构具有网络协议传输需要的通常的缓冲功能和流控制能力,并可方便、灵活地处理数据包首尾的增加和删除。skbuff据指针指地址;指向当前数据包的首地址;指向当前数据包的末地址;地址;当前数据包的大小。ail分配到的内存空间大小。由于数据包的大小会随着自己在不同协议层tail将会不断地改变,即依赖于skb当前所在的协议不变。对缓冲区的操作,核心提供了一个比较完整的函数界面,对缓冲区的操作,核心提供了一个比较完整的函数界面,并作分析说明。/*fromnet/core/skbuff.c*/该函数返回在sk_buff中可用于put的空间大小(尾部空余空间)。若缓冲区被正确分配到空间,驱动程序通常不需要检查缓冲区中空余空间的大小。由于驱动程序在申请n区之前,可用该函数保留一部分首部空间。许多以太网卡在首部保留2字节空间,这接收到的数据包中被剔除的。数据包的传输由于网络分层的原因,当用户要传输数据时,数据包是沿着网络协议由上往下逐层下传的。函数传送给网络接口。网络接口的任务就是将数据包传送给硬件,让物理网络设备完成最终的硬件传输函数指针,Linux正是通过这个函数指针来完成实际的数据传输的。已超时,若未超时,就不成功返回,若已超时,则初始化芯片寄存器、置5.修改接口的一些统计信息。本文中分析时,作者试图尽量避免依赖于硬件的那一部分代码,以便加深对整个网络设备管理机制的把握,并试图强调、突出一般网络设备所共有的东西。/*传输函数*/{/*若设备忙,就判断上次传输是否已超时*//*读取传输状态寄存器的值*/neTXTIMEOUTHZreturn1;/*未超时,或超时一点点且发送时出错*/}/*已超时*//*重新初始化芯片寄存器*//*将开始传输域段置为的当前时间坐标点*/}/*屏蔽网络设备的硬件中断*//*正在运行中断服务程序*//*恢复中断屏蔽,失败返回;EN0_IMR中断屏蔽寄存器(WR)*/}/*硬件传输*//*设置开始传输时间坐标点,打开“忙”标志*//*恢复中断屏蔽*//*释放缓冲区skb*/}的接收由于使用了硬件中断请求机制,当物理网络设备接收到新数据时,它将发送一个硬件中断请求给系统。系统在侦察到有物理设备发出中断请求,就会调用相应的中断服务程序来处理中断请求。在这里,系统首先要知道哪个中断对应哪个中断服务程序。为了让系统知道网络设备的中断服务程序,一般在网络设备初始化的时候或设备被打开时,要向系统登记中断号及相应的中断服务程序(用request_irq这个函数登记)。基于中断方式的设备驱动程序若在设备初始化NE一个网络接口的中断服务程序的工作步骤一般有以下几步:3.读取中断状态寄存器,根据寄存器判断中断发生的原因。有两种可能:一种是有新数据包到达;另一种是上次的数据传输已完成。4.若是因为有新数据包到达,则调用接收数据包的子函数;当中断服务程序明确物理网络设备有数据包收到时,将调用数据接收子程序来完成实际的devc包往上层传。数据接收子程序的内容可以由以下四点来概括:接口的接收过程进行分析。/*中断服务程序*/{/*有其他进程运行中断服务程序*/}断处理标志,阻止再次进入*/ /*读取中断状态寄存器(RDWR)*

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论