⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skbuff.h

📁 sparc硬件平台上的红外协议
💻 H
字号:
/**    Definitions for the 'struct sk_buff' memory handlers.**    Authors:*        Alan Cox, <gw4pts@gw4pts.ampr.org>*        Florian La Roche, <rzsfl@rz.uni-sb.de>**    This program is free software; you can redistribute it and/or*    modify it under the terms of the GNU General Public License*    as published by the Free Software Foundation; either version*    2 of the License, or (at your option) any later version.*/#ifndef SKBUFF_H#define SKBUFF_H#include <sys/time.h>#include <malloc.h>#include <string.h>#include <time.h>#include "irda.h"#include "../../public/pub_emmi.h"#include "types.h"#define HAVE_ALLOC_SKB        /* For the drivers to know */#define HAVE_ALIGNABLE_SKB    /* Ditto 8)           *//* Don't change this without changing skb_csum_unnecessary! */#define CHECKSUM_NONE 0#define CHECKSUM_UNNECESSARY 1#define CHECKSUM_COMPLETE 2#define CHECKSUM_PARTIAL 3#define kfree_skb(a) skb_free(a)#define dev_kfree_skb(a) skb_free(a)/* A. Checksumming of received packets by device.**    NONE: device failed to checksum this packet.*        skb->csum is undefined.**    UNNECESSARY: device parsed packet and wouldbe verified checksum.*        skb->csum is undefined.*          It is bad option, but, unfortunately, many of vendors do this.*          Apparently with secret goal to sell you new device, when you*          will add new protocol to your host. F.e. IPv6. 8)**    COMPLETE: the most generic way. Device supplied checksum of _all_*        the packet as seen by netif_rx in skb->csum.*        NOTE: Even if device supports only some protocols, but*        is able to produce some skb->csum, it MUST use COMPLETE,*        not UNNECESSARY.**    PARTIAL: identical to the case for output below.  This may occur*        on a packet received directly from another Linux OS, e.g.,*        a virtualised Linux kernel on the same host.  The packet can*        be treated in the same way as UNNECESSARY except that on*        output (i.e., forwarding) the checksum must be filled in*        by the OS or the hardware.** B. Checksumming on output.**    NONE: skb is checksummed by protocol or csum is not required.**    PARTIAL: device is required to csum packet as seen by hard_start_xmit*    from skb->csum_start to the end and to record the checksum*    at skb->csum_start + skb->csum_offset.**    Device must show its capabilities in dev->features, set*    at device setup time.*    NETIF_F_HW_CSUM    - it is clever device, it is able to checksum*              everything.*    NETIF_F_NO_CSUM - loopback or reliable single hop media.*    NETIF_F_IP_CSUM - device is dumb. It is able to csum only*              TCP/UDP over IPv4. Sigh. Vendors like this*              way by an unknown reason. Though, see comment above*              about CHECKSUM_UNNECESSARY. 8)*    NETIF_F_IPV6_CSUM about as dumb as the last one but does IPv6 instead.**    Any questions? No questions, good.         --ANK*/struct sk_buff_head {    /* These two members must be first. */    struct sk_buff    *next;    struct sk_buff    *prev;	    D_UINT32        qlen;    };struct sk_buff;/* We divide dataref into two halves.  The higher 16 bits hold references* to the payload part of skb->data.  The lower 16 bits hold references to* the entire skb->data.  A clone of a headerless skb holds the length of* the header in skb->hdr_len.** All users must obey the rule that the skb->data reference count must be* greater than or equal to the payload reference count.** Holding a reference to the payload part means that the user does not* care about modifications to the header part of skb->data.*/#define SKB_DATAREF_SHIFT 16#define SKB_DATAREF_MASK ((1 << SKB_DATAREF_SHIFT) - 1)enum {    SKB_FCLONE_UNAVAILABLE,		SKB_FCLONE_ORIG,		SKB_FCLONE_CLONE,};enum {    SKB_GSO_TCPV4 = 1 << 0,		SKB_GSO_UDP = 1 << 1,				/* This indicates the skb is from an untrusted source. */		SKB_GSO_DODGY = 1 << 2,				/* This indicates the tcp segment has CWR set. */		SKB_GSO_TCP_ECN = 1 << 3,				SKB_GSO_TCPV6 = 1 << 4,};//#define NET_SKBUFF_DATA_USES_OFFSET 1typedef unsigned char *sk_buff_data_t;/** *    struct sk_buff - socket buffer*    @next: Next buffer in list*    @prev: Previous buffer in list*    @sk: Socket we are owned by*    @tstamp: Time we arrived*    @dev: Device we arrived on/are leaving by*    @transport_header: Transport layer header*    @network_header: Network layer header*    @mac_header: Link layer header*    @dst: destination entry*    @sp: the security path, used for xfrm*    @cb: Control buffer. Free for use by every layer. Put private vars here*    @len: Length of actual data*    @data_len: Data length*    @mac_len: Length of link layer header*    @hdr_len: writable header length of cloned skb*    @csum: Checksum (must include start/offset pair)*    @csum_start: Offset from skb->head where checksumming should start*    @csum_offset: Offset from csum_start where checksum should be stored*    @local_df: allow local fragmentation*    @cloned: Head may be cloned (check refcnt to be sure)*    @nohdr: Payload reference only, must not modify header*    @pkt_type: Packet class*    @fclone: skbuff clone status*    @ip_summed: Driver fed us an IP checksum*    @priority: Packet queueing priority*    @users: User count - see {datagram,tcp}.c*    @protocol: Packet protocol from driver*    @truesize: Buffer size *    @head: Head of buffer*    @data: Data head pointer*    @tail: Tail pointer*    @end: End pointer*    @destructor: Destruct function*    @mark: Generic packet mark*    @nfct: Associated connection, if any*    @ipvs_property: skbuff is owned by ipvs*    @nf_trace: netfilter packet trace flag*    @nfctinfo: Relationship of this skb to the connection*    @nfct_reasm: netfilter conntrack re-assembly pointer*    @nf_bridge: Saved data about a bridged frame - see br_netfilter.c*    @iif: ifindex of device we arrived on*    @queue_mapping: Queue mapping for multiqueue devices*    @tc_index: Traffic control index*    @tc_verd: traffic control verdict*    @dma_cookie: a cookie to one of several possible DMA operations*        done by skb DMA functions*    @secmark: security marking*/struct sk_buff {    /* These two members must be first. */    struct sk_buff        *next;    struct sk_buff        *prev;    struct net_device    *dev;	    /*	* This is the control buffer. It is free to use for every	* layer. Please put your private variables there. If you	* want to keep them across layers you have to do a skb_clone()	* first. This is owned by whoever has the skb queued ATM.	*/    char            cb[48];//此数组作为 SKB 的控制块,具体的协议可用它来存储与每个包相关的私有数据		    unsigned int        len,////真实数据区的长度,即整个packet的大小		data_len;//当SKB是由多个页面缓冲组成的时候,表示分片大小//	    //以下都是作为flag用,只用了一个byte的8个bit//	    D_UINT8        local_df:1,//允许local分片标志//								  /*为四苎杆俚囊

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -