`
highsky
  • 浏览: 275069 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux核心数据结构--sk_buff

阅读更多
用来描叙在协议层之间交换的网络数据。

struct sk_buff

{

  struct sk_buff      *next;
      /* Next buffer in list                   */

  struct sk_buff      *prev;     /* Previous buffer in list */

  struct sk_buff_head *list;       /* List we are on   */

  int                 magic_debug_cookie;

  struct sk_buff      *link3;
      /* Link for IP protocol level buffer chains */

struct sock         *sk;     /* Socket we are owned by    */

  unsigned long       when;        /* used to compute rtt's                 */

  struct timeval      stamp;       /* Time we arrived                       */

  struct device       *dev;        /* Device we arrived on/are leaving by   */

  union

  {

      struct tcphdr   *th;

      struct ethhdr   *eth;

      struct iphdr    *iph;

      struct udphdr   *uh;

      unsigned char   *raw;
      /* for passing file handles in a unix domain socket */

      void            *filp;
  } h;


 

union

  {
   

      /* As yet incomplete physical layer views */

     unsigned char   *raw;

      struct ethhdr   *ethernet;

  } mac;

 

  struct iphdr        *ip_hdr;     /* For IPPROTO_RAW                       */

  unsigned long       len;         /* Length of actual data                 */

  unsigned long       csum;        /* Checksum                              */

  __u32               saddr;       /* IP source address                     */

  __u32               daddr;       /* IP target address                     */

  __u32               raddr;       /* IP next hop address                   */

  __u32               seq;         /* TCP sequence number                   */

  __u32               end_seq;     /* seq [+ fin] [+ syn] + datalen         */

  __u32               ack_seq;     /* TCP ack sequence number               */

  unsigned char       proto_priv[16];

  volatile char       acked,     
/* Are we acked ?           */

                      used,        /* Are we in use ?       */

                      free,       /* How to free this buffer*/

                      arp;        /* Has IP/ARP resolution finished    */

  unsigned char       tries,       /* Times tried           */

                      lock,        /* Are we locked ?       */

                      localroute, /* Local routing asserted for this frame */

                      pkt_type,    /* Packet class      */

                      pkt_bridged, /* Tracker for bridging  */

                      ip_summed;   /* Driver fed us an IP checksum          */

#define PACKET_HOST         0        /* To us              */

#define PACKET_BROADCAST    1        /* To all            */

#define PACKET_MULTICAST    2        /* To group       */

#define PACKET_OTHERHOST    3        /* To someone else  */

  unsigned short      users;       /* User count - see datagram.c,tcp.c     */

  unsigned short      protocol;    /* Packet protocol from driver.          */

  unsigned int        truesize;    /* Buffer size           */

  atomic_t            count;       /* reference count       */

  struct sk_buff      *data_skb;   /* Link to the actual data skb           */

  unsigned char       *head;       /* Head of buffer        */

  unsigned char       *data;       /* Data head pointer     */

  unsigned char       *tail;       /* Tail pointer          */

  unsigned char       *end;        /* End pointer         */

  void                (*destructor)(struct sk_buff *); /* Destruct function */

  __u16               redirport;   /* Redirect port         */

};

分享到:
评论

相关推荐

    linux sk_buff结构详解

    Linux kernel 中的 sk_buff 结构是网络代码中最重要的数据结构之一,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。本结构被网络的不同层(MAC 或者其他二层链路协议,三层的 ...

    [linux]sk_buff结构体详解

    Linux SK_BUFF 结构体是网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。该结构体在 Linux 内核中定义,并包含很多成员变量供网络代码中的各子系统使用。 SK_BUFF 结构体的成员变量包括: * ...

    linux下的sk_buff

    `sk_buff`结构体在`<include/linux/skbuff.h>`文件中定义,随着Linux内核版本的演进,其内部结构也经历了多次调整与优化。 #### 二、`sk_buff`结构的重要性 `sk_buff`结构之所以重要,主要因为它承载着数据包从低层...

    sk_buff结构小谈

    `struct sk_buff` 是 Linux 网络子系统中最核心的数据结构之一,主要用于表示接收或发送的数据包的头部信息。该结构体包含了一系列成员变量,这些变量被网络栈的不同层(如 MAC 层、IP 层、TCP/UDP 层等)广泛使用。...

    Linux-Skb_buff.rar_linux s_linux skb_linux skb结构_skb_buff

    在Linux操作系统中,网络数据传输的核心在于一个名为`sk_buff`(socket buffer)的数据结构。这个结构体在Linux内核的网络子系统中扮演着至关重要的角色,它封装了网络数据包,使得内核能够高效地处理网络通信。`skb...

    sk_buff详解.pdf

    在Linux内核网络模块中,核心数据结构sk_buff(socket buffer)承担着传输数据包的主要职责。sk_buff是网络层与链路层交互的桥梁,它管理着网络包从进入系统到离开系统过程中所需的信息,并且在整个过程中提供高效的...

    Reading-and-comprehense-linux-Kernel-network-protocol-stack_y123456yz.tar.gz

    5. **网络协议栈的调度和队列管理**:如`netpoll`机制用于高效地处理网络事件,`sk_buff`(socket buffer)数据结构用于缓冲网络数据。 通过注释和流程分析,你可以看到每个函数的调用顺序,理解数据包是如何从物理...

    Linux-kernel-api.rar_linux

    内核网络子系统提供了网络协议栈,包括`socket`接口,`sk_buff`数据结构,以及`net_device`结构体,用于驱动网络设备和处理网络数据包。 9. **定时器和延迟**: `setTimeout`, `mod_timer`, `del_timer`等函数...

    skbuffer解读

    `nf_conntrack` 结构体是用于跟踪网络连接状态的核心数据结构之一,在 Linux 内核的 netfilter 架构中扮演着重要角色。该结构体定义如下: ```c struct nf_conntrack { atomic_t use; // 使用计数器,用于跟踪引用...

    linux数据栈的关键数据结构skb_buf

    该结构在 `<include/linux/skbuff.h>` 中定义,并包含了许多成员变量供网络代码中的各子系统使用。 skb_buf 结构体的成员变量可以大致分为以下几类: 1. 布局(Layout):指 skb_buf 结构体的内存布局。 2. 通用...

    The Linux Kernel API

    - **`clear_inode`**:清除 inode 的数据结构,准备用于下一个文件。 - **`invalidate_inodes`**:使一组 inodes 无效,通常是文件系统卸载前的操作。 - **`get_empty_inode`**:获取一个空闲的 inode 结构。 - **`...

    linux数据栈的关键数据结构skb-buf.doc

    skb-buf 结构在 <include/linux/skbuff.h> 中定义,并包含很多成员变量供网络代码中的各子系统使用。 skb-buf 结构可以大致分为以下几类: 1. Layout 布局 2. General 通用 3. Feature-specific 功能相关 4. ...

    深入理解Linux网络技术内幕(中英文)

    3. sk_buff(socket buffer):`sk_buff`是Linux内核中用于网络数据传输的数据结构,全称为socket buffer。它封装了网络数据包,并包含了数据包的相关信息,如头部、数据、控制信息等。`sk_buff`在内核的网络协议栈...

    Linux内核??与sk_buff有关重要数据结构

    几个月之前做了关于Linux内核版本1.2.13网络栈的结构框架分析并实现了基于Netfilter的包过滤防火墙,这里以内核3.2.1内核为例来进一步分析,更全面的分析网络栈的结构。  1、先说一下sk_buff结构体  这个...

    linuxtcpip协议栈分析.doc

    sk_buff 结构是 Linux 网络代码中最重要的数据结构,它在 `<include/linux/skbuff.h>` 中定义,并包含很多成员变量供网络代码中的各子系统使用。 sk_buff 结构的成员变量可以大致分为四类: 1. 布局(Layout)成员...

    LINUX-1.2.13 network_stack_kernel_source_analysis

    `skbuff.c`中的`struct sk_buff`是Linux内核中网络数据包的通用缓冲区结构。它管理数据包的内存分配和释放,以及数据包在协议栈中的传递。 8. **多线程与并发处理** Linux内核的网络栈设计为多线程并行处理,利用...

    linux代码分析

    - `struct sk_buff_head txq`:网络缓冲区队列,用于存储待发送的数据包。 - `struct net_device_stats stats`:网卡状态信息结构,记录设备的统计信息。 #### 驱动例程 Tun/Tap驱动中实现了一系列关键例程: - `...

    linux数据栈的关键数据结构skb_buf.doc

    Linux内核中的`skb_buff`(socket buffer)是网络数据栈中的核心数据结构,它用于存储网络传输的数据包。在`<include/linux/skbuff.h>`中定义,`skb_buff`不仅包含了网络数据包的基本信息,还具备了管理数据包在不同...

Global site tag (gtag.js) - Google Analytics