111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/****************************************************************************
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   This header was automatically generated from a Linux kernel header
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   of the same name, to make information necessary for userspace to
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   call into the kernel available to libc.  It contains only constants,
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   structures, and macros generated from the original header, and thus,
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***   contains no copyrightable information.
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ***
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _LINUX_SKBUFF_H
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _LINUX_SKBUFF_H
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/kernel.h>
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/compiler.h>
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/time.h>
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/cache.h>
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/atomic.h>
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/types.h>
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/spinlock.h>
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/mm.h>
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/highmem.h>
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/poll.h>
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/net.h>
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/textsearch.h>
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <net/checksum.h>
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/dmaengine.h>
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define HAVE_ALLOC_SKB
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define HAVE_ALIGNABLE_SKB
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CHECKSUM_NONE 0
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CHECKSUM_HW 1
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CHECKSUM_UNNECESSARY 2
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SKB_DATA_ALIGN(X) (((X) + (SMP_CACHE_BYTES - 1)) &   ~(SMP_CACHE_BYTES - 1))
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SKB_MAX_ORDER(X, ORDER) (((PAGE_SIZE << (ORDER)) - (X) -   sizeof(struct skb_shared_info)) &   ~(SMP_CACHE_BYTES - 1))
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SKB_MAX_HEAD(X) (SKB_MAX_ORDER((X), 0))
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SKB_MAX_ALLOC (SKB_MAX_ORDER(0, 2))
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct net_device;
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct sk_buff_head {
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct sk_buff *next;
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct sk_buff *prev;
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u32 qlen;
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert spinlock_t lock;
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct sk_buff;
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2)
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct skb_frag_struct skb_frag_t;
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct skb_frag_struct {
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct page *page;
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u16 page_offset;
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u16 size;
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct skb_shared_info {
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert atomic_t dataref;
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short nr_frags;
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short gso_size;
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short gso_segs;
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned short gso_type;
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int ip6_frag_id;
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct sk_buff *frag_list;
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert skb_frag_t frags[MAX_SKB_FRAGS];
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SKB_DATAREF_SHIFT 16
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SKB_DATAREF_MASK ((1 << SKB_DATAREF_SHIFT) - 1)
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct skb_timeval {
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u32 off_sec;
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert u32 off_usec;
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum {
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert SKB_FCLONE_UNAVAILABLE,
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert SKB_FCLONE_ORIG,
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert SKB_FCLONE_CLONE,
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum {
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert SKB_GSO_TCPV4 = 1 << 0,
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert SKB_GSO_UDP = 1 << 1,
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert SKB_GSO_DODGY = 1 << 2,
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert SKB_GSO_TCP_ECN = 1 << 3,
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert SKB_GSO_TCPV6 = 1 << 4,
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct sk_buff {
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct sk_buff *next;
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct sk_buff *prev;
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct sock *sk;
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct skb_timeval tstamp;
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct net_device *dev;
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct net_device *input_dev;
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union {
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct tcphdr *th;
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct udphdr *uh;
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct icmphdr *icmph;
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct igmphdr *igmph;
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct iphdr *ipiph;
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct ipv6hdr *ipv6h;
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char *raw;
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } h;
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union {
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct iphdr *iph;
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct ipv6hdr *ipv6h;
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct arphdr *arph;
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char *raw;
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } nh;
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union {
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char *raw;
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } mac;
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct dst_entry *dst;
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert struct sec_path *sp;
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char cb[48];
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int len,
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert data_len,
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert mac_len,
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert csum;
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u32 priority;
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 local_df:1,
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert cloned:1,
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ip_summed:2,
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert nohdr:1,
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert nfctinfo:3;
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __u8 pkt_type:3,
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert fclone:2,
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ipvs_property:1;
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __be16 protocol;
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*destructor)(struct sk_buff *skb);
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned int truesize;
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert atomic_t users;
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char *head,
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *data,
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *tail,
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *end;
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
165