sk_buff Structure
The structure has changed many times in the history of the kernel,both to add new options and to reorganize existing fields into a cleaner layout.Its fields can be classified roughly into the following categories:
- Layout
- General
- Feature-specific
- Management functions
Layout Fields
Interesting fields of sk_buff:
- struct sock *sk:This is a pointer to a sock data structure of the socket that owns this buffer.
- unsigned int len:This is the size of the block of data in the buffer.This length include both the data in the main buffer and the data in the fragments.
- unsigned int data_len:Unlike len,data_len accounts only for the size of the data in the fragments.
- unsigned int mac_len:This is the size of the MAC header
- atomic_t users:This is the reference count.
- unsigned int truesize:This field represent the total size of the buffer,including the sk_buff structure itself.
- unsigned char head,end,data,tail:head and end point to the beginning and end of the space allocated to the buffer,and data and tail point to the beginning and end of the actual data.
General Fields
- struct timeval stamp:This is usually meaningful only for a received packet.It is a timestamp that represents when a packet was received or when one is scheduled for transmission.
- struce net_device * dev:describes a network device.
- struct dst_entry dst:This is used by the routing subsystem.
- char cb[40]:This is a "control buffer",or storage for private information,maintained by each layer for internal use
- unsigned char clone:indicates that this structure is a clone of another sk_buff buffer.
- unsigned char pkt_type:This field classifies the type of frame based on its L2 destination address.
- unsigned short protocol:This is the protocol used at the next-higher layer from the perspective of the device driver at L2.
Feature-Specific Fields
The Linux kernel is modular.allowing you to select what to include and waht to leave out.Thus some fields are included in the sk_buff data structure only if the kernel is compiled with support for particular features such as firewalling or QoS
- struct nf_conntrack *nfct
- struct nf_bridge_info *nf_bridge;
- u8 nfctinfo
u8 nf_trace
These parameters are used by Netfilter
- u16 tc_index
u16 tc_verd
These parameters are used by the Traffic Control
struct sec_path *sp
This is used by the IPsec protocol suite to keep track of transformations
Management Functions
Before and After:(a)skb_put,(b)skb_push,(c)skb_pull,(d)skb_reserve
Allocating memory:alloc_skb and dev_alloc_skb
creating a single buffer involves two allocations of memory(one for the buffer and one for the sk_buff struct)
The skb_shared_info structure and the skb_shinfo function
skb_shared_info at the end of the data buffer that keeps additional information about the data block(Fragment).
Note that there is no field inside sk_buff structure pointing at the skb_shared_info data structure.To access that structure,functions need to use the skb_shinfo macro,which simply returns the end pointer.
List management functions
skb_queue_head_init: initializes an sk_buff_head with an empty queue of elements.
skb_queue_head,skb_queue_tail:Adds one buffer to the head or to the tail of a queue,respectively
skb_dequeue,skb_dequeue_tail:Dequeues an element from the head or from the tail.
skb_queue_purge:Empties a queue.
skb_queue_walk:Runs a loop on each element of a queue in turn.
sk_buff Structure的更多相关文章
- the Linux Kernel: Traffic Control, Shaping and QoS
−Table of Contents Journey to the Center of the Linux Kernel: Traffic Control, Shaping and QoS 1 Int ...
- TCP 接收窗口自动调节
https://technet.microsoft.com/zh-cn/magazine/2007.01.cableguy.aspx 欢迎来到 TechNet 杂志“网络专家”的第一部分.TechNe ...
- 【Linux 内核网络协议栈源码剖析】网络栈主要结构介绍(socket、sock、sk_buff,etc)
原文:http://blog.csdn.net/wenqian1991/article/details/46700177 通过前面的分析,可以发现,网络协议栈中的数据处理,都是基于各类结构体,所有有关 ...
- Linux 网卡驱动sk_buff内核源码随笔
这几天在调试有关网卡驱动的东西,有很多地方不清楚.有关网卡驱动部分主要有两个很重要的结构体:struct net_device 和struct sk_buff. 驱动大部分都是围绕这两个东西进行操作的 ...
- [LeetCode] All O`one Data Structure 全O(1)的数据结构
Implement a data structure supporting the following operations: Inc(Key) - Inserts a new key with va ...
- [LeetCode] Add and Search Word - Data structure design 添加和查找单词-数据结构设计
Design a data structure that supports the following two operations: void addWord(word) bool search(w ...
- [LeetCode] Two Sum III - Data structure design 两数之和之三 - 数据结构设计
Design and implement a TwoSum class. It should support the following operations:add and find. add - ...
- Theano Graph Structure
Graph Structure Graph Definition theano's symbolic mathematical computation, which is composed of: A ...
- sk_buff封装和解封装网络数据包的过程详解
转自:http://www.2cto.com/os/201502/376226.html 可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体 ...
随机推荐
- DotNetBar的窗口样式丢失
DotNetBar的窗口样式丢失 C# 调用DotNetBar很方便,将DevComponents.DotNetBar2.dll和DevComponents.DotNetBar.Design.dll放 ...
- SQL分组函数
分组函数是对表中的多行进行操作,而每组返回一个计算结果.常用的分组函数包括: 函数 语法格式 函数描述以及注意事项 AVG AVG([distinct|all] expr) 返回一个数字列或计算列的平 ...
- JMeter java.net.SocketException:Operationnotsupported:connect解决方案
java.net.SocketException: Operation not supported: connect解决方案 by:授客 QQ:1033553122 测试环境 apache-jme ...
- [转] vi/vim命令模式和编辑模式各种操作
摘要:vi 编辑器是最常用的文档创建和编辑工具,初学者应该学会简单应用vi ,学会在vi 中做简单的修改.删除.插入.搜索及替换作业:如果您是新手,不妨看看本文,或许这篇文档能让您在最短的时间内学会v ...
- 排序算法----快速排序java
快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class tes ...
- jvm程序执行慢诊断手册
生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长.本文分享,从业多年形成的排查守则. 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步.因为很多事故都是 ...
- ASYNC_NETWORK_IO和PREEMPTIVE_OS_WAITFORSINGLEOBJECT等待事件
背景环境: SQL Server 2005或以上 Select * from 某个表,表的数据量约为30万行,在执行语句时通过观察sys.dm_exec_requests中的wait_type列发现是 ...
- SSM框架—环境搭建(MyEclipse+Tomcat+MAVEN+SVN)
1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64位还是32位,安装过程就是next一路到底.安装完成之后当然要配置环境变量了. 1.1新建变量名:JAVA_HOM ...
- php配置文件php.ini的详细解析
;;;;;;;;;;;;;;;;;;;; ; Language Options ; ;;;;;;;;;;;;;;;;;;;; ; Enable the PHP scripting language e ...
- TestFlight的使用--再也不用担心环境打错了
转赞请注明出处:http://www.cnblogs.com/zhanggui/p/7039651.html 一.前言 在iOS开发过程中,难免会遇到各种Bug.因此你会去解决所有的Bug,然后提交到 ...