易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux网络设备驱动学习笔记( )

Linux网络设备驱动程序体系结构
从上到下:网络协议接口层-->网络设备结构层-->设备驱动实现层-->网络设备与媒介层
 
记忆方法:
分三层,1、最上面理解为我们用的网络传输方法,就是网络协议,2、最下面就是物理硬件,即网络设备层,3、中间是一层,设备驱动,然后拆成2部分,上部分是结构(层),下部分是结构中函数的实现(层)。
 
功能描述:
网络协议接口层
dev_queue_xmit() 发送数据, netif_rx() 接收数据。
网络设备结构层
有一个结构net_device
设备驱动实现层
net_device里的函数实现, 通过hard_start_xmit()启动发送操作,通过中断触发接收操作。
网络设备与媒介层
哪里管的了那么多,不理它硬件怎么实现的。
 
网络协议接口层
有一个NB的结构体:sk_buff,叫做:套接字缓冲区,各层之间数据传输都靠他。
dev_queue_xmit()、netif_rx()的参数都是只是sk_buff。
函数原型:
dev_queue_xmit(struct sk_buff  *sb );          //sb实际是 skb,少写一个k助记
netif_rx(struct sk_buff sk_buff  *sb);             //同上
 
sk_buff 内容详解
 
1 协议头 ,有好多好多协议要使用,所以协议头是必要滴,当然不能同时使用TCP/IP UDP或者其他什么协议,所以把头结构定义成联合体。
2 数据缓冲区:要搞个地方放数据,要功能强大必须能找到各需要的位置比如:头、尾… 所以在sk_buff中定义了4个指针:head、 data、tail、end。指向数据缓冲区。
head:缓冲区起始地址,sk_buff 一旦创建,head数据就固定了。
data:当前层的有效数据起始地址
tail: 有效数据的结尾地址,和data对应
end:缓冲区的结尾地址,sk_buff 一旦创建,end数据就固定了。
3 长度信息
len:数据包有效数据长度,包括协议头和负载(Payload?)
data_len:记录分片的数据长度,数据包的有效数据是分成几片存在不同的内存空间中,每片空间最大是一页。
truesize:缓冲区的整体长度,即:sizeof(struct sk_buff)+(传入alloc_sdb()或dev_alloc_skb()函数的长度)--说实话不理解传入函数的长度是什么.
 
NB的结构体:sk_buff的操作
各层之间就靠他,当然需要对他进行操作。
Ø  分配:
struct sk_buff  *alloc_skb(unsigned int len,int priority);


相关文档:

Linux主要shell命令详解

shell是用户和Linux操作系统之间的接口。Linux中
有多种shell,其中缺省使用的是Bash。本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性。
  什么是shell
  Linux系统的shell作为操作系统的外壳,为用户提
供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
  she ......

linux 系统编码

一。linux系统的默认编码设置。
/etc/sysconfig/i18n
Controls the system font
settings. The language variables are used in /etc/profile.d/lang.sh. An
example i18n file:
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"

SUPPORTED="zh_CN.GB18030:zh_CN ......

Linux下通用线程池的创建与使用 C++

本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。
&nb ......

Grub引导Linux或者windows系统

很多新手,在安装linux系统时常常会出现的问题:引导程序装错,或者不小心删除linux分区,把mbr删掉了。或者装完linux后又重装windows,把mbr覆盖了,以致无法启动系统,出现"Grub>"的情况。
如果将Grub或者Lilo安装在Mbr(主引导扇区),重新安装Windows会造成Grub或者Lilo的丢失。如果把它们安装在根分区(root分区), ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号