1951a39d68df598db08dfced8b4707755864a0492Ying Wang/****************************************************************************
2951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
3951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
4951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   This header was automatically generated from a Linux kernel header
5951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   of the same name, to make information necessary for userspace to
6951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   call into the kernel available to libc.  It contains only constants,
7951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   structures, and macros generated from the original header, and thus,
8951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   contains no copyrightable information.
9951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
10951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
11951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************/
12951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _LINUX_SKBUFF_H
13951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _LINUX_SKBUFF_H
14951a39d68df598db08dfced8b4707755864a0492Ying Wang
15951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/kernel.h>
16951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/compiler.h>
17951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/time.h>
18951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/cache.h>
19951a39d68df598db08dfced8b4707755864a0492Ying Wang
20951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <asm/atomic.h>
21951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <asm/types.h>
22951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/spinlock.h>
23951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/mm.h>
24951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/highmem.h>
25951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/poll.h>
26951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/net.h>
27951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/textsearch.h>
28951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <net/checksum.h>
29951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/dmaengine.h>
30951a39d68df598db08dfced8b4707755864a0492Ying Wang
31951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HAVE_ALLOC_SKB
32951a39d68df598db08dfced8b4707755864a0492Ying Wang#define HAVE_ALIGNABLE_SKB
33951a39d68df598db08dfced8b4707755864a0492Ying Wang
34951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CHECKSUM_NONE 0
35951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CHECKSUM_HW 1
36951a39d68df598db08dfced8b4707755864a0492Ying Wang#define CHECKSUM_UNNECESSARY 2
37951a39d68df598db08dfced8b4707755864a0492Ying Wang
38951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SKB_DATA_ALIGN(X) (((X) + (SMP_CACHE_BYTES - 1)) &   ~(SMP_CACHE_BYTES - 1))
39951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SKB_MAX_ORDER(X, ORDER) (((PAGE_SIZE << (ORDER)) - (X) -   sizeof(struct skb_shared_info)) &   ~(SMP_CACHE_BYTES - 1))
40951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SKB_MAX_HEAD(X) (SKB_MAX_ORDER((X), 0))
41951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SKB_MAX_ALLOC (SKB_MAX_ORDER(0, 2))
42951a39d68df598db08dfced8b4707755864a0492Ying Wang
43951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct net_device;
44951a39d68df598db08dfced8b4707755864a0492Ying Wang
45951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct sk_buff_head {
46951a39d68df598db08dfced8b4707755864a0492Ying Wang
47951a39d68df598db08dfced8b4707755864a0492Ying Wang struct sk_buff *next;
48951a39d68df598db08dfced8b4707755864a0492Ying Wang struct sk_buff *prev;
49951a39d68df598db08dfced8b4707755864a0492Ying Wang
50951a39d68df598db08dfced8b4707755864a0492Ying Wang __u32 qlen;
51951a39d68df598db08dfced8b4707755864a0492Ying Wang spinlock_t lock;
52951a39d68df598db08dfced8b4707755864a0492Ying Wang};
53951a39d68df598db08dfced8b4707755864a0492Ying Wang
54951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct sk_buff;
55951a39d68df598db08dfced8b4707755864a0492Ying Wang
56951a39d68df598db08dfced8b4707755864a0492Ying Wang#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2)
57951a39d68df598db08dfced8b4707755864a0492Ying Wang
58951a39d68df598db08dfced8b4707755864a0492Ying Wangtypedef struct skb_frag_struct skb_frag_t;
59951a39d68df598db08dfced8b4707755864a0492Ying Wang
60951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct skb_frag_struct {
61951a39d68df598db08dfced8b4707755864a0492Ying Wang struct page *page;
62951a39d68df598db08dfced8b4707755864a0492Ying Wang __u16 page_offset;
63951a39d68df598db08dfced8b4707755864a0492Ying Wang __u16 size;
64951a39d68df598db08dfced8b4707755864a0492Ying Wang};
65951a39d68df598db08dfced8b4707755864a0492Ying Wang
66951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct skb_shared_info {
67951a39d68df598db08dfced8b4707755864a0492Ying Wang atomic_t dataref;
68951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short nr_frags;
69951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short gso_size;
70951a39d68df598db08dfced8b4707755864a0492Ying Wang
71951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short gso_segs;
72951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned short gso_type;
73951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int ip6_frag_id;
74951a39d68df598db08dfced8b4707755864a0492Ying Wang struct sk_buff *frag_list;
75951a39d68df598db08dfced8b4707755864a0492Ying Wang skb_frag_t frags[MAX_SKB_FRAGS];
76951a39d68df598db08dfced8b4707755864a0492Ying Wang};
77951a39d68df598db08dfced8b4707755864a0492Ying Wang
78951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SKB_DATAREF_SHIFT 16
79951a39d68df598db08dfced8b4707755864a0492Ying Wang#define SKB_DATAREF_MASK ((1 << SKB_DATAREF_SHIFT) - 1)
80951a39d68df598db08dfced8b4707755864a0492Ying Wang
81951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct skb_timeval {
82951a39d68df598db08dfced8b4707755864a0492Ying Wang u32 off_sec;
83951a39d68df598db08dfced8b4707755864a0492Ying Wang u32 off_usec;
84951a39d68df598db08dfced8b4707755864a0492Ying Wang};
85951a39d68df598db08dfced8b4707755864a0492Ying Wang
86951a39d68df598db08dfced8b4707755864a0492Ying Wangenum {
87951a39d68df598db08dfced8b4707755864a0492Ying Wang SKB_FCLONE_UNAVAILABLE,
88951a39d68df598db08dfced8b4707755864a0492Ying Wang SKB_FCLONE_ORIG,
89951a39d68df598db08dfced8b4707755864a0492Ying Wang SKB_FCLONE_CLONE,
90951a39d68df598db08dfced8b4707755864a0492Ying Wang};
91951a39d68df598db08dfced8b4707755864a0492Ying Wang
92951a39d68df598db08dfced8b4707755864a0492Ying Wangenum {
93951a39d68df598db08dfced8b4707755864a0492Ying Wang SKB_GSO_TCPV4 = 1 << 0,
94951a39d68df598db08dfced8b4707755864a0492Ying Wang SKB_GSO_UDP = 1 << 1,
95951a39d68df598db08dfced8b4707755864a0492Ying Wang
96951a39d68df598db08dfced8b4707755864a0492Ying Wang SKB_GSO_DODGY = 1 << 2,
97951a39d68df598db08dfced8b4707755864a0492Ying Wang
98951a39d68df598db08dfced8b4707755864a0492Ying Wang SKB_GSO_TCP_ECN = 1 << 3,
99951a39d68df598db08dfced8b4707755864a0492Ying Wang
100951a39d68df598db08dfced8b4707755864a0492Ying Wang SKB_GSO_TCPV6 = 1 << 4,
101951a39d68df598db08dfced8b4707755864a0492Ying Wang};
102951a39d68df598db08dfced8b4707755864a0492Ying Wang
103951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct sk_buff {
104951a39d68df598db08dfced8b4707755864a0492Ying Wang
105951a39d68df598db08dfced8b4707755864a0492Ying Wang struct sk_buff *next;
106951a39d68df598db08dfced8b4707755864a0492Ying Wang struct sk_buff *prev;
107951a39d68df598db08dfced8b4707755864a0492Ying Wang
108951a39d68df598db08dfced8b4707755864a0492Ying Wang struct sock *sk;
109951a39d68df598db08dfced8b4707755864a0492Ying Wang struct skb_timeval tstamp;
110951a39d68df598db08dfced8b4707755864a0492Ying Wang struct net_device *dev;
111951a39d68df598db08dfced8b4707755864a0492Ying Wang struct net_device *input_dev;
112951a39d68df598db08dfced8b4707755864a0492Ying Wang
113951a39d68df598db08dfced8b4707755864a0492Ying Wang union {
114951a39d68df598db08dfced8b4707755864a0492Ying Wang struct tcphdr *th;
115951a39d68df598db08dfced8b4707755864a0492Ying Wang struct udphdr *uh;
116951a39d68df598db08dfced8b4707755864a0492Ying Wang struct icmphdr *icmph;
117951a39d68df598db08dfced8b4707755864a0492Ying Wang struct igmphdr *igmph;
118951a39d68df598db08dfced8b4707755864a0492Ying Wang struct iphdr *ipiph;
119951a39d68df598db08dfced8b4707755864a0492Ying Wang struct ipv6hdr *ipv6h;
120951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char *raw;
121951a39d68df598db08dfced8b4707755864a0492Ying Wang } h;
122951a39d68df598db08dfced8b4707755864a0492Ying Wang
123951a39d68df598db08dfced8b4707755864a0492Ying Wang union {
124951a39d68df598db08dfced8b4707755864a0492Ying Wang struct iphdr *iph;
125951a39d68df598db08dfced8b4707755864a0492Ying Wang struct ipv6hdr *ipv6h;
126951a39d68df598db08dfced8b4707755864a0492Ying Wang struct arphdr *arph;
127951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char *raw;
128951a39d68df598db08dfced8b4707755864a0492Ying Wang } nh;
129951a39d68df598db08dfced8b4707755864a0492Ying Wang
130951a39d68df598db08dfced8b4707755864a0492Ying Wang union {
131951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char *raw;
132951a39d68df598db08dfced8b4707755864a0492Ying Wang } mac;
133951a39d68df598db08dfced8b4707755864a0492Ying Wang
134951a39d68df598db08dfced8b4707755864a0492Ying Wang struct dst_entry *dst;
135951a39d68df598db08dfced8b4707755864a0492Ying Wang struct sec_path *sp;
136951a39d68df598db08dfced8b4707755864a0492Ying Wang
137951a39d68df598db08dfced8b4707755864a0492Ying Wang char cb[48];
138951a39d68df598db08dfced8b4707755864a0492Ying Wang
139951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int len,
140951a39d68df598db08dfced8b4707755864a0492Ying Wang data_len,
141951a39d68df598db08dfced8b4707755864a0492Ying Wang mac_len,
142951a39d68df598db08dfced8b4707755864a0492Ying Wang csum;
143951a39d68df598db08dfced8b4707755864a0492Ying Wang __u32 priority;
144951a39d68df598db08dfced8b4707755864a0492Ying Wang __u8 local_df:1,
145951a39d68df598db08dfced8b4707755864a0492Ying Wang cloned:1,
146951a39d68df598db08dfced8b4707755864a0492Ying Wang ip_summed:2,
147951a39d68df598db08dfced8b4707755864a0492Ying Wang nohdr:1,
148951a39d68df598db08dfced8b4707755864a0492Ying Wang nfctinfo:3;
149951a39d68df598db08dfced8b4707755864a0492Ying Wang __u8 pkt_type:3,
150951a39d68df598db08dfced8b4707755864a0492Ying Wang fclone:2,
151951a39d68df598db08dfced8b4707755864a0492Ying Wang ipvs_property:1;
152951a39d68df598db08dfced8b4707755864a0492Ying Wang __be16 protocol;
153951a39d68df598db08dfced8b4707755864a0492Ying Wang
154951a39d68df598db08dfced8b4707755864a0492Ying Wang void (*destructor)(struct sk_buff *skb);
155951a39d68df598db08dfced8b4707755864a0492Ying Wang
156951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned int truesize;
157951a39d68df598db08dfced8b4707755864a0492Ying Wang atomic_t users;
158951a39d68df598db08dfced8b4707755864a0492Ying Wang unsigned char *head,
159951a39d68df598db08dfced8b4707755864a0492Ying Wang *data,
160951a39d68df598db08dfced8b4707755864a0492Ying Wang *tail,
161951a39d68df598db08dfced8b4707755864a0492Ying Wang *end;
162951a39d68df598db08dfced8b4707755864a0492Ying Wang};
163951a39d68df598db08dfced8b4707755864a0492Ying Wang
164951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
165