skbuff.h文件中NET_SKBUFF_DATA_USES_OFFSET宏的含义

Calibre license失效的解决方法 阅读详情

文章出处:http://hi.baidu.com/xootus/item/2e2fb06f57afe22268105b13


找到NET_SKBUFF_DATA_USES_OFFSET定义的地方,文件include/linux/skbuff.h
#if BITS_PER_LONG > 32
#define NET_SKBUFF_DATA_USES_OFFSET 1
#endif

出现使用NET_SKBUFF_DATA_USES_OFFSET 的地方,如:
#ifdef NET_SKBUFF_DATA_USES_OFFSET
//如果使用了offset来表示偏移的话,就是说是一个相对偏移的情况:
static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
{
return skb->head + skb->transport_header;
}
......
#else /* NET_SKBUFF_DATA_USES_OFFSET */
//不使用相对偏移的情况
static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
{
return skb->transport_header;
}
......
#endif /* NET_SKBUFF_DATA_USES_OFFSET */

以上是*skb_network_header函数的实现,可以看到,返回网络层协议头的实现对于32位系统和64位系统,

skb_network_header函数有不同的实现,所以在编程中,直接调用*skb_network_header函数是好的。

可以说,这些函数,为我们编写内核程序提供了极大的便捷,而不用再花更多的精力去考虑计算各层的指针偏移,

可以把更多的精力用来考虑策略性的设计。



sk_buff详解 我用的Linux内核版本4.4.266 sk_buff结构体定义在文件/linux-4.4.266/include/linux/skbuff.h 阅读详情

相关推荐

【YOLOv11改进- 主干网络】YOLOv11+WTConv(ECCV2024): 基于YOLOv11的主干网络改进,大感受野的小波卷积

论文提出了WTConv,这是一个使用级联小波分解的层,并执行一组小卷积核的卷积,每个卷积专注于输入的不同频率带,并具有越来越大的感受野。这个过程能够在输入中对低频信息给予更多重视,同时仅增加少量可训练参数。实际上,对于一个  的感受野,可训练参数数量只随着  的增长而呈对数增长。而WTConv与常规方法的参数平方增长形成对比,能够获得有效的卷积神经网络(CNN),其有效感受野(ERF)大小前所未有。

qq_41304809的博客 1377

NET_SKBUFF_DATA_USES_OFFSET分析

在分析3.0.4内核的网络包sk_buff时,发现: sk_buff_data_t transport_header; sk_buff_data_t network_header; sk_buff_data_t mac_header; /* These elements must be at the end, see alloc_skb() for details.  */ sk_b

dean_gdp的专栏 1312

STM32H743IIT6使用STM32CUBEMX配置大多数外设手册.pdf

偶然间论坛看到大牛分享的 STM32H743IIT6使用STM32CUBEMX配置大多数外设手册,在这里分享给大家。共同进步

sk_buff学习总结

sk_buff 源文件:linux-2.6.37/ include/ linux/ skbuff.h                            linux-2.6.37/ include/ linux/ skbuff.c sk_buff数据结构: /* struct sk_buff - socket buffer */ struct sk_buff {

咔酷咿赤影的的专栏 1256

sk_buff操作函数学习

linux 内核socket buffer的操作函数

to_be_better_wen的博客 2169

Linux网络设备驱动-以太网驱动分析

1.概述 网络上数据包的发送和接收由网络设备完成。网络设备与字符设备、块设备不同,其并不对应于/dev目录下的文件,也不能使用常规的操作方法操作网络设备。现在比较通用的做法是通过套接字访问网络设备。网络设备的驱动程序管理网络设备,如地址设置、修改传输参数及维护流量和错误统计,同时也驱动网络设备进行数据的收发。因此,分析网络设备驱动程序,对理解网路设备的工作机制有很大的帮助。 Linux内核将网络设备驱动程序划分为4个层次,分别为网络协议接口层、网路设备接口层、提供实际功能的设备驱动功能层、网络设备与媒介层。

非专业业余程序员 4171

linux网络源代码,Linux网络协议源代码分析 之 主要数据结构体

Linux对网络的看法可以分为如下几层:网络层:IP协议栈的实现,完成路由的查找过程(主要处理skb)Inet Socket层: 对IP包进行分组排序,实现QoS,传输层协议TCP/UDP协议栈的实现使用sock{}类型数据来管理会话,数据主要放在sk_buff结构中BSD Socket:对于BSD Socket相关调用的实现,主要使用socket{}结构来存放连接数据主要是放在msghdr{...

weixin_34229622的博客 599

sk_buff 剖析

基于内核版本2.6.37 本文主要剖析:sk_buff结构体、sk_buff操作函数、各协议层对其处理   主要源文件:linux-2.6.37/ include/ linux/ skbuff.h                         linux-2.6.37/ include/ linux/ skbuff.c   ==============================

zhangskd的专栏 1万+

Linux SKB基本结构剖析

基于内核版本2.6.37 本文主要剖析:sk_buff结构体、sk_buff操作函数、各协议层对其处理 主要源文件:linux-2.6.37/ include/ linux/ skbuff.h linux-2.6.37/ include/ linux/ skbuff.c 一些相关数据结构 在include/linux/ktime...

BlueBirdssh的专栏 1565

在2.6.30上修改以及重构skb

<br />上次看了ubuntuer兄写的教你修改以及重构skb ,受益匪浅,真是经典之作。<br /> 但ubuntuer兄的代码是基于2.6.18的,比较旧。今天经过摸索,我终于让其可以在2.6.30上运行了,代码如下:<br /> skb_DIY.c<br /><br /> #include <linux/module.h><br /> #include <linux/kernel.h><br /> #include <linux/init.h><br /> #include <linu

high7344的专栏 1495

skbuff.h在哪

今天看来下底层socket的实现,发现很多人都说有个skbuff结构,我就想着去找下这个,结果找不到,查了下,需要下载内核源码。

= = 1130

linux 网络 sk_buff结构

sk_buff的意思是socket buffer,这是Linux网络子系统中的核心数据结构。定义在中,它由许多变量组成,目标就是满足所有网络协议的需要。sk_buff在不同的网络层被使用(MAC 或其他在 L2 的协议,在 L3 的 IP 协议,在 L4 的 TCP 或 UDP 等),当它从一层传递到另一层时,各个字段也会发生变化。在被传递到 L3 之前,L4 会追加头信息,然后在被传递到 L2 之前,L3 会追加头信息。。

wwwlyj123321的博客 4410

sk_buff结构分析

前言: 以下是根据《深入理解Linux网络技术内幕》对sk_buff的相关总结,由于是刚刚看这本书(太厚了),不免在前期出现错误,随着对此书的深入我会在修改前面的错误,也希望各位牛人给予指点。帮助我成长。 sk_buff分析: sk_buff是Linux网络代码中最重要的结构体之一。它是Linux在其协议栈里传送的结构体,也就是所谓的“包”,在他里面包含了各层协议的头部,比如et

jasenwan88的专栏 997

Linux网络设备驱动重要知识点

中定义了,核心字段如下(略去大量细节,仅保留关键成员):// 链表指针,用于队列中 struct sk_buff *prev;// 数据包关联的网络设备 struct sock *sk;// 所属 socket unsigned char *head;// 包缓存起始地址 unsigned char *data;// 有效数据起始地址 unsigned char *tail;// 有效数据末尾地址(尾部空间起点) unsigned char *end;

2301_76151015的博客 1166

Linux内核中sk_buff结构详解

sk_buff结构体中的都是sk_buff的控制信息,是网络数据包的一些配置,真正储存数据的是sk_buff结构体中几个指针指向的数据区中,线性数据区的大小 = (skb->end - skb->head),对于每个数据包来说这个大小都是固定不变的,在传输过程中skb->end和skb->head所指向的地址都是不变的,这里要注意这个地址不是本机的地址,如果是本机的地址那么数据包传到其他主机上这个地址就是无效的,所以这个地址是这个skb缓冲区的相对地址。各层协议头部相关信息放在线性数据区中。

smartvxworks的博客 3385

<include/linux/skbuff.h>

/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Definitions for the 'struct sk_buff' memory handlers. * * Authors: * Alan Cox, <gw4pts@gw4pts.ampr.org> * Florian La Roche, <rzsfl@rz.uni-sb.de> */ #ifndef _LINUX_SKBUFF_H #define _L

qq_43470425的博客 1299

tso硬件分片是头部拷贝问题

//skb-&gt;date指向了二层头部地址,下面是计算 以太网头 + IP头 大小static inline int skb_transport_offset(const struct sk_buff *skb){ return skb_transport_header(skb) - skb-&gt;data;}static int e1000_tso(struct e1000_adapter...

already_skb的专栏 1063
上一篇: TCP segment of a reassembled PDU
下一篇: linux内核中的BUG 和 BUG_ON
ixidof
博客等级 码龄19年 222粉丝 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值