`
highsky
  • 浏览: 269653 次
  • 性别: 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著名的sk_buff结构详解 struct sk_buff可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。

    sk_buff结构小谈

    struct sk_buff 可能是linux网络代码中最重要的数据结构,它表示接受或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。

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

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

    skbuff分析

    在LINUX的实现中,同一个网络报文的数据在内存中是连续存放的,每个 网络报文都有一个控制结构,叫做sk_buff。 sk_buff是一个控制结构,通过它,才...所以在分配网络报文存储空间时,同时也分配它的控制结构sk_buff。

    嵌入式Linux网络体系结构设计与TCP/IP协议栈.part5

    第2~5章在介绍了实现网络体系结构、协议栈、设备驱动程序的两个最重要的数据结构sk_buff和net_device的基础上,展示了Linux内核中为网络设备驱动程序设计和开发而建立的系统构架,最后以两个实例来具体说明如何着手...

    嵌入式Linux网络体系结构设计与TCP/IP协议栈.part3.rar

    第2~5章在介绍了实现网络体系结构、协议栈、设备驱动程序的两个最重要的数据结构sk_buff和net_device的基础上,展示了Linux内核中为网络设备驱动程序设计和开发而建立的系统构架,最后以两个实例来具体说明如何着手...

    编写Linuxc操作系统设备驱动程序概述

    在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。本文简单介绍一下网络设备驱动程序的一些基本要求。

    嵌入式Linux网络体系结构设计与TCP/IP协议栈.part4.rar

    第2~5章在介绍了实现网络体系结构、协议栈、设备驱动程序的两个最重要的数据结构sk_buff和net_device的基础上,展示了Linux内核中为网络设备驱动程序设计和开发而建立的系统构架,最后以两个实例来具体说明如何着手...

    嵌入式Linux网络体系结构设计与TCP/IP协议栈.part1

    第2~5章在介绍了实现网络体系结构、协议栈、设备驱动程序的两个最重要的数据结构sk_buff和net_device的基础上,展示了Linux内核中为网络设备驱动程序设计和开发而建立的系统构架,最后以两个实例来具体说明如何着手...

    深入分析Linux内核源码.chm

    12.4 套接字缓冲区(sk_buff) 12.5 网络设备接口 第十三章 启动系统 13.1 初始化流程 13.2 初始化的任务 13.3 Linux 的Boot Loarder 13.4 进入操作系统 13.5 main.c中的初始化 13.6 建立init进程 附录: 1 Linux 2.4...

    嵌入式Linux网络体系结构设计与TCP/IP协议栈.part2.rar

    第2~5章在介绍了实现网络体系结构、协议栈、设备驱动程序的两个最重要的数据结构sk_buff和net_device的基础上,展示了Linux内核中为网络设备驱动程序设计和开发而建立的系统构架,最后以两个实例来具体说明如何着手...

    深入分析Linux内核源码

    12.4.3 sk_buff数据结构的核心内容 12.4.4 套接字缓冲区提供的函数 12.4.5 套接字缓冲区的上层支持例程 12.5 网络设备接口 12.5.1 基本结构 12.5.2 命名规则 12.5.3 设备注册 12.5.4 网络设备数据结构 ...

    嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf

    8.1.2 sk_buff数据结构 8.1.3 内核的驱动程序接口 8.2 以太网控制器CS8900A 8.2.1 特性 8.2.2 工作原理 8.2.3 电路连接 8.2.4 引脚 8.2.5 操作模式 8.3 网络设备驱动程序实例 8.3.1 初始化函数 8.3.2 打开...

    Linux内核–从上向下分析驱动程序层

    在<Linux>中对网络设备结构,网络设备初始化等函数有了初步认识,并列出了设备的发送和接收函数。  设备接口层会调用函数设备驱动层ei_start_xmit()函数发送数据,这里没有详细分析。 static int ei_start_xmit...

    understanding linux network internals

    The Socket Buffer: sk_buff Structure 套接字缓存:sk_buff结构 Section 2.2. net_device Structure net_device结构 Section 2.3. Files Mentioned in This Chapter 本章所涉及的到的(代码)文件 Chapter 3. User...

    Linux下驱动的应用

    .............\9.3.2数据结构struct sk_buff.c .............\9.5.10参数设置和统计数据.c .............\9.5.11多播(set_multicast_list).c .............\9.5.3打开(open).c .............\9.5.4关闭(stop).c...

    linux网路编程 中文 23M 版

    1.5.2 Linux的文件结构................................................ 9 1.6 G N U 通用公共许可证..................................................10 1.6.1 G P L许可证的历史...............................

Global site tag (gtag.js) - Google Analytics