内核源码学习:Linux 2.4内核API(十一)转
2008-11-25 12:17
381 查看
skb_append | 追加一个缓冲区 | void skb_append (struct sk_buff * old, struct sk_buff * newsk) | old为插入之前的缓冲区,newsk为要插入的缓冲区 | 把一个数据包放在链表中给定的包之前。该函数持有链表锁,并且是原子操作。一个缓冲区不能同时放在两个链表中。 |
skb_unlink | 从链表删除一个缓冲区 | void skb_unlink (struct sk_buff * skb); | Skb为要删除的缓冲区 | 把一个数据包放在链表中给定的包之前。该函数持有链表锁,并且是原子操作。 |
_skb_dequeue_tail | 从队尾删除 | struct sk_buff * __skb_dequeue_tail (struct sk_buff_head * list) | List为要操作的链表 | 从链表尾部删除。这个函数不持有任何锁,因此必须持以合适的锁来使用。如果链表为空,则返回NULL,成功则返首部元素。 |
skb_dequeue_tail | 从队头删除 | struct sk_buff * skb_dequeue_tail (struct sk_buff_head * list) | List为要操作的链表 | 删除链表尾部,这个函数持有锁,因此可以安全地使用。如果队链表为空则返回NULL,成功则返回首部元素。 |
skb_put | 把数据加到缓冲区 | unsigned char * skb_put (struct sk_buff * skb, unsigned int len) | skb为要使用的缓冲区,len为要增加的数据长度 | 这个函数扩充缓冲区所使用的数据区。如果扩充后超过缓冲区总长度,内核会产生警告。函数返回的指针指向所扩充数据的第一个字节。 |
skb_push | 把数据加到缓冲区的开始 | unsigned char * skb_push (struct sk_buff * skb, unsigned int len); | skb为要使用的缓冲区,len为要增加的数据长度 | 这个函数扩充在缓冲区的开始处缓冲区所使用的数据区。如果扩充后超过缓冲区首部空间的总长度,内核会产生警告。函数返回的指针指向所扩充数据的第一个字节。 |
skb_pull | 从缓冲区的开始删除数据 | unsigned char * skb_pull (struct sk_buff * skb, unsigned int len) | skb为要使用的缓冲区,len为要删除的数据长度 | 这个函数从链表开始处删除数据,把腾出的内存归还给首部空间。把指向下一个缓冲区的指针返回。 |
skb_headroom | 缓冲区首部空闲空间的字节数 | int skb_headroom (const struct sk_buff * skb) | skb为要检查的缓冲区 | 返回&sk_buff首部空闲空间的字节数 |
skb_tailroom | 缓冲区尾部的空闲字节数 | int skb_tailroom (const struct sk_buff * skb) | skb为要检查的缓冲区 | 返回&sk_buff尾部空闲空间的字节数 |
skb_reserve | 调整头部的空间 | void skb_reserve (struct sk_buff * skb, unsigned int len) | skb为要改变的缓冲区,len为要删除的字节数 | 通过减少尾部空间,增加一个空&sk_buff的首部空间。这仅仅适用于空缓冲区。 |
skb_trim | 从缓冲区删除尾部 | void skb_trim (struct sk_buff * skb, unsigned int len); | skb为要改变的缓冲区,len为新的长度 | 通过从尾部删除数据,剪切缓冲区的长度。如果缓冲区已经处于指定的长度,则不用改变。 |
skb_orphan | 使一个缓冲区成为孤儿 | void skb_orphan (struct sk_buff * skb); | skb是要成为孤儿的缓冲区 | 如果一个缓冲区当前有一个拥有者,我们就调用拥有者的析构函数,使skb没有拥有者。该缓冲区继续存在,但以前的拥有者不再对其“负责”。 |
skb_queue_purge | 使一个链表空 | void skb_queue_purge (struct sk_buff_head * list) | list为要腾空的链表 | 删除在&sk_buff链表上的所有缓冲区。这个函数持有链表锁,并且是原子的。 |
__skb_queue_purge | 使一个链表空 | void __skb_queue_purge (struct sk_buff_head * list); | list为要腾空的链表 | 删除在&sk_buff链表上的所有缓冲区。这个函数不持有链表锁,调用者必须持有相关的锁来使用它。 |
dev_alloc_skb | 为发送分配一个skbuff | struct sk_buff * dev_alloc_skb (unsigned int length) | Length为要分配的长度 | 分配一个新的&sk_buff,并赋予它一个引用计数。这个缓冲区有未确定的头空间。用户应该分配自己需要的头空间。 如果没有空闲内存,则返回NULL。尽管这个函数是分配内存,但也可以从中断来调用。 |
skb_cow | 当需要时拷贝skb的首部 | struct sk_buff * skb_cow (struct sk_buff * skb, unsigned int headroom) | Skb为要拷贝的缓冲区,headroom为需要的头空间 | 如果传递过来的缓冲区缺乏足够的头空间或是克隆的,则该缓冲区被拷贝,并且附加的头空间变为可用。如果没有空闲的内存,则返回空。如果缓冲区拷贝成功,则返回新的缓冲区,否则返回已存在的缓冲区。 |
skb_over_panic | 私有函数 | void skb_over_panic (struct sk_buff * skb, int sz, void * here) | skb为缓冲区,sz为大小,here为地址。 | 用户不可调用。 |
skb_under_panic | 私有函数 | void skb_under_panic (struct sk_buff * skb, int sz, void * here) | skb为缓冲区,sz为大小,here为地址。 | 用户不可调用。 |
相关文章推荐
- linux 0.12 源码学习笔记(一)内核引导
- Linux最新稳定内核2.4.x的网络接口源码的结构
- linux 内核源码树的建立 (学习linux device drivers的准备工作)
- Linux内核源码学习之 基本知识
- Linux内核2.4.x的网络接口源码的结构
- linux驱动学习(1)-ubuntu 内核源码下载及编译
- linux内核学习(4)_库函数API和C代码嵌入汇运用用系统调用
- Linux最新稳定内核2.4.x的网络接口源码的结构(一)
- linux内核部件分析学习一到(十一)
- Linux2.4-net源码学习笔记 IP层协议栈的实现(I 数据接收)
- Linux最新稳定内核2.4.x的网络接口源码的结构2
- Linux内核2.4.x的网络接口源码的结构[转]
- linux 0.11 源码学习(十一)
- Linux内核2.4.x的网络接口源码的结构
- 学习Linux-4.12内核网路协议栈(2.4)——接口层数据包的发送
- Linux内核2.4.x的网络接口源码的结构
- Linux内核学习四库全书
- Linux内核2.6和2.4内核堆栈的比较----转载
- Linux下给内核或源码制作和打补丁操作命令--diff、patch
- 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响